Lay the foundation for handling selected SCH_ITEMs.
This commit is contained in:
parent
e9c1cd2371
commit
954998ec9a
|
@ -90,14 +90,10 @@ bool SCH_ITEM::IsConnected( const wxPoint& aPosition ) const
|
||||||
|
|
||||||
SCH_CONNECTION* SCH_ITEM::Connection( const SCH_SHEET_PATH& aSheet ) const
|
SCH_CONNECTION* SCH_ITEM::Connection( const SCH_SHEET_PATH& aSheet ) const
|
||||||
{
|
{
|
||||||
try
|
if( m_connection_map.count( aSheet ) )
|
||||||
{
|
|
||||||
return m_connection_map.at( aSheet );
|
return m_connection_map.at( aSheet );
|
||||||
}
|
|
||||||
catch( ... )
|
return nullptr;
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -93,27 +93,6 @@ const COLOR4D& SCH_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer
|
||||||
return m_layerColors[ aLayer ];
|
return m_layerColors[ aLayer ];
|
||||||
}
|
}
|
||||||
|
|
||||||
static const COLOR4D getOverlayColor( const EDA_ITEM* aItem, const COLOR4D& aColor, bool aOnBackgroundLayer )
|
|
||||||
{
|
|
||||||
if( aItem->IsMoving() || ( aItem->GetParent() && aItem->GetParent()->IsMoving() ) )
|
|
||||||
{
|
|
||||||
return aColor.Brightened( 0.5 );
|
|
||||||
}
|
|
||||||
else if( aItem->IsHighlighted() || ( aItem->GetParent() && aItem->GetParent()->IsHighlighted() ) )
|
|
||||||
{
|
|
||||||
if ( aOnBackgroundLayer )
|
|
||||||
{
|
|
||||||
auto bri = aColor.GetBrightness();
|
|
||||||
return COLOR4D( bri, 0.0, 0.0, 0.3 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return COLOR4D( 1.0, 0.3, 0.3, 1.0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return aColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used when a LIB_PART is not found in library to draw a dummy shape.
|
* Used when a LIB_PART is not found in library to draw a dummy shape.
|
||||||
|
@ -244,8 +223,36 @@ bool SCH_PAINTER::isUnitAndConversionShown( const LIB_ITEM* aItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit, int aConvert,
|
COLOR4D SCH_PAINTER::getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aOnBackgroundLayer )
|
||||||
SCH_PINS* aPinMap )
|
{
|
||||||
|
if( aItem->GetState( BRIGHTENED ) )
|
||||||
|
return m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
||||||
|
|
||||||
|
const SCH_LINE* line = dynamic_cast<const SCH_LINE*>( aItem );
|
||||||
|
COLOR4D color = line ? line->GetLineColor() : m_schSettings.GetLayerColor( aLayer );
|
||||||
|
|
||||||
|
if( aItem->IsSelected() )
|
||||||
|
{
|
||||||
|
return color.Brightened( 0.5 );
|
||||||
|
}
|
||||||
|
// JEY TODO: IsMoving checks can go away after seleciton model is fully implemented...
|
||||||
|
else if( aItem->IsMoving() )
|
||||||
|
{
|
||||||
|
return color.Brightened( 0.5 );
|
||||||
|
}
|
||||||
|
else if( aItem->IsHighlighted() )
|
||||||
|
{
|
||||||
|
if ( aOnBackgroundLayer )
|
||||||
|
return COLOR4D( color.GetBrightness(), 0.0, 0.0, 0.3 );
|
||||||
|
else
|
||||||
|
return COLOR4D( 1.0, 0.3, 0.3, 1.0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit, int aConvert )
|
||||||
{
|
{
|
||||||
if( !aUnit )
|
if( !aUnit )
|
||||||
aUnit = m_schSettings.m_ShowUnit;
|
aUnit = m_schSettings.m_ShowUnit;
|
||||||
|
@ -264,18 +271,7 @@ void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit
|
||||||
if( aConvert && item.GetConvert() && aConvert != item.GetConvert() )
|
if( aConvert && item.GetConvert() && aConvert != item.GetConvert() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( item.Type() == LIB_PIN_T )
|
Draw( &item, aLayer );
|
||||||
{
|
|
||||||
LIB_PIN* libPin = static_cast<LIB_PIN*>( &item );
|
|
||||||
SCH_PIN* schPin = nullptr;
|
|
||||||
|
|
||||||
if( aPinMap && aPinMap->count( libPin ) )
|
|
||||||
schPin = &aPinMap->at( libPin );
|
|
||||||
|
|
||||||
draw( libPin, aLayer, schPin, aPart->IsMoving() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Draw( &item, aLayer );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +313,7 @@ bool SCH_PAINTER::setColors( const LIB_ITEM* aItem, int aLayer )
|
||||||
{
|
{
|
||||||
if( aLayer == LAYER_DEVICE_BACKGROUND && aItem->GetFillMode() == FILLED_WITH_BG_BODYCOLOR )
|
if( aLayer == LAYER_DEVICE_BACKGROUND && aItem->GetFillMode() == FILLED_WITH_BG_BODYCOLOR )
|
||||||
{
|
{
|
||||||
COLOR4D color = getOverlayColor( aItem, m_schSettings.GetLayerColor( LAYER_DEVICE_BACKGROUND ), true );
|
COLOR4D color = getRenderColor( aItem, LAYER_DEVICE_BACKGROUND, true );
|
||||||
|
|
||||||
// These actions place the item over others, so allow a modest transparency here
|
// These actions place the item over others, so allow a modest transparency here
|
||||||
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
|
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
|
||||||
|
@ -331,7 +327,7 @@ bool SCH_PAINTER::setColors( const LIB_ITEM* aItem, int aLayer )
|
||||||
}
|
}
|
||||||
else if( aLayer == LAYER_DEVICE )
|
else if( aLayer == LAYER_DEVICE )
|
||||||
{
|
{
|
||||||
COLOR4D color = getOverlayColor( aItem, m_schSettings.GetLayerColor( LAYER_DEVICE ), false );
|
COLOR4D color = getRenderColor( aItem, LAYER_DEVICE, false );
|
||||||
|
|
||||||
// These actions place the item over others, so allow a modest transparency here
|
// These actions place the item over others, so allow a modest transparency here
|
||||||
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
|
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
|
||||||
|
@ -427,7 +423,7 @@ void SCH_PAINTER::draw( LIB_FIELD *aField, int aLayer )
|
||||||
if( !isUnitAndConversionShown( aField ) )
|
if( !isUnitAndConversionShown( aField ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto color = getOverlayColor( aField, aField->GetDefaultColor(), false );
|
auto color = getRenderColor( aField, aLayer, false );
|
||||||
|
|
||||||
if( !aField->IsVisible() )
|
if( !aField->IsVisible() )
|
||||||
{
|
{
|
||||||
|
@ -469,7 +465,7 @@ void SCH_PAINTER::draw( LIB_TEXT *aText, int aLayer )
|
||||||
if( !isUnitAndConversionShown( aText ) )
|
if( !isUnitAndConversionShown( aText ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto color = getOverlayColor( aText, m_schSettings.GetLayerColor( LAYER_DEVICE ), false );
|
auto color = getRenderColor( aText, LAYER_DEVICE, false );
|
||||||
|
|
||||||
if( !aText->IsVisible() )
|
if( !aText->IsVisible() )
|
||||||
{
|
{
|
||||||
|
@ -525,7 +521,7 @@ static void drawPinDanglingSymbol( GAL* aGal, const VECTOR2I& aPos, const COLOR4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isParentMoving )
|
void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
|
||||||
{
|
{
|
||||||
if( aLayer != LAYER_DEVICE )
|
if( aLayer != LAYER_DEVICE )
|
||||||
return;
|
return;
|
||||||
|
@ -533,17 +529,8 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
if( !isUnitAndConversionShown( aPin ) )
|
if( !isUnitAndConversionShown( aPin ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool isMoving = isParentMoving || aPin->IsMoving();
|
|
||||||
bool isDangling = !aSchPin || aSchPin->IsDangling();
|
|
||||||
bool isBrightened = aSchPin && aSchPin->IsBrightened();
|
|
||||||
|
|
||||||
VECTOR2I pos = mapCoords( aPin->GetPosition() );
|
VECTOR2I pos = mapCoords( aPin->GetPosition() );
|
||||||
COLOR4D color;
|
COLOR4D color = getRenderColor( aPin, LAYER_PIN, false );
|
||||||
|
|
||||||
if( isBrightened )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
else
|
|
||||||
color = getOverlayColor( aPin, m_schSettings.GetLayerColor( LAYER_PIN ), false );
|
|
||||||
|
|
||||||
if( !aPin->IsVisible() )
|
if( !aPin->IsVisible() )
|
||||||
{
|
{
|
||||||
|
@ -553,7 +540,7 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( isDangling && aPin->IsPowerConnection() )
|
if( ( aPin->GetFlags() & IS_DANGLING ) && aPin->IsPowerConnection() )
|
||||||
drawPinDanglingSymbol( m_gal, pos, color );
|
drawPinDanglingSymbol( m_gal, pos, color );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -674,10 +661,10 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
m_gal->DrawLine( pos + VECTOR2D( 1, -1 ) * TARGET_PIN_RADIUS ,
|
m_gal->DrawLine( pos + VECTOR2D( 1, -1 ) * TARGET_PIN_RADIUS ,
|
||||||
pos + VECTOR2D( -1, 1 ) * TARGET_PIN_RADIUS );
|
pos + VECTOR2D( -1, 1 ) * TARGET_PIN_RADIUS );
|
||||||
|
|
||||||
isDangling = false; // PIN_NC pin type is always not connected and dangling.
|
aPin->ClearFlags( IS_DANGLING ); // PIN_NC pin type is always not connected and dangling.
|
||||||
}
|
}
|
||||||
|
|
||||||
if( isDangling && ( aPin->IsVisible() || aPin->IsPowerConnection() ) )
|
if( ( aPin->GetFlags() & IS_DANGLING ) && ( aPin->IsVisible() || aPin->IsPowerConnection() ) )
|
||||||
drawPinDanglingSymbol( m_gal, pos, color );
|
drawPinDanglingSymbol( m_gal, pos, color );
|
||||||
|
|
||||||
// Draw the labels
|
// Draw the labels
|
||||||
|
@ -704,12 +691,12 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
{
|
{
|
||||||
size [INSIDE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
|
size [INSIDE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
|
||||||
thickness[INSIDE] = nameLineWidth;
|
thickness[INSIDE] = nameLineWidth;
|
||||||
colour [INSIDE] = m_schSettings.GetLayerColor( LAYER_PINNAM );
|
colour [INSIDE] = getRenderColor( aPin, LAYER_PINNAM, false );
|
||||||
text [INSIDE] = aPin->GetName();
|
text [INSIDE] = aPin->GetName();
|
||||||
|
|
||||||
size [ABOVE] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
|
size [ABOVE] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
|
||||||
thickness[ABOVE] = numLineWidth;
|
thickness[ABOVE] = numLineWidth;
|
||||||
colour [ABOVE] = m_schSettings.GetLayerColor( LAYER_PINNUM );
|
colour [ABOVE] = getRenderColor( aPin, LAYER_PINNUM, false );
|
||||||
text [ABOVE] = aPin->GetNumber();
|
text [ABOVE] = aPin->GetNumber();
|
||||||
}
|
}
|
||||||
// Otherwise pin NAMES go above and pin NUMBERS go below
|
// Otherwise pin NAMES go above and pin NUMBERS go below
|
||||||
|
@ -717,12 +704,12 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
{
|
{
|
||||||
size [ABOVE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
|
size [ABOVE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
|
||||||
thickness[ABOVE] = nameLineWidth;
|
thickness[ABOVE] = nameLineWidth;
|
||||||
colour [ABOVE] = m_schSettings.GetLayerColor( LAYER_PINNAM );
|
colour [ABOVE] = getRenderColor( aPin, LAYER_PINNAM, false );
|
||||||
text [ABOVE] = aPin->GetName();
|
text [ABOVE] = aPin->GetName();
|
||||||
|
|
||||||
size [BELOW] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
|
size [BELOW] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
|
||||||
thickness[BELOW] = numLineWidth;
|
thickness[BELOW] = numLineWidth;
|
||||||
colour [BELOW] = m_schSettings.GetLayerColor( LAYER_PINNUM );
|
colour [BELOW] = getRenderColor( aPin, LAYER_PINNUM, false );
|
||||||
text [BELOW] = aPin->GetNumber();
|
text [BELOW] = aPin->GetNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,7 +717,7 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
{
|
{
|
||||||
size [OUTSIDE] = std::max( aPin->GetNameTextSize() * 3 / 4, Millimeter2iu( 0.7 ) );
|
size [OUTSIDE] = std::max( aPin->GetNameTextSize() * 3 / 4, Millimeter2iu( 0.7 ) );
|
||||||
thickness[OUTSIDE] = size[OUTSIDE] / 6;
|
thickness[OUTSIDE] = size[OUTSIDE] / 6;
|
||||||
colour [OUTSIDE] = m_schSettings.GetLayerColor( LAYER_NOTES );
|
colour [OUTSIDE] = getRenderColor( aPin, LAYER_NOTES, false );
|
||||||
text [OUTSIDE] = aPin->GetElectricalTypeName();
|
text [OUTSIDE] = aPin->GetElectricalTypeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -739,11 +726,6 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
|
||||||
for( COLOR4D& c : colour )
|
for( COLOR4D& c : colour )
|
||||||
c = m_schSettings.GetLayerColor( LAYER_HIDDEN );
|
c = m_schSettings.GetLayerColor( LAYER_HIDDEN );
|
||||||
}
|
}
|
||||||
else if( isMoving )
|
|
||||||
{
|
|
||||||
for( COLOR4D& c : colour )
|
|
||||||
c = getOverlayColor( aPin, c, false );
|
|
||||||
}
|
|
||||||
|
|
||||||
int insideOffset = textOffset;
|
int insideOffset = textOffset;
|
||||||
int outsideOffset = 10;
|
int outsideOffset = 10;
|
||||||
|
@ -926,16 +908,13 @@ static void drawDanglingSymbol( GAL* aGal, const wxPoint& aPos )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer )
|
void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer )
|
||||||
{
|
{
|
||||||
COLOR4D color = m_schSettings.GetLayerColor( LAYER_JUNCTION );
|
COLOR4D color;
|
||||||
auto conn = aJct->Connection( *g_CurrentSheet );
|
auto conn = aJct->Connection( *g_CurrentSheet );
|
||||||
|
|
||||||
if( conn && conn->IsBus() )
|
if( conn && conn->IsBus() )
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BUS );
|
color = getRenderColor( aJct, LAYER_BUS, false );
|
||||||
|
|
||||||
if( aJct->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
else
|
else
|
||||||
color = getOverlayColor( aJct, color, false );
|
color = getRenderColor( aJct, LAYER_JUNCTION, false );
|
||||||
|
|
||||||
m_gal->SetIsStroke(true);
|
m_gal->SetIsStroke(true);
|
||||||
m_gal->SetIsFill(true);
|
m_gal->SetIsFill(true);
|
||||||
|
@ -947,12 +926,7 @@ void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer )
|
void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer )
|
||||||
{
|
{
|
||||||
COLOR4D color = aLine->GetLineColor();
|
COLOR4D color = getRenderColor( aLine, aLine->GetLayer(), false );
|
||||||
|
|
||||||
if( aLine->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
|
|
||||||
color = getOverlayColor( aLine, color, false );
|
|
||||||
|
|
||||||
int width = aLine->GetPenSize();
|
int width = aLine->GetPenSize();
|
||||||
|
|
||||||
|
@ -1020,28 +994,20 @@ void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
|
void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
|
||||||
{
|
{
|
||||||
COLOR4D color;
|
SCH_CONNECTION* conn = aText->Connection( *g_CurrentSheet );
|
||||||
|
COLOR4D color;
|
||||||
|
|
||||||
switch( aText->Type() )
|
switch( aText->Type() )
|
||||||
{
|
{
|
||||||
case SCH_SHEET_PIN_T: color = m_schSettings.GetLayerColor( LAYER_SHEETLABEL ); break;
|
case SCH_SHEET_PIN_T: color = getRenderColor( aText, LAYER_SHEETLABEL, false ); break;
|
||||||
case SCH_HIER_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_HIERLABEL ); break;
|
case SCH_HIER_LABEL_T: color = getRenderColor( aText, LAYER_HIERLABEL, false ); break;
|
||||||
case SCH_GLOBAL_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_GLOBLABEL ); break;
|
case SCH_GLOBAL_LABEL_T: color = getRenderColor( aText, LAYER_GLOBLABEL, false ); break;
|
||||||
case SCH_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_LOCLABEL ); break;
|
case SCH_LABEL_T: color = getRenderColor( aText, LAYER_LOCLABEL, false ); break;
|
||||||
default: color = m_schSettings.GetLayerColor( LAYER_NOTES ); break;
|
default: color = getRenderColor( aText, LAYER_NOTES, false ); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto conn = aText->Connection( *g_CurrentSheet );
|
if( conn && conn->IsBus() )
|
||||||
|
color = getRenderColor( aText, LAYER_BUS, false );
|
||||||
if( conn && conn->IsBus() &&
|
|
||||||
( aText->Type() == SCH_SHEET_PIN_T ||
|
|
||||||
aText->Type() == SCH_HIER_LABEL_T ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BUS );
|
|
||||||
|
|
||||||
if( aText->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
|
|
||||||
color = getOverlayColor( aText, color, false );
|
|
||||||
|
|
||||||
if( !aText->IsVisible() )
|
if( !aText->IsVisible() )
|
||||||
{
|
{
|
||||||
|
@ -1071,7 +1037,7 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void orientComponent( LIB_PART *part, int orientation )
|
static void orientPart( LIB_PART* part, int orientation )
|
||||||
{
|
{
|
||||||
struct ORIENT
|
struct ORIENT
|
||||||
{
|
{
|
||||||
|
@ -1123,44 +1089,47 @@ static void orientComponent( LIB_PART *part, int orientation )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_COMPONENT *aComp, int aLayer )
|
void SCH_PAINTER::draw( SCH_COMPONENT *aComp, int aLayer )
|
||||||
{
|
{
|
||||||
PART_SPTR partSptr = aComp->GetPartRef().lock();
|
PART_SPTR originalPartSptr = aComp->GetPartRef().lock();
|
||||||
|
|
||||||
// Use dummy part if the actual couldn't be found (or couldn't be locked).
|
// Use dummy part if the actual couldn't be found (or couldn't be locked).
|
||||||
LIB_PART* part = partSptr ? partSptr.get() : dummy();
|
LIB_PART* originalPart = originalPartSptr ? originalPartSptr.get() : dummy();
|
||||||
|
LIB_PINS originalPins;
|
||||||
|
originalPart->GetPins( originalPins, aComp->GetUnit(), aComp->GetConvert() );
|
||||||
|
|
||||||
// Copy the source it so we can re-orient and translate it.
|
// Copy the source so we can re-orient and translate it.
|
||||||
std::unique_ptr<LIB_PART> temp( new LIB_PART( *part ) );
|
LIB_PART tempPart( *originalPart );
|
||||||
|
LIB_PINS tempPins;
|
||||||
|
tempPart.GetPins( tempPins, aComp->GetUnit(), aComp->GetConvert() );
|
||||||
|
|
||||||
// Update the pinMap to be indexed by the temp part's pins
|
tempPart.SetFlags( aComp->GetFlags() );
|
||||||
LIB_PIN* libPin = part->GetNextPin();
|
|
||||||
LIB_PIN* tempPin = temp->GetNextPin();
|
|
||||||
SCH_PINS& pinMap = aComp->GetPinMap();
|
|
||||||
SCH_PINS tempPinMap;
|
|
||||||
|
|
||||||
while( libPin && tempPin )
|
orientPart( &tempPart, aComp->GetOrientation());
|
||||||
|
|
||||||
|
for( auto& tempItem : tempPart.GetDrawItems() )
|
||||||
|
tempItem.Move( tempItem.GetPosition() + (wxPoint) mapCoords( aComp->GetPosition() ) );
|
||||||
|
|
||||||
|
// Copy pin info from the component
|
||||||
|
SCH_PINS pinMap = aComp->GetPinMap();
|
||||||
|
|
||||||
|
for( int i = 0; i < originalPins.size() && i < tempPins.size(); ++i )
|
||||||
{
|
{
|
||||||
if( pinMap.count( libPin ) )
|
LIB_PIN* originalPin = originalPins[ i ];
|
||||||
tempPinMap.emplace( std::make_pair( tempPin, SCH_PIN( pinMap.at( libPin ) ) ) );
|
LIB_PIN* tempPin = tempPins[ i ];
|
||||||
|
|
||||||
libPin = part->GetNextPin( libPin );
|
if( pinMap.count( originalPin ) )
|
||||||
tempPin = temp->GetNextPin( tempPin );
|
{
|
||||||
|
const SCH_PIN& schPin = pinMap.at( originalPin );
|
||||||
|
|
||||||
|
tempPin->ClearFlags();
|
||||||
|
tempPin->SetFlags( schPin.GetFlags() ); // IS_MOVED, SELECTED, HIGHLIGHTED
|
||||||
|
tempPin->SetStatus( schPin.GetStatus() ); // BRIGHTENED
|
||||||
|
|
||||||
|
if( schPin.IsDangling() )
|
||||||
|
tempPin->SetFlags( IS_DANGLING );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( aComp->IsMoving() )
|
draw( &tempPart, aLayer, false, aComp->GetUnit(), aComp->GetConvert() );
|
||||||
temp->SetFlags( IS_MOVED );
|
|
||||||
|
|
||||||
if( aComp->IsHighlighted() )
|
|
||||||
temp->SetFlags( HIGHLIGHTED );
|
|
||||||
|
|
||||||
orientComponent( temp.get(), aComp->GetOrientation() );
|
|
||||||
|
|
||||||
for( auto& item : temp->GetDrawItems() )
|
|
||||||
{
|
|
||||||
auto rp = aComp->GetPosition();
|
|
||||||
auto ip = item.GetPosition();
|
|
||||||
item.Move( wxPoint( rp.x + ip.x, ip.y - rp.y ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
draw( temp.get(), aLayer, false, aComp->GetUnit(), aComp->GetConvert(), &tempPinMap );
|
|
||||||
|
|
||||||
// The fields are SCH_COMPONENT-specific and so don't need to be copied/
|
// The fields are SCH_COMPONENT-specific and so don't need to be copied/
|
||||||
// oriented/translated.
|
// oriented/translated.
|
||||||
|
@ -1182,13 +1151,11 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
|
||||||
|
|
||||||
switch( aField->GetId() )
|
switch( aField->GetId() )
|
||||||
{
|
{
|
||||||
case REFERENCE: color = m_schSettings.GetLayerColor( LAYER_REFERENCEPART ); break;
|
case REFERENCE: color = getRenderColor( aField, LAYER_REFERENCEPART, false ); break;
|
||||||
case VALUE: color = m_schSettings.GetLayerColor( LAYER_VALUEPART ); break;
|
case VALUE: color = getRenderColor( aField, LAYER_VALUEPART, false ); break;
|
||||||
default: color = m_schSettings.GetLayerColor( LAYER_FIELDS ); break;
|
default: color = getRenderColor( aField, LAYER_FIELDS, false ); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
color = getOverlayColor( aField, color, false );
|
|
||||||
|
|
||||||
if( !aField->IsVisible() )
|
if( !aField->IsVisible() )
|
||||||
{
|
{
|
||||||
if( m_schSettings.m_ShowHiddenText )
|
if( m_schSettings.m_ShowHiddenText )
|
||||||
|
@ -1250,15 +1217,10 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
|
void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
|
||||||
{
|
{
|
||||||
auto color = m_schSettings.GetLayerColor( LAYER_GLOBLABEL );
|
auto color = getRenderColor( aLabel, LAYER_GLOBLABEL, false );
|
||||||
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
|
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
|
||||||
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
|
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
|
||||||
|
|
||||||
if( aLabel->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
|
|
||||||
color = getOverlayColor( aLabel, color, false );
|
|
||||||
|
|
||||||
std::vector<wxPoint> pts;
|
std::vector<wxPoint> pts;
|
||||||
std::deque<VECTOR2D> pts2;
|
std::deque<VECTOR2D> pts2;
|
||||||
|
|
||||||
|
@ -1280,18 +1242,14 @@ void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_HIERLABEL *aLabel, int aLayer )
|
void SCH_PAINTER::draw( SCH_HIERLABEL *aLabel, int aLayer )
|
||||||
{
|
{
|
||||||
auto color = m_schSettings.GetLayerColor( LAYER_SHEETLABEL );
|
auto color = getRenderColor( aLabel, LAYER_SHEETLABEL, false );
|
||||||
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
|
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
|
||||||
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
|
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
|
||||||
|
|
||||||
auto conn = aLabel->Connection( *g_CurrentSheet );
|
auto conn = aLabel->Connection( *g_CurrentSheet );
|
||||||
|
|
||||||
if( conn && conn->IsBus() )
|
if( conn && conn->IsBus() )
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BUS );
|
color = getRenderColor( aLabel, LAYER_BUS, false );
|
||||||
if( aLabel->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
|
|
||||||
color = getOverlayColor( aLabel, color, false );
|
|
||||||
|
|
||||||
std::vector<wxPoint> pts;
|
std::vector<wxPoint> pts;
|
||||||
std::deque<VECTOR2D> pts2;
|
std::deque<VECTOR2D> pts2;
|
||||||
|
@ -1411,7 +1369,9 @@ void SCH_PAINTER::draw( SCH_NO_CONNECT *aNC, int aLayer )
|
||||||
int delta = aNC->GetSize() / 2;
|
int delta = aNC->GetSize() / 2;
|
||||||
int width = GetDefaultLineThickness();
|
int width = GetDefaultLineThickness();
|
||||||
|
|
||||||
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_NOCONNECT ) );
|
COLOR4D color = getRenderColor( aNC, LAYER_NOCONNECT, false );
|
||||||
|
|
||||||
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetLineWidth( width );
|
m_gal->SetLineWidth( width );
|
||||||
|
@ -1425,14 +1385,9 @@ void SCH_PAINTER::draw( SCH_NO_CONNECT *aNC, int aLayer )
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_BUS_ENTRY_BASE *aEntry, int aLayer )
|
void SCH_PAINTER::draw( SCH_BUS_ENTRY_BASE *aEntry, int aLayer )
|
||||||
{
|
{
|
||||||
COLOR4D color = aEntry->Type() == SCH_BUS_BUS_ENTRY_T ?
|
COLOR4D color = aEntry->Type() == SCH_BUS_BUS_ENTRY_T
|
||||||
m_schSettings.GetLayerColor( LAYER_BUS )
|
? getRenderColor( aEntry, LAYER_BUS, false )
|
||||||
: m_schSettings.GetLayerColor( LAYER_WIRE );
|
: getRenderColor( aEntry, LAYER_WIRE, false );
|
||||||
|
|
||||||
if( aEntry->GetState( BRIGHTENED ) )
|
|
||||||
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
|
|
||||||
|
|
||||||
color = getOverlayColor( aEntry, color, false );
|
|
||||||
|
|
||||||
m_gal->SetStrokeColor( color );
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
|
|
|
@ -135,11 +135,10 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void draw( LIB_RECTANGLE* aRect, int aLayer );
|
void draw( LIB_RECTANGLE* aRect, int aLayer );
|
||||||
void draw( LIB_PIN* aPin, int aLayer, SCH_PIN* aSchPin = nullptr, bool isParentMoving = false );
|
void draw( LIB_PIN* aPin, int aLayer );
|
||||||
void draw( LIB_CIRCLE* aCircle, int aLayer );
|
void draw( LIB_CIRCLE* aCircle, int aLayer );
|
||||||
void draw( LIB_ITEM *, int aLayer );
|
void draw( LIB_ITEM *, int aLayer );
|
||||||
void draw( LIB_PART* aPart, int, bool aDrawFields = true, int aUnit = 0, int aConvert = 0,
|
void draw( LIB_PART* aPart, int, bool aDrawFields = true, int aUnit = 0, int aConvert = 0 );
|
||||||
SCH_PINS* aPinMap = nullptr );
|
|
||||||
void draw( LIB_ALIAS* aAlias, int aLayer );
|
void draw( LIB_ALIAS* aAlias, int aLayer );
|
||||||
void draw( LIB_ARC* aArc, int aLayer );
|
void draw( LIB_ARC* aArc, int aLayer );
|
||||||
void draw( LIB_POLYLINE* aLine, int aLayer );
|
void draw( LIB_POLYLINE* aLine, int aLayer );
|
||||||
|
@ -150,7 +149,6 @@ private:
|
||||||
void draw( SCH_JUNCTION* aJct, int aLayer );
|
void draw( SCH_JUNCTION* aJct, int aLayer );
|
||||||
void draw( SCH_FIELD* aField, int aLayer );
|
void draw( SCH_FIELD* aField, int aLayer );
|
||||||
void draw( SCH_TEXT* aText, int aLayer );
|
void draw( SCH_TEXT* aText, int aLayer );
|
||||||
void draw( SCH_LABEL* aLabel, int aLayer );
|
|
||||||
void draw( SCH_HIERLABEL* aLabel, int aLayer );
|
void draw( SCH_HIERLABEL* aLabel, int aLayer );
|
||||||
void draw( SCH_GLOBALLABEL* aLabel, int aLayer );
|
void draw( SCH_GLOBALLABEL* aLabel, int aLayer );
|
||||||
void draw( SCH_SHEET* aSheet, int aLayer );
|
void draw( SCH_SHEET* aSheet, int aLayer );
|
||||||
|
@ -162,6 +160,8 @@ private:
|
||||||
|
|
||||||
bool isUnitAndConversionShown( const LIB_ITEM* aItem );
|
bool isUnitAndConversionShown( const LIB_ITEM* aItem );
|
||||||
|
|
||||||
|
COLOR4D getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aOnBackgroundLayer );
|
||||||
|
|
||||||
bool setColors( const LIB_ITEM* aItem, int aLayer );
|
bool setColors( const LIB_ITEM* aItem, int aLayer );
|
||||||
|
|
||||||
void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c );
|
void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c );
|
||||||
|
|
|
@ -141,6 +141,8 @@ typedef const INSPECTOR_FUNC& INSPECTOR; /// std::function passed to nested u
|
||||||
///< (applies to segments only)
|
///< (applies to segments only)
|
||||||
#define UR_TRANSIENT (1 << 28) ///< indicates the item is owned by the undo/redo stack
|
#define UR_TRANSIENT (1 << 28) ///< indicates the item is owned by the undo/redo stack
|
||||||
|
|
||||||
|
#define IS_DANGLING (1 << 29) ///< indicates a pin is dangling
|
||||||
|
|
||||||
|
|
||||||
#define EDA_ITEM_ALL_FLAGS -1
|
#define EDA_ITEM_ALL_FLAGS -1
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue