Convert Schematic Internal Units to 100nm
This commit is contained in:
parent
b11d52eda1
commit
aeb3281e27
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015 Chris Pavlina <pavlina.chris@gmail.com>
|
||||
* Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2015, 2019 KiCad Developers, see change_log.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -66,14 +66,13 @@
|
|||
#include <tool/tool_manager.h>
|
||||
#include <tools/ee_selection_tool.h>
|
||||
|
||||
#define FIELD_PADDING 10 // arbitrarily chosen for aesthetics
|
||||
#define FIELD_PADDING_ALIGNED 18 // aligns 50 mil text to a 100 mil grid
|
||||
#define WIRE_V_SPACING 100
|
||||
#define HPADDING 25
|
||||
#define VPADDING 25
|
||||
#define FIELD_PADDING Mils2iu( 10 ) // arbitrarily chosen for aesthetics
|
||||
#define FIELD_PADDING_ALIGNED Mils2iu( 18 ) // aligns 50 mil text to a 100 mil grid
|
||||
#define WIRE_V_SPACING Mils2iu( 100 )
|
||||
#define HPADDING Mils2iu( 25 )
|
||||
#define VPADDING Mils2iu( 25 )
|
||||
|
||||
/**
|
||||
* Function round_n
|
||||
* Round up/down to the nearest multiple of n
|
||||
*/
|
||||
template<typename T> T round_n( const T& value, const T& n, bool aRoundUp )
|
||||
|
@ -86,8 +85,7 @@ template<typename T> T round_n( const T& value, const T& n, bool aRoundUp )
|
|||
|
||||
|
||||
/**
|
||||
* Function TO_HJUSTIFY
|
||||
* Converts an integer to a horizontal justification; neg=L zero=C pos=R
|
||||
* Convert an integer to a horizontal justification; neg=L zero=C pos=R
|
||||
*/
|
||||
EDA_TEXT_HJUSTIFY_T TO_HJUSTIFY( int x )
|
||||
{
|
||||
|
@ -171,8 +169,8 @@ public:
|
|||
|
||||
if( m_align_to_grid )
|
||||
{
|
||||
pos.x = round_n( pos.x, 50, field_side.x >= 0 );
|
||||
pos.y = round_n( pos.y, 50, field_side.y == 1 );
|
||||
pos.x = round_n( pos.x, Mils2iu( 50 ), field_side.x >= 0 );
|
||||
pos.y = round_n( pos.y, Mils2iu( 50 ), field_side.y == 1 );
|
||||
}
|
||||
|
||||
field->SetPosition( pos );
|
||||
|
@ -221,7 +219,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function get_pin_side
|
||||
* Return the side that a pin is on.
|
||||
*/
|
||||
SIDE get_pin_side( LIB_PIN* aPin )
|
||||
|
@ -241,7 +238,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function pins_on_side
|
||||
* Count the number of pins on a side of the component.
|
||||
*/
|
||||
unsigned pins_on_side( SIDE aSide )
|
||||
|
@ -264,7 +260,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function get_possible_colliders
|
||||
* Populate a list of all drawing items that *may* collide with the fields. That is,
|
||||
* all drawing items, including other fields, that are not the current component or
|
||||
* its own fields.
|
||||
|
@ -289,7 +284,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function filtered_colliders
|
||||
* Filter a list of possible colliders to include only those that actually collide
|
||||
* with a given rectangle. Returns the new vector.
|
||||
*/
|
||||
|
@ -312,7 +306,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function get_preferred_sides
|
||||
* Return a list with the preferred field sides for the component, in
|
||||
* decreasing order of preference.
|
||||
*/
|
||||
|
@ -382,7 +375,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function get_colliding_sides
|
||||
* Return a list of the sides where a field set would collide with another item.
|
||||
*/
|
||||
std::vector<SIDE_AND_COLL> get_colliding_sides()
|
||||
|
@ -421,7 +413,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function choose_side_filtered
|
||||
* Choose a side for the fields, filtered on only one side collision type.
|
||||
* Removes the sides matching the filter from the list.
|
||||
*/
|
||||
|
@ -457,7 +448,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function choose_side_for_fields
|
||||
* Look where a component's pins are to pick a side to put the fields on
|
||||
* @param aAvoidCollisions - if true, pick last the sides where the label will collide
|
||||
* with other items.
|
||||
|
@ -495,7 +485,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function justify_field
|
||||
* Set the justification of a field based on the side it's supposed to be on, taking
|
||||
* into account whether the field will be displayed with flipped justification due to
|
||||
* mirroring.
|
||||
|
@ -511,8 +500,7 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function field_box_placement
|
||||
* Returns the position of the field bounding box.
|
||||
* Return the position of the field bounding box.
|
||||
*/
|
||||
wxPoint field_box_placement( SIDE aFieldSide )
|
||||
{
|
||||
|
@ -532,7 +520,6 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function fit_fields_between_wires
|
||||
* Shift a field box up or down a bit to make the fields fit between some wires.
|
||||
* Returns true if a shift was made.
|
||||
*/
|
||||
|
@ -588,9 +575,7 @@ protected:
|
|||
|
||||
|
||||
/**
|
||||
* Function field_horiz_placement
|
||||
* Place a field horizontally, taking into account the field width and
|
||||
* justification.
|
||||
* Place a field horizontally, taking into account the field width and justification.
|
||||
*
|
||||
* @param aField - the field to place.
|
||||
* @param aFieldBox - box in which fields will be placed
|
||||
|
@ -627,7 +612,6 @@ protected:
|
|||
}
|
||||
|
||||
/**
|
||||
* Function field_vert_placement
|
||||
* Place a field vertically. Because field vertical placements accumulate,
|
||||
* this takes a pointer to a vertical position accumulator.
|
||||
*
|
||||
|
@ -664,7 +648,6 @@ protected:
|
|||
}
|
||||
|
||||
/**
|
||||
* Function get_field_padding
|
||||
* Return the desired padding between fields.
|
||||
*/
|
||||
int get_field_padding()
|
||||
|
|
|
@ -63,7 +63,7 @@ int GetDefaultBusThickness()
|
|||
}
|
||||
|
||||
|
||||
void SetDefaultBusThickness( int aThickness)
|
||||
void SetDefaultBusThickness( int aThickness )
|
||||
{
|
||||
s_defaultBusThickness = std::max( 1, aThickness );
|
||||
}
|
||||
|
@ -252,6 +252,9 @@ bool SCH_EDIT_FRAME::LoadProjectFile()
|
|||
// Read schematic editor setup
|
||||
ret &= Prj().ConfigLoad( Kiface().KifaceSearch(), GROUP_SCH_EDIT, GetProjectFileParameters() );
|
||||
|
||||
// Convert default text size to internal units.
|
||||
SetDefaultTextSize( Mils2iu( GetDefaultTextSize() ) );
|
||||
|
||||
// Verify some values, because the config file can be edited by hand,
|
||||
// and have bad values:
|
||||
LIB_PART::SetSubpartIdNotation( LIB_PART::GetSubpartIdSeparator(),
|
||||
|
@ -293,7 +296,12 @@ void SCH_EDIT_FRAME::SaveProjectSettings( bool aAskForSave )
|
|||
|
||||
wxString path = fn.GetFullPath();
|
||||
|
||||
// Convert default text size from internal units temporarily.
|
||||
SetDefaultTextSize( Iu2Mils( GetDefaultTextSize() ) );
|
||||
|
||||
prj.ConfigSave( Kiface().KifaceSearch(), GROUP_SCH_EDIT, GetProjectFileParameters(), path );
|
||||
|
||||
SetDefaultTextSize( Mils2iu( GetDefaultTextSize() ) );
|
||||
}
|
||||
|
||||
///@{
|
||||
|
@ -357,12 +365,6 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings()
|
|||
m_configSettings.push_back( new PARAM_CFG_BOOL( true, PrintSheetRefEntry,
|
||||
&m_printSheetReference, true ) );
|
||||
|
||||
m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatStepXEntry,
|
||||
&m_repeatStep.x, DEFAULT_REPEAT_OFFSET_X,
|
||||
-REPEAT_OFFSET_MAX, REPEAT_OFFSET_MAX ) );
|
||||
m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatStepYEntry,
|
||||
&m_repeatStep.y, DEFAULT_REPEAT_OFFSET_Y,
|
||||
-REPEAT_OFFSET_MAX, REPEAT_OFFSET_MAX ) );
|
||||
m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatLabelIncrementEntry,
|
||||
&m_repeatDeltaLabel, DEFAULT_REPEAT_LABEL_INC,
|
||||
-10, +10 ) );
|
||||
|
@ -383,20 +385,26 @@ void SCH_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
|
|||
|
||||
wxConfigLoadSetups( aCfg, GetConfigurationSettings() );
|
||||
|
||||
aCfg->Read( RepeatStepXEntry, &tmp, DEFAULT_REPEAT_OFFSET_X );
|
||||
m_repeatStep.x = Mils2iu( static_cast< int >( tmp ) );
|
||||
aCfg->Read( RepeatStepYEntry, &tmp, DEFAULT_REPEAT_OFFSET_Y );
|
||||
m_repeatStep.y = Mils2iu( static_cast< int >( tmp ) );
|
||||
|
||||
// LibEdit owns this one, but we must read it in if LibEdit hasn't set it yet
|
||||
if( GetDefaultLineThickness() < 0 )
|
||||
{
|
||||
SetDefaultLineThickness( (int) aCfg->Read( DefaultDrawLineWidthEntry,
|
||||
DEFAULTDRAWLINETHICKNESS ) );
|
||||
SetDefaultLineThickness( Mils2iu( (int) aCfg->Read( DefaultDrawLineWidthEntry,
|
||||
DEFAULTDRAWLINETHICKNESS ) ) );
|
||||
}
|
||||
|
||||
SetDefaultBusThickness( (int) aCfg->Read( DefaultBusWidthEntry, DEFAULTBUSTHICKNESS ) );
|
||||
SetDefaultBusThickness( Mils2iu( (int) aCfg->Read( DefaultBusWidthEntry,
|
||||
DEFAULTBUSTHICKNESS ) ) );
|
||||
|
||||
// Property introduced in 6.0; use DefaultLineWidth for earlier projects
|
||||
if( !aCfg->Read( DefaultWireWidthEntry, &tmp ) )
|
||||
aCfg->Read( DefaultDrawLineWidthEntry, &tmp, DEFAULTDRAWLINETHICKNESS );
|
||||
|
||||
SetDefaultWireThickness( (int) tmp );
|
||||
SetDefaultWireThickness( Mils2iu( (int) tmp ) );
|
||||
|
||||
SetSelectionTextAsBox( aCfg->ReadBool( boxedSelectedText, false ) );
|
||||
SetSelectionDrawChildItems( aCfg->ReadBool( drawSelectedChildren, true ) );
|
||||
|
@ -407,7 +415,7 @@ void SCH_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
|
|||
SetTextMarkupFlags( (int) aCfg->Read( TextMarkupFlagsEntry, 0L ) );
|
||||
|
||||
if( aCfg->Read( DefaultJctSizeEntry, &tmp ) )
|
||||
SCH_JUNCTION::SetSymbolSize( (int) tmp );
|
||||
SCH_JUNCTION::SetSymbolSize( Mils2iu( (int) tmp ) );
|
||||
|
||||
aCfg->Read( DragActionIsMoveEntry, &m_dragActionIsMove, true );
|
||||
aCfg->Read( ShowHiddenPinsEntry, &m_showAllPins, false );
|
||||
|
@ -450,10 +458,12 @@ void SCH_EDIT_FRAME::SaveSettings( wxConfigBase* aCfg )
|
|||
|
||||
wxConfigSaveSetups( aCfg, GetConfigurationSettings() );
|
||||
|
||||
aCfg->Write( RepeatStepXEntry, static_cast< long >( Iu2Mils( m_repeatStep.x ) ) );
|
||||
aCfg->Write( RepeatStepYEntry, static_cast< long >( Iu2Mils( m_repeatStep.y ) ) );
|
||||
aCfg->Write( DragActionIsMoveEntry, m_dragActionIsMove );
|
||||
aCfg->Write( DefaultBusWidthEntry, (long) GetDefaultBusThickness() );
|
||||
aCfg->Write( DefaultWireWidthEntry, (long) GetDefaultWireThickness() );
|
||||
aCfg->Write( DefaultJctSizeEntry, (long) SCH_JUNCTION::GetSymbolSize() );
|
||||
aCfg->Write( DefaultBusWidthEntry, (long) Iu2Mils( GetDefaultBusThickness() ) );
|
||||
aCfg->Write( DefaultWireWidthEntry, (long) Iu2Mils( GetDefaultWireThickness() ) );
|
||||
aCfg->Write( DefaultJctSizeEntry, (long) Iu2Mils( SCH_JUNCTION::GetSymbolSize() ) );
|
||||
aCfg->Write( ShowHiddenPinsEntry, m_showAllPins );
|
||||
aCfg->Write( SelectPinSelectSymbolEntry, GetSelectPinSelectSymbol() );
|
||||
aCfg->Write( HorzVertLinesOnlyEntry, GetForceHVLines() );
|
||||
|
@ -485,17 +495,23 @@ void LIB_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
|
|||
{
|
||||
EDA_DRAW_FRAME::LoadSettings( aCfg );
|
||||
|
||||
SetDefaultLineThickness( (int) aCfg->Read( DefaultDrawLineWidthEntry,
|
||||
DEFAULTDRAWLINETHICKNESS ) );
|
||||
SetDefaultPinLength( (int) aCfg->Read( DefaultPinLengthEntry, DEFAULTPINLENGTH ) );
|
||||
m_textPinNumDefaultSize = (int) aCfg->Read( defaultPinNumSizeEntry, DEFAULTPINNUMSIZE );
|
||||
m_textPinNameDefaultSize = (int) aCfg->Read( defaultPinNameSizeEntry, DEFAULTPINNAMESIZE );
|
||||
SetDefaultLineThickness( Mils2iu( (int) aCfg->Read( DefaultDrawLineWidthEntry,
|
||||
DEFAULTDRAWLINETHICKNESS ) ) );
|
||||
SetDefaultPinLength( Mils2iu( (int) aCfg->Read( DefaultPinLengthEntry, DEFAULTPINLENGTH ) ) );
|
||||
m_textPinNumDefaultSize = Mils2iu( (int) aCfg->Read( defaultPinNumSizeEntry,
|
||||
DEFAULTPINNUMSIZE ) );
|
||||
m_textPinNameDefaultSize = Mils2iu( (int) aCfg->Read( defaultPinNameSizeEntry,
|
||||
DEFAULTPINNAMESIZE ) );
|
||||
SetRepeatDeltaLabel( (int) aCfg->Read( repeatLibLabelIncEntry, DEFAULT_REPEAT_LABEL_INC ) );
|
||||
SetRepeatPinStep( (int) aCfg->Read( pinRepeatStepEntry, DEFAULT_REPEAT_OFFSET_PIN ) );
|
||||
SetRepeatPinStep( Mils2iu( (int) aCfg->Read( pinRepeatStepEntry,
|
||||
DEFAULT_REPEAT_OFFSET_PIN ) ) );
|
||||
|
||||
wxPoint step;
|
||||
aCfg->Read( repeatLibStepXEntry, &step.x, DEFAULT_REPEAT_OFFSET_X );
|
||||
aCfg->Read( repeatLibStepYEntry, &step.y, DEFAULT_REPEAT_OFFSET_Y );
|
||||
step.x = Mils2iu( static_cast< int >( aCfg->Read( repeatLibStepXEntry,
|
||||
static_cast< long >( DEFAULT_REPEAT_OFFSET_X ) ) ) );
|
||||
step.y = Mils2iu( static_cast< int >( aCfg->Read( repeatLibStepYEntry,
|
||||
static_cast< long >( DEFAULT_REPEAT_OFFSET_Y ) ) ) );
|
||||
|
||||
SetRepeatStep( step );
|
||||
m_showPinElectricalTypeName = aCfg->ReadBool( showPinElectricalType, true );
|
||||
aCfg->Read( defaultLibWidthEntry, &m_defaultLibWidth, DEFAULTLIBWIDTH );
|
||||
|
@ -532,14 +548,14 @@ void LIB_EDIT_FRAME::SaveSettings( wxConfigBase* aCfg )
|
|||
{
|
||||
EDA_DRAW_FRAME::SaveSettings( aCfg );
|
||||
|
||||
aCfg->Write( DefaultDrawLineWidthEntry, GetDefaultLineThickness() );
|
||||
aCfg->Write( DefaultPinLengthEntry, GetDefaultPinLength() );
|
||||
aCfg->Write( defaultPinNumSizeEntry, GetPinNumDefaultSize() );
|
||||
aCfg->Write( defaultPinNameSizeEntry, GetPinNameDefaultSize() );
|
||||
aCfg->Write( DefaultDrawLineWidthEntry, Iu2Mils( GetDefaultLineThickness() ) );
|
||||
aCfg->Write( DefaultPinLengthEntry, Iu2Mils( GetDefaultPinLength() ) );
|
||||
aCfg->Write( defaultPinNumSizeEntry, Iu2Mils( GetPinNumDefaultSize() ) );
|
||||
aCfg->Write( defaultPinNameSizeEntry, Iu2Mils( GetPinNameDefaultSize() ) );
|
||||
aCfg->Write( repeatLibLabelIncEntry, GetRepeatDeltaLabel() );
|
||||
aCfg->Write( pinRepeatStepEntry, GetRepeatPinStep() );
|
||||
aCfg->Write( repeatLibStepXEntry, GetRepeatStep().x );
|
||||
aCfg->Write( repeatLibStepYEntry, GetRepeatStep().y );
|
||||
aCfg->Write( pinRepeatStepEntry, Iu2Mils( GetRepeatPinStep() ) );
|
||||
aCfg->Write( repeatLibStepXEntry, Iu2Mils( GetRepeatStep().x ) );
|
||||
aCfg->Write( repeatLibStepYEntry, Iu2Mils( GetRepeatStep().y ) );
|
||||
aCfg->Write( showPinElectricalType, GetShowElectricalType() );
|
||||
aCfg->Write( defaultLibWidthEntry, m_treePane->GetSize().x );
|
||||
}
|
||||
|
|
|
@ -59,7 +59,8 @@ LIB_ARC::LIB_ARC( LIB_PART* aParent ) : LIB_ITEM( LIB_ARC_T, aParent )
|
|||
|
||||
bool LIB_ARC::HitTest( const wxPoint& aRefPoint, int aAccuracy ) const
|
||||
{
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2, MINIMUM_SELECTION_DISTANCE );
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2,
|
||||
Mils2iu( MINIMUM_SELECTION_DISTANCE ) );
|
||||
wxPoint relativePosition = aRefPoint;
|
||||
|
||||
relativePosition.y = -relativePosition.y; // reverse Y axis
|
||||
|
|
|
@ -248,7 +248,8 @@ void LIB_BEZIER::print( wxDC* aDC, const wxPoint& aOffset, void* aData,
|
|||
|
||||
bool LIB_BEZIER::HitTest( const wxPoint& aRefPos, int aAccuracy ) const
|
||||
{
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2, MINIMUM_SELECTION_DISTANCE );
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2,
|
||||
Mils2iu( MINIMUM_SELECTION_DISTANCE ) );
|
||||
wxPoint start, end;
|
||||
|
||||
for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
|
||||
|
|
|
@ -48,7 +48,8 @@ LIB_CIRCLE::LIB_CIRCLE( LIB_PART* aParent ) :
|
|||
|
||||
bool LIB_CIRCLE::HitTest( const wxPoint& aPosRef, int aAccuracy ) const
|
||||
{
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2, MINIMUM_SELECTION_DISTANCE );
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2,
|
||||
Mils2iu( MINIMUM_SELECTION_DISTANCE ) );
|
||||
int dist = KiROUND( GetLineLength( aPosRef, DefaultTransform.TransformCoordinate( m_Pos ) ) );
|
||||
|
||||
if( abs( dist - GetRadius() ) <= mindist )
|
||||
|
|
|
@ -699,8 +699,10 @@ void LIB_PIN::PrintPinTexts( wxDC* DC, wxPoint& pin_pos, int orient, int TextIns
|
|||
wxSize PinNumSize( m_numTextSize, m_numTextSize );
|
||||
int nameLineWidth = Clamp_Text_PenSize( GetPenSize(), m_nameTextSize, false );
|
||||
int numLineWidth = Clamp_Text_PenSize( GetPenSize(), m_numTextSize, false );
|
||||
int name_offset = PIN_TEXT_MARGIN + ( nameLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
int num_offset = PIN_TEXT_MARGIN + ( numLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
int name_offset = Mils2iu( PIN_TEXT_MARGIN ) +
|
||||
( nameLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
int num_offset = Mils2iu( PIN_TEXT_MARGIN ) +
|
||||
( numLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
|
||||
/* Get the num and name colors */
|
||||
COLOR4D NameColor = IsVisible() ? GetLayerColor( LAYER_PINNAM ) : GetInvisibleItemColor();
|
||||
|
@ -1023,9 +1025,9 @@ void LIB_PIN::PlotPinTexts( PLOTTER* plotter, wxPoint& pin_pos, int orient,
|
|||
int numLineWidth = GetPenSize();
|
||||
numLineWidth = Clamp_Text_PenSize( numLineWidth, m_numTextSize, false );
|
||||
|
||||
int name_offset = PIN_TEXT_MARGIN +
|
||||
int name_offset = Mils2iu( PIN_TEXT_MARGIN ) +
|
||||
( nameLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
int num_offset = PIN_TEXT_MARGIN +
|
||||
int num_offset = Mils2iu( PIN_TEXT_MARGIN ) +
|
||||
( numLineWidth + GetDefaultLineThickness() ) / 2;
|
||||
|
||||
/* Get the num and name colors */
|
||||
|
@ -1479,7 +1481,7 @@ const EDA_RECT LIB_PIN::GetBoundingBox( bool aIncludeInvisibles ) const
|
|||
|
||||
// calculate top left corner position
|
||||
// for the default pin orientation (PIN_RIGHT)
|
||||
begin.y = std::max( minsizeV, numberTextHeight + PIN_TEXT_MARGIN );
|
||||
begin.y = std::max( minsizeV, numberTextHeight + Mils2iu( PIN_TEXT_MARGIN ) );
|
||||
begin.x = std::min( -TARGET_PIN_RADIUS, m_length - (numberTextLength / 2) );
|
||||
|
||||
// calculate bottom right corner position and adjust top left corner position
|
||||
|
@ -1497,7 +1499,7 @@ const EDA_RECT LIB_PIN::GetBoundingBox( bool aIncludeInvisibles ) const
|
|||
nameTextLength = ( m_nameTextSize * length ) + nameTextOffset;
|
||||
|
||||
// Actual text height are bigger than text size
|
||||
nameTextHeight = KiROUND( m_nameTextSize * 1.1 ) + PIN_TEXT_MARGIN;
|
||||
nameTextHeight = KiROUND( m_nameTextSize * 1.1 ) + Mils2iu( PIN_TEXT_MARGIN );
|
||||
}
|
||||
|
||||
if( nameTextOffset ) // for values > 0, pin name is inside the body
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr
|
||||
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 2004-2017 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2019 KiCad Developers, see change_log.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -40,7 +40,7 @@ class SCH_COMPONENT;
|
|||
#include "class_libentry.h"
|
||||
|
||||
// Circle diameter drawn at the active end of pins:
|
||||
#define TARGET_PIN_RADIUS 15
|
||||
#define TARGET_PIN_RADIUS Mils2iu( 15 )
|
||||
|
||||
// Pin visibility flag bit:
|
||||
#define PIN_INVISIBLE 1 // Set makes pin invisible
|
||||
|
|
|
@ -228,7 +228,8 @@ void LIB_POLYLINE::print( wxDC* aDC, const wxPoint& aOffset, void* aData,
|
|||
|
||||
bool LIB_POLYLINE::HitTest( const wxPoint& aPosition, int aAccuracy ) const
|
||||
{
|
||||
int delta = std::max( aAccuracy + GetPenSize() / 2, MINIMUM_SELECTION_DISTANCE );
|
||||
int delta = std::max( aAccuracy + GetPenSize() / 2,
|
||||
Mils2iu( MINIMUM_SELECTION_DISTANCE ) );
|
||||
SHAPE_LINE_CHAIN shape;
|
||||
|
||||
for( wxPoint pt : m_PolyPoints )
|
||||
|
|
|
@ -208,7 +208,8 @@ const EDA_RECT LIB_RECTANGLE::GetBoundingBox() const
|
|||
|
||||
bool LIB_RECTANGLE::HitTest( const wxPoint& aPosition, int aAccuracy ) const
|
||||
{
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2, MINIMUM_SELECTION_DISTANCE );
|
||||
int mindist = std::max( aAccuracy + GetPenSize() / 2,
|
||||
Mils2iu( MINIMUM_SELECTION_DISTANCE ) );
|
||||
wxPoint actualStart = DefaultTransform.TransformCoordinate( m_Pos );
|
||||
wxPoint actualEnd = DefaultTransform.TransformCoordinate( m_End );
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ LIB_TEXT::LIB_TEXT( LIB_PART * aParent ) :
|
|||
LIB_ITEM( LIB_TEXT_T, aParent ),
|
||||
EDA_TEXT()
|
||||
{
|
||||
SetTextSize( wxSize( 50, 50 ) );
|
||||
SetTextSize( wxSize( Mils2iu( 50 ), Mils2iu( 50 ) ) );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -82,12 +82,13 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindo
|
|||
{
|
||||
createCanvas();
|
||||
|
||||
m_zoomLevelCoeff = 11.0; // Adjusted to roughly displays zoom level = 1
|
||||
// when the screen shows a 1:1 image
|
||||
// obviously depends on the monitor,
|
||||
// but this is an acceptable value
|
||||
m_repeatStep = wxPoint( DEFAULT_REPEAT_OFFSET_X, DEFAULT_REPEAT_OFFSET_Y );
|
||||
m_repeatDeltaLabel = DEFAULT_REPEAT_LABEL_INC;
|
||||
m_zoomLevelCoeff = 11.0 * IU_PER_MILS; // Adjusted to roughly displays zoom level = 1
|
||||
// when the screen shows a 1:1 image
|
||||
// obviously depends on the monitor,
|
||||
// but this is an acceptable value
|
||||
m_repeatStep = wxPoint( Mils2iu( DEFAULT_REPEAT_OFFSET_X ),
|
||||
Mils2iu( DEFAULT_REPEAT_OFFSET_Y ) );
|
||||
m_repeatDeltaLabel = Mils2iu( DEFAULT_REPEAT_LABEL_INC );
|
||||
m_showPinElectricalTypeName = false;
|
||||
m_repeatComponent = false;
|
||||
m_useAllUnits = false;
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include <sch_item.h>
|
||||
|
||||
#define TARGET_BUSENTRY_RADIUS 12 // Circle diameter drawn at the ends
|
||||
#define TARGET_BUSENTRY_RADIUS Mils2iu( 12 ) // Circle diameter drawn at the ends
|
||||
|
||||
|
||||
/**
|
||||
|
@ -56,7 +56,6 @@ public:
|
|||
~SCH_BUS_ENTRY_BASE() { }
|
||||
|
||||
/**
|
||||
* Virtual function IsMovableFromAnchorPoint
|
||||
* Return true for items which are moved with the anchor point at mouse cursor
|
||||
* and false for items moved with no reference to anchor
|
||||
* @return false for a bus entry
|
||||
|
@ -66,13 +65,11 @@ public:
|
|||
wxPoint m_End() const;
|
||||
|
||||
/**
|
||||
* function GetBusEntryShape
|
||||
* @return the shape of the bus entry, as an ascii code '/' or '\'
|
||||
*/
|
||||
char GetBusEntryShape() const;
|
||||
|
||||
/**
|
||||
* function SetBusEntryShape
|
||||
* @param aShape = the shape of the bus entry, as an ascii code '/' or '\'
|
||||
*/
|
||||
void SetBusEntryShape( char aShape );
|
||||
|
|
|
@ -97,12 +97,12 @@ static LIB_PART* dummy()
|
|||
|
||||
LIB_RECTANGLE* square = new LIB_RECTANGLE( part );
|
||||
|
||||
square->MoveTo( wxPoint( -200, 200 ));
|
||||
square->SetEndPosition( wxPoint( 200, -200 ) );
|
||||
square->MoveTo( wxPoint( Mils2iu( -200 ), Mils2iu( 200 ) ) );
|
||||
square->SetEndPosition( wxPoint( Mils2iu( 200 ), Mils2iu( -200 ) ) );
|
||||
|
||||
LIB_TEXT* text = new LIB_TEXT( part );
|
||||
|
||||
text->SetTextSize( wxSize( 150, 150 ) );
|
||||
text->SetTextSize( wxSize( Mils2iu( 150 ), Mils2iu( 150 ) ) );
|
||||
text->SetText( wxString( wxT( "??" ) ) );
|
||||
|
||||
part->AddDrawItem( square );
|
||||
|
@ -563,7 +563,7 @@ void SCH_COMPONENT::Print( wxDC* aDC, const wxPoint& aOffset )
|
|||
SCH_FIELD* field = GetField( REFERENCE );
|
||||
|
||||
if( field->IsVisible() )
|
||||
field->Print(aDC, aOffset );
|
||||
field->Print( aDC, aOffset );
|
||||
|
||||
for( int ii = VALUE; ii < GetFieldCount(); ii++ )
|
||||
{
|
||||
|
@ -692,11 +692,13 @@ void SCH_COMPONENT::SetRef( const SCH_SHEET_PATH* sheet, const wxString& ref )
|
|||
|
||||
SCH_FIELD* rf = GetField( REFERENCE );
|
||||
|
||||
// @todo Should we really be checking for what is a "reasonable" position?
|
||||
if( rf->GetText().IsEmpty()
|
||||
|| ( abs( rf->GetTextPos().x - m_Pos.x ) + abs( rf->GetTextPos().y - m_Pos.y ) > 10000 ) )
|
||||
|| ( abs( rf->GetTextPos().x - m_Pos.x ) +
|
||||
abs( rf->GetTextPos().y - m_Pos.y ) > Mils2iu( 10000 ) ) )
|
||||
{
|
||||
// move it to a reasonable position
|
||||
rf->SetTextPos( m_Pos + wxPoint( 50, 50 ) );
|
||||
rf->SetTextPos( m_Pos + wxPoint( Mils2iu( 50 ), Mils2iu( 50 ) ) );
|
||||
}
|
||||
|
||||
rf->SetText( ref ); // for drawing.
|
||||
|
|
|
@ -63,7 +63,7 @@ SCH_DRAW_PANEL::SCH_DRAW_PANEL( wxWindow* aParentWindow, wxWindowID aWindowId,
|
|||
m_painter.reset( new KIGFX::SCH_PAINTER( m_gal ) );
|
||||
|
||||
m_view->SetPainter( m_painter.get() );
|
||||
m_view->SetScaleLimits( 50.0, 0.05 ); // This fixes the zoom in and zoom out limits
|
||||
m_view->SetScaleLimits( 1000.0, 0.0001 ); // This fixes the zoom in and zoom out limits
|
||||
m_view->SetMirror( false, false );
|
||||
|
||||
// Early initialization of the canvas background color,
|
||||
|
|
|
@ -67,6 +67,9 @@
|
|||
#include <tool/selection.h>
|
||||
|
||||
|
||||
#define Mils2Iu( x ) Mils2iu( x )
|
||||
|
||||
|
||||
// Must be the first line of part library document (.dcm) files.
|
||||
#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0"
|
||||
|
||||
|
@ -975,14 +978,14 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
|
|||
{
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
sheet->SetPosition( position );
|
||||
|
||||
wxSize size;
|
||||
|
||||
size.SetWidth( parseInt( aReader, line, &line ) );
|
||||
size.SetHeight( parseInt( aReader, line, &line ) );
|
||||
size.SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
size.SetHeight( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
sheet->SetSize( size );
|
||||
}
|
||||
else if( strCompare( "U", line, &line ) ) // Sheet time stamp.
|
||||
|
@ -1000,7 +1003,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
|
|||
if( fieldId == 0 || fieldId == 1 ) // Sheet name and file name.
|
||||
{
|
||||
parseQuotedString( text, aReader, line, &line );
|
||||
size = parseInt( aReader, line, &line );
|
||||
size = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
if( fieldId == 0 )
|
||||
{
|
||||
|
@ -1064,11 +1067,11 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
|
|||
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
sheetPin->SetPosition( position );
|
||||
|
||||
size = parseInt( aReader, line, &line );
|
||||
size = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
sheetPin->SetTextSize( wxSize( size, size ) );
|
||||
|
||||
|
@ -1103,8 +1106,8 @@ SCH_BITMAP* SCH_LEGACY_PLUGIN::loadBitmap( LINE_READER& aReader )
|
|||
{
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
bitmap->SetPosition( position );
|
||||
}
|
||||
else if( strCompare( "Scale", line, &line ) )
|
||||
|
@ -1186,8 +1189,8 @@ SCH_JUNCTION* SCH_LEGACY_PLUGIN::loadJunction( LINE_READER& aReader )
|
|||
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
junction->SetPosition( position );
|
||||
|
||||
return junction.release();
|
||||
|
@ -1208,8 +1211,8 @@ SCH_NO_CONNECT* SCH_LEGACY_PLUGIN::loadNoConnect( LINE_READER& aReader )
|
|||
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
no_connect->SetPosition( position );
|
||||
|
||||
return no_connect.release();
|
||||
|
@ -1249,7 +1252,7 @@ SCH_LINE* SCH_LEGACY_PLUGIN::loadWire( LINE_READER& aReader )
|
|||
|
||||
else if( buf == T_WIDTH )
|
||||
{
|
||||
int size = parseInt( aReader, line, &line );
|
||||
int size = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
wire->SetLineWidth( size );
|
||||
}
|
||||
else if( buf == T_STYLE )
|
||||
|
@ -1302,10 +1305,10 @@ SCH_LINE* SCH_LEGACY_PLUGIN::loadWire( LINE_READER& aReader )
|
|||
|
||||
wxPoint begin, end;
|
||||
|
||||
begin.x = parseInt( aReader, line, &line );
|
||||
begin.y = parseInt( aReader, line, &line );
|
||||
end.x = parseInt( aReader, line, &line );
|
||||
end.y = parseInt( aReader, line, &line );
|
||||
begin.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
begin.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
end.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
end.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
wire->SetStartPoint( begin );
|
||||
wire->SetEndPoint( end );
|
||||
|
@ -1344,10 +1347,10 @@ SCH_BUS_ENTRY_BASE* SCH_LEGACY_PLUGIN::loadBusEntry( LINE_READER& aReader )
|
|||
wxPoint pos;
|
||||
wxSize size;
|
||||
|
||||
pos.x = parseInt( aReader, line, &line );
|
||||
pos.y = parseInt( aReader, line, &line );
|
||||
size.x = parseInt( aReader, line, &line );
|
||||
size.y = parseInt( aReader, line, &line );
|
||||
pos.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pos.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
size.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
size.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
size.x -= pos.x;
|
||||
size.y -= pos.y;
|
||||
|
@ -1387,12 +1390,12 @@ SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader )
|
|||
// Parse the parameters common to all text objects.
|
||||
wxPoint position;
|
||||
|
||||
position.x = parseInt( aReader, line, &line );
|
||||
position.y = parseInt( aReader, line, &line );
|
||||
position.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
position.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
text->SetPosition( position );
|
||||
text->SetLabelSpinStyle( parseInt( aReader, line, &line ) );
|
||||
|
||||
int size = parseInt( aReader, line, &line );
|
||||
int size = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
text->SetTextSize( wxSize( size, size ) );
|
||||
|
||||
|
@ -1557,8 +1560,8 @@ SCH_COMPONENT* SCH_LEGACY_PLUGIN::loadComponent( LINE_READER& aReader )
|
|||
{
|
||||
wxPoint pos;
|
||||
|
||||
pos.x = parseInt( aReader, line, &line );
|
||||
pos.y = parseInt( aReader, line, &line );
|
||||
pos.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pos.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
component->SetPosition( pos );
|
||||
}
|
||||
else if( strCompare( "AR", line, &line ) )
|
||||
|
@ -1614,9 +1617,9 @@ SCH_COMPONENT* SCH_LEGACY_PLUGIN::loadComponent( LINE_READER& aReader )
|
|||
|
||||
char orientation = parseChar( aReader, line, &line );
|
||||
wxPoint pos;
|
||||
pos.x = parseInt( aReader, line, &line );
|
||||
pos.y = parseInt( aReader, line, &line );
|
||||
int size = parseInt( aReader, line, &line );
|
||||
pos.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pos.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
int size = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
int attributes = parseHex( aReader, line, &line );
|
||||
|
||||
if( index >= component->GetFieldCount() )
|
||||
|
@ -1979,7 +1982,9 @@ void SCH_LEGACY_PLUGIN::saveComponent( SCH_COMPONENT* aComponent )
|
|||
aComponent->GetTimeStamp() );
|
||||
|
||||
// Save the position
|
||||
m_out->Print( 0, "P %d %d\n", aComponent->GetPosition().x, aComponent->GetPosition().y );
|
||||
m_out->Print( 0, "P %d %d\n",
|
||||
Iu2Mils( aComponent->GetPosition().x ),
|
||||
Iu2Mils( aComponent->GetPosition().y ) );
|
||||
|
||||
/* If this is a complex hierarchy; save hierarchical references.
|
||||
* but for simple hierarchies it is not necessary.
|
||||
|
@ -2027,8 +2032,9 @@ void SCH_LEGACY_PLUGIN::saveComponent( SCH_COMPONENT* aComponent )
|
|||
saveField( aComponent->GetField( i ) );
|
||||
|
||||
// Unit number, position, box ( old standard )
|
||||
m_out->Print( 0, "\t%-4d %-4d %-4d\n", aComponent->GetUnit(), aComponent->GetPosition().x,
|
||||
aComponent->GetPosition().y );
|
||||
m_out->Print( 0, "\t%-4d %-4d %-4d\n", aComponent->GetUnit(),
|
||||
Iu2Mils( aComponent->GetPosition().x ),
|
||||
Iu2Mils( aComponent->GetPosition().y ) );
|
||||
|
||||
TRANSFORM transform = aComponent->GetTransform();
|
||||
|
||||
|
@ -2058,8 +2064,9 @@ void SCH_LEGACY_PLUGIN::saveField( SCH_FIELD* aField )
|
|||
aField->GetId(),
|
||||
EscapedUTF8( aField->GetText() ).c_str(), // wraps in quotes too
|
||||
aField->GetTextAngle() == TEXT_ANGLE_HORIZ ? 'H' : 'V',
|
||||
aField->GetLibPosition().x, aField->GetLibPosition().y,
|
||||
aField->GetTextWidth(),
|
||||
Iu2Mils( aField->GetLibPosition().x ),
|
||||
Iu2Mils( aField->GetLibPosition().y ),
|
||||
Iu2Mils( aField->GetTextWidth() ),
|
||||
!aField->IsVisible(),
|
||||
hjustify, vjustify,
|
||||
aField->IsItalic() ? 'I' : 'N',
|
||||
|
@ -2084,7 +2091,9 @@ void SCH_LEGACY_PLUGIN::saveBitmap( SCH_BITMAP* aBitmap )
|
|||
wxCHECK_RET( image != NULL, "wxImage* is NULL" );
|
||||
|
||||
m_out->Print( 0, "$Bitmap\n" );
|
||||
m_out->Print( 0, "Pos %-4d %-4d\n", aBitmap->GetPosition().x, aBitmap->GetPosition().y );
|
||||
m_out->Print( 0, "Pos %-4d %-4d\n",
|
||||
Iu2Mils( aBitmap->GetPosition().x ),
|
||||
Iu2Mils( aBitmap->GetPosition().y ) );
|
||||
m_out->Print( 0, "Scale %f\n", aBitmap->GetImage()->GetScale() );
|
||||
m_out->Print( 0, "Data\n" );
|
||||
|
||||
|
@ -2119,18 +2128,18 @@ void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet )
|
|||
|
||||
m_out->Print( 0, "$Sheet\n" );
|
||||
m_out->Print( 0, "S %-4d %-4d %-4d %-4d\n",
|
||||
aSheet->GetPosition().x, aSheet->GetPosition().y,
|
||||
aSheet->GetSize().x, aSheet->GetSize().y );
|
||||
Iu2Mils( aSheet->GetPosition().x ), Iu2Mils( aSheet->GetPosition().y ),
|
||||
Iu2Mils( aSheet->GetSize().x ), Iu2Mils( aSheet->GetSize().y ) );
|
||||
|
||||
m_out->Print( 0, "U %8.8X\n", aSheet->GetTimeStamp() );
|
||||
|
||||
if( !aSheet->GetName().IsEmpty() )
|
||||
m_out->Print( 0, "F0 %s %d\n", EscapedUTF8( aSheet->GetName() ).c_str(),
|
||||
aSheet->GetSheetNameSize() );
|
||||
Iu2Mils( aSheet->GetSheetNameSize() ) );
|
||||
|
||||
if( !aSheet->GetFileName().IsEmpty() )
|
||||
m_out->Print( 0, "F1 %s %d\n", EscapedUTF8( aSheet->GetFileName() ).c_str(),
|
||||
aSheet->GetFileNameSize() );
|
||||
Iu2Mils( aSheet->GetFileNameSize() ) );
|
||||
|
||||
for( const SCH_SHEET_PIN& pin : aSheet->GetPins() )
|
||||
{
|
||||
|
@ -2160,8 +2169,9 @@ void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet )
|
|||
|
||||
m_out->Print( 0, "F%d %s %c %c %-3d %-3d %-3d\n", pin.GetNumber(),
|
||||
EscapedUTF8( pin.GetText() ).c_str(), // supplies wrapping quotes
|
||||
type, side, pin.GetPosition().x, pin.GetPosition().y,
|
||||
pin.GetTextWidth() );
|
||||
type, side, Iu2Mils( pin.GetPosition().x ),
|
||||
Iu2Mils( pin.GetPosition().y ),
|
||||
Iu2Mils( pin.GetTextWidth() ) );
|
||||
}
|
||||
|
||||
m_out->Print( 0, "$EndSheet\n" );
|
||||
|
@ -2173,7 +2183,7 @@ void SCH_LEGACY_PLUGIN::saveJunction( SCH_JUNCTION* aJunction )
|
|||
wxCHECK_RET( aJunction != NULL, "SCH_JUNCTION* is NULL" );
|
||||
|
||||
m_out->Print( 0, "Connection ~ %-4d %-4d\n",
|
||||
aJunction->GetPosition().x, aJunction->GetPosition().y );
|
||||
Iu2Mils( aJunction->GetPosition().x ), Iu2Mils( aJunction->GetPosition().y ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -2181,8 +2191,8 @@ void SCH_LEGACY_PLUGIN::saveNoConnect( SCH_NO_CONNECT* aNoConnect )
|
|||
{
|
||||
wxCHECK_RET( aNoConnect != NULL, "SCH_NOCONNECT* is NULL" );
|
||||
|
||||
m_out->Print( 0, "NoConn ~ %-4d %-4d\n", aNoConnect->GetPosition().x,
|
||||
aNoConnect->GetPosition().y );
|
||||
m_out->Print( 0, "NoConn ~ %-4d %-4d\n", Iu2Mils( aNoConnect->GetPosition().x ),
|
||||
Iu2Mils( aNoConnect->GetPosition().y ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -2192,12 +2202,14 @@ void SCH_LEGACY_PLUGIN::saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry )
|
|||
|
||||
if( aBusEntry->GetLayer() == LAYER_WIRE )
|
||||
m_out->Print( 0, "Entry Wire Line\n\t%-4d %-4d %-4d %-4d\n",
|
||||
aBusEntry->GetPosition().x, aBusEntry->GetPosition().y,
|
||||
aBusEntry->m_End().x, aBusEntry->m_End().y );
|
||||
Iu2Mils( aBusEntry->GetPosition().x ),
|
||||
Iu2Mils( aBusEntry->GetPosition().y ),
|
||||
Iu2Mils( aBusEntry->m_End().x ), Iu2Mils( aBusEntry->m_End().y ) );
|
||||
else
|
||||
m_out->Print( 0, "Entry Bus Bus\n\t%-4d %-4d %-4d %-4d\n",
|
||||
aBusEntry->GetPosition().x, aBusEntry->GetPosition().y,
|
||||
aBusEntry->m_End().x, aBusEntry->m_End().y );
|
||||
Iu2Mils( aBusEntry->GetPosition().x ),
|
||||
Iu2Mils( aBusEntry->GetPosition().y ),
|
||||
Iu2Mils( aBusEntry->m_End().x ), Iu2Mils( aBusEntry->m_End().y ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -2219,10 +2231,11 @@ void SCH_LEGACY_PLUGIN::saveLine( SCH_LINE* aLine )
|
|||
if( aLine->IsGraphicLine() )
|
||||
{
|
||||
if( aLine->GetPenSize() != aLine->GetDefaultWidth() )
|
||||
m_out->Print( 0, " %s %d", T_WIDTH, aLine->GetLineSize() );
|
||||
m_out->Print( 0, " %s %d", T_WIDTH, Iu2Mils( aLine->GetLineSize() ) );
|
||||
|
||||
if( aLine->GetLineStyle() != aLine->GetDefaultStyle() )
|
||||
m_out->Print( 0, " %s %s", T_STYLE, SCH_LINE::GetLineStyleName( aLine->GetLineStyle() ) );
|
||||
m_out->Print( 0, " %s %s", T_STYLE,
|
||||
SCH_LINE::GetLineStyleName( aLine->GetLineStyle() ) );
|
||||
|
||||
if( aLine->GetLineColor() != aLine->GetDefaultColor() )
|
||||
m_out->Print( 0, " %s",
|
||||
|
@ -2232,8 +2245,8 @@ void SCH_LEGACY_PLUGIN::saveLine( SCH_LINE* aLine )
|
|||
m_out->Print( 0, "\n" );
|
||||
|
||||
m_out->Print( 0, "\t%-4d %-4d %-4d %-4d",
|
||||
aLine->GetStartPoint().x, aLine->GetStartPoint().y,
|
||||
aLine->GetEndPoint().x, aLine->GetEndPoint().y );
|
||||
Iu2Mils( aLine->GetStartPoint().x ), Iu2Mils( aLine->GetStartPoint().y ),
|
||||
Iu2Mils( aLine->GetEndPoint().x ), Iu2Mils( aLine->GetEndPoint().y ) );
|
||||
|
||||
m_out->Print( 0, "\n");
|
||||
}
|
||||
|
@ -2281,22 +2294,22 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText )
|
|||
}
|
||||
|
||||
m_out->Print( 0, "Text %s %-4d %-4d %-4d %-4d %s %d\n%s\n", textType,
|
||||
aText->GetPosition().x, aText->GetPosition().y,
|
||||
Iu2Mils( aText->GetPosition().x ), Iu2Mils( aText->GetPosition().y ),
|
||||
aText->GetLabelSpinStyle(),
|
||||
aText->GetTextWidth(),
|
||||
italics, aText->GetThickness(), TO_UTF8( text ) );
|
||||
Iu2Mils( aText->GetTextWidth() ),
|
||||
italics, Iu2Mils( aText->GetThickness() ), TO_UTF8( text ) );
|
||||
}
|
||||
else if( layer == LAYER_GLOBLABEL || layer == LAYER_HIERLABEL )
|
||||
{
|
||||
textType = ( layer == LAYER_GLOBLABEL ) ? "GLabel" : "HLabel";
|
||||
|
||||
m_out->Print( 0, "Text %s %-4d %-4d %-4d %-4d %s %s %d\n%s\n", textType,
|
||||
aText->GetPosition().x, aText->GetPosition().y,
|
||||
Iu2Mils( aText->GetPosition().x ), Iu2Mils( aText->GetPosition().y ),
|
||||
aText->GetLabelSpinStyle(),
|
||||
aText->GetTextWidth(),
|
||||
Iu2Mils( aText->GetTextWidth() ),
|
||||
SheetLabelType[aText->GetShape()],
|
||||
italics,
|
||||
aText->GetThickness(), TO_UTF8( text ) );
|
||||
Iu2Mils( aText->GetThickness() ), TO_UTF8( text ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2728,7 +2741,7 @@ LIB_PART* SCH_LEGACY_PLUGIN_CACHE::LoadPart( LINE_READER& aReader, int aMajorVer
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
part->SetPinNameOffset( (int)num );
|
||||
part->SetPinNameOffset( Mils2Iu( (int)num ) );
|
||||
|
||||
tmp = tokens.GetNextToken(); // Show pin numbers.
|
||||
|
||||
|
@ -2941,13 +2954,13 @@ void SCH_LEGACY_PLUGIN_CACHE::loadField( std::unique_ptr<LIB_PART>& aPart,
|
|||
|
||||
wxPoint pos;
|
||||
|
||||
pos.x = parseInt( aReader, line, &line );
|
||||
pos.y = parseInt( aReader, line, &line );
|
||||
pos.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pos.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
field->SetPosition( pos );
|
||||
|
||||
wxSize textSize;
|
||||
|
||||
textSize.x = textSize.y = parseInt( aReader, line, &line );
|
||||
textSize.x = textSize.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
field->SetTextSize( textSize );
|
||||
|
||||
char textOrient = parseChar( aReader, line, &line );
|
||||
|
@ -3126,11 +3139,11 @@ LIB_ARC* SCH_LEGACY_PLUGIN_CACHE::loadArc( std::unique_ptr<LIB_PART>& aPart,
|
|||
|
||||
wxPoint center;
|
||||
|
||||
center.x = parseInt( aReader, line, &line );
|
||||
center.y = parseInt( aReader, line, &line );
|
||||
center.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
center.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
arc->SetPosition( center );
|
||||
arc->SetRadius( parseInt( aReader, line, &line ) );
|
||||
arc->SetRadius( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
|
||||
int angle1 = parseInt( aReader, line, &line );
|
||||
int angle2 = parseInt( aReader, line, &line );
|
||||
|
@ -3142,7 +3155,7 @@ LIB_ARC* SCH_LEGACY_PLUGIN_CACHE::loadArc( std::unique_ptr<LIB_PART>& aPart,
|
|||
|
||||
arc->SetUnit( parseInt( aReader, line, &line ) );
|
||||
arc->SetConvert( parseInt( aReader, line, &line ) );
|
||||
arc->SetWidth( parseInt( aReader, line, &line ) );
|
||||
arc->SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
|
||||
// Old libraries (version <= 2.2) do not have always this FILL MODE param
|
||||
// when fill mode is no fill (default mode).
|
||||
|
@ -3154,10 +3167,10 @@ LIB_ARC* SCH_LEGACY_PLUGIN_CACHE::loadArc( std::unique_ptr<LIB_PART>& aPart,
|
|||
{
|
||||
wxPoint arcStart, arcEnd;
|
||||
|
||||
arcStart.x = parseInt( aReader, line, &line );
|
||||
arcStart.y = parseInt( aReader, line, &line );
|
||||
arcEnd.x = parseInt( aReader, line, &line );
|
||||
arcEnd.y = parseInt( aReader, line, &line );
|
||||
arcStart.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
arcStart.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
arcEnd.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
arcEnd.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
arc->SetStart( arcStart );
|
||||
arc->SetEnd( arcEnd );
|
||||
|
@ -3192,14 +3205,14 @@ LIB_CIRCLE* SCH_LEGACY_PLUGIN_CACHE::loadCircle( std::unique_ptr<LIB_PART>& aPar
|
|||
|
||||
wxPoint center;
|
||||
|
||||
center.x = parseInt( aReader, line, &line );
|
||||
center.y = parseInt( aReader, line, &line );
|
||||
center.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
center.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
|
||||
circle->SetPosition( center );
|
||||
circle->SetRadius( parseInt( aReader, line, &line ) );
|
||||
circle->SetRadius( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
circle->SetUnit( parseInt( aReader, line, &line ) );
|
||||
circle->SetConvert( parseInt( aReader, line, &line ) );
|
||||
circle->SetWidth( parseInt( aReader, line, &line ) );
|
||||
circle->SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
|
||||
if( *line != 0 )
|
||||
circle->SetFillMode( parseFillMode( aReader, line, &line ) );
|
||||
|
@ -3223,13 +3236,13 @@ LIB_TEXT* SCH_LEGACY_PLUGIN_CACHE::loadText( std::unique_ptr<LIB_PART>& aPart,
|
|||
|
||||
wxPoint center;
|
||||
|
||||
center.x = parseInt( aReader, line, &line );
|
||||
center.y = parseInt( aReader, line, &line );
|
||||
center.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
center.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
text->SetPosition( center );
|
||||
|
||||
wxSize size;
|
||||
|
||||
size.x = size.y = parseInt( aReader, line, &line );
|
||||
size.x = size.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
text->SetTextSize( size );
|
||||
text->SetVisible( !parseInt( aReader, line, &line ) );
|
||||
text->SetUnit( parseInt( aReader, line, &line ) );
|
||||
|
@ -3312,19 +3325,19 @@ LIB_RECTANGLE* SCH_LEGACY_PLUGIN_CACHE::loadRectangle( std::unique_ptr<LIB_PART>
|
|||
|
||||
wxPoint pos;
|
||||
|
||||
pos.x = parseInt( aReader, line, &line );
|
||||
pos.y = parseInt( aReader, line, &line );
|
||||
pos.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pos.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
rectangle->SetPosition( pos );
|
||||
|
||||
wxPoint end;
|
||||
|
||||
end.x = parseInt( aReader, line, &line );
|
||||
end.y = parseInt( aReader, line, &line );
|
||||
end.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
end.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
rectangle->SetEnd( end );
|
||||
|
||||
rectangle->SetUnit( parseInt( aReader, line, &line ) );
|
||||
rectangle->SetConvert( parseInt( aReader, line, &line ) );
|
||||
rectangle->SetWidth( parseInt( aReader, line, &line ) );
|
||||
rectangle->SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
|
||||
if( *line != 0 )
|
||||
rectangle->SetFillMode( parseFillMode( aReader, line, &line ) );
|
||||
|
@ -3365,7 +3378,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_PART>& aPart,
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
position.x = (int) num;
|
||||
position.x = Mils2Iu( (int) num );
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
||||
|
@ -3374,7 +3387,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_PART>& aPart,
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
position.y = (int) num;
|
||||
position.y = Mils2Iu( (int) num );
|
||||
pin->m_position = position;
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
@ -3384,7 +3397,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_PART>& aPart,
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
pin->m_length = (int) num;
|
||||
pin->m_length = Mils2Iu( (int) num );
|
||||
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
@ -3403,7 +3416,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_PART>& aPart,
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
pin->m_numTextSize = (int) num;
|
||||
pin->m_numTextSize = Mils2Iu( (int) num );
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
||||
|
@ -3412,7 +3425,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_PART>& aPart,
|
|||
aReader.LineNumber(), pos );
|
||||
|
||||
pos += tmp.size() + 1;
|
||||
pin->m_nameTextSize = (int) num;
|
||||
pin->m_nameTextSize = Mils2Iu( (int) num );
|
||||
|
||||
tmp = tokens.GetNextToken();
|
||||
|
||||
|
@ -3527,15 +3540,15 @@ LIB_POLYLINE* SCH_LEGACY_PLUGIN_CACHE::loadPolyLine( std::unique_ptr<LIB_PART>&
|
|||
int points = parseInt( aReader, line, &line );
|
||||
polyLine->SetUnit( parseInt( aReader, line, &line ) );
|
||||
polyLine->SetConvert( parseInt( aReader, line, &line ) );
|
||||
polyLine->SetWidth( parseInt( aReader, line, &line ) );
|
||||
polyLine->SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
polyLine->Reserve( points );
|
||||
|
||||
wxPoint pt;
|
||||
|
||||
for( int i = 0; i < points; i++ )
|
||||
{
|
||||
pt.x = parseInt( aReader, line, &line );
|
||||
pt.y = parseInt( aReader, line, &line );
|
||||
pt.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pt.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
polyLine->AddPoint( pt );
|
||||
}
|
||||
|
||||
|
@ -3558,15 +3571,15 @@ LIB_BEZIER* SCH_LEGACY_PLUGIN_CACHE::loadBezier( std::unique_ptr<LIB_PART>& aPar
|
|||
int points = parseInt( aReader, line, &line );
|
||||
bezier->SetUnit( parseInt( aReader, line, &line ) );
|
||||
bezier->SetConvert( parseInt( aReader, line, &line ) );
|
||||
bezier->SetWidth( parseInt( aReader, line, &line ) );
|
||||
bezier->SetWidth( Mils2Iu( parseInt( aReader, line, &line ) ) );
|
||||
|
||||
wxPoint pt;
|
||||
bezier->Reserve( points );
|
||||
|
||||
for( int i = 0; i < points; i++ )
|
||||
{
|
||||
pt.x = parseInt( aReader, line, &line );
|
||||
pt.y = parseInt( aReader, line, &line );
|
||||
pt.x = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
pt.y = Mils2Iu( parseInt( aReader, line, &line ) );
|
||||
bezier->AddPoint( pt );
|
||||
}
|
||||
|
||||
|
@ -3679,7 +3692,7 @@ void SCH_LEGACY_PLUGIN_CACHE::SaveSymbol( LIB_PART* aSymbol, OUTPUTFORMATTER& aF
|
|||
}
|
||||
|
||||
aFormatter.Print( 0, " %d %d %c %c %d %c %c\n",
|
||||
0, aSymbol->GetPinNameOffset(),
|
||||
0, Iu2Mils( aSymbol->GetPinNameOffset() ),
|
||||
aSymbol->ShowPinNumbers() ? 'Y' : 'N',
|
||||
aSymbol->ShowPinNames() ? 'Y' : 'N',
|
||||
aSymbol->GetUnitCount(), aSymbol->UnitsLocked() ? 'L' : 'F',
|
||||
|
@ -3827,11 +3840,11 @@ void SCH_LEGACY_PLUGIN_CACHE::saveArc( LIB_ARC* aArc,
|
|||
x2 -= 3600;
|
||||
|
||||
aFormatter.Print( 0, "A %d %d %d %d %d %d %d %d %c %d %d %d %d\n",
|
||||
aArc->GetPosition().x, aArc->GetPosition().y,
|
||||
aArc->GetRadius(), x1, x2, aArc->GetUnit(), aArc->GetConvert(),
|
||||
aArc->GetWidth(), fill_tab[aArc->GetFillMode()],
|
||||
aArc->GetStart().x, aArc->GetStart().y,
|
||||
aArc->GetEnd().x, aArc->GetEnd().y );
|
||||
Iu2Mils( aArc->GetPosition().x ), Iu2Mils( aArc->GetPosition().y ),
|
||||
Iu2Mils( aArc->GetRadius() ), x1, x2, aArc->GetUnit(), aArc->GetConvert(),
|
||||
Iu2Mils( aArc->GetWidth() ), fill_tab[aArc->GetFillMode()],
|
||||
Iu2Mils( aArc->GetStart().x ), Iu2Mils( aArc->GetStart().y ),
|
||||
Iu2Mils( aArc->GetEnd().x ), Iu2Mils( aArc->GetEnd().y ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -3841,10 +3854,10 @@ void SCH_LEGACY_PLUGIN_CACHE::saveBezier( LIB_BEZIER* aBezier,
|
|||
wxCHECK_RET( aBezier && aBezier->Type() == LIB_BEZIER_T, "Invalid LIB_BEZIER object." );
|
||||
|
||||
aFormatter.Print( 0, "B %u %d %d %d", (unsigned)aBezier->GetPoints().size(),
|
||||
aBezier->GetUnit(), aBezier->GetConvert(), aBezier->GetWidth() );
|
||||
aBezier->GetUnit(), aBezier->GetConvert(), Iu2Mils( aBezier->GetWidth() ) );
|
||||
|
||||
for( const auto& pt : aBezier->GetPoints() )
|
||||
aFormatter.Print( 0, " %d %d", pt.x, pt.y );
|
||||
aFormatter.Print( 0, " %d %d", Iu2Mils( pt.x ), Iu2Mils( pt.y ) );
|
||||
|
||||
aFormatter.Print( 0, " %c\n", fill_tab[aBezier->GetFillMode()] );
|
||||
}
|
||||
|
@ -3856,9 +3869,9 @@ void SCH_LEGACY_PLUGIN_CACHE::saveCircle( LIB_CIRCLE* aCircle,
|
|||
wxCHECK_RET( aCircle && aCircle->Type() == LIB_CIRCLE_T, "Invalid LIB_CIRCLE object." );
|
||||
|
||||
aFormatter.Print( 0, "C %d %d %d %d %d %d %c\n",
|
||||
aCircle->GetPosition().x, aCircle->GetPosition().y,
|
||||
aCircle->GetRadius(), aCircle->GetUnit(), aCircle->GetConvert(),
|
||||
aCircle->GetWidth(), fill_tab[aCircle->GetFillMode()] );
|
||||
Iu2Mils( aCircle->GetPosition().x ), Iu2Mils( aCircle->GetPosition().y ),
|
||||
Iu2Mils( aCircle->GetRadius() ), aCircle->GetUnit(), aCircle->GetConvert(),
|
||||
Iu2Mils( aCircle->GetWidth() ), fill_tab[aCircle->GetFillMode()] );
|
||||
}
|
||||
|
||||
|
||||
|
@ -3888,7 +3901,8 @@ void SCH_LEGACY_PLUGIN_CACHE::saveField( LIB_FIELD* aField,
|
|||
aFormatter.Print( 0, "F%d %s %d %d %d %c %c %c %c%c%c",
|
||||
id,
|
||||
EscapedUTF8( text ).c_str(), // wraps in quotes
|
||||
aField->GetTextPos().x, aField->GetTextPos().y, aField->GetTextWidth(),
|
||||
Iu2Mils( aField->GetTextPos().x ), Iu2Mils( aField->GetTextPos().y ),
|
||||
Iu2Mils( aField->GetTextWidth() ),
|
||||
aField->GetTextAngle() == 0 ? 'H' : 'V',
|
||||
aField->IsVisible() ? 'V' : 'I',
|
||||
hjustify, vjustify,
|
||||
|
@ -3971,9 +3985,9 @@ void SCH_LEGACY_PLUGIN_CACHE::savePin( LIB_PIN* aPin,
|
|||
|
||||
aFormatter.Print( 0, " %s %d %d %d %c %d %d %d %d %c",
|
||||
aPin->GetNumber().IsEmpty() ? "~" : TO_UTF8( aPin->GetNumber() ),
|
||||
aPin->GetPosition().x, aPin->GetPosition().y,
|
||||
(int) aPin->GetLength(), (int) aPin->GetOrientation(),
|
||||
aPin->GetNumberTextSize(), aPin->GetNameTextSize(),
|
||||
Iu2Mils( aPin->GetPosition().x ), Iu2Mils( aPin->GetPosition().y ),
|
||||
Iu2Mils( (int) aPin->GetLength() ), (int) aPin->GetOrientation(),
|
||||
Iu2Mils( aPin->GetNumberTextSize() ), Iu2Mils( aPin->GetNameTextSize() ),
|
||||
aPin->GetUnit(), aPin->GetConvert(), Etype );
|
||||
|
||||
if( aPin->GetShape() || !aPin->IsVisible() )
|
||||
|
@ -4037,11 +4051,11 @@ void SCH_LEGACY_PLUGIN_CACHE::savePolyLine( LIB_POLYLINE* aPolyLine,
|
|||
int ccount = aPolyLine->GetCornerCount();
|
||||
|
||||
aFormatter.Print( 0, "P %d %d %d %d", ccount, aPolyLine->GetUnit(), aPolyLine->GetConvert(),
|
||||
aPolyLine->GetWidth() );
|
||||
Iu2Mils( aPolyLine->GetWidth() ) );
|
||||
|
||||
for( const auto& pt : aPolyLine->GetPolyPoints() )
|
||||
{
|
||||
aFormatter.Print( 0, " %d %d", pt.x, pt.y );
|
||||
aFormatter.Print( 0, " %d %d", Iu2Mils( pt.x ), Iu2Mils( pt.y ) );
|
||||
}
|
||||
|
||||
aFormatter.Print( 0, " %c\n", fill_tab[aPolyLine->GetFillMode()] );
|
||||
|
@ -4055,10 +4069,11 @@ void SCH_LEGACY_PLUGIN_CACHE::saveRectangle( LIB_RECTANGLE* aRectangle,
|
|||
"Invalid LIB_RECTANGLE object." );
|
||||
|
||||
aFormatter.Print( 0, "S %d %d %d %d %d %d %d %c\n",
|
||||
aRectangle->GetPosition().x, aRectangle->GetPosition().y,
|
||||
aRectangle->GetEnd().x, aRectangle->GetEnd().y,
|
||||
Iu2Mils( aRectangle->GetPosition().x ),
|
||||
Iu2Mils( aRectangle->GetPosition().y ),
|
||||
Iu2Mils( aRectangle->GetEnd().x ), Iu2Mils( aRectangle->GetEnd().y ),
|
||||
aRectangle->GetUnit(), aRectangle->GetConvert(),
|
||||
aRectangle->GetWidth(), fill_tab[aRectangle->GetFillMode()] );
|
||||
Iu2Mils( aRectangle->GetWidth() ), fill_tab[aRectangle->GetFillMode()] );
|
||||
}
|
||||
|
||||
|
||||
|
@ -4077,8 +4092,8 @@ void SCH_LEGACY_PLUGIN_CACHE::saveText( LIB_TEXT* aText,
|
|||
}
|
||||
|
||||
aFormatter.Print( 0, "T %g %d %d %d %d %d %d %s", aText->GetTextAngle(),
|
||||
aText->GetTextPos().x, aText->GetTextPos().y,
|
||||
aText->GetTextWidth(), !aText->IsVisible(),
|
||||
Iu2Mils( aText->GetTextPos().x ), Iu2Mils( aText->GetTextPos().y ),
|
||||
Iu2Mils( aText->GetTextWidth() ), !aText->IsVisible(),
|
||||
aText->GetUnit(), aText->GetConvert(), TO_UTF8( text ) );
|
||||
|
||||
aFormatter.Print( 0, " %s %d", aText->IsItalic() ? "Italic" : "Normal", aText->IsBold() );
|
||||
|
|
|
@ -44,7 +44,7 @@ SCH_NO_CONNECT::SCH_NO_CONNECT( const wxPoint& pos ) :
|
|||
SCH_ITEM( NULL, SCH_NO_CONNECT_T )
|
||||
{
|
||||
m_pos = pos;
|
||||
m_size = 48; ///< No-connect symbol size.
|
||||
m_size = Mils2iu( 48 ); ///< No-connect symbol size.
|
||||
|
||||
SetLayer( LAYER_NOCONNECT );
|
||||
}
|
||||
|
|
|
@ -120,12 +120,12 @@ static LIB_PART* dummy()
|
|||
|
||||
LIB_RECTANGLE* square = new LIB_RECTANGLE( part );
|
||||
|
||||
square->MoveTo( wxPoint( -200, 200 ) );
|
||||
square->SetEndPosition( wxPoint( 200, -200 ) );
|
||||
square->MoveTo( wxPoint( Mils2iu( -200 ), Mils2iu( 200 ) ) );
|
||||
square->SetEndPosition( wxPoint( Mils2iu( 200 ), Mils2iu( -200 ) ) );
|
||||
|
||||
LIB_TEXT* text = new LIB_TEXT( part );
|
||||
|
||||
text->SetTextSize( wxSize( 150, 150 ) );
|
||||
text->SetTextSize( wxSize( Mils2iu( 150 ), Mils2iu( 150 ) ) );
|
||||
text->SetText( wxString( wxT( "??" ) ) );
|
||||
|
||||
part->AddDrawItem( square );
|
||||
|
@ -165,8 +165,8 @@ bool SCH_PAINTER::Draw( const VIEW_ITEM *aItem, int aLayer )
|
|||
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
|
||||
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
|
||||
m_gal->SetStrokeColor( COLOR4D( LIGHTRED ) );
|
||||
m_gal->SetLineWidth( 2 );
|
||||
m_gal->SetGlyphSize( VECTOR2D( 20, 20 ) );
|
||||
m_gal->SetLineWidth( Mils2ui( 2 ) );
|
||||
m_gal->SetGlyphSize( VECTOR2D( Mils2ui( 20 ), Mils2ui( 20 ) ) );
|
||||
m_gal->StrokeText( conn->Name( true ), pos, 0.0 );
|
||||
}
|
||||
|
||||
|
@ -896,8 +896,8 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
|
|||
int insideOffset = textOffset;
|
||||
int outsideOffset = 10;
|
||||
float lineThickness = (float) GetDefaultLineThickness();
|
||||
float aboveOffset = PIN_TEXT_MARGIN + ( thickness[ABOVE] + lineThickness ) / 2.0;
|
||||
float belowOffset = PIN_TEXT_MARGIN + ( thickness[BELOW] + lineThickness ) / 2.0;
|
||||
float aboveOffset = Mils2iu( PIN_TEXT_MARGIN ) + ( thickness[ABOVE] + lineThickness ) / 2.0;
|
||||
float belowOffset = Mils2iu( PIN_TEXT_MARGIN ) + ( thickness[BELOW] + lineThickness ) / 2.0;
|
||||
|
||||
if( drawingShadows )
|
||||
{
|
||||
|
@ -1070,7 +1070,7 @@ void SCH_PAINTER::draw( LIB_BEZIER *aCurve, int aLayer )
|
|||
// being moved.
|
||||
void SCH_PAINTER::drawDanglingSymbol( const wxPoint& aPos, bool aDrawingShadows )
|
||||
{
|
||||
wxPoint radius( DANGLING_SYMBOL_SIZE, DANGLING_SYMBOL_SIZE );
|
||||
wxPoint radius( Mils2iu( DANGLING_SYMBOL_SIZE ), Mils2iu( DANGLING_SYMBOL_SIZE ) );
|
||||
|
||||
m_gal->SetIsStroke( true );
|
||||
m_gal->SetIsFill( false );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2018-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -67,7 +67,7 @@ SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL( wxWindow* aParentWindow, wxWindowID aWindo
|
|||
|
||||
m_gal->SetGridColor( GetLayerColor( LAYER_SCHEMATIC_GRID ) );
|
||||
m_gal->SetCursorColor( GetLayerColor( LAYER_SCHEMATIC_CURSOR ) );
|
||||
m_gal->SetGridSize( VECTOR2D( 50.0, 50.0 ) );
|
||||
m_gal->SetGridSize( VECTOR2D( Mils2iu( 50.0 ), Mils2iu( 50.0 ) ) );
|
||||
|
||||
m_viewControls->SetSnapping( true );
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -69,16 +69,36 @@
|
|||
#include <boost/foreach.hpp>
|
||||
|
||||
#define EESCHEMA_FILE_STAMP "EESchema"
|
||||
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS )
|
||||
|
||||
|
||||
/* Default zoom values. Limited to these values to keep a decent size
|
||||
* to menus
|
||||
*/
|
||||
static double SchematicZoomList[] =
|
||||
{
|
||||
0.5, 0.7, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 11.0,
|
||||
13.0, 16.0, 20.0, 26.0, 32.0, 48.0, 64.0, 80.0, 128.0
|
||||
ZOOM_FACTOR( 0.5 ),
|
||||
ZOOM_FACTOR( 0.7 ),
|
||||
ZOOM_FACTOR( 1.0 ),
|
||||
ZOOM_FACTOR( 1.5 ),
|
||||
ZOOM_FACTOR( 2.0 ),
|
||||
ZOOM_FACTOR( 3.0 ),
|
||||
ZOOM_FACTOR( 4.0 ),
|
||||
ZOOM_FACTOR( 6.0 ),
|
||||
ZOOM_FACTOR( 8.0 ),
|
||||
ZOOM_FACTOR( 11.0 ),
|
||||
ZOOM_FACTOR( 13.0 ),
|
||||
ZOOM_FACTOR( 16.0 ),
|
||||
ZOOM_FACTOR( 20.0 ),
|
||||
ZOOM_FACTOR( 26.0 ),
|
||||
ZOOM_FACTOR( 32.0 ),
|
||||
ZOOM_FACTOR( 48.0 ),
|
||||
ZOOM_FACTOR( 64.0 ),
|
||||
ZOOM_FACTOR( 80.0 ),
|
||||
ZOOM_FACTOR( 128.0 )
|
||||
};
|
||||
|
||||
|
||||
/* Default grid sizes for the schematic editor.
|
||||
* Do NOT add others values (mainly grid values in mm), because they
|
||||
* can break the schematic: Because wires and pins are considered as
|
||||
|
@ -92,13 +112,13 @@ static double SchematicZoomList[] =
|
|||
* 100mil grid, pin ends and origin must lie on grid nodes IEC-60617"
|
||||
*/
|
||||
static GRID_TYPE SchematicGridList[] = {
|
||||
{ ID_POPUP_GRID_LEVEL_100, wxRealPoint( 100, 100 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_50, wxRealPoint( 50, 50 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_25, wxRealPoint( 25, 25 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_10, wxRealPoint( 10, 10 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_5, wxRealPoint( 5, 5 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_2, wxRealPoint( 2, 2 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_1, wxRealPoint( 1, 1 ) },
|
||||
{ ID_POPUP_GRID_LEVEL_100, wxRealPoint( Mils2iu( 100 ), Mils2iu( 100 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_50, wxRealPoint( Mils2iu( 50 ), Mils2iu( 50 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_25, wxRealPoint( Mils2iu( 25 ), Mils2iu( 25 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_10, wxRealPoint( Mils2iu( 10 ), Mils2iu( 10 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_5, wxRealPoint( Mils2iu( 5 ), Mils2iu( 5 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_2, wxRealPoint( Mils2iu( 2 ), Mils2iu( 2 ) ) },
|
||||
{ ID_POPUP_GRID_LEVEL_1, wxRealPoint( Mils2iu( 1 ), Mils2iu( 1 ) ) },
|
||||
};
|
||||
|
||||
|
||||
|
@ -118,7 +138,7 @@ SCH_SCREEN::SCH_SCREEN( KIWAY* aKiway ) :
|
|||
AddGrid( grid );
|
||||
|
||||
// Set the default grid size, now that the grid list is populated
|
||||
SetGrid( wxRealPoint( 50, 50 ) );
|
||||
SetGrid( wxRealPoint( Mils2iu( 50 ), Mils2iu( 50 ) ) );
|
||||
|
||||
m_refCount = 0;
|
||||
|
||||
|
@ -133,9 +153,9 @@ SCH_SCREEN::~SCH_SCREEN()
|
|||
{
|
||||
ClearUndoRedoList();
|
||||
|
||||
// Now delete items in draw list. We do that only if the list is not empty,
|
||||
// because if the list was appended to another list (see SCH_SCREEN::Append( SCH_SCREEN* aScreen )
|
||||
// it is empty but as no longer the ownership (m_drawList.meOwner == false) of items, and calling
|
||||
// Now delete items in draw list. We do that only if the list is not empty, because if the
|
||||
// list was appended to another list (see SCH_SCREEN::Append( SCH_SCREEN* aScreen ) it is
|
||||
// empty but as no longer the ownership (m_drawList.meOwner == false) of items, and calling
|
||||
// FreeDrawList() with m_drawList.meOwner == false will generate a debug alert in debug mode
|
||||
if( GetDrawItems() )
|
||||
FreeDrawList();
|
||||
|
@ -894,9 +914,9 @@ bool SCH_SCREEN::SetComponentFootprint( SCH_SHEET_PATH* aSheetPath, const wxStri
|
|||
fpfield->SetTextSize( component->GetField( VALUE )->GetTextSize() );
|
||||
|
||||
if( fpfield->GetTextAngle() == 0.0 )
|
||||
fpfield->Offset( wxPoint( 0, 100 ) );
|
||||
fpfield->Offset( wxPoint( 0, Mils2iu( 100 ) ) );
|
||||
else
|
||||
fpfield->Offset( wxPoint( 100, 0 ) );
|
||||
fpfield->Offset( wxPoint( Mils2iu( 100 ), 0 ) );
|
||||
}
|
||||
|
||||
fpfield->SetText( aFootPrint );
|
||||
|
|
|
@ -151,7 +151,7 @@ wxPoint SCH_TEXT::GetSchematicTextOffset() const
|
|||
wxPoint text_offset;
|
||||
|
||||
// add an offset to x (or y) position to aid readability of text on a wire or line
|
||||
int thick_offset = TXT_MARGIN + ( GetPenSize() + GetDefaultLineThickness() ) / 2;
|
||||
int thick_offset = Mils2iu( TXT_MARGIN ) + ( GetPenSize() + GetDefaultLineThickness() ) / 2;
|
||||
|
||||
switch( GetLabelSpinStyle() )
|
||||
{
|
||||
|
@ -947,7 +947,8 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
|
|||
height = ( (GetTextHeight() * 15) / 10 ) + width + 2 * TXT_MARGIN;
|
||||
|
||||
// text X size add height for triangular shapes(bidirectional)
|
||||
length = LenSize( GetShownText(), width, GetTextMarkupFlags() ) + height + DANGLING_SYMBOL_SIZE;
|
||||
length = LenSize( GetShownText(), width, GetTextMarkupFlags() ) + height +
|
||||
Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
|
||||
switch( GetLabelSpinStyle() ) // respect orientation
|
||||
{
|
||||
|
@ -955,7 +956,7 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
|
|||
case 0: // Horiz Normal Orientation (left justified)
|
||||
dx = -length;
|
||||
dy = height;
|
||||
x += DANGLING_SYMBOL_SIZE;
|
||||
x += Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
y -= height / 2;
|
||||
break;
|
||||
|
||||
|
@ -963,13 +964,13 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
|
|||
dx = height;
|
||||
dy = -length;
|
||||
x -= height / 2;
|
||||
y += DANGLING_SYMBOL_SIZE;
|
||||
y += Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
break;
|
||||
|
||||
case 2: // Horiz Orientation - Right justified
|
||||
dx = length;
|
||||
dy = height;
|
||||
x -= DANGLING_SYMBOL_SIZE;
|
||||
x -= Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
y -= height / 2;
|
||||
break;
|
||||
|
||||
|
@ -977,7 +978,7 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
|
|||
dx = height;
|
||||
dy = length;
|
||||
x -= height / 2;
|
||||
y -= DANGLING_SYMBOL_SIZE;
|
||||
y -= Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1111,7 +1112,7 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
|
|||
height = GetTextHeight() + width + 2 * TXT_MARGIN;
|
||||
length = LenSize( GetShownText(), width, GetTextMarkupFlags() )
|
||||
+ height // add height for triangular shapes
|
||||
+ 2 * DANGLING_SYMBOL_SIZE;
|
||||
+ 2 * Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
|
||||
switch( GetLabelSpinStyle() )
|
||||
{
|
||||
|
@ -1119,7 +1120,7 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
|
|||
case 0: // Horiz Normal Orientation (left justified)
|
||||
dx = -length;
|
||||
dy = height;
|
||||
x += DANGLING_SYMBOL_SIZE;
|
||||
x += Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
y -= height / 2;
|
||||
break;
|
||||
|
||||
|
@ -1127,13 +1128,13 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
|
|||
dx = height;
|
||||
dy = -length;
|
||||
x -= height / 2;
|
||||
y += DANGLING_SYMBOL_SIZE;
|
||||
y += Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
break;
|
||||
|
||||
case 2: // Horiz Orientation - Right justified
|
||||
dx = length;
|
||||
dy = height;
|
||||
x -= DANGLING_SYMBOL_SIZE;
|
||||
x -= Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
y -= height / 2;
|
||||
break;
|
||||
|
||||
|
@ -1141,7 +1142,7 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
|
|||
dx = height;
|
||||
dy = length;
|
||||
x -= height / 2;
|
||||
y -= DANGLING_SYMBOL_SIZE;
|
||||
y -= Mils2iu( DANGLING_SYMBOL_SIZE );
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ SCH_VIEW::SCH_VIEW( bool aIsDynamic, SCH_BASE_FRAME* aFrame ) :
|
|||
// So we have to use a smaller value.
|
||||
// A full size = 3 * MAX_PAGE_SIZE_MILS size allows a wide margin
|
||||
// around the worksheet.
|
||||
double max_size = MAX_PAGE_SIZE_MILS * IU_PER_MILS * 3.0;
|
||||
double max_size = Mils2iu( MAX_PAGE_SIZE_MILS ) * 3.0;
|
||||
m_boundary.SetOrigin( -max_size/4, -max_size/4 );
|
||||
m_boundary.SetSize( max_size, max_size );
|
||||
|
||||
|
@ -83,11 +83,9 @@ void SCH_VIEW::SetScale( double aScale, VECTOR2D aAnchor )
|
|||
void SCH_VIEW::ResizeSheetWorkingArea( SCH_SCREEN* aScreen )
|
||||
{
|
||||
const PAGE_INFO& page_info = aScreen->GetPageSettings();
|
||||
// A full size = 3 * page size allows a wide margin around the worksheet.
|
||||
// This is useful to have a large working area.
|
||||
double max_size_x = page_info.GetWidthMils() * IU_PER_MILS * 2.0;
|
||||
double max_size_y = page_info.GetHeightMils() * IU_PER_MILS * 2.0;
|
||||
m_boundary.SetOrigin( -max_size_x /4, -max_size_y/4 );
|
||||
double max_size_x = page_info.GetWidthIU() * 3.0;
|
||||
double max_size_y = page_info.GetHeightIU() * 3.0;
|
||||
m_boundary.SetOrigin( -max_size_x/4, -max_size_y/4 );
|
||||
m_boundary.SetSize( max_size_x, max_size_y );
|
||||
}
|
||||
|
||||
|
@ -97,7 +95,8 @@ void SCH_VIEW::DisplaySheet( SCH_SCREEN *aScreen )
|
|||
for( auto item = aScreen->GetDrawItems(); item; item = item->Next() )
|
||||
Add( item );
|
||||
|
||||
m_worksheet.reset( new KIGFX::WS_PROXY_VIEW_ITEM( 1, &aScreen->GetPageSettings(),
|
||||
m_worksheet.reset( new KIGFX::WS_PROXY_VIEW_ITEM( static_cast< int >( IU_PER_MILS ),
|
||||
&aScreen->GetPageSettings(),
|
||||
&aScreen->GetTitleBlock() ) );
|
||||
m_worksheet->SetSheetNumber( aScreen->m_ScreenNumber );
|
||||
m_worksheet->SetSheetCount( aScreen->m_NumberOfScreens );
|
||||
|
@ -222,6 +221,7 @@ void SCH_VIEW::HideWorksheet()
|
|||
// SetVisible( m_worksheet.get(), false );
|
||||
}
|
||||
|
||||
|
||||
void SCH_VIEW::HighlightItem( EDA_ITEM *aItem, LIB_PIN* aPin )
|
||||
{
|
||||
if( aItem && aItem->Type() == SCH_COMPONENT_T && aPin )
|
||||
|
|
|
@ -38,8 +38,8 @@ class LIB_PART;
|
|||
class LIB_PIN;
|
||||
class SCH_BASE_FRAME;
|
||||
|
||||
// Eeschema uses mils as the internal units
|
||||
constexpr double SCH_WORLD_UNIT = 0.001;
|
||||
// Eeschema 100nm as the internal units
|
||||
constexpr double SCH_WORLD_UNIT ( 1e-7 / 0.0254 );
|
||||
|
||||
static const LAYER_NUM SCH_LAYER_ORDER[] =
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012-2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 1992-2016 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -52,6 +52,12 @@ inline int Mils2iu( int mils )
|
|||
return int( x < 0 ? x - 0.5 : x + 0.5 );
|
||||
}
|
||||
|
||||
constexpr inline double Iu2Mils( int iu )
|
||||
{
|
||||
double mils = iu / IU_PER_MILS;
|
||||
|
||||
return static_cast< int >( mils < 0 ? mils - 0.5 : mils + 0.5 );
|
||||
}
|
||||
#elif defined (PL_EDITOR)
|
||||
constexpr double IU_PER_MM = 1e3; // internal units in micron (should be enough)
|
||||
constexpr double IU_PER_MILS = (IU_PER_MM * 0.0254);
|
||||
|
@ -64,12 +70,20 @@ inline int Mils2iu( int mils )
|
|||
}
|
||||
|
||||
#elif defined (EESCHEMA) // Eeschema
|
||||
constexpr double IU_PER_MILS = 1.0;
|
||||
constexpr double IU_PER_MM = ( IU_PER_MILS / 0.0254 );
|
||||
constexpr double IU_PER_MM = 1e4; // Schematic internal units 1=100nm
|
||||
constexpr double IU_PER_MILS = IU_PER_MM * 0.0254;
|
||||
|
||||
constexpr inline int Mils2iu( int mils )
|
||||
{
|
||||
return mils;
|
||||
double x = mils * IU_PER_MILS;
|
||||
return int( x < 0 ? x - 0.5 : x + 0.5 );
|
||||
}
|
||||
|
||||
constexpr inline int Iu2Mils( int iu )
|
||||
{
|
||||
double mils = iu / IU_PER_MILS;
|
||||
|
||||
return static_cast< int >( mils < 0 ? mils - 0.5 : mils + 0.5 );
|
||||
}
|
||||
#else
|
||||
// Here, we do not know the value of internal units: do not define
|
||||
|
@ -94,10 +108,10 @@ constexpr inline double Iu2Millimeter( int iu )
|
|||
}
|
||||
|
||||
/// Convert mm to internal units (iu).
|
||||
constexpr inline double Iu2Mils( int iu )
|
||||
{
|
||||
return iu / IU_PER_MILS;
|
||||
}
|
||||
// constexpr inline double Iu2Mils( int iu )
|
||||
// {
|
||||
// return iu / IU_PER_MILS;
|
||||
// }
|
||||
|
||||
// The max error is the distance between the middle of a segment, and the circle
|
||||
// for circle/arc to segment approximation.
|
||||
|
|
|
@ -41,6 +41,9 @@ add_executable( qa_eeschema
|
|||
# The main test entry points
|
||||
test_module.cpp
|
||||
|
||||
# Base internal units (1=100nm) testing.
|
||||
test_sch_biu.cpp
|
||||
|
||||
test_eagle_plugin.cpp
|
||||
test_lib_part.cpp
|
||||
test_sch_pin.cpp
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file test_sch_biu.cpp
|
||||
*
|
||||
* Test suite for schematic base internal units (1 = 100nm).
|
||||
*/
|
||||
|
||||
#include <unit_test_utils/unit_test_utils.h>
|
||||
|
||||
#include <convert_to_biu.h>
|
||||
|
||||
|
||||
class TEST_SCH_INTERNAL_UNITS
|
||||
{
|
||||
public:
|
||||
TEST_SCH_INTERNAL_UNITS()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Declare the test suite
|
||||
*/
|
||||
BOOST_FIXTURE_TEST_SUITE( SchInternalUnits, TEST_SCH_INTERNAL_UNITS )
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE( ConvertToInternalUnits )
|
||||
{
|
||||
BOOST_CHECK_EQUAL( Millimeter2iu( 1.0 ), 10000 );
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE( ConvertFromInternalUnits )
|
||||
{
|
||||
BOOST_CHECK_EQUAL( static_cast< int >( Iu2Millimeter( 10000 ) ), 1 );
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
Loading…
Reference in New Issue