Convert Schematic Internal Units to 100nm

This commit is contained in:
Wayne Stambaugh 2019-12-30 18:28:00 +00:00
parent b11d52eda1
commit aeb3281e27
25 changed files with 382 additions and 261 deletions

View File

@ -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()

View File

@ -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 );
}

View File

@ -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

View File

@ -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++ )

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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 );

View File

@ -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 ) ) );
}

View File

@ -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
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( DEFAULT_REPEAT_OFFSET_X, DEFAULT_REPEAT_OFFSET_Y );
m_repeatDeltaLabel = DEFAULT_REPEAT_LABEL_INC;
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;

View File

@ -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 );

View File

@ -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.

View File

@ -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,

View File

@ -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() );

View File

@ -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 );
}

View File

@ -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 );

View File

@ -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 );

View File

@ -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 );

View File

@ -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;
}

View File

@ -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 )

View File

@ -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[] =
{

View File

@ -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.

View File

@ -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

View File

@ -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()