CADSTAR PCB: Don't create zero sized text items
Partially addresses https://gitlab.com/kicad/code/kicad/-/issues/13693
This commit is contained in:
parent
963e82ee7f
commit
44cfb1ea43
|
@ -2545,20 +2545,7 @@ void CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(
|
||||||
|
|
||||||
txt->SetMirrored( aCadstarText.Mirror );
|
txt->SetMirrored( aCadstarText.Mirror );
|
||||||
|
|
||||||
TEXTCODE tc = getTextCode( aCadstarText.TextCodeID );
|
applyTextCode( txt, aCadstarText.TextCodeID );
|
||||||
|
|
||||||
txt->SetTextThickness( getKiCadLength( tc.LineWidth ) );
|
|
||||||
|
|
||||||
wxSize unscaledTextSize;
|
|
||||||
unscaledTextSize.x = getKiCadLength( tc.Width );
|
|
||||||
|
|
||||||
// The width is zero for all non-cadstar fonts. Using a width equal to the height seems
|
|
||||||
// to work well for most fonts.
|
|
||||||
if( unscaledTextSize.x == 0 )
|
|
||||||
unscaledTextSize.x = getKiCadLength( tc.Height );
|
|
||||||
|
|
||||||
unscaledTextSize.y = KiROUND( TXT_HEIGHT_RATIO * (double) getKiCadLength( tc.Height ) );
|
|
||||||
txt->SetTextSize( unscaledTextSize );
|
|
||||||
|
|
||||||
switch( aCadstarText.Alignment )
|
switch( aCadstarText.Alignment )
|
||||||
{
|
{
|
||||||
|
@ -2620,12 +2607,15 @@ void CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(
|
||||||
//scale it after flipping:
|
//scale it after flipping:
|
||||||
if( aScalingFactor != 1.0 )
|
if( aScalingFactor != 1.0 )
|
||||||
{
|
{
|
||||||
wxSize scaledTextSize;
|
VECTOR2I unscaledTextSize = txt->GetTextSize();
|
||||||
|
int unscaledThickness = txt->GetTextThickness();
|
||||||
|
|
||||||
|
VECTOR2I scaledTextSize;
|
||||||
scaledTextSize.x = KiROUND( (double) unscaledTextSize.x * aScalingFactor );
|
scaledTextSize.x = KiROUND( (double) unscaledTextSize.x * aScalingFactor );
|
||||||
scaledTextSize.y = KiROUND( (double) unscaledTextSize.y * aScalingFactor );
|
scaledTextSize.y = KiROUND( (double) unscaledTextSize.y * aScalingFactor );
|
||||||
|
|
||||||
txt->SetTextSize( scaledTextSize );
|
txt->SetTextSize( scaledTextSize );
|
||||||
txt->SetTextThickness(
|
txt->SetTextThickness( KiROUND( (double) unscaledThickness * aScalingFactor ) );
|
||||||
KiROUND( (double) getKiCadLength( tc.LineWidth ) * aScalingFactor ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
txt->Move( aMoveVector );
|
txt->Move( aMoveVector );
|
||||||
|
@ -3278,20 +3268,8 @@ void CADSTAR_PCB_ARCHIVE_LOADER::addAttribute( const ATTRIBUTE_LOCATION& aCadsta
|
||||||
if( aCadstarAttrLoc.Mirror ) // If mirroring, invert angle to match CADSTAR
|
if( aCadstarAttrLoc.Mirror ) // If mirroring, invert angle to match CADSTAR
|
||||||
txt->SetTextAngle( -txt->GetTextAngle() );
|
txt->SetTextAngle( -txt->GetTextAngle() );
|
||||||
|
|
||||||
TEXTCODE tc = getTextCode( aCadstarAttrLoc.TextCodeID );
|
applyTextCode( txt, aCadstarAttrLoc.TextCodeID );
|
||||||
|
|
||||||
txt->SetTextThickness( getKiCadLength( tc.LineWidth ) );
|
|
||||||
|
|
||||||
wxSize txtSize;
|
|
||||||
txtSize.x = getKiCadLength( tc.Width );
|
|
||||||
|
|
||||||
// The width is zero for all non-cadstar fonts. Using a width equal to the height seems
|
|
||||||
// to work well for most fonts.
|
|
||||||
if( txtSize.x == 0 )
|
|
||||||
txtSize.x = getKiCadLength( tc.Height );
|
|
||||||
|
|
||||||
txtSize.y = KiROUND( TXT_HEIGHT_RATIO * (double) getKiCadLength( tc.Height ) );
|
|
||||||
txt->SetTextSize( txtSize );
|
|
||||||
txt->SetKeepUpright( false ); //Keeping it upright seems to result in incorrect orientation
|
txt->SetKeepUpright( false ); //Keeping it upright seems to result in incorrect orientation
|
||||||
|
|
||||||
switch( aCadstarAttrLoc.Alignment )
|
switch( aCadstarAttrLoc.Alignment )
|
||||||
|
@ -3373,6 +3351,40 @@ void CADSTAR_PCB_ARCHIVE_LOADER::applyRouteOffset( VECTOR2I* aPointToOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CADSTAR_PCB_ARCHIVE_LOADER:: applyTextCode( EDA_TEXT* aKiCadText,
|
||||||
|
const TEXTCODE_ID& aCadstarTextCodeID )
|
||||||
|
{
|
||||||
|
TEXTCODE tc = getTextCode( aCadstarTextCodeID );
|
||||||
|
|
||||||
|
aKiCadText->SetTextThickness( getKiCadLength( tc.LineWidth ) );
|
||||||
|
|
||||||
|
VECTOR2I textSize;
|
||||||
|
textSize.x = getKiCadLength( tc.Width );
|
||||||
|
|
||||||
|
// The width is zero for all non-cadstar fonts. Using a width equal to the height seems
|
||||||
|
// to work well for most fonts.
|
||||||
|
if( textSize.x == 0 )
|
||||||
|
textSize.x = getKiCadLength( tc.Height );
|
||||||
|
|
||||||
|
textSize.y = KiROUND( TXT_HEIGHT_RATIO * (double) getKiCadLength( tc.Height ) );
|
||||||
|
|
||||||
|
if( textSize.x == 0 || textSize.y == 0 )
|
||||||
|
{
|
||||||
|
// Make zero sized text not visible
|
||||||
|
|
||||||
|
aKiCadText->SetTextSize(
|
||||||
|
VECTOR2I( EDA_UNIT_UTILS::Mils2IU( pcbIUScale, DEFAULT_SIZE_TEXT ),
|
||||||
|
EDA_UNIT_UTILS::Mils2IU( pcbIUScale, DEFAULT_SIZE_TEXT ) ) );
|
||||||
|
|
||||||
|
aKiCadText->SetVisible( false );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aKiCadText->SetTextSize( textSize );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int CADSTAR_PCB_ARCHIVE_LOADER::getLineThickness( const LINECODE_ID& aCadstarLineCodeID )
|
int CADSTAR_PCB_ARCHIVE_LOADER::getLineThickness( const LINECODE_ID& aCadstarLineCodeID )
|
||||||
{
|
{
|
||||||
wxCHECK( Assignments.Codedefs.LineCodes.find( aCadstarLineCodeID )
|
wxCHECK( Assignments.Codedefs.LineCodes.find( aCadstarLineCodeID )
|
||||||
|
@ -3614,9 +3626,6 @@ void CADSTAR_PCB_ARCHIVE_LOADER::applyDimensionSettings( const DIMENSION& aCads
|
||||||
PCB_DIMENSION_BASE* aKiCadDim )
|
PCB_DIMENSION_BASE* aKiCadDim )
|
||||||
{
|
{
|
||||||
UNITS dimensionUnits = aCadstarDim.LinearUnits;
|
UNITS dimensionUnits = aCadstarDim.LinearUnits;
|
||||||
TEXTCODE txtCode = getTextCode( aCadstarDim.Text.TextCodeID );
|
|
||||||
int correctedHeight = KiROUND( TXT_HEIGHT_RATIO * (double) getKiCadLength( txtCode.Height ) );
|
|
||||||
wxSize txtSize( getKiCadLength( txtCode.Width ), correctedHeight );
|
|
||||||
LINECODE linecode = Assignments.Codedefs.LineCodes.at( aCadstarDim.Line.LineCodeID );
|
LINECODE linecode = Assignments.Codedefs.LineCodes.at( aCadstarDim.Line.LineCodeID );
|
||||||
|
|
||||||
aKiCadDim->SetLayer( getKiCadLayer( aCadstarDim.LayerID ) );
|
aKiCadDim->SetLayer( getKiCadLayer( aCadstarDim.LayerID ) );
|
||||||
|
@ -3625,8 +3634,8 @@ void CADSTAR_PCB_ARCHIVE_LOADER::applyDimensionSettings( const DIMENSION& aCads
|
||||||
aKiCadDim->SetEnd( getKiCadPoint( aCadstarDim.ExtensionLineParams.End ) );
|
aKiCadDim->SetEnd( getKiCadPoint( aCadstarDim.ExtensionLineParams.End ) );
|
||||||
aKiCadDim->SetExtensionOffset( getKiCadLength( aCadstarDim.ExtensionLineParams.Offset ) );
|
aKiCadDim->SetExtensionOffset( getKiCadLength( aCadstarDim.ExtensionLineParams.Offset ) );
|
||||||
aKiCadDim->SetLineThickness( getKiCadLength( linecode.Width ) );
|
aKiCadDim->SetLineThickness( getKiCadLength( linecode.Width ) );
|
||||||
aKiCadDim->Text().SetTextThickness( getKiCadLength( txtCode.LineWidth ) );
|
|
||||||
aKiCadDim->Text().SetTextSize( txtSize );
|
applyTextCode( &aKiCadDim->Text(), aCadstarDim.Text.TextCodeID );
|
||||||
|
|
||||||
// Find prefix and suffix:
|
// Find prefix and suffix:
|
||||||
wxString prefix = wxEmptyString;
|
wxString prefix = wxEmptyString;
|
||||||
|
|
|
@ -400,6 +400,11 @@ private:
|
||||||
void applyRouteOffset( VECTOR2I* aPointToOffset, const VECTOR2I& aRefPoint,
|
void applyRouteOffset( VECTOR2I* aPointToOffset, const VECTOR2I& aRefPoint,
|
||||||
const long& aOffsetAmount );
|
const long& aOffsetAmount );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply cadstar textcode parameters to a KiCad text object
|
||||||
|
*/
|
||||||
|
void applyTextCode( EDA_TEXT* aKiCadText, const TEXTCODE_ID& aCadstarTextCodeID );
|
||||||
|
|
||||||
//Helper Functions for obtaining CADSTAR elements in the parsed structures
|
//Helper Functions for obtaining CADSTAR elements in the parsed structures
|
||||||
int getLineThickness( const LINECODE_ID& aCadstarLineCodeID );
|
int getLineThickness( const LINECODE_ID& aCadstarLineCodeID );
|
||||||
COPPERCODE getCopperCode( const COPPERCODE_ID& aCadstaCopperCodeID );
|
COPPERCODE getCopperCode( const COPPERCODE_ID& aCadstaCopperCodeID );
|
||||||
|
|
Loading…
Reference in New Issue