legacy plugin fully support text horiz/vert justification, eagle plugin text fixes
This commit is contained in:
parent
abe5c08e20
commit
6bb2fce7d9
|
@ -27,9 +27,10 @@
|
|||
* @brief Definition of base KiCad text object.
|
||||
*/
|
||||
|
||||
#ifndef _EDA_TEXT_H_
|
||||
#define _EDA_TEXT_H_
|
||||
#ifndef EDA_TEXT_H_
|
||||
#define EDA_TEXT_H_
|
||||
|
||||
#include <macros.h> // NORMALIZE_ANGLE_POS( angle );
|
||||
#include <common.h> // wxStringSplit
|
||||
#include <gr_basic.h> // EDA_DRAW_MODE_T
|
||||
#include <base_struct.h> // EDA_RECT
|
||||
|
@ -50,6 +51,7 @@ enum EDA_TEXT_VJUSTIFY_T {
|
|||
GR_TEXT_VJUSTIFY_BOTTOM = 1
|
||||
};
|
||||
|
||||
|
||||
/* Options to show solid segments (segments, texts...) */
|
||||
enum EDA_DRAW_MODE_T {
|
||||
LINE = 0, // segments are drawn as lines
|
||||
|
@ -107,7 +109,11 @@ public:
|
|||
*/
|
||||
int GetThickness() const { return m_Thickness; };
|
||||
|
||||
void SetOrientation( double aOrientation ) { m_Orient = aOrientation; }
|
||||
void SetOrientation( double aOrientation )
|
||||
{
|
||||
NORMALIZE_ANGLE_POS( aOrientation );
|
||||
m_Orient = aOrientation;
|
||||
}
|
||||
double GetOrientation() const { return m_Orient; }
|
||||
|
||||
void SetItalic( bool isItalic ) { m_Italic = isItalic; }
|
||||
|
@ -262,6 +268,7 @@ public:
|
|||
|
||||
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const { return m_HJustify; };
|
||||
EDA_TEXT_VJUSTIFY_T GetVertJustify() const { return m_VJustify; };
|
||||
|
||||
void SetHorizJustify( EDA_TEXT_HJUSTIFY_T aType ) { m_HJustify = aType; };
|
||||
void SetVertJustify( EDA_TEXT_VJUSTIFY_T aType ) { m_VJustify = aType; };
|
||||
|
||||
|
@ -280,4 +287,4 @@ public:
|
|||
};
|
||||
|
||||
|
||||
#endif // _EDA_TEXT_H_
|
||||
#endif // EDA_TEXT_H_
|
||||
|
|
|
@ -129,7 +129,6 @@ void TEXTE_MODULE::SetDrawCoord()
|
|||
return;
|
||||
|
||||
double angle = module->GetOrientation();
|
||||
NORMALIZE_ANGLE_POS( angle );
|
||||
|
||||
RotatePoint( &m_Pos.x, &m_Pos.y, angle );
|
||||
m_Pos += module->GetPosition();
|
||||
|
@ -151,7 +150,6 @@ void TEXTE_MODULE::SetLocalCoord()
|
|||
m_Pos0 = m_Pos - module->m_Pos;
|
||||
|
||||
int angle = module->m_Orient;
|
||||
NORMALIZE_ANGLE_POS( angle );
|
||||
|
||||
RotatePoint( &m_Pos0.x, &m_Pos0.y, -angle );
|
||||
}
|
||||
|
|
|
@ -1688,10 +1688,7 @@ void EAGLE_PLUGIN::orientModuleText( MODULE* m, const EELEMENT& e,
|
|||
if( a.x && a.y ) // boost::optional
|
||||
{
|
||||
wxPoint pos( kicad_x( *a.x ), kicad_y( *a.y ) );
|
||||
wxPoint pos0 = pos - m->GetPosition();
|
||||
|
||||
txt->SetPosition( pos );
|
||||
txt->SetPos0( pos0 );
|
||||
}
|
||||
|
||||
// Even though size and ratio are both optional, I am not seeing
|
||||
|
@ -1786,6 +1783,8 @@ void EAGLE_PLUGIN::orientModuleText( MODULE* m, const EELEMENT& e,
|
|||
txt->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
}
|
||||
}
|
||||
|
||||
txt->SetLocalCoord();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -150,6 +150,52 @@ static inline unsigned ReadLine( LINE_READER* rdr, const char* caller )
|
|||
|
||||
using namespace std; // auto_ptr
|
||||
|
||||
|
||||
static inline const char* ShowVertJustify( EDA_TEXT_VJUSTIFY_T vertical )
|
||||
{
|
||||
const char* rs;
|
||||
switch( vertical )
|
||||
{
|
||||
case GR_TEXT_VJUSTIFY_TOP: rs = "T"; break;
|
||||
case GR_TEXT_VJUSTIFY_CENTER: rs = "C"; break;
|
||||
case GR_TEXT_VJUSTIFY_BOTTOM: rs = "B"; break;
|
||||
default: rs = "?"; break;
|
||||
}
|
||||
return rs;
|
||||
}
|
||||
|
||||
static inline const char* ShowHorizJustify( EDA_TEXT_HJUSTIFY_T horizontal )
|
||||
{
|
||||
const char* rs;
|
||||
switch( horizontal )
|
||||
{
|
||||
case GR_TEXT_HJUSTIFY_LEFT: rs = "L"; break;
|
||||
case GR_TEXT_HJUSTIFY_CENTER: rs = "C"; break;
|
||||
case GR_TEXT_HJUSTIFY_RIGHT: rs = "R"; break;
|
||||
default: rs = "?"; break;
|
||||
}
|
||||
return rs;
|
||||
}
|
||||
|
||||
static inline EDA_TEXT_HJUSTIFY_T HorizJustify( const char* horizontal )
|
||||
{
|
||||
if( !strcmp( "L", horizontal ) )
|
||||
return GR_TEXT_HJUSTIFY_LEFT;
|
||||
if( !strcmp( "R", horizontal ) )
|
||||
return GR_TEXT_HJUSTIFY_RIGHT;
|
||||
return GR_TEXT_HJUSTIFY_CENTER;
|
||||
}
|
||||
|
||||
static inline EDA_TEXT_VJUSTIFY_T VertJustify( const char* vertical )
|
||||
{
|
||||
if( !strcmp( "T", vertical ) )
|
||||
return GR_TEXT_VJUSTIFY_TOP;
|
||||
if( !strcmp( "B", vertical ) )
|
||||
return GR_TEXT_VJUSTIFY_BOTTOM;
|
||||
return GR_TEXT_VJUSTIFY_CENTER;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function intParse
|
||||
* parses an ASCII integer string with possible leading whitespace into
|
||||
|
@ -1457,9 +1503,11 @@ void LEGACY_PLUGIN::loadMODULE_EDGE( MODULE* aModule )
|
|||
void LEGACY_PLUGIN::loadMODULE_TEXT( TEXTE_MODULE* aText )
|
||||
{
|
||||
const char* data;
|
||||
char* line = m_reader->Line(); // current (old) line
|
||||
const char* txt_end;
|
||||
const char* line = m_reader->Line(); // current (old) line
|
||||
|
||||
// sscanf( line + 1, "%d %d %d %d %d %d %d %s %s %d %s", &type, &m_Pos0.x, &m_Pos0.y, &m_Size.y, &m_Size.x,
|
||||
// sscanf( line + 1, "%d %d %d %d %d %d %d %s %s %d %s",
|
||||
// &type, &m_Pos0.x, &m_Pos0.y, &m_Size.y, &m_Size.x,
|
||||
// &m_Orient, &m_Thickness, BufCar1, BufCar2, &layer, BufCar3 ) >= 10 )
|
||||
|
||||
// e.g. "T1 6940 -16220 350 300 900 60 M I 20 N "CFCARD"\r\n"
|
||||
|
@ -1481,7 +1529,15 @@ void LEGACY_PLUGIN::loadMODULE_TEXT( TEXTE_MODULE* aText )
|
|||
|
||||
// convert the "quoted, escaped, UTF8, text" to a wxString, find it by skipping
|
||||
// as far forward as needed until the first double quote.
|
||||
ReadDelimitedText( &m_field, data );
|
||||
txt_end = data + ReadDelimitedText( &m_field, data );
|
||||
|
||||
#if 1 && defined(DEBUG)
|
||||
if( m_field == wxT( "ARM_C8" ) )
|
||||
{
|
||||
int breakhere = 1;
|
||||
(void) breakhere;
|
||||
}
|
||||
#endif
|
||||
|
||||
aText->SetText( m_field );
|
||||
|
||||
|
@ -1493,29 +1549,17 @@ void LEGACY_PLUGIN::loadMODULE_TEXT( TEXTE_MODULE* aText )
|
|||
int layer = tmp ? intParse( tmp ) : SILKSCREEN_N_FRONT;
|
||||
char* italic = strtok( NULL, delims );
|
||||
|
||||
char* hjust = strtok( (char*) txt_end, delims );
|
||||
char* vjust = strtok( NULL, delims );
|
||||
|
||||
if( type != TEXT_is_REFERENCE && type != TEXT_is_VALUE )
|
||||
type = TEXT_is_DIVERS;
|
||||
|
||||
aText->SetType( type );
|
||||
|
||||
aText->SetPos0( wxPoint( pos0_x, pos0_y ) );
|
||||
|
||||
/* @todo move to accessor? cannot reach these defines from here
|
||||
pcbnew.h off limit because of globals in there
|
||||
// Test for a reasonable size:
|
||||
if( size0_x < TEXTS_MIN_SIZE )
|
||||
size0_x = TEXTS_MIN_SIZE;
|
||||
if( size0_y < TEXTS_MIN_SIZE )
|
||||
size0_y = TEXTS_MIN_SIZE;
|
||||
*/
|
||||
|
||||
aText->SetSize( wxSize( size0_x, size0_y ) );
|
||||
|
||||
// Due to the Pcbnew history, .m_Orient is saved in screen value
|
||||
// but it is handled as relative to its parent footprint
|
||||
|
||||
// @todo is there now an opportunity for a better way as we move to degrees and
|
||||
// a new file format?
|
||||
orient -= ( (MODULE*) aText->GetParent() )->GetOrientation();
|
||||
|
||||
aText->SetOrientation( orient );
|
||||
|
@ -1537,11 +1581,17 @@ void LEGACY_PLUGIN::loadMODULE_TEXT( TEXTE_MODULE* aText )
|
|||
|
||||
aText->SetItalic( italic && *italic == 'I' );
|
||||
|
||||
if( hjust )
|
||||
aText->SetHorizJustify( HorizJustify( hjust ) );
|
||||
|
||||
if( vjust )
|
||||
aText->SetVertJustify( VertJustify( vjust ) );
|
||||
|
||||
if( layer < 0 )
|
||||
layer = 0;
|
||||
if( layer > LAST_NO_COPPER_LAYER )
|
||||
else if( layer > LAST_NO_COPPER_LAYER )
|
||||
layer = LAST_NO_COPPER_LAYER;
|
||||
if( layer == LAYER_N_BACK )
|
||||
else if( layer == LAYER_N_BACK )
|
||||
layer = SILKSCREEN_N_BACK;
|
||||
else if( layer == LAYER_N_FRONT )
|
||||
layer = SILKSCREEN_N_FRONT;
|
||||
|
@ -1851,29 +1901,22 @@ void LEGACY_PLUGIN::loadPCB_TEXT()
|
|||
time_t timestamp = hexParse( data, &data );
|
||||
char* style = strtok( (char*) data, delims );
|
||||
char* hJustify = strtok( NULL, delims );
|
||||
char* vJustify = strtok( NULL, delims );
|
||||
|
||||
pcbtxt->SetMirrored( !notMirrored );
|
||||
pcbtxt->SetTimeStamp( timestamp );
|
||||
pcbtxt->SetItalic( !strcmp( style, "Italic" ) );
|
||||
|
||||
EDA_TEXT_HJUSTIFY_T hj;
|
||||
|
||||
if( hJustify )
|
||||
{
|
||||
switch( *hJustify )
|
||||
{
|
||||
default:
|
||||
case 'C': hj = GR_TEXT_HJUSTIFY_CENTER; break;
|
||||
case 'L': hj = GR_TEXT_HJUSTIFY_LEFT; break;
|
||||
case 'R': hj = GR_TEXT_HJUSTIFY_RIGHT; break;
|
||||
}
|
||||
}
|
||||
pcbtxt->SetHorizJustify( HorizJustify( hJustify ) );
|
||||
else
|
||||
{
|
||||
hj = GR_TEXT_HJUSTIFY_CENTER;
|
||||
// boom, somebody changed a constructor, I was relying on this:
|
||||
wxASSERT( pcbtxt->GetHorizJustify() == GR_TEXT_HJUSTIFY_CENTER );
|
||||
}
|
||||
|
||||
pcbtxt->SetHorizJustify( hj );
|
||||
if( vJustify )
|
||||
pcbtxt->SetVertJustify( VertJustify( vJustify ) );
|
||||
|
||||
if( layer < FIRST_COPPER_LAYER )
|
||||
layer = FIRST_COPPER_LAYER;
|
||||
|
@ -3133,14 +3176,13 @@ void LEGACY_PLUGIN::saveMODULE_TEXT( const TEXTE_MODULE* me ) const
|
|||
|
||||
wxString txt = me->GetText();
|
||||
|
||||
fprintf( m_fp, "T%d %s %s %s %s %c %c %d %c %s\n",
|
||||
fprintf( m_fp, "T%d %s %s %s %s %c %c %d %c %s",
|
||||
me->GetType(),
|
||||
fmtBIUPoint( me->GetPos0() ).c_str(), // m_Pos0.x, m_Pos0.y,
|
||||
#if 0
|
||||
fmtBIUSize( me->GetSize() ).c_str(), // m_Size.y, m_Size.x,
|
||||
#else
|
||||
fmtBIUPair( me->GetSize().y, me->GetSize().x ).c_str(), // m_Size.y, m_Size.x,
|
||||
#endif
|
||||
|
||||
// legacy has goofed reversed order: ( y, x )
|
||||
fmtBIUPair( me->GetSize().y, me->GetSize().x ).c_str(),
|
||||
|
||||
fmtDEG( orient ).c_str(),
|
||||
fmtBIU( me->GetThickness() ).c_str(), // m_Thickness,
|
||||
me->IsMirrored() ? 'M' : 'N',
|
||||
|
@ -3150,6 +3192,17 @@ void LEGACY_PLUGIN::saveMODULE_TEXT( const TEXTE_MODULE* me ) const
|
|||
EscapedUTF8( txt ).c_str()
|
||||
);
|
||||
|
||||
if( me->GetHorizJustify() != GR_TEXT_HJUSTIFY_CENTER ||
|
||||
me->GetVertJustify() != GR_TEXT_VJUSTIFY_CENTER )
|
||||
{
|
||||
fprintf( m_fp, " %s %s\n",
|
||||
ShowHorizJustify( me->GetHorizJustify() ),
|
||||
ShowVertJustify( me->GetVertJustify() )
|
||||
);
|
||||
}
|
||||
else
|
||||
fprintf( m_fp, "\n" );
|
||||
|
||||
CHECK_WRITE_ERROR();
|
||||
}
|
||||
|
||||
|
@ -3751,22 +3804,22 @@ void LEGACY_PLUGIN::savePCB_TEXT( const TEXTE_PCB* me ) const
|
|||
fmtBIU( me->GetThickness() ).c_str(),
|
||||
fmtDEG( me->GetOrientation() ).c_str() );
|
||||
|
||||
char hJustify;
|
||||
|
||||
switch( me->GetHorizJustify() )
|
||||
{
|
||||
default:
|
||||
case GR_TEXT_HJUSTIFY_CENTER: hJustify = 'C'; break;
|
||||
case GR_TEXT_HJUSTIFY_LEFT: hJustify = 'L'; break;
|
||||
case GR_TEXT_HJUSTIFY_RIGHT: hJustify = 'R'; break;
|
||||
}
|
||||
|
||||
fprintf( m_fp, "De %d %d %lX %s %c\n",
|
||||
fprintf( m_fp, "De %d %d %lX %s",
|
||||
me->GetLayer(),
|
||||
!me->IsMirrored(),
|
||||
me->GetTimeStamp(),
|
||||
me->IsItalic() ? "Italic" : "Normal",
|
||||
hJustify );
|
||||
me->IsItalic() ? "Italic" : "Normal" );
|
||||
|
||||
if( me->GetHorizJustify() != GR_TEXT_HJUSTIFY_CENTER ||
|
||||
me->GetVertJustify() != GR_TEXT_VJUSTIFY_CENTER )
|
||||
{
|
||||
fprintf( m_fp, " %s %s\n",
|
||||
ShowHorizJustify( me->GetHorizJustify() ),
|
||||
ShowVertJustify( me->GetVertJustify() )
|
||||
);
|
||||
}
|
||||
else
|
||||
fprintf( m_fp, "\n" );
|
||||
|
||||
fprintf( m_fp, "$EndTEXTPCB\n" );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue