Pcbnew encapsulation and code cleaning.

* Encapsulate most of the MODULE class.
* Start encapsulating the DIMENSION class.
* Lay some groundwork for EDA_TEXT encapsulation.
* Move cleverly hidden MODULE functions into class_module.cpp.
* Use std::swap to exchange TEXTE_PCB values for undo/redo.
* Remove unused members from MODULE class.
* The usual coding policy and documentation fixes.
This commit is contained in:
Wayne Stambaugh 2013-03-13 14:53:58 -04:00
parent 8287775bac
commit 42d7bf6c8e
54 changed files with 872 additions and 817 deletions

View File

@ -634,7 +634,7 @@ void EDA_3D_CANVAS::Draw3D_DrawText( TEXTE_PCB* text )
if( text->m_MultilineAllowed ) if( text->m_MultilineAllowed )
{ {
wxPoint pos = text->m_Pos; wxPoint pos = text->m_Pos;
wxArrayString* list = wxStringSplit( text->m_Text, '\n' ); wxArrayString* list = wxStringSplit( text->GetText(), '\n' );
wxPoint offset; wxPoint offset;
offset.y = text->GetInterline(); offset.y = text->GetInterline();
@ -657,7 +657,7 @@ void EDA_3D_CANVAS::Draw3D_DrawText( TEXTE_PCB* text )
else else
{ {
DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_COLOR_T) color, DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_COLOR_T) color,
text->m_Text, text->GetOrientation(), size, text->GetText(), text->GetOrientation(), size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->GetThickness(), text->m_Italic, text->GetThickness(), text->m_Italic,
true, true,
@ -766,11 +766,13 @@ void EDGE_MODULE::Draw3D( EDA_3D_CANVAS* glcanvas )
corner.y = m_PolyPoints[ii].y; corner.y = m_PolyPoints[ii].y;
RotatePoint( &corner.x, &corner.y, module->GetOrientation() ); RotatePoint( &corner.x, &corner.y, module->GetOrientation() );
if( module ) if( module )
{ {
corner.x += module->m_Pos.x; corner.x += module->GetPosition().x;
corner.y += module->m_Pos.y; corner.y += module->GetPosition().y;
} }
polycorners.push_back( corner ); polycorners.push_back( corner );
} }

View File

@ -95,6 +95,23 @@ public:
EDA_TEXT( const EDA_TEXT& aText ); EDA_TEXT( const EDA_TEXT& aText );
virtual ~EDA_TEXT(); virtual ~EDA_TEXT();
wxString& Text() { return m_Text; }
wxString& Text() const { return *(const_cast<wxString*> (&m_Text)); }
void SetText( const wxString& aText ) { m_Text = aText; }
/**
* Function GetText
* returns the string associated with the text object.
* <p>
* This function is virtual to allow derived classes to override getting the
* string to provide a way for modifying the base string by adding a suffix or
* prefix to the base string.
* </p>
* @return a const wxString object containing the string of the item.
*/
virtual const wxString GetText() const { return m_Text; }
/** /**
* Function SetThickness * Function SetThickness
* sets text thickness. * sets text thickness.
@ -147,9 +164,15 @@ public:
*/ */
const wxSize GetSize() const { return m_Size; }; const wxSize GetSize() const { return m_Size; };
void SetWidth( int aWidth ) { m_Size.x = aWidth; }
int GetWidth() const { return m_Size.x; }
void SetHeight( int aHeight ) { m_Size.y = aHeight; }
int GetHeight() const { return m_Size.y; }
/// named differently than the ones using multiple inheritance and including this class /// named differently than the ones using multiple inheritance and including this class
void SetPos( const wxPoint& aPoint ) { m_Pos = aPoint; } void SetPosition( const wxPoint& aPoint ) { m_Pos = aPoint; }
const wxPoint GetPos() const { return m_Pos; } const wxPoint GetPosition() const { return m_Pos; }
int GetLength() const { return m_Text.Length(); }; int GetLength() const { return m_Text.Length(); };
@ -252,20 +275,6 @@ public:
*/ */
wxString GetTextStyleName(); wxString GetTextStyleName();
void SetText( const wxString& aText ) { m_Text = aText; }
/**
* Function GetText
* returns the string associated with the text object.
* <p>
* This function is virtual to allow derived classes to override getting the
* string to provide a way for modifying the base string by adding a suffix or
* prefix to the base string.
* </p>
* @return a const wxString object containing the string of the item.
*/
virtual const wxString GetText() const { return m_Text; }
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const { return m_HJustify; }; EDA_TEXT_HJUSTIFY_T GetHorizJustify() const { return m_HJustify; };
EDA_TEXT_VJUSTIFY_T GetVertJustify() const { return m_VJustify; }; EDA_TEXT_VJUSTIFY_T GetVertJustify() const { return m_VJustify; };

View File

@ -240,11 +240,11 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if( PlaceModulesHorsPcb && edgesExist ) if( PlaceModulesHorsPcb && edgesExist )
{ {
if( bbbox.Contains( Module->m_Pos ) ) if( bbbox.Contains( Module->GetPosition() ) )
continue; continue;
} }
surface += Module->m_Surface; surface += Module->GetArea();
} }
Xsize_allowed = (int) ( sqrt( surface ) * 4.0 / 3.0 ); Xsize_allowed = (int) ( sqrt( surface ) * 4.0 / 3.0 );
@ -261,7 +261,7 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if( PlaceModulesHorsPcb && edgesExist ) if( PlaceModulesHorsPcb && edgesExist )
{ {
if( bbbox.Contains( Module->m_Pos ) ) if( bbbox.Contains( Module->GetPosition() ) )
continue; continue;
} }
@ -276,17 +276,17 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
Ymax_size = 0; Ymax_size = 0;
} }
GetScreen()->SetCrossHairPosition( current + Module->m_Pos - GetScreen()->SetCrossHairPosition( current + Module->GetPosition() -
Module->m_BoundaryBox.GetPosition() ); Module->GetBoundingBox().GetPosition() );
Ymax_size = std::max( Ymax_size, Module->m_BoundaryBox.GetHeight() ); Ymax_size = std::max( Ymax_size, Module->GetBoundingBox().GetHeight() );
PlaceModule( Module, NULL, true ); PlaceModule( Module, NULL, true );
// Undo: add new Module to undo // Undo: add new Module to undo
newList.PushItem( picker ); newList.PushItem( picker );
current.x += Module->m_BoundaryBox.GetWidth() + pas_grille; current.x += Module->GetBoundingBox().GetWidth() + pas_grille;
} }
// Undo: commit // Undo: commit
@ -313,7 +313,7 @@ void PCB_EDIT_FRAME::LockModule( MODULE* aModule, bool aLocked )
for( ; aModule != NULL; aModule = aModule->Next() ) for( ; aModule != NULL; aModule = aModule->Next() )
{ {
if( WildCompareString( ModulesMaskSelection, aModule->m_Reference->m_Text ) ) if( WildCompareString( ModulesMaskSelection, aModule->GetReference() ) )
{ {
aModule->SetLocked( aLocked ); aModule->SetLocked( aLocked );
OnModify(); OnModify();
@ -325,5 +325,5 @@ void PCB_EDIT_FRAME::LockModule( MODULE* aModule, bool aLocked )
static bool sortModulesbySize( MODULE* ref, MODULE* compare ) static bool sortModulesbySize( MODULE* ref, MODULE* compare )
{ {
return compare->m_Surface < ref->m_Surface; return compare->GetArea() < ref->GetArea();
} }

View File

@ -119,7 +119,8 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
if( currModule == NULL ) if( currModule == NULL )
return; return;
currModule->m_ModuleStatus &= ~(MODULE_is_PLACED | MODULE_to_PLACE); currModule->SetIsPlaced( false );
currModule->SetNeedsPlaced( false );
break; break;
case PLACE_OUT_OF_BOARD: case PLACE_OUT_OF_BOARD:
@ -157,7 +158,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
for( ; Module != NULL; Module = Module->Next() ) for( ; Module != NULL; Module = Module->Next() )
{ {
Module->m_ModuleStatus &= ~MODULE_to_PLACE; Module->SetNeedsPlaced( false );
switch( place_mode ) switch( place_mode )
{ {
@ -167,8 +168,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
// Module will be placed, add to undo. // Module will be placed, add to undo.
picker.SetItem( currModule ); picker.SetItem( currModule );
newList.PushItem( picker ); newList.PushItem( picker );
Module->SetNeedsPlaced( true );
Module->m_ModuleStatus |= MODULE_to_PLACE;
} }
break; break;
@ -179,13 +179,12 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
if( Module->IsLocked() ) if( Module->IsLocked() )
break; break;
if( !RoutingMatrix.m_BrdBox.Contains( Module->m_Pos ) ) if( !RoutingMatrix.m_BrdBox.Contains( Module->GetPosition() ) )
{ {
// Module will be placed, add to undo. // Module will be placed, add to undo.
picker.SetItem( Module ); picker.SetItem( Module );
newList.PushItem( picker ); newList.PushItem( picker );
Module->SetNeedsPlaced( true );
Module->m_ModuleStatus |= MODULE_to_PLACE;
} }
break; break;
@ -199,8 +198,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
// Module will be placed, add to undo. // Module will be placed, add to undo.
picker.SetItem( Module ); picker.SetItem( Module );
newList.PushItem( picker ); newList.PushItem( picker );
Module->SetNeedsPlaced( true );
Module->m_ModuleStatus |= MODULE_to_PLACE;
break; break;
case PLACE_INCREMENTAL: case PLACE_INCREMENTAL:
@ -210,20 +208,19 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
break; break;
} }
if( !(Module->m_ModuleStatus & MODULE_is_PLACED) ) if( !Module->NeedsPlaced() )
{ {
// Module will be placed, add to undo. // Module will be placed, add to undo.
picker.SetItem( Module ); picker.SetItem( Module );
newList.PushItem( picker ); newList.PushItem( picker );
Module->SetNeedsPlaced( true );
Module->m_ModuleStatus |= MODULE_to_PLACE;
} }
break; break;
} }
if( Module->m_ModuleStatus & MODULE_to_PLACE ) // Erase from screen if( Module->NeedsPlaced() ) // Erase from screen
{ {
moduleCount++; moduleCount++;
Module->Draw( m_canvas, DC, GR_XOR ); Module->Draw( m_canvas, DC, GR_XOR );
@ -259,7 +256,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
goto end_of_tst; goto end_of_tst;
/* Determine if the best orientation of a module is 180. */ /* Determine if the best orientation of a module is 180. */
ii = Module->m_CntRot180 & 0x0F; ii = Module->GetPlacementCost180() & 0x0F;
if( ii != 0 ) if( ii != 0 )
{ {
@ -285,7 +282,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
} }
/* Determine if the best orientation of a module is 90. */ /* Determine if the best orientation of a module is 90. */
ii = Module->m_CntRot90 & 0x0F; ii = Module->GetPlacementCost90() & 0x0F;
if( ii != 0 ) if( ii != 0 )
{ {
@ -310,7 +307,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
} }
/* Determine if the best orientation of a module is 270. */ /* Determine if the best orientation of a module is 270. */
ii = (Module->m_CntRot90 >> 4 ) & 0x0F; ii = (Module->GetPlacementCost90() >> 4 ) & 0x0F;
if( ii != 0 ) if( ii != 0 )
{ {
@ -349,7 +346,7 @@ end_of_tst:
GenModuleOnBoard( Module ); GenModuleOnBoard( Module );
Module->SetIsPlaced( true ); Module->SetIsPlaced( true );
Module->m_ModuleStatus &= ~MODULE_to_PLACE; Module->SetNeedsPlaced( false );
} }
CurrPosition = memopos; CurrPosition = memopos;
@ -521,10 +518,10 @@ void PCB_EDIT_FRAME::GenModuleOnBoard( MODULE* Module )
int layerMask; int layerMask;
D_PAD* Pad; D_PAD* Pad;
ox = Module->m_BoundaryBox.GetX() - marge; ox = Module->GetBoundingBox().GetX() - marge;
fx = Module->m_BoundaryBox.GetRight() + marge; fx = Module->GetBoundingBox().GetRight() + marge;
oy = Module->m_BoundaryBox.GetY() - marge; oy = Module->GetBoundingBox().GetY() - marge;
fy = Module->m_BoundaryBox.GetBottom() + marge; fy = Module->GetBoundingBox().GetBottom() + marge;
if( ox < RoutingMatrix.m_BrdBox.GetX() ) if( ox < RoutingMatrix.m_BrdBox.GetX() )
ox = RoutingMatrix.m_BrdBox.GetX(); ox = RoutingMatrix.m_BrdBox.GetX();
@ -597,11 +594,12 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
LastPosOK.x = RoutingMatrix.m_BrdBox.GetX(); LastPosOK.x = RoutingMatrix.m_BrdBox.GetX();
LastPosOK.y = RoutingMatrix.m_BrdBox.GetY(); LastPosOK.y = RoutingMatrix.m_BrdBox.GetY();
cx = aModule->m_Pos.x; cy = aModule->m_Pos.y; cx = aModule->GetPosition().x;
ox = aModule->m_BoundaryBox.GetX() - cx; cy = aModule->GetPosition().y;
fx = aModule->m_BoundaryBox.GetWidth() + ox; ox = aModule->GetBoundingBox().GetX() - cx;
oy = aModule->m_BoundaryBox.GetY() - cy; fx = aModule->GetBoundingBox().GetWidth() + ox;
fy = aModule->m_BoundaryBox.GetHeight() + oy; oy = aModule->GetBoundingBox().GetY() - cy;
fy = aModule->GetBoundingBox().GetHeight() + oy;
CurrPosition.x = RoutingMatrix.m_BrdBox.GetX() - ox; CurrPosition.x = RoutingMatrix.m_BrdBox.GetX() - ox;
CurrPosition.y = RoutingMatrix.m_BrdBox.GetY() - oy; CurrPosition.y = RoutingMatrix.m_BrdBox.GetY() - oy;
@ -656,9 +654,10 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
m_canvas->SetAbortRequest( false ); m_canvas->SetAbortRequest( false );
} }
cx = aModule->m_Pos.x; cy = aModule->m_Pos.y; cx = aModule->GetPosition().x;
aModule->m_BoundaryBox.SetX( ox + CurrPosition.x ); cy = aModule->GetPosition().y;
aModule->m_BoundaryBox.SetY( oy + CurrPosition.y ); aModule->GetBoundingBox().SetX( ox + CurrPosition.x );
aModule->GetBoundingBox().SetY( oy + CurrPosition.y );
DrawModuleOutlines( m_canvas, aDC, aModule ); DrawModuleOutlines( m_canvas, aDC, aModule );
@ -681,8 +680,8 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
Compute_Ratsnest_PlaceModule( aDC ); Compute_Ratsnest_PlaceModule( aDC );
#endif #endif
showRat = 0; showRat = 0;
aModule->m_BoundaryBox.SetX( ox + CurrPosition.x ); aModule->GetBoundingBox().SetX( ox + CurrPosition.x );
aModule->m_BoundaryBox.SetY( oy + CurrPosition.y ); aModule->GetBoundingBox().SetY( oy + CurrPosition.y );
g_Offset_Module.y = cy - CurrPosition.y; g_Offset_Module.y = cy - CurrPosition.y;
#ifndef USE_WX_OVERLAY #ifndef USE_WX_OVERLAY
@ -726,8 +725,8 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
Compute_Ratsnest_PlaceModule( aDC ); Compute_Ratsnest_PlaceModule( aDC );
/* Regeneration of the modified variable. */ /* Regeneration of the modified variable. */
aModule->m_BoundaryBox.SetX( ox + cx ); aModule->GetBoundingBox().SetX( ox + cx );
aModule->m_BoundaryBox.SetY( oy + cy ); aModule->GetBoundingBox().SetY( oy + cy );
CurrPosition = LastPosOK; CurrPosition = LastPosOK;
GetBoard()->m_Status_Pcb &= ~( RATSNEST_ITEM_LOCAL_OK | LISTE_PAD_OK ); GetBoard()->m_Status_Pcb &= ~( RATSNEST_ITEM_LOCAL_OK | LISTE_PAD_OK );
@ -865,10 +864,10 @@ int TstModuleOnBoard( BOARD* Pcb, MODULE* Module, bool TstOtherSide )
side = BOTTOM; otherside = TOP; side = BOTTOM; otherside = TOP;
} }
ox = Module->m_BoundaryBox.GetX(); ox = Module->GetBoundingBox().GetX();
fx = Module->m_BoundaryBox.GetRight(); fx = Module->GetBoundingBox().GetRight();
oy = Module->m_BoundaryBox.GetY(); oy = Module->GetBoundingBox().GetY();
fy = Module->m_BoundaryBox.GetBottom(); fy = Module->GetBoundingBox().GetBottom();
error = TstRectangle( Pcb, ox, oy, fx, fy, side ); error = TstRectangle( Pcb, ox, oy, fx, fy, side );
@ -1063,8 +1062,9 @@ static bool Tri_PlaceModules( MODULE* ref, MODULE* compare )
{ {
double ff1, ff2; double ff1, ff2;
ff1 = ref->m_Surface * ref->GetPadCount(); ff1 = ref->GetArea() * ref->GetPadCount();
ff2 = compare->m_Surface * compare->GetPadCount(); ff2 = compare->GetArea() * compare->GetPadCount();
return ff2 < ff1; return ff2 < ff1;
} }
@ -1073,8 +1073,8 @@ static bool Tri_RatsModules( MODULE* ref, MODULE* compare )
{ {
double ff1, ff2; double ff1, ff2;
ff1 = ref->m_Surface * ref->flag; ff1 = ref->GetArea() * ref->GetFlag();
ff2 = compare->m_Surface * compare->flag; ff2 = compare->GetArea() * compare->GetFlag();
return ff2 < ff1; return ff2 < ff1;
} }
@ -1105,9 +1105,9 @@ static MODULE* PickModule( PCB_EDIT_FRAME* pcbframe, wxDC* DC )
for( unsigned ii = 0; ii < moduleList.size(); ii++ ) for( unsigned ii = 0; ii < moduleList.size(); ii++ )
{ {
Module = moduleList[ii]; Module = moduleList[ii];
Module->flag = 0; Module->SetFlag( 0 );
if( !( Module->m_ModuleStatus & MODULE_to_PLACE ) ) if( !Module->NeedsPlaced() )
continue; continue;
pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK; pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK;
@ -1119,7 +1119,7 @@ static MODULE* PickModule( PCB_EDIT_FRAME* pcbframe, wxDC* DC )
{ {
if( ( pcbframe->GetBoard()->m_LocalRatsnest[ii].m_Status & if( ( pcbframe->GetBoard()->m_LocalRatsnest[ii].m_Status &
LOCAL_RATSNEST_ITEM ) == 0 ) LOCAL_RATSNEST_ITEM ) == 0 )
Module->flag++; Module->IncrementFlag();
} }
} }
@ -1135,12 +1135,12 @@ static MODULE* PickModule( PCB_EDIT_FRAME* pcbframe, wxDC* DC )
{ {
Module = moduleList[ii]; Module = moduleList[ii];
if( !( Module->m_ModuleStatus & MODULE_to_PLACE ) ) if( !Module->NeedsPlaced() )
continue; continue;
altModule = Module; altModule = Module;
if( Module->flag == 0 ) if( Module->GetFlag() == 0 )
continue; continue;
bestModule = Module; bestModule = Module;

View File

@ -317,12 +317,12 @@ void PlaceCells( BOARD* aPcb, int net_code, int flag )
layerMask = GetLayerMask( PtText->GetLayer() ); layerMask = GetLayerMask( PtText->GetLayer() );
TraceFilledRectangle( ux0 - marge, uy0 - marge, ux1 + marge, TraceFilledRectangle( ux0 - marge, uy0 - marge, ux1 + marge,
uy1 + marge, (int) (PtText->m_Orient), uy1 + marge, (int) (PtText->GetOrientation()),
layerMask, HOLE, WRITE_CELL ); layerMask, HOLE, WRITE_CELL );
TraceFilledRectangle( ux0 - via_marge, uy0 - via_marge, TraceFilledRectangle( ux0 - via_marge, uy0 - via_marge,
ux1 + via_marge, uy1 + via_marge, ux1 + via_marge, uy1 + via_marge,
(int) (PtText->m_Orient), (int) (PtText->GetOrientation()),
layerMask, VIA_IMPOSSIBLE, WRITE_OR_CELL ); layerMask, VIA_IMPOSSIBLE, WRITE_OR_CELL );
} }
break; break;

View File

@ -247,10 +247,19 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
TRACK* image = (TRACK*) aImage; TRACK* image = (TRACK*) aImage;
// swap start, end, width and shape for track and image. // swap start, end, width and shape for track and image.
wxPoint exchp = track->GetStart(); track->SetStart( image->GetStart() ); image->SetStart( exchp ); wxPoint exchp = track->GetStart();
exchp = track->GetEnd(); track->SetEnd( image->GetEnd() ); image->SetEnd( exchp ); track->SetStart( image->GetStart() );
int atmp = track->GetWidth(); track->SetWidth( image->GetWidth() ); image->SetWidth( atmp ); image->SetStart( exchp );
atmp = track->GetShape(); track->SetShape( image->GetShape() ); image->SetShape( atmp ); exchp = track->GetEnd();
track->SetEnd( image->GetEnd() );
image->SetEnd( exchp );
int atmp = track->GetWidth();
track->SetWidth( image->GetWidth() );
image->SetWidth( atmp );
atmp = track->GetShape();
track->SetShape( image->GetShape() );
image->SetShape( atmp );
atmp = track->GetDrillValue(); atmp = track->GetDrillValue();
@ -277,16 +286,17 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
break; break;
case PCB_TEXT_T: case PCB_TEXT_T:
EXCHG( ( (TEXTE_PCB*) aItem )->m_Mirror, ( (TEXTE_PCB*) aImage )->m_Mirror ); std::swap( *((TEXTE_PCB*)aItem), *((TEXTE_PCB*)aImage) );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Size, ( (TEXTE_PCB*) aImage )->m_Size ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Mirror, ( (TEXTE_PCB*) aImage )->m_Mirror );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Pos, ( (TEXTE_PCB*) aImage )->m_Pos ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Size, ( (TEXTE_PCB*) aImage )->m_Size );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Thickness, ( (TEXTE_PCB*) aImage )->m_Thickness ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Pos, ( (TEXTE_PCB*) aImage )->m_Pos );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Orient, ( (TEXTE_PCB*) aImage )->m_Orient ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Thickness, ( (TEXTE_PCB*) aImage )->m_Thickness );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Text, ( (TEXTE_PCB*) aImage )->m_Text ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Orient, ( (TEXTE_PCB*) aImage )->m_Orient );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Italic, ( (TEXTE_PCB*) aImage )->m_Italic ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Text, ( (TEXTE_PCB*) aImage )->m_Text );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Bold, ( (TEXTE_PCB*) aImage )->m_Bold ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Italic, ( (TEXTE_PCB*) aImage )->m_Italic );
EXCHG( ( (TEXTE_PCB*) aItem )->m_HJustify, ( (TEXTE_PCB*) aImage )->m_HJustify ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_Bold, ( (TEXTE_PCB*) aImage )->m_Bold );
EXCHG( ( (TEXTE_PCB*) aItem )->m_VJustify, ( (TEXTE_PCB*) aImage )->m_VJustify ); // EXCHG( ( (TEXTE_PCB*) aItem )->m_HJustify, ( (TEXTE_PCB*) aImage )->m_HJustify );
// EXCHG( ( (TEXTE_PCB*) aItem )->m_VJustify, ( (TEXTE_PCB*) aImage )->m_VJustify );
break; break;
case PCB_TARGET_T: case PCB_TARGET_T:
@ -295,16 +305,17 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
case PCB_DIMENSION_T: case PCB_DIMENSION_T:
{ {
wxString txt = ( (DIMENSION*) aItem )->GetText(); std::swap( *((DIMENSION*)aItem), *((DIMENSION*)aImage) );
( (DIMENSION*) aItem )->SetText( ( (DIMENSION*) aImage )->GetText() ); // wxString txt = ( (DIMENSION*) aItem )->GetText();
( (DIMENSION*) aImage )->SetText( txt ); // ( (DIMENSION*) aItem )->SetText( ( (DIMENSION*) aImage )->GetText() );
EXCHG( ( (DIMENSION*) aItem )->m_Width, ( (DIMENSION*) aImage )->m_Width ); // ( (DIMENSION*) aImage )->SetText( txt );
EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Size, ( (DIMENSION*) aImage )->m_Text.m_Size ); // EXCHG( ( (DIMENSION*) aItem )->m_Width, ( (DIMENSION*) aImage )->m_Width );
EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Pos, ( (DIMENSION*) aImage )->m_Text.m_Pos ); // EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Size, ( (DIMENSION*) aImage )->m_Text.m_Size );
EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Thickness, // EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Pos, ( (DIMENSION*) aImage )->m_Text.m_Pos );
( (DIMENSION*) aImage )->m_Text.m_Thickness ); // EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Thickness,
EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Mirror, // ( (DIMENSION*) aImage )->m_Text.m_Thickness );
( (DIMENSION*) aImage )->m_Text.m_Mirror ); // EXCHG( ( (DIMENSION*) aItem )->m_Text.m_Mirror,
// ( (DIMENSION*) aImage )->m_Text.m_Mirror );
} }
break; break;

View File

@ -108,10 +108,11 @@ void PCB_EDIT_FRAME::RecreateBOMFileFromBoard( wxCommandEvent& aEvent )
for( iter = list.begin(); iter != list.end(); iter++ ) for( iter = list.begin(); iter != list.end(); iter++ )
{ {
cmp* current = *iter; cmp* current = *iter;
if( (current->m_Val == Module->m_Value->m_Text) && (current->m_Pkg == Module->m_LibRef) )
if( (current->m_Val == Module->GetValue()) && (current->m_Pkg == Module->GetLibRef()) )
{ {
current->m_Ref.Append( wxT( ", " ), 1 ); current->m_Ref.Append( wxT( ", " ), 1 );
current->m_Ref.Append( Module->m_Reference->m_Text ); current->m_Ref.Append( Module->GetReference() );
current->m_CmpCount++; current->m_CmpCount++;
valExist = true; valExist = true;
@ -124,9 +125,9 @@ void PCB_EDIT_FRAME::RecreateBOMFileFromBoard( wxCommandEvent& aEvent )
{ {
comp = new cmp(); comp = new cmp();
comp->m_Id = i++; comp->m_Id = i++;
comp->m_Val = Module->m_Value->m_Text; comp->m_Val = Module->GetValue();
comp->m_Ref = Module->m_Reference->m_Text; comp->m_Ref = Module->GetReference();
comp->m_Pkg = Module->m_LibRef; comp->m_Pkg = Module->GetLibRef();
comp->m_CmpCount = 1; comp->m_CmpCount = 1;
list.Append( comp ); list.Append( comp );
} }

View File

@ -64,7 +64,7 @@ DIMENSION::~DIMENSION()
void DIMENSION::SetPosition( const wxPoint& aPos ) void DIMENSION::SetPosition( const wxPoint& aPos )
{ {
m_Text.SetPos( aPos ); m_Text.SetPosition( aPos );
} }

View File

@ -43,7 +43,6 @@ class MSG_PANEL_ITEM;
class DIMENSION : public BOARD_ITEM class DIMENSION : public BOARD_ITEM
{ {
public:
int m_Width; int m_Width;
int m_Shape; // / Currently always 0. int m_Shape; // / Currently always 0.
int m_Unit; // / 0 = inches, 1 = mm int m_Unit; // / 0 = inches, 1 = mm
@ -51,6 +50,8 @@ public:
TEXTE_PCB m_Text; TEXTE_PCB m_Text;
public:
// private: These member should be private. they are public only due to legacy code // private: These member should be private. they are public only due to legacy code
wxPoint m_crossBarO, m_crossBarF; wxPoint m_crossBarO, m_crossBarF;
wxPoint m_featureLineGO, m_featureLineGF; wxPoint m_featureLineGO, m_featureLineGF;
@ -59,13 +60,17 @@ public:
wxPoint m_arrowD2O, m_arrowD2F; wxPoint m_arrowD2O, m_arrowD2F;
wxPoint m_arrowG1O, m_arrowG1F; wxPoint m_arrowG1O, m_arrowG1F;
wxPoint m_arrowG2O, m_arrowG2F; wxPoint m_arrowG2O, m_arrowG2F;
public:
DIMENSION( BOARD_ITEM* aParent ); DIMENSION( BOARD_ITEM* aParent );
// Do not create a copy constructor. The one generated by the compiler is adequate. // Do not create a copy constructor. The one generated by the compiler is adequate.
~DIMENSION(); ~DIMENSION();
void SetValue( int aValue ) { m_Value = aValue; }
int GetValue() const { return m_Value; }
const wxPoint& GetPosition() const; const wxPoint& GetPosition() const;
void SetPosition( const wxPoint& aPos ); // override, sets m_Text's position too void SetPosition( const wxPoint& aPos ); // override, sets m_Text's position too
@ -93,6 +98,9 @@ public:
void SetText( const wxString& NewText ); void SetText( const wxString& NewText );
const wxString GetText() const; const wxString GetText() const;
TEXTE_PCB& Text() { return m_Text; }
TEXTE_PCB& Text() const { return *(const_cast<TEXTE_PCB*> (&m_Text)); }
void Copy( DIMENSION* source ); void Copy( DIMENSION* source );
void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,

View File

@ -398,7 +398,7 @@ EDA_RECT DRAWSEGMENT::GetBoundingBox() const
if( module ) // Transform, if we belong to a module if( module ) // Transform, if we belong to a module
{ {
RotatePoint( &pt, module->GetOrientation() ); RotatePoint( &pt, module->GetOrientation() );
pt += module->m_Pos; pt += module->GetPosition();
} }
if( ii == 0 ) if( ii == 0 )

View File

@ -91,8 +91,8 @@ void EDGE_MODULE::SetDrawCoord()
RotatePoint( &m_Start.x, &m_Start.y, module->GetOrientation() ); RotatePoint( &m_Start.x, &m_Start.y, module->GetOrientation() );
RotatePoint( &m_End.x, &m_End.y, module->GetOrientation() ); RotatePoint( &m_End.x, &m_End.y, module->GetOrientation() );
m_Start += module->m_Pos; m_Start += module->GetPosition();
m_End += module->m_Pos; m_End += module->GetPosition();
} }
} }
@ -221,7 +221,7 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
wxPoint& pt = points[ii]; wxPoint& pt = points[ii];
RotatePoint( &pt.x, &pt.y, module->GetOrientation() ); RotatePoint( &pt.x, &pt.y, module->GetOrientation() );
pt += module->m_Pos - offset; pt += module->GetPosition() - offset;
} }
GRPoly( panel->GetClipBox(), DC, points.size(), &points[0], true, m_Width, color, color ); GRPoly( panel->GetClipBox(), DC, points.size(), &points[0], true, m_Width, color, color );
@ -246,8 +246,8 @@ void EDGE_MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
return; return;
aList.push_back( MSG_PANEL_ITEM( _( "Graphic Item" ), wxEmptyString, DARKCYAN ) ); aList.push_back( MSG_PANEL_ITEM( _( "Graphic Item" ), wxEmptyString, DARKCYAN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Module" ), module->m_Reference->m_Text, DARKCYAN ) ); aList.push_back( MSG_PANEL_ITEM( _( "Module" ), module->GetReference(), DARKCYAN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Value" ), module->m_Value->m_Text, BLUE ) ); aList.push_back( MSG_PANEL_ITEM( _( "Value" ), module->GetValue(), BLUE ) );
msg.Printf( wxT( "%8.8lX" ), module->GetTimeStamp() ); msg.Printf( wxT( "%8.8lX" ), module->GetTimeStamp() );
aList.push_back( MSG_PANEL_ITEM( _( "TimeStamp" ), msg, BROWN ) ); aList.push_back( MSG_PANEL_ITEM( _( "TimeStamp" ), msg, BROWN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Mod Layer" ), board->GetLayerName( module->GetLayer() ), aList.push_back( MSG_PANEL_ITEM( _( "Mod Layer" ), board->GetLayerName( module->GetLayer() ),

View File

@ -63,7 +63,7 @@ MODULE::MODULE( BOARD* parent ) :
m_CntRot90 = m_CntRot180 = 0; m_CntRot90 = m_CntRot180 = 0;
m_Surface = 0.0; m_Surface = 0.0;
m_Link = 0; m_Link = 0;
m_LastEdit_Time = time( NULL ); m_LastEditTime = time( NULL );
m_LocalClearance = 0; m_LocalClearance = 0;
m_LocalSolderMaskMargin = 0; m_LocalSolderMaskMargin = 0;
m_LocalSolderPasteMargin = 0; m_LocalSolderPasteMargin = 0;
@ -91,10 +91,9 @@ MODULE::MODULE( const MODULE& aModule ) :
m_ModuleStatus = aModule.m_ModuleStatus; m_ModuleStatus = aModule.m_ModuleStatus;
m_Orient = aModule.m_Orient; m_Orient = aModule.m_Orient;
m_BoundaryBox = aModule.m_BoundaryBox; m_BoundaryBox = aModule.m_BoundaryBox;
m_PadNum = aModule.m_PadNum;
m_CntRot90 = aModule.m_CntRot90; m_CntRot90 = aModule.m_CntRot90;
m_CntRot180 = aModule.m_CntRot180; m_CntRot180 = aModule.m_CntRot180;
m_LastEdit_Time = aModule.m_LastEdit_Time; m_LastEditTime = aModule.m_LastEditTime;
m_Link = aModule.m_Link; m_Link = aModule.m_Link;
m_Path = aModule.m_Path; //is this correct behavior? m_Path = aModule.m_Path; //is this correct behavior?
@ -210,10 +209,9 @@ void MODULE::Copy( MODULE* aModule )
m_ModuleStatus = aModule->m_ModuleStatus; m_ModuleStatus = aModule->m_ModuleStatus;
m_Orient = aModule->m_Orient; m_Orient = aModule->m_Orient;
m_BoundaryBox = aModule->m_BoundaryBox; m_BoundaryBox = aModule->m_BoundaryBox;
m_PadNum = aModule->m_PadNum;
m_CntRot90 = aModule->m_CntRot90; m_CntRot90 = aModule->m_CntRot90;
m_CntRot180 = aModule->m_CntRot180; m_CntRot180 = aModule->m_CntRot180;
m_LastEdit_Time = aModule->m_LastEdit_Time; m_LastEditTime = aModule->m_LastEditTime;
m_Link = aModule->m_Link; m_Link = aModule->m_Link;
m_Path = aModule->m_Path; //is this correct behavior? m_Path = aModule->m_Path; //is this correct behavior?
SetTimeStamp( GetNewTimeStamp() ); SetTimeStamp( GetNewTimeStamp() );
@ -444,10 +442,10 @@ void MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
wxString msg; wxString msg;
BOARD* board = GetBoard(); BOARD* board = GetBoard();
aList.push_back( MSG_PANEL_ITEM( m_Reference->m_Text, m_Value->m_Text, DARKCYAN ) ); aList.push_back( MSG_PANEL_ITEM( m_Reference->GetText(), m_Value->GetText(), DARKCYAN ) );
// Display last date the component was edited (useful in Module Editor). // Display last date the component was edited (useful in Module Editor).
time_t edit_time = m_LastEdit_Time; time_t edit_time = m_LastEditTime;
strcpy( Line, ctime( &edit_time ) ); strcpy( Line, ctime( &edit_time ) );
strtok( Line, " \n\r" ); strtok( Line, " \n\r" );
strcpy( bufcar, strtok( NULL, " \n\r" ) ); strcat( bufcar, " " ); strcpy( bufcar, strtok( NULL, " \n\r" ) ); strcat( bufcar, " " );
@ -713,7 +711,6 @@ bool MODULE::IsLibNameValid( const wxString & aName )
} }
/* Test for validity of the name of a footprint to be used in a footprint library /* Test for validity of the name of a footprint to be used in a footprint library
* ( no spaces, dir separators ... ) * ( no spaces, dir separators ... )
* param bool aUserReadable = false to get the list of invalid chars * param bool aUserReadable = false to get the list of invalid chars
@ -733,6 +730,242 @@ const wxChar* MODULE::ReturnStringLibNameInvalidChars( bool aUserReadable )
} }
void MODULE::Move( const wxPoint& aMoveVector )
{
wxPoint newpos = m_Pos + aMoveVector;
SetPosition( newpos );
}
void MODULE::Rotate( const wxPoint& aRotCentre, double aAngle )
{
wxPoint newpos = m_Pos;
RotatePoint( &newpos, aRotCentre, aAngle );
SetPosition( newpos );
SetOrientation( GetOrientation() + aAngle );
}
void MODULE::Flip( const wxPoint& aCentre )
{
TEXTE_MODULE* text;
// Move module to its final position:
wxPoint finalPos = m_Pos;
finalPos.y = aCentre.y - ( finalPos.y - aCentre.y ); /// Mirror the Y position
SetPosition( finalPos );
// Flip layer
SetLayer( BOARD::ReturnFlippedLayerNumber( GetLayer() ) );
// Reverse mirror orientation.
NEGATE( m_Orient );
NORMALIZE_ANGLE_POS( m_Orient );
// Mirror pads to other side of board about the x axis, i.e. vertically.
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
pad->Flip( m_Pos.y );
// Mirror reference.
text = m_Reference;
text->m_Pos.y -= m_Pos.y;
text->m_Pos.y = -text->m_Pos.y;
text->m_Pos.y += m_Pos.y;
NEGATE(text->m_Pos0.y);
text->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( text->m_Orient );
text->SetLayer( GetLayer() );
text->SetLayer( BOARD::ReturnFlippedLayerNumber( text->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
text->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
text->SetLayer( SILKSCREEN_N_FRONT );
if( (GetLayer() == SILKSCREEN_N_BACK)
|| (GetLayer() == ADHESIVE_N_BACK) || (GetLayer() == LAYER_N_BACK) )
text->m_Mirror = true;
// Mirror value.
text = m_Value;
text->m_Pos.y -= m_Pos.y;
NEGATE( text->m_Pos.y );
text->m_Pos.y += m_Pos.y;
NEGATE( text->m_Pos0.y );
text->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( text->m_Orient );
text->SetLayer( GetLayer() );
text->SetLayer( BOARD::ReturnFlippedLayerNumber( text->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
text->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
text->SetLayer( SILKSCREEN_N_FRONT );
if( (GetLayer() == SILKSCREEN_N_BACK)
|| (GetLayer() == ADHESIVE_N_BACK) || (GetLayer() == LAYER_N_BACK) )
text->m_Mirror = true;
// Reverse mirror module graphics and texts.
for( EDA_ITEM* item = m_Drawings; item; item = item->Next() )
{
switch( item->Type() )
{
case PCB_MODULE_EDGE_T:
{
EDGE_MODULE* em = (EDGE_MODULE*) item;
wxPoint s = em->GetStart();
s.y -= m_Pos.y;
s.y = -s.y;
s.y += m_Pos.y;
em->SetStart( s );
wxPoint e = em->GetEnd();
e.y -= m_Pos.y;
e.y = -e.y;
e.y += m_Pos.y;
em->SetEnd( e );
NEGATE( em->m_Start0.y );
NEGATE( em->m_End0.y );
if( em->GetShape() == S_ARC )
{
em->SetAngle( -em->GetAngle() );
}
em->SetLayer( BOARD::ReturnFlippedLayerNumber( em->GetLayer() ) );
}
break;
case PCB_MODULE_TEXT_T:
// Reverse mirror position and mirror.
text = (TEXTE_MODULE*) item;
text->m_Pos.y -= m_Pos.y;
text->m_Pos.y = -text->m_Pos.y;
text->m_Pos.y += m_Pos.y;
NEGATE( text->m_Pos0.y );
text->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( text->m_Orient );
text->SetLayer( GetLayer() );
text->SetLayer( BOARD::ReturnFlippedLayerNumber( text->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
text->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
text->SetLayer( SILKSCREEN_N_FRONT );
if( GetLayer() == SILKSCREEN_N_BACK
|| GetLayer() == ADHESIVE_N_BACK
|| GetLayer() == LAYER_N_BACK )
{
text->m_Mirror = true;
}
break;
default:
wxMessageBox( wxT( "MODULE::Flip() error: Unknown Draw Type" ) );
break;
}
}
CalculateBoundingBox();
}
void MODULE::SetPosition( const wxPoint& newpos )
{
wxPoint delta = newpos - m_Pos;
m_Pos += delta;
m_Reference->SetPosition( m_Reference->GetPosition() + delta );
m_Value->SetPosition( m_Value->GetPosition() + delta );
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
pad->SetPosition( pad->GetPosition() + delta );
}
for( EDA_ITEM* item = m_Drawings; item; item = item->Next() )
{
switch( item->Type() )
{
case PCB_MODULE_EDGE_T:
{
EDGE_MODULE* pt_edgmod = (EDGE_MODULE*) item;
pt_edgmod->SetDrawCoord();
break;
}
case PCB_MODULE_TEXT_T:
{
TEXTE_MODULE* text = (TEXTE_MODULE*) item;
text->m_Pos += delta;
break;
}
default:
wxMessageBox( wxT( "Draw type undefined." ) );
break;
}
}
CalculateBoundingBox();
}
void MODULE::SetOrientation( double newangle )
{
double angleChange = newangle - m_Orient; // change in rotation
wxPoint pt;
NORMALIZE_ANGLE_POS( newangle );
m_Orient = newangle;
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
pt = pad->GetPos0();
pad->SetOrientation( pad->GetOrientation() + angleChange );
RotatePoint( &pt, m_Orient );
pad->SetPosition( GetPosition() + pt );
}
// Update of the reference and value.
m_Reference->SetDrawCoord();
m_Value->SetDrawCoord();
// Displace contours and text of the footprint.
for( BOARD_ITEM* item = m_Drawings; item; item = item->Next() )
{
if( item->Type() == PCB_MODULE_EDGE_T )
{
EDGE_MODULE* edge = (EDGE_MODULE*) item;
edge->SetDrawCoord();
}
else if( item->Type() == PCB_MODULE_TEXT_T )
{
TEXTE_MODULE* text = (TEXTE_MODULE*) item;
text->SetDrawCoord();
}
}
CalculateBoundingBox();
}
#if defined(DEBUG) #if defined(DEBUG)
void MODULE::Show( int nestLevel, std::ostream& os ) const void MODULE::Show( int nestLevel, std::ostream& os ) const
@ -741,8 +974,8 @@ void MODULE::Show( int nestLevel, std::ostream& os ) const
// for now, make it look like XML, expand on this later. // for now, make it look like XML, expand on this later.
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
" ref=\"" << m_Reference->m_Text.mb_str() << '"' << " ref=\"" << m_Reference->GetText().mb_str() << '"' <<
" value=\"" << m_Value->m_Text.mb_str() << '"' << " value=\"" << m_Value->GetText().mb_str() << '"' <<
" layer=\"" << board->GetLayerName( m_Layer ).mb_str() << '"' << " layer=\"" << board->GetLayerName( m_Layer ).mb_str() << '"' <<
">\n"; ">\n";

View File

@ -57,7 +57,7 @@ class MSG_PANEL_ITEM;
enum MODULE_ATTR_T enum MODULE_ATTR_T
{ {
MOD_DEFAULT = 0, ///< default MOD_DEFAULT = 0, ///< default
MOD_CMS = 1, ///< Set for modules listed in the automatic insertion list MOD_CMS = 1, ///< Set for modules listed in the automatic insertion list
///< (usually SMD footprints) ///< (usually SMD footprints)
MOD_VIRTUAL = 2 ///< Virtual component: when created by copper shapes on MOD_VIRTUAL = 2 ///< Virtual component: when created by copper shapes on
///< board (Like edge card connectors, mounting hole...) ///< board (Like edge card connectors, mounting hole...)
@ -66,54 +66,16 @@ enum MODULE_ATTR_T
class MODULE : public BOARD_ITEM class MODULE : public BOARD_ITEM
{ {
public: public:
double m_Orient; // orientation in 0.1 degrees
wxPoint m_Pos; // Real coord on board
DLIST<D_PAD> m_Pads; /* Pad list (linked list) */ DLIST<D_PAD> m_Pads; /* Pad list (linked list) */
DLIST<BOARD_ITEM> m_Drawings; /* Graphic items list (linked list) */ DLIST<BOARD_ITEM> m_Drawings; /* Graphic items list (linked list) */
DLIST<S3D_MASTER> m_3D_Drawings; /* First item of the 3D shapes (linked list)*/ DLIST<S3D_MASTER> m_3D_Drawings; /* First item of the 3D shapes (linked list)*/
TEXTE_MODULE* m_Reference; // Component reference (U34, R18..)
TEXTE_MODULE* m_Value; // Component value (74LS00, 22K..)
wxString m_LibRef; /* Name of the module in library (and
* the default value when loading a
* module from the library) */
int m_Attributs; ///< Flag bits ( see Mod_Attribut )
int flag; /* Use to trace ratsnest and auto routing. */
int m_ModuleStatus; ///< For autoplace: flags (LOCKED, AUTOPLACED)
// m_ModuleStatus bits: // m_ModuleStatus bits:
#define MODULE_is_LOCKED 0x01 ///< module LOCKED: no autoplace allowed #define MODULE_is_LOCKED 0x01 ///< module LOCKED: no autoplace allowed
#define MODULE_is_PLACED 0x02 ///< In autoplace: module automatically placed #define MODULE_is_PLACED 0x02 ///< In autoplace: module automatically placed
#define MODULE_to_PLACE 0x04 ///< In autoplace: module waiting for autoplace #define MODULE_to_PLACE 0x04 ///< In autoplace: module waiting for autoplace
EDA_RECT m_BoundaryBox; // Bounding box : coordinates on board, real orientation.
int m_PadNum; // Pad count
int m_AltPadNum; /* Pad with netcode > 0 (active pads) count */
int m_CntRot90; ///< Automatic placement : cost ( 0..10 )
///< for 90 degrees rotation (Horiz<->Vertical)
int m_CntRot180; ///< Automatic placement : cost ( 0..10 )
///< for 180 degrees rotation (UP <->Down)
wxSize m_Ext; // Margin around the module, in automatic placement
double m_Surface; // Bounding box area
time_t m_Link; // Temporary logical link used in edition
time_t m_LastEdit_Time;
wxString m_Path;
wxString m_Doc; // Module Description (info for users)
wxString m_KeyWord; // Keywords to select the module in lib
// The final margin is the sum of these 2 values
ZoneConnection m_ZoneConnection;
int m_ThermalWidth, m_ThermalGap;
public: public:
MODULE( BOARD* parent ); MODULE( BOARD* parent );
@ -191,6 +153,10 @@ public:
int GetAttributes() const { return m_Attributs; } int GetAttributes() const { return m_Attributs; }
void SetAttributes( int aAttributes ) { m_Attributs = aAttributes; } void SetAttributes( int aAttributes ) { m_Attributs = aAttributes; }
void SetFlag( int aFlag ) { flag = aFlag; }
void IncrementFlag() { flag += 1; }
int GetFlag() const { return flag; }
void Move( const wxPoint& aMoveVector ); void Move( const wxPoint& aMoveVector );
void Rotate( const wxPoint& aRotCentre, double aAngle ); void Rotate( const wxPoint& aRotCentre, double aAngle );
@ -230,9 +196,18 @@ public:
m_ModuleStatus &= ~MODULE_is_PLACED; m_ModuleStatus &= ~MODULE_is_PLACED;
} }
void SetLastEditTime( time_t aTime ) { m_LastEdit_Time = aTime; } bool NeedsPlaced() const { return (m_ModuleStatus & MODULE_to_PLACE); }
void SetLastEditTime( ) { m_LastEdit_Time = time( NULL ); } void SetNeedsPlaced( bool needsPlaced )
time_t GetLastEditTime() const { return m_LastEdit_Time; } {
if( needsPlaced )
m_ModuleStatus |= MODULE_to_PLACE;
else
m_ModuleStatus &= ~MODULE_to_PLACE;
}
void SetLastEditTime( time_t aTime ) { m_LastEditTime = aTime; }
void SetLastEditTime( ) { m_LastEditTime = time( NULL ); }
time_t GetLastEditTime() const { return m_LastEditTime; }
/* drawing functions */ /* drawing functions */
@ -296,6 +271,10 @@ public:
TEXTE_MODULE& Value() { return *m_Value; } TEXTE_MODULE& Value() { return *m_Value; }
TEXTE_MODULE& Reference() { return *m_Reference; } TEXTE_MODULE& Reference() { return *m_Reference; }
/// The const versions to keep the compiler happy.
TEXTE_MODULE& Value() const { return *m_Value; }
TEXTE_MODULE& Reference() const { return *m_Reference; }
/** /**
* Function FindPadByName * Function FindPadByName
@ -323,6 +302,17 @@ public:
*/ */
unsigned GetPadCount() const { return m_Pads.GetCount() ; } unsigned GetPadCount() const { return m_Pads.GetCount() ; }
double GetArea() const { return m_Surface; }
time_t GetLink() const { return m_Link; }
void SetLink( time_t aLink ) { m_Link = aLink; }
int GetPlacementCost180() const { return m_CntRot180; }
void SetPlacementCost180( int aCost ) { m_CntRot180 = aCost; }
int GetPlacementCost90() const { return m_CntRot90; }
void SetPlacementCost90( int aCost ) { m_CntRot90 = aCost; }
/** /**
* Function Add3DModel * Function Add3DModel
* adds \a a3DModel definition to the end of the 3D model list. * adds \a a3DModel definition to the end of the 3D model list.
@ -377,16 +367,38 @@ public:
#endif #endif
private: private:
double m_Orient; ///< Orientation in tenths of a degree, 900=90.0 degrees.
wxPoint m_Pos; ///< Position of module on the board in internal units.
TEXTE_MODULE* m_Reference; ///< Component reference designator value (U34, R18..)
TEXTE_MODULE* m_Value; ///< Component value (74LS00, 22K..)
wxString m_LibRef; ///< Name of the module in the library.
int m_Attributs; ///< Flag bits ( see Mod_Attribut )
int m_ModuleStatus; ///< For autoplace: flags (LOCKED, AUTOPLACED)
EDA_RECT m_BoundaryBox; ///< Bounding box : coordinates on board, real orientation.
// The final margin is the sum of these 2 values
int m_ThermalWidth;
int m_ThermalGap;
wxString m_Doc; ///< File name and path for documentation file.
wxString m_KeyWord; ///< Search keywords to find module in library.
wxString m_Path;
ZoneConnection m_ZoneConnection;
time_t m_LastEditTime;
int flag; ///< Use to trace ratsnest and auto routing.
double m_Surface; ///< Bounding box area
time_t m_Link; ///< Temporary logical link used in edition
int m_CntRot90; ///< Horizontal automatic placement cost ( 0..10 ).
int m_CntRot180; ///< Vertical automatic placement cost ( 0..10 ).
// Local tolerances. When zero, this means the corresponding netclass value // Local tolerances. When zero, this means the corresponding netclass value
// is used. Usually theses local tolerances zero, in deference to the // is used. Usually theses local tolerances zero, in deference to the
// corresponding netclass values. // corresponding netclass values.
int m_LocalClearance; int m_LocalClearance;
int m_LocalSolderMaskMargin; ///< Solder mask margin int m_LocalSolderMaskMargin; ///< Solder mask margin
int m_LocalSolderPasteMargin; ///< Solder paste margin int m_LocalSolderPasteMargin; ///< Solder paste margin absolute value
///< absolute value
double m_LocalSolderPasteMarginRatio; ///< Solder mask margin ratio double m_LocalSolderPasteMarginRatio; ///< Solder mask margin ratio
///< value of pad size ///< value of pad size
}; };
#endif // MODULE_H_ #endif // MODULE_H_

View File

@ -128,239 +128,3 @@ int ChangeSideMaskLayer( int aMask )
return newMask; return newMask;
} }
void MODULE::Move( const wxPoint& aMoveVector )
{
wxPoint newpos = m_Pos + aMoveVector;
SetPosition( newpos );
}
void MODULE::Rotate( const wxPoint& aRotCentre, double aAngle )
{
wxPoint newpos = m_Pos;
RotatePoint( &newpos, aRotCentre, aAngle );
SetPosition( newpos );
SetOrientation( GetOrientation() + aAngle );
}
void MODULE::Flip( const wxPoint& aCentre )
{
TEXTE_MODULE* pt_texte;
// Move module to its final position:
wxPoint finalPos = m_Pos;
finalPos.y = aCentre.y - ( finalPos.y - aCentre.y ); /// Mirror the Y position
SetPosition( finalPos );
// Flip layer
SetLayer( BOARD::ReturnFlippedLayerNumber( GetLayer() ) );
// Reverse mirror orientation.
NEGATE( m_Orient );
NORMALIZE_ANGLE_POS( m_Orient );
// Mirror pads to other side of board about the x axis, i.e. vertically.
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
pad->Flip( m_Pos.y );
// Mirror reference.
pt_texte = m_Reference;
pt_texte->m_Pos.y -= m_Pos.y;
pt_texte->m_Pos.y = -pt_texte->m_Pos.y;
pt_texte->m_Pos.y += m_Pos.y;
NEGATE(pt_texte->m_Pos0.y);
pt_texte->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( pt_texte->m_Orient );
pt_texte->SetLayer( GetLayer() );
pt_texte->SetLayer( BOARD::ReturnFlippedLayerNumber( pt_texte->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
pt_texte->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
pt_texte->SetLayer( SILKSCREEN_N_FRONT );
if( (GetLayer() == SILKSCREEN_N_BACK)
|| (GetLayer() == ADHESIVE_N_BACK) || (GetLayer() == LAYER_N_BACK) )
pt_texte->m_Mirror = true;
// Mirror value.
pt_texte = m_Value;
pt_texte->m_Pos.y -= m_Pos.y;
NEGATE( pt_texte->m_Pos.y );
pt_texte->m_Pos.y += m_Pos.y;
NEGATE( pt_texte->m_Pos0.y );
pt_texte->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( pt_texte->m_Orient );
pt_texte->SetLayer( GetLayer() );
pt_texte->SetLayer( BOARD::ReturnFlippedLayerNumber( pt_texte->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
pt_texte->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
pt_texte->SetLayer( SILKSCREEN_N_FRONT );
if( (GetLayer() == SILKSCREEN_N_BACK)
|| (GetLayer() == ADHESIVE_N_BACK) || (GetLayer() == LAYER_N_BACK) )
pt_texte->m_Mirror = true;
// Reverse mirror module graphics and texts.
for( EDA_ITEM* item = m_Drawings; item; item = item->Next() )
{
switch( item->Type() )
{
case PCB_MODULE_EDGE_T:
{
EDGE_MODULE* em = (EDGE_MODULE*) item;
wxPoint s = em->GetStart();
s.y -= m_Pos.y;
s.y = -s.y;
s.y += m_Pos.y;
em->SetStart( s );
wxPoint e = em->GetEnd();
e.y -= m_Pos.y;
e.y = -e.y;
e.y += m_Pos.y;
em->SetEnd( e );
NEGATE( em->m_Start0.y );
NEGATE( em->m_End0.y );
if( em->GetShape() == S_ARC )
{
em->SetAngle( -em->GetAngle() );
}
em->SetLayer( BOARD::ReturnFlippedLayerNumber( em->GetLayer() ) );
}
break;
case PCB_MODULE_TEXT_T:
// Reverse mirror position and mirror.
pt_texte = (TEXTE_MODULE*) item;
pt_texte->m_Pos.y -= m_Pos.y;
pt_texte->m_Pos.y = -pt_texte->m_Pos.y;
pt_texte->m_Pos.y += m_Pos.y;
NEGATE( pt_texte->m_Pos0.y );
pt_texte->m_Mirror = false;
NEGATE_AND_NORMALIZE_ANGLE_POS( pt_texte->m_Orient );
pt_texte->SetLayer( GetLayer() );
pt_texte->SetLayer( BOARD::ReturnFlippedLayerNumber( pt_texte->GetLayer() ) );
if( GetLayer() == LAYER_N_BACK )
pt_texte->SetLayer( SILKSCREEN_N_BACK );
if( GetLayer() == LAYER_N_FRONT )
pt_texte->SetLayer( SILKSCREEN_N_FRONT );
if( GetLayer() == SILKSCREEN_N_BACK
|| GetLayer() == ADHESIVE_N_BACK
|| GetLayer() == LAYER_N_BACK )
{
pt_texte->m_Mirror = true;
}
break;
default:
wxMessageBox( wxT( "MODULE::Flip() error: Unknown Draw Type" ) );
break;
}
}
CalculateBoundingBox();
}
void MODULE::SetPosition( const wxPoint& newpos )
{
wxPoint delta = newpos - m_Pos;
m_Pos += delta;
m_Reference->SetPosition( m_Reference->GetPosition() + delta );
m_Value->SetPosition( m_Value->GetPosition() + delta );
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
pad->SetPosition( pad->GetPosition() + delta );
}
for( EDA_ITEM* item = m_Drawings; item; item = item->Next() )
{
switch( item->Type() )
{
case PCB_MODULE_EDGE_T:
{
EDGE_MODULE* pt_edgmod = (EDGE_MODULE*) item;
pt_edgmod->SetDrawCoord();
break;
}
case PCB_MODULE_TEXT_T:
{
TEXTE_MODULE* pt_texte = (TEXTE_MODULE*) item;
pt_texte->m_Pos += delta;
break;
}
default:
wxMessageBox( wxT( "Draw type undefined." ) );
break;
}
}
CalculateBoundingBox();
}
void MODULE::SetOrientation( double newangle )
{
double angleChange = newangle - m_Orient; // change in rotation
wxPoint pt;
NORMALIZE_ANGLE_POS( newangle );
m_Orient = newangle;
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
pt = pad->GetPos0();
pad->SetOrientation( pad->GetOrientation() + angleChange );
RotatePoint( &pt, m_Orient );
pad->SetPosition( GetPosition() + pt );
}
// Update of the reference and value.
m_Reference->SetDrawCoord();
m_Value->SetDrawCoord();
// Displace contours and text of the footprint.
for( BOARD_ITEM* item = m_Drawings; item; item = item->Next() )
{
if( item->Type() == PCB_MODULE_EDGE_T )
{
EDGE_MODULE* pt_edgmod = (EDGE_MODULE*) item;
pt_edgmod->SetDrawCoord();
}
else if( item->Type() == PCB_MODULE_TEXT_T )
{
TEXTE_MODULE* pt_texte = (TEXTE_MODULE*) item;
pt_texte->SetDrawCoord();
}
}
CalculateBoundingBox();
}

View File

@ -68,7 +68,7 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) :
if( module && ( module->Type() == PCB_MODULE_T ) ) if( module && ( module->Type() == PCB_MODULE_T ) )
{ {
m_Pos = module->m_Pos; m_Pos = module->GetPosition();
int moduleLayer = module->GetLayer(); int moduleLayer = module->GetLayer();
@ -149,9 +149,9 @@ void TEXTE_MODULE::SetLocalCoord()
return; return;
} }
m_Pos0 = m_Pos - module->m_Pos; m_Pos0 = m_Pos - module->GetPosition();
int angle = module->m_Orient; int angle = module->GetOrientation();
RotatePoint( &m_Pos0.x, &m_Pos0.y, -angle ); RotatePoint( &m_Pos0.x, &m_Pos0.y, -angle );
} }
@ -344,7 +344,7 @@ int TEXTE_MODULE::GetDrawRotation() const
rotation = m_Orient; rotation = m_Orient;
if( module ) if( module )
rotation += module->m_Orient; rotation += module->GetOrientation();
NORMALIZE_ANGLE_POS( rotation ); NORMALIZE_ANGLE_POS( rotation );
@ -372,7 +372,7 @@ void TEXTE_MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
_( "Ref." ), _( "Value" ), _( "Text" ) _( "Ref." ), _( "Value" ), _( "Text" )
}; };
Line = module->m_Reference->m_Text; Line = module->GetReference();
aList.push_back( MSG_PANEL_ITEM( _( "Module" ), Line, DARKCYAN ) ); aList.push_back( MSG_PANEL_ITEM( _( "Module" ), Line, DARKCYAN ) );
Line = m_Text; Line = m_Text;

View File

@ -196,7 +196,7 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* testItem, const void* testDa
{ {
TEXTE_MODULE* tm = (TEXTE_MODULE*) item; TEXTE_MODULE* tm = (TEXTE_MODULE*) item;
if( tm->m_Text == wxT( "10uH" ) ) if( tm->GetText() == wxT( "10uH" ) )
{ {
breakhere++; breakhere++;
} }
@ -290,10 +290,10 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* testItem, const void* testDa
if( m_Guide->IgnoreMTextsOnCmp() && module->GetLayer()==LAYER_N_FRONT ) if( m_Guide->IgnoreMTextsOnCmp() && module->GetLayer()==LAYER_N_FRONT )
goto exit; goto exit;
if( m_Guide->IgnoreModulesVals() && item == module->m_Value ) if( m_Guide->IgnoreModulesVals() && item == &module->Value() )
goto exit; goto exit;
if( m_Guide->IgnoreModulesRefs() && item == module->m_Reference ) if( m_Guide->IgnoreModulesRefs() && item == &module->Reference() )
goto exit; goto exit;
} }
break; break;

View File

@ -72,8 +72,8 @@ static BOARD_ITEM* AllAreModulesAndReturnSmallestIfSo( GENERAL_COLLECTOR* aColle
{ {
MODULE* module = (MODULE*) (*aCollector)[i]; MODULE* module = (MODULE*) (*aCollector)[i];
int lx = module->m_BoundaryBox.GetWidth(); int lx = module->GetBoundingBox().GetWidth();
int ly = module->m_BoundaryBox.GetHeight(); int ly = module->GetBoundingBox().GetHeight();
int lmin = std::min( lx, ly ); int lmin = std::min( lx, ly );

View File

@ -158,7 +158,7 @@ void PCB_EDIT_FRAME::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync )
{ {
case PCB_MODULE_T: case PCB_MODULE_T:
module = (MODULE*) objectToSync; module = (MODULE*) objectToSync;
sprintf( cmd, "$PART: \"%s\"", TO_UTF8( module->m_Reference->m_Text ) ); sprintf( cmd, "$PART: \"%s\"", TO_UTF8( module->GetReference() ) );
break; break;
case PCB_PAD_T: case PCB_PAD_T:
@ -166,7 +166,7 @@ void PCB_EDIT_FRAME::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync )
pad = (D_PAD*) objectToSync; pad = (D_PAD*) objectToSync;
msg = pad->GetPadName(); msg = pad->GetPadName();
sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"", sprintf( cmd, "$PART: \"%s\" $PAD: \"%s\"",
TO_UTF8( module->m_Reference->m_Text ), TO_UTF8( module->GetReference() ),
TO_UTF8( msg ) ); TO_UTF8( msg ) );
break; break;
@ -184,9 +184,9 @@ void PCB_EDIT_FRAME::SendMessageToEESCHEMA( BOARD_ITEM* objectToSync )
break; break;
sprintf( cmd, "$PART: \"%s\" %s \"%s\"", sprintf( cmd, "$PART: \"%s\" %s \"%s\"",
TO_UTF8( module->m_Reference->m_Text ), TO_UTF8( module->GetReference() ),
text_key, text_key,
TO_UTF8( text_mod->m_Text ) ); TO_UTF8( text_mod->GetText() ) );
break; break;
default: default:

View File

@ -126,7 +126,7 @@ void DIALOG_MODULE_BOARD_EDITOR::InitBoardProperties()
} }
wxString msg; wxString msg;
msg << m_CurrentModule->m_Orient; msg << m_CurrentModule->GetOrientation();
m_OrientValue->SetValue( msg ); m_OrientValue->SetValue( msg );
m_OrientValue->Enable( select ); m_OrientValue->Enable( select );
@ -261,8 +261,8 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
m_ReferenceCopy = new TEXTE_MODULE( NULL ); m_ReferenceCopy = new TEXTE_MODULE( NULL );
m_ValueCopy = new TEXTE_MODULE( NULL ); m_ValueCopy = new TEXTE_MODULE( NULL );
m_ReferenceCopy->Copy( m_CurrentModule->m_Reference ); m_ReferenceCopy->Copy( &m_CurrentModule->Reference() );
m_ValueCopy->Copy( m_CurrentModule->m_Value ); m_ValueCopy->Copy( &m_CurrentModule->Value() );
m_ReferenceCtrl->SetValue( m_ReferenceCopy->m_Text ); m_ReferenceCtrl->SetValue( m_ReferenceCopy->m_Text );
m_ValueCtrl->SetValue( m_ValueCopy->m_Text ); m_ValueCtrl->SetValue( m_ValueCopy->m_Text );
@ -274,7 +274,7 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
_( "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) ); _( "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) );
/* Controls on right side of the dialog */ /* Controls on right side of the dialog */
switch( m_CurrentModule->m_Attributs & 255 ) switch( m_CurrentModule->GetAttributes() & 255 )
{ {
case 0: case 0:
m_AttributsCtrl->SetSelection( 0 ); m_AttributsCtrl->SetSelection( 0 );
@ -293,17 +293,16 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
break; break;
} }
m_AutoPlaceCtrl->SetSelection( m_AutoPlaceCtrl->SetSelection( (m_CurrentModule->IsLocked()) ? 1 : 0 );
(m_CurrentModule->m_ModuleStatus & MODULE_is_LOCKED) ? 1 : 0 );
m_AutoPlaceCtrl->SetItemToolTip( 0, m_AutoPlaceCtrl->SetItemToolTip( 0,
_( "Enable hotkey move commands and Auto Placement" ) ); _( "Enable hotkey move commands and Auto Placement" ) );
m_AutoPlaceCtrl->SetItemToolTip( 1, m_AutoPlaceCtrl->SetItemToolTip( 1,
_( "Disable hotkey move commands and Auto Placement" ) ); _( "Disable hotkey move commands and Auto Placement" ) );
m_CostRot90Ctrl->SetValue( m_CurrentModule->m_CntRot90 ); m_CostRot90Ctrl->SetValue( m_CurrentModule->GetPlacementCost90() );
m_CostRot180Ctrl->SetValue( m_CurrentModule->m_CntRot180 ); m_CostRot180Ctrl->SetValue( m_CurrentModule->GetPlacementCost180() );
// Initialize 3D parameters // Initialize 3D parameters
@ -507,8 +506,8 @@ void DIALOG_MODULE_BOARD_EDITOR::OnOkClick( wxCommandEvent& event )
} }
// Init Fields (should be first, because they can be moved or/and flipped later): // Init Fields (should be first, because they can be moved or/and flipped later):
m_CurrentModule->m_Reference->Copy( m_ReferenceCopy ); m_CurrentModule->Reference().Copy( m_ReferenceCopy );
m_CurrentModule->m_Value->Copy( m_ValueCopy ); m_CurrentModule->Value().Copy( m_ValueCopy );
// Initialize masks clearances // Initialize masks clearances
m_CurrentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) ); m_CurrentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) );
@ -553,29 +552,25 @@ void DIALOG_MODULE_BOARD_EDITOR::OnOkClick( wxCommandEvent& event )
modpos.x = ReturnValueFromTextCtrl( *m_ModPositionX ); modpos.x = ReturnValueFromTextCtrl( *m_ModPositionX );
modpos.y = ReturnValueFromTextCtrl( *m_ModPositionY ); modpos.y = ReturnValueFromTextCtrl( *m_ModPositionY );
m_CurrentModule->SetPosition( modpos ); m_CurrentModule->SetPosition( modpos );
m_CurrentModule->SetLocked( m_AutoPlaceCtrl->GetSelection() == 1 );
if( m_AutoPlaceCtrl->GetSelection() == 1 )
m_CurrentModule->m_ModuleStatus |= MODULE_is_LOCKED;
else
m_CurrentModule->m_ModuleStatus &= ~MODULE_is_LOCKED;
switch( m_AttributsCtrl->GetSelection() ) switch( m_AttributsCtrl->GetSelection() )
{ {
case 0: case 0:
m_CurrentModule->m_Attributs = 0; m_CurrentModule->SetAttributes( 0 );
break; break;
case 1: case 1:
m_CurrentModule->m_Attributs = MOD_CMS; m_CurrentModule->SetAttributes( MOD_CMS );
break; break;
case 2: case 2:
m_CurrentModule->m_Attributs = MOD_VIRTUAL; m_CurrentModule->SetAttributes( MOD_VIRTUAL );
break; break;
} }
m_CurrentModule->m_CntRot90 = m_CostRot90Ctrl->GetValue(); m_CurrentModule->SetPlacementCost90( m_CostRot90Ctrl->GetValue() );
m_CurrentModule->m_CntRot180 = m_CostRot180Ctrl->GetValue(); m_CurrentModule->SetPlacementCost180( m_CostRot180Ctrl->GetValue() );
/* Now, set orientation. must be made after others changes, /* Now, set orientation. must be made after others changes,
* because rotation changes fields positions on board according to the new orientation * because rotation changes fields positions on board according to the new orientation
@ -585,9 +580,9 @@ void DIALOG_MODULE_BOARD_EDITOR::OnOkClick( wxCommandEvent& event )
msg = m_OrientValue->GetValue(); msg = m_OrientValue->GetValue();
msg.ToLong( &orient ); msg.ToLong( &orient );
if( m_CurrentModule->m_Orient != orient ) if( m_CurrentModule->GetOrientation() != orient )
m_CurrentModule->Rotate( m_CurrentModule->m_Pos, m_CurrentModule->Rotate( m_CurrentModule->GetPosition(),
orient - m_CurrentModule->m_Orient ); orient - m_CurrentModule->GetOrientation() );
// Set component side, that also have effect on the fields positions on board // Set component side, that also have effect on the fields positions on board
bool change_layer = false; bool change_layer = false;
@ -600,7 +595,7 @@ void DIALOG_MODULE_BOARD_EDITOR::OnOkClick( wxCommandEvent& event )
change_layer = true; change_layer = true;
if( change_layer ) if( change_layer )
m_CurrentModule->Flip( m_CurrentModule->m_Pos ); m_CurrentModule->Flip( m_CurrentModule->GetPosition() );
/* Update 3D shape list */ /* Update 3D shape list */
int ii = m_3D_ShapeNameListBox->GetSelection(); int ii = m_3D_ShapeNameListBox->GetSelection();

View File

@ -105,27 +105,25 @@ void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties()
draw3D = (S3D_MASTER*) draw3D->Next(); draw3D = (S3D_MASTER*) draw3D->Next();
} }
m_DocCtrl->SetValue( m_currentModule->m_Doc ); m_DocCtrl->SetValue( m_currentModule->GetDescription() );
m_KeywordCtrl->SetValue( m_currentModule->m_KeyWord); m_KeywordCtrl->SetValue( m_currentModule->GetKeywords() );
m_referenceCopy = new TEXTE_MODULE(NULL); m_referenceCopy = new TEXTE_MODULE(NULL);
m_valueCopy = new TEXTE_MODULE(NULL); m_valueCopy = new TEXTE_MODULE(NULL);
m_referenceCopy->Copy(m_currentModule->m_Reference); m_referenceCopy->Copy( &m_currentModule->Reference() );
m_valueCopy->Copy(m_currentModule->m_Value); m_valueCopy->Copy( &m_currentModule->Value() );
m_ReferenceCtrl->SetValue( m_referenceCopy->m_Text ); m_ReferenceCtrl->SetValue( m_referenceCopy->m_Text );
m_ValueCtrl->SetValue( m_valueCopy->m_Text ); m_ValueCtrl->SetValue( m_valueCopy->m_Text );
m_ValueCtrl->SetValue( m_valueCopy->m_Text ); m_ValueCtrl->SetValue( m_valueCopy->m_Text );
m_FootprintNameCtrl->SetValue( m_currentModule->m_LibRef ); m_FootprintNameCtrl->SetValue( m_currentModule->GetLibRef() );
m_AttributsCtrl->SetItemToolTip( 0, _( "Use this attribute for most non smd components" ) ); m_AttributsCtrl->SetItemToolTip( 0, _( "Use this attribute for most non smd components" ) );
m_AttributsCtrl->SetItemToolTip( 1, m_AttributsCtrl->SetItemToolTip( 1,
_( _( "Use this attribute for smd components.\nOnly components with this option are put in the footprint position list file" ) );
"Use this attribute for smd components.\nOnly components with this option are put in the footprint position list file" ) );
m_AttributsCtrl->SetItemToolTip( 2, m_AttributsCtrl->SetItemToolTip( 2,
_( _( "Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) );
"Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) );
// Controls on right side of the dialog // Controls on right side of the dialog
switch( m_currentModule->m_Attributs & 255 ) switch( m_currentModule->GetAttributes() & 255 )
{ {
case 0: case 0:
m_AttributsCtrl->SetSelection( 0 ); m_AttributsCtrl->SetSelection( 0 );
@ -144,14 +142,13 @@ void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties()
break; break;
} }
m_AutoPlaceCtrl->SetSelection( m_AutoPlaceCtrl->SetSelection( (m_currentModule->IsLocked()) ? 1 : 0 );
(m_currentModule->m_ModuleStatus & MODULE_is_LOCKED) ? 1 : 0 );
m_AutoPlaceCtrl->SetItemToolTip( 0, _( "Enable hotkey move commands and Auto Placement" ) ); m_AutoPlaceCtrl->SetItemToolTip( 0, _( "Enable hotkey move commands and Auto Placement" ) );
m_AutoPlaceCtrl->SetItemToolTip( 1, _( "Disable hotkey move commands and Auto Placement" ) ); m_AutoPlaceCtrl->SetItemToolTip( 1, _( "Disable hotkey move commands and Auto Placement" ) );
m_CostRot90Ctrl->SetValue( m_currentModule->m_CntRot90 ); m_CostRot90Ctrl->SetValue( m_currentModule->GetPlacementCost90() );
m_CostRot180Ctrl->SetValue( m_currentModule->m_CntRot180 ); m_CostRot180Ctrl->SetValue( m_currentModule->GetPlacementCost180() );
// Initialize 3D parameters // Initialize 3D parameters
@ -392,39 +389,35 @@ void DIALOG_MODULE_MODULE_EDITOR::OnOkClick( wxCommandEvent& event )
} }
m_parent->SaveCopyInUndoList( m_currentModule, UR_MODEDIT ); m_parent->SaveCopyInUndoList( m_currentModule, UR_MODEDIT );
m_currentModule->SetLocked( m_AutoPlaceCtrl->GetSelection() == 1 );
if( m_AutoPlaceCtrl->GetSelection() == 1 )
m_currentModule->m_ModuleStatus |= MODULE_is_LOCKED;
else
m_currentModule->m_ModuleStatus &= ~MODULE_is_LOCKED;
switch( m_AttributsCtrl->GetSelection() ) switch( m_AttributsCtrl->GetSelection() )
{ {
case 0: case 0:
m_currentModule->m_Attributs = 0; m_currentModule->SetAttributes( 0 );
break; break;
case 1: case 1:
m_currentModule->m_Attributs = MOD_CMS; m_currentModule->SetAttributes( MOD_CMS );
break; break;
case 2: case 2:
m_currentModule->m_Attributs = MOD_VIRTUAL; m_currentModule->SetAttributes( MOD_VIRTUAL );
break; break;
} }
m_currentModule->m_CntRot90 = m_CostRot90Ctrl->GetValue(); m_currentModule->SetPlacementCost90( m_CostRot90Ctrl->GetValue() );
m_currentModule->m_CntRot180 = m_CostRot180Ctrl->GetValue(); m_currentModule->SetPlacementCost180( m_CostRot180Ctrl->GetValue() );
m_currentModule->m_Doc = m_DocCtrl->GetValue(); m_currentModule->SetDescription( m_DocCtrl->GetValue() );
m_currentModule->m_KeyWord = m_KeywordCtrl->GetValue(); m_currentModule->SetKeywords( m_KeywordCtrl->GetValue() );
// Init footprint name in library // Init footprint name in library
if( ! footprintName.IsEmpty() ) if( ! footprintName.IsEmpty() )
m_currentModule->m_LibRef = footprintName; m_currentModule->SetLibRef( footprintName );
// Init Fields: // Init Fields:
m_currentModule->m_Reference->Copy(m_referenceCopy ); m_currentModule->Reference().Copy( m_referenceCopy );
m_currentModule->m_Value->Copy(m_valueCopy ); m_currentModule->Value().Copy( m_valueCopy );
// Initialize masks clearances // Initialize masks clearances
m_currentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) ); m_currentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) );

View File

@ -95,9 +95,9 @@ void DialogEditModuleText::initDlg( )
{ {
wxString format = m_ModuleInfoText->GetLabel(); wxString format = m_ModuleInfoText->GetLabel();
msg.Printf( format, msg.Printf( format,
GetChars( m_module->m_Reference->m_Text ), GetChars( m_module->GetReference() ),
GetChars( m_module->m_Value->m_Text ), GetChars( m_module->GetValue() ),
(float) m_module->m_Orient / 10 ); (float) m_module->GetOrientation() / 10 );
} }
else else
{ {

View File

@ -119,14 +119,14 @@ void DIALOG_FIND::onButtonFindItemClick( wxCommandEvent& aEvent )
} }
} }
if( WildCompareString( searchString, module->m_Value->m_Text.GetData(), false ) ) if( WildCompareString( searchString, module->GetValue().GetData(), false ) )
{ {
count++; count++;
if( count > itemCount ) if( count > itemCount )
{ {
foundItem = module; foundItem = module;
pos = module->m_Pos; pos = module->GetPosition();
itemCount++; itemCount++;
break; break;
} }
@ -134,6 +134,7 @@ void DIALOG_FIND::onButtonFindItemClick( wxCommandEvent& aEvent )
} }
wxString msg; wxString msg;
if( foundItem ) if( foundItem )
{ {
parent->SetCurItem( foundItem ); parent->SetCurItem( foundItem );

View File

@ -163,7 +163,7 @@ void PCB_BASE_FRAME::ResetModuleTextSizes( const wxString & aFilter, bool aRef,
if( aRef ) if( aRef )
{ {
item = module->m_Reference; item = &module->Reference();
if( item->GetSize() != GetDesignSettings().m_ModuleTextSize || if( item->GetSize() != GetDesignSettings().m_ModuleTextSize ||
item->GetThickness() != GetDesignSettings().m_ModuleTextWidth ) item->GetThickness() != GetDesignSettings().m_ModuleTextWidth )
@ -174,7 +174,7 @@ void PCB_BASE_FRAME::ResetModuleTextSizes( const wxString & aFilter, bool aRef,
if( aValue ) if( aValue )
{ {
item = module->m_Value; item = &module->Value();
if( item->GetSize() != GetDesignSettings().m_ModuleTextSize || if( item->GetSize() != GetDesignSettings().m_ModuleTextSize ||
item->GetThickness() != GetDesignSettings().m_ModuleTextWidth ) item->GetThickness() != GetDesignSettings().m_ModuleTextWidth )
@ -215,14 +215,14 @@ void PCB_BASE_FRAME::ResetModuleTextSizes( const wxString & aFilter, bool aRef,
if( aRef ) if( aRef )
{ {
module->m_Reference->SetThickness( GetDesignSettings().m_ModuleTextWidth ); module->Reference().SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Reference->SetSize( GetDesignSettings().m_ModuleTextSize ); module->Reference().SetSize( GetDesignSettings().m_ModuleTextSize );
} }
if( aValue ) if( aValue )
{ {
module->m_Value->SetThickness( GetDesignSettings().m_ModuleTextWidth ); module->Value().SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Value->SetSize( GetDesignSettings().m_ModuleTextSize ); module->Value().SetSize( GetDesignSettings().m_ModuleTextSize );
} }
if( aOthers ) if( aOthers )

View File

@ -184,12 +184,12 @@ void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
{ {
MODULE* module = duplicate[ii]; MODULE* module = duplicate[ii];
if( module->m_Reference->m_Text.IsEmpty() ) if( module->GetReference().IsEmpty() )
list << wxT("<br>") << wxT("[noref)"); list << wxT("<br>") << wxT("[noref)");
else else
list << wxT("<br>") << module->m_Reference->m_Text; list << wxT("<br>") << module->GetReference();
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)"); list << wxT(" (<i>") << module->GetValue() << wxT("</i>)");
list << wxT(" @ "); list << wxT(" @ ");
list << CoordinateToString( module->GetPosition().x ), list << CoordinateToString( module->GetPosition().x ),
list << wxT(", ") << CoordinateToString( module->GetPosition().y ), list << wxT(", ") << CoordinateToString( module->GetPosition().y ),
@ -230,11 +230,12 @@ void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
{ {
MODULE* module = notInNetlist[ii]; MODULE* module = notInNetlist[ii];
if( module->m_Reference->m_Text.IsEmpty() ) if( module->GetReference().IsEmpty() )
list << wxT("<br>") << wxT("[noref)"); list << wxT("<br>") << wxT("[noref)");
else else
list << wxT("<br>") << module->m_Reference->m_Text ; list << wxT("<br>") << module->GetReference() ;
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)");
list << wxT(" (<i>") << module->GetValue() << wxT("</i>)");
list << wxT(" @ "); list << wxT(" @ ");
list << CoordinateToString( module->GetPosition().x ), list << CoordinateToString( module->GetPosition().x ),
list << wxT(", ") << CoordinateToString( module->GetPosition().y ), list << wxT(", ") << CoordinateToString( module->GetPosition().y ),

View File

@ -136,7 +136,7 @@ bool PCB_EDIT_FRAME::ReOrientModules( const wxString& ModuleMask,
if( module->IsLocked() && !include_fixe ) if( module->IsLocked() && !include_fixe )
continue; continue;
if( WildCompareString( ModuleMask, module->m_Reference->m_Text, false ) ) if( WildCompareString( ModuleMask, module->GetReference(), false ) )
{ {
modified = true; modified = true;
Rotate_Module( NULL, module, Orient, false ); Rotate_Module( NULL, module, Orient, false );

View File

@ -109,27 +109,27 @@ DIALOG_DIMENSION_EDITOR::DIALOG_DIMENSION_EDITOR( PCB_EDIT_FRAME* aParent,
CurrentDimension = aDimension; CurrentDimension = aDimension;
if( aDimension->m_Text.m_Mirror ) if( aDimension->Text().IsMirrored() )
m_rbMirror->SetSelection( 1 ); m_rbMirror->SetSelection( 1 );
else else
m_rbMirror->SetSelection( 0 ); m_rbMirror->SetSelection( 0 );
m_Name->SetValue( aDimension->m_Text.m_Text ); m_Name->SetValue( aDimension->Text().GetText() );
// Enter size value in dialog // Enter size value in dialog
PutValueInLocalUnits( *m_TxtSizeXCtrl, aDimension->m_Text.m_Size.x ); PutValueInLocalUnits( *m_TxtSizeXCtrl, aDimension->Text().GetSize().x );
AddUnitSymbol( *m_staticTextSizeX ); AddUnitSymbol( *m_staticTextSizeX );
PutValueInLocalUnits( *m_TxtSizeYCtrl, aDimension->m_Text.m_Size.y ); PutValueInLocalUnits( *m_TxtSizeYCtrl, aDimension->Text().GetSize().y );
AddUnitSymbol( *m_staticTextSizeY ); AddUnitSymbol( *m_staticTextSizeY );
// Enter lines thickness value in dialog // Enter lines thickness value in dialog
PutValueInLocalUnits( *m_TxtWidthCtrl, aDimension->m_Width ); PutValueInLocalUnits( *m_TxtWidthCtrl, aDimension->GetWidth() );
AddUnitSymbol( *m_staticTextWidth ); AddUnitSymbol( *m_staticTextWidth );
// Enter position value in dialog // Enter position value in dialog
PutValueInLocalUnits( *m_textCtrlPosX, aDimension->m_Text.m_Pos.x ); PutValueInLocalUnits( *m_textCtrlPosX, aDimension->Text().GetPosition().x );
AddUnitSymbol( *m_staticTextPosX ); AddUnitSymbol( *m_staticTextPosX );
PutValueInLocalUnits( *m_textCtrlPosY, aDimension->m_Text.m_Pos.y ); PutValueInLocalUnits( *m_textCtrlPosY, aDimension->Text().GetPosition().y );
AddUnitSymbol( *m_staticTextPosY ); AddUnitSymbol( *m_staticTextPosY );
for( int layer = FIRST_NO_COPPER_LAYER; layer<NB_LAYERS; layer++ ) for( int layer = FIRST_NO_COPPER_LAYER; layer<NB_LAYERS; layer++ )
@ -169,21 +169,23 @@ void DIALOG_DIMENSION_EDITOR::OnOKClick( wxCommandEvent& event )
// Get new size value: // Get new size value:
msg = m_TxtSizeXCtrl->GetValue(); msg = m_TxtSizeXCtrl->GetValue();
CurrentDimension->m_Text.m_Size.x = ReturnValueFromString( g_UserUnit, msg ); CurrentDimension->Text().SetWidth( ReturnValueFromString( g_UserUnit, msg ) );
msg = m_TxtSizeYCtrl->GetValue(); msg = m_TxtSizeYCtrl->GetValue();
CurrentDimension->m_Text.m_Size.y = ReturnValueFromString( g_UserUnit, msg ); CurrentDimension->Text().SetHeight( ReturnValueFromString( g_UserUnit, msg ) );
// Get new position value: // Get new position value:
// It will be copied later in dimension, because // It will be copied later in dimension, because
msg = m_textCtrlPosX->GetValue(); msg = m_textCtrlPosX->GetValue();
CurrentDimension->m_Text.m_Pos.x = ReturnValueFromString( g_UserUnit, msg ); wxPoint pos;
pos.x = ReturnValueFromString( g_UserUnit, msg );
msg = m_textCtrlPosY->GetValue(); msg = m_textCtrlPosY->GetValue();
CurrentDimension->m_Text.m_Pos.y = ReturnValueFromString( g_UserUnit, msg ); pos.y = ReturnValueFromString( g_UserUnit, msg );
CurrentDimension->Text().SetPosition( pos );
// Get new line thickness value: // Get new line thickness value:
msg = m_TxtWidthCtrl->GetValue(); msg = m_TxtWidthCtrl->GetValue();
int width = ReturnValueFromString( g_UserUnit, msg ); int width = ReturnValueFromString( g_UserUnit, msg );
int maxthickness = Clamp_Text_PenSize( width, CurrentDimension->m_Text.m_Size ); int maxthickness = Clamp_Text_PenSize( width, CurrentDimension->Text().GetSize() );
if( width > maxthickness ) if( width > maxthickness )
{ {
@ -192,9 +194,10 @@ void DIALOG_DIMENSION_EDITOR::OnOKClick( wxCommandEvent& event )
width = maxthickness; width = maxthickness;
} }
CurrentDimension->m_Text.m_Thickness = CurrentDimension->m_Width = width ; CurrentDimension->SetWidth( width );
CurrentDimension->Text().SetThickness( width );
CurrentDimension->m_Text.m_Mirror = ( m_rbMirror->GetSelection() == 1 ) ? true : false; CurrentDimension->Text().SetMirrored( ( m_rbMirror->GetSelection() == 1 ) ? true : false );
CurrentDimension->SetLayer( m_SelLayerBox->GetCurrentSelection() + FIRST_NO_COPPER_LAYER ); CurrentDimension->SetLayer( m_SelLayerBox->GetCurrentSelection() + FIRST_NO_COPPER_LAYER );
@ -252,18 +255,18 @@ DIMENSION* PCB_EDIT_FRAME::EditDimension( DIMENSION* aDimension, wxDC* aDC )
aDimension->m_arrowD1O = aDimension->m_arrowD1F = pos; aDimension->m_arrowD1O = aDimension->m_arrowD1F = pos;
aDimension->m_arrowD2O = aDimension->m_arrowD2F = pos; aDimension->m_arrowD2O = aDimension->m_arrowD2F = pos;
aDimension->m_Text.m_Size = GetBoard()->GetDesignSettings().m_PcbTextSize; aDimension->Text().SetSize( GetBoard()->GetDesignSettings().m_PcbTextSize );
int width = GetBoard()->GetDesignSettings().m_PcbTextWidth; int width = GetBoard()->GetDesignSettings().m_PcbTextWidth;
int maxthickness = Clamp_Text_PenSize(width, aDimension->m_Text.m_Size ); int maxthickness = Clamp_Text_PenSize(width, aDimension->Text().GetSize() );
if( width > maxthickness ) if( width > maxthickness )
{ {
width = maxthickness; width = maxthickness;
} }
aDimension->m_Text.m_Thickness = aDimension->m_Width = width ; aDimension->Text().SetThickness( width );
aDimension->SetWidth( width );
aDimension->AdjustDimensionDetails( ); aDimension->AdjustDimensionDetails();
aDimension->Draw( m_canvas, aDC, GR_XOR ); aDimension->Draw( m_canvas, aDC, GR_XOR );
@ -377,13 +380,13 @@ void PCB_EDIT_FRAME::BeginMoveDimensionText( DIMENSION* aItem, wxDC* DC )
return; return;
// Store the initial position for undo/abort command // Store the initial position for undo/abort command
initialTextPosition = aItem->m_Text.m_Pos; initialTextPosition = aItem->Text().GetPosition();
aItem->Draw( m_canvas, DC, GR_XOR ); aItem->Draw( m_canvas, DC, GR_XOR );
aItem->SetFlags( IS_MOVED ); aItem->SetFlags( IS_MOVED );
SetMsgPanel( aItem ); SetMsgPanel( aItem );
GetScreen()->SetCrossHairPosition( aItem->m_Text.m_Pos ); GetScreen()->SetCrossHairPosition( aItem->Text().GetPosition() );
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
m_canvas->SetMouseCapture( MoveDimensionText, AbortMoveDimensionText ); m_canvas->SetMouseCapture( MoveDimensionText, AbortMoveDimensionText );
@ -404,7 +407,7 @@ static void MoveDimensionText( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
if( aErase ) if( aErase )
dimension->Draw( aPanel, aDC, GR_XOR ); dimension->Draw( aPanel, aDC, GR_XOR );
dimension->m_Text.m_Pos = aPanel->GetScreen()->GetCrossHairPosition(); dimension->Text().SetPosition( aPanel->GetScreen()->GetCrossHairPosition() );
dimension->Draw( aPanel, aDC, GR_XOR ); dimension->Draw( aPanel, aDC, GR_XOR );
} }
@ -425,7 +428,7 @@ void AbortMoveDimensionText( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
return; return;
dimension->Draw( aPanel, aDC, GR_XOR ); dimension->Draw( aPanel, aDC, GR_XOR );
dimension->m_Text.m_Pos = initialTextPosition; dimension->Text().SetPosition( initialTextPosition );
dimension->ClearFlags(); dimension->ClearFlags();
dimension->Draw( aPanel, aDC, GR_OR ); dimension->Draw( aPanel, aDC, GR_OR );
} }
@ -444,9 +447,10 @@ void PCB_EDIT_FRAME::PlaceDimensionText( DIMENSION* aItem, wxDC* DC )
aItem->Draw( m_canvas, DC, GR_OR ); aItem->Draw( m_canvas, DC, GR_OR );
OnModify(); OnModify();
EXCHG( aItem->m_Text.m_Pos, initialTextPosition ); wxPoint tmp = aItem->Text().GetPosition();
aItem->Text().SetPosition( initialTextPosition );
SaveCopyInUndoList( aItem, UR_CHANGED ); SaveCopyInUndoList( aItem, UR_CHANGED );
EXCHG( aItem->m_Text.m_Pos, initialTextPosition ); aItem->Text().SetPosition( tmp );
aItem->ClearFlags(); aItem->ClearFlags();
} }

View File

@ -355,7 +355,7 @@ EDGE_MODULE* FOOTPRINT_EDIT_FRAME::Begin_Edge_Module( EDGE_MODULE* aEdge,
// Initialize the relative coordinates // Initialize the relative coordinates
aEdge->SetStart0( aEdge->GetStart() - module->GetPosition() ); aEdge->SetStart0( aEdge->GetStart() - module->GetPosition() );
RotatePoint( &aEdge->m_Start0, -module->m_Orient ); RotatePoint( &aEdge->m_Start0, -module->GetOrientation() );
aEdge->m_End0 = aEdge->m_Start0; aEdge->m_End0 = aEdge->m_Start0;
module->CalculateBoundingBox(); module->CalculateBoundingBox();

24
pcbnew/edit.cpp Normal file → Executable file
View File

@ -638,13 +638,13 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
SendMessageToEESCHEMA( module ); SendMessageToEESCHEMA( module );
GetScreen()->SetCrossHairPosition( module->m_Pos ); GetScreen()->SetCrossHairPosition( module->GetPosition() );
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
StartMoveModule( module, &dc, id == ID_POPUP_PCB_DRAG_MODULE_REQUEST ); StartMoveModule( module, &dc, id == ID_POPUP_PCB_DRAG_MODULE_REQUEST );
break; break;
@ -660,7 +660,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
@ -686,7 +686,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
@ -714,14 +714,14 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
/* This is a simple rotation, no other editing in progress */ /* This is a simple rotation, no other editing in progress */
if( !GetCurItem()->IsMoving() ) if( !GetCurItem()->IsMoving() )
SaveCopyInUndoList(GetCurItem(), UR_ROTATED, ((MODULE*)GetCurItem())->m_Pos); SaveCopyInUndoList( GetCurItem(), UR_ROTATED, ((MODULE*)GetCurItem())->GetPosition() );
Rotate_Module( &dc, (MODULE*) GetCurItem(), g_RotationAngle, true ); Rotate_Module( &dc, (MODULE*) GetCurItem(), g_RotationAngle, true );
break; break;
@ -742,7 +742,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
@ -750,7 +750,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
/* This is a simple rotation, no other editing in progress */ /* This is a simple rotation, no other editing in progress */
if( !GetCurItem()->IsMoving() ) if( !GetCurItem()->IsMoving() )
SaveCopyInUndoList( GetCurItem(), UR_ROTATED_CLOCKWISE, SaveCopyInUndoList( GetCurItem(), UR_ROTATED_CLOCKWISE,
((MODULE*)GetCurItem())->m_Pos ); ((MODULE*)GetCurItem())->GetPosition() );
Rotate_Module( &dc, (MODULE*) GetCurItem(), -g_RotationAngle, true ); Rotate_Module( &dc, (MODULE*) GetCurItem(), -g_RotationAngle, true );
break; break;
@ -771,14 +771,14 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Footprint %s found, but it is locked" ), msg.Printf( _( "Footprint %s found, but it is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
/* This is a simple flip, no other editing in progress */ /* This is a simple flip, no other editing in progress */
if( !GetCurItem()->IsMoving() ) if( !GetCurItem()->IsMoving() )
SaveCopyInUndoList(GetCurItem(), UR_FLIPPED, ((MODULE*)GetCurItem())->m_Pos); SaveCopyInUndoList( GetCurItem(), UR_FLIPPED, ((MODULE*)GetCurItem())->GetPosition() );
Change_Side_Module( (MODULE*) GetCurItem(), &dc ); Change_Side_Module( (MODULE*) GetCurItem(), &dc );
break; break;
@ -833,7 +833,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "The parent (%s) of the pad is locked" ), msg.Printf( _( "The parent (%s) of the pad is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }
@ -852,7 +852,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
msg.Printf( _( "The parent (%s) of the pad is locked" ), msg.Printf( _( "The parent (%s) of the pad is locked" ),
module->m_Reference->m_Text.GetData() ); module->GetReference().GetData() );
DisplayInfoMessage( this, msg ); DisplayInfoMessage( this, msg );
break; break;
} }

View File

@ -75,14 +75,14 @@ void FOOTPRINT_EDIT_FRAME::Place_Ancre( MODULE* aModule )
if( aModule == NULL ) if( aModule == NULL )
return; return;
moveVector = aModule->m_Pos - GetScreen()->GetCrossHairPosition(); moveVector = aModule->GetPosition() - GetScreen()->GetCrossHairPosition();
aModule->m_Pos = GetScreen()->GetCrossHairPosition(); aModule->SetPosition( GetScreen()->GetCrossHairPosition() );
/* Update the relative coordinates: /* Update the relative coordinates:
* The coordinates are relative to the anchor point. * The coordinates are relative to the anchor point.
* Calculate deltaX and deltaY from the anchor. */ * Calculate deltaX and deltaY from the anchor. */
RotatePoint( &moveVector, -aModule->m_Orient ); RotatePoint( &moveVector, -aModule->GetOrientation() );
// Update the pad coordinates. // Update the pad coordinates.
for( D_PAD* pad = (D_PAD*) aModule->m_Pads; pad; pad = pad->Next() ) for( D_PAD* pad = (D_PAD*) aModule->m_Pads; pad; pad = pad->Next() )

View File

@ -74,10 +74,10 @@ TEXTE_MODULE* PCB_BASE_FRAME::CreateTextModule( MODULE* Module, wxDC* DC )
Text->SetFlags( IS_NEW ); Text->SetFlags( IS_NEW );
Text->m_Text = wxT( "text" ); Text->SetText( wxT( "text" ) );
GetDesignSettings().m_ModuleTextWidth = Clamp_Text_PenSize( GetDesignSettings().m_ModuleTextWidth, GetDesignSettings().m_ModuleTextWidth = Clamp_Text_PenSize( GetDesignSettings().m_ModuleTextWidth,
std::min( GetDesignSettings().m_ModuleTextSize.x, GetDesignSettings().m_ModuleTextSize.y ), true ); std::min( GetDesignSettings().m_ModuleTextSize.x, GetDesignSettings().m_ModuleTextSize.y ), true );
Text->m_Size = GetDesignSettings().m_ModuleTextSize; Text->m_Size = GetDesignSettings().m_ModuleTextSize;
Text->m_Thickness = GetDesignSettings().m_ModuleTextWidth; Text->m_Thickness = GetDesignSettings().m_ModuleTextWidth;
Text->m_Pos = GetScreen()->GetCrossHairPosition(); Text->m_Pos = GetScreen()->GetCrossHairPosition();
@ -247,8 +247,8 @@ void PCB_BASE_FRAME::PlaceTexteModule( TEXTE_MODULE* Text, wxDC* DC )
// Set the new position for text. // Set the new position for text.
Text->m_Pos = GetScreen()->GetCrossHairPosition(); Text->m_Pos = GetScreen()->GetCrossHairPosition();
wxPoint textRelPos = Text->m_Pos - Module->m_Pos; wxPoint textRelPos = Text->GetPosition() - Module->GetPosition();
RotatePoint( &textRelPos, -Module->m_Orient ); RotatePoint( &textRelPos, -Module->GetOrientation() );
Text->SetPos0( textRelPos ); Text->SetPos0( textRelPos );
Text->ClearFlags(); Text->ClearFlags();
Module->ClearFlags(); Module->ClearFlags();

View File

@ -163,12 +163,12 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
for( module = pcb->m_Modules; module != NULL; module = module->Next() ) for( module = pcb->m_Modules; module != NULL; module = module->Next() )
{ {
module->flag = 0; module->SetFlag( 0 );
if( module->GetLayer() == LAYER_N_BACK ) if( module->GetLayer() == LAYER_N_BACK )
{ {
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
module->flag = 1; module->SetFlag( 1 );
} }
} }
@ -200,10 +200,10 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
// Undo the footprints modifications (flipped footprints) // Undo the footprints modifications (flipped footprints)
for( module = pcb->m_Modules; module != NULL; module = module->Next() ) for( module = pcb->m_Modules; module != NULL; module = module->Next() )
{ {
if( module->flag ) if( module->GetFlag() )
{ {
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
module->flag = 0; module->SetFlag( 0 );
} }
} }
} }
@ -519,11 +519,11 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
if( ( pad->GetLayerMask() & ALL_CU_LAYERS ) == LAYER_BACK ) if( ( pad->GetLayerMask() & ALL_CU_LAYERS ) == LAYER_BACK )
{ {
layer = ( module->flag ) ? "TOP" : "BOTTOM"; layer = ( module->GetFlag() ) ? "TOP" : "BOTTOM";
} }
else if( ( pad->GetLayerMask() & ALL_CU_LAYERS ) == LAYER_FRONT ) else if( ( pad->GetLayerMask() & ALL_CU_LAYERS ) == LAYER_FRONT )
{ {
layer = ( module->flag ) ? "BOTTOM" : "TOP"; layer = ( module->GetFlag() ) ? "BOTTOM" : "TOP";
} }
pad->ReturnStringPadName( pinname ); pad->ReturnStringPadName( pinname );
@ -535,7 +535,7 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
NORMALIZE_ANGLE_POS( orient ); NORMALIZE_ANGLE_POS( orient );
// Bottom side modules use the flipped padstack // Bottom side modules use the flipped padstack
fprintf( aFile, (module->flag) ? fprintf( aFile, (module->GetFlag()) ?
"PIN %s PAD%dF %g %g %s %g %s\n" : "PIN %s PAD%dF %g %g %s %g %s\n" :
"PIN %s PAD%d %g %g %s %g %s\n", "PIN %s PAD%d %g %g %s %g %s\n",
TO_UTF8( pinname ), pad->GetSubRatsnest(), TO_UTF8( pinname ), pad->GetSubRatsnest(),
@ -565,7 +565,7 @@ static void CreateComponentsSection( FILE* aFile, BOARD* aPcb )
const char* flip; const char* flip;
int orient = module->GetOrientation(); int orient = module->GetOrientation();
if( module->flag ) if( module->GetFlag() )
{ {
mirror = "0"; mirror = "0";
flip = "FLIP"; flip = "FLIP";
@ -578,52 +578,51 @@ static void CreateComponentsSection( FILE* aFile, BOARD* aPcb )
} }
fprintf( aFile, "\nCOMPONENT %s\n", fprintf( aFile, "\nCOMPONENT %s\n",
TO_UTF8( module->m_Reference->m_Text ) ); TO_UTF8( module->GetReference() ) );
fprintf( aFile, "DEVICE %s_%s\n", fprintf( aFile, "DEVICE %s_%s\n",
TO_UTF8( module->m_Reference->m_Text ), TO_UTF8( module->GetReference() ),
TO_UTF8( module->m_Value->m_Text ) ); TO_UTF8( module->GetValue() ) );
fprintf( aFile, "PLACE %g %g\n", fprintf( aFile, "PLACE %g %g\n",
MapXTo( module->m_Pos.x ), MapXTo( module->GetPosition().x ),
MapYTo( module->m_Pos.y ) ); MapYTo( module->GetPosition().y ) );
fprintf( aFile, "LAYER %s\n", fprintf( aFile, "LAYER %s\n",
(module->flag) ? "BOTTOM" : "TOP" ); (module->GetFlag()) ? "BOTTOM" : "TOP" );
fprintf( aFile, "ROTATION %g\n", fprintf( aFile, "ROTATION %g\n",
orient / 10.0 ); orient / 10.0 );
fprintf( aFile, "SHAPE %s %s %s\n", fprintf( aFile, "SHAPE %s %s %s\n",
TO_UTF8( module->m_Reference->m_Text ), TO_UTF8( module->GetReference() ),
mirror, flip ); mirror, flip );
// Text on silk layer: RefDes and value (are they actually useful?) // Text on silk layer: RefDes and value (are they actually useful?)
textmod = module->m_Reference; textmod = &module->Reference();
for( int ii = 0; ii < 2; ii++ ) for( int ii = 0; ii < 2; ii++ )
{ {
int orient = textmod->GetOrientation(); int orient = textmod->GetOrientation();
wxString layer = GenCADLayerName[(module->flag) ? wxString layer = GenCADLayerName[(module->GetFlag()) ?
SILKSCREEN_N_BACK : SILKSCREEN_N_FRONT]; SILKSCREEN_N_BACK : SILKSCREEN_N_FRONT];
fprintf( aFile, "TEXT %g %g %g %g %s %s \"%s\"", fprintf( aFile, "TEXT %g %g %g %g %s %s \"%s\"",
textmod->GetPos0().x / SCALE_FACTOR, textmod->GetPos0().x / SCALE_FACTOR,
-textmod->GetPos0().y / SCALE_FACTOR, -textmod->GetPos0().y / SCALE_FACTOR,
textmod->GetSize().x / SCALE_FACTOR, textmod->GetSize().x / SCALE_FACTOR,
orient / 10.0, orient / 10.0,
mirror, mirror,
TO_UTF8( layer ), TO_UTF8( layer ),
TO_UTF8( textmod->m_Text ) ); TO_UTF8( textmod->GetText() ) );
// Please note, the width is approx // Please note, the width is approx
fprintf( aFile, " 0 0 %g %g\n", fprintf( aFile, " 0 0 %g %g\n",
( textmod->GetSize().x * textmod->m_Text.Len() ) ( textmod->GetSize().x * textmod->GetLength() ) / SCALE_FACTOR,
/ SCALE_FACTOR,
textmod->GetSize().y / SCALE_FACTOR ); textmod->GetSize().y / SCALE_FACTOR );
textmod = module->m_Value; // Dirty trick for the second iteration textmod = &module->Value(); // Dirty trick for the second iteration
} }
// The SHEET is a 'generic description' for referencing the component // The SHEET is a 'generic description' for referencing the component
fprintf( aFile, "SHEET \"RefDes: %s, Value: %s\"\n", fprintf( aFile, "SHEET \"RefDes: %s, Value: %s\"\n",
TO_UTF8( module->m_Reference->m_Text ), TO_UTF8( module->GetReference() ),
TO_UTF8( module->m_Value->m_Text ) ); TO_UTF8( module->GetValue() ) );
} }
fputs( "$ENDCOMPONENTS\n\n", aFile ); fputs( "$ENDCOMPONENTS\n\n", aFile );
@ -671,8 +670,8 @@ static void CreateSignalsSection( FILE* aFile, BOARD* aPcb )
pad->ReturnStringPadName( padname ); pad->ReturnStringPadName( padname );
msg.Printf( wxT( "NODE %s %s" ), msg.Printf( wxT( "NODE %s %s" ),
GetChars( module->m_Reference->m_Text ), GetChars( module->GetReference() ),
GetChars( padname ) ); GetChars( padname ) );
fputs( TO_UTF8( msg ), aFile ); fputs( TO_UTF8( msg ), aFile );
fputs( "\n", aFile ); fputs( "\n", aFile );
@ -861,15 +860,15 @@ static void CreateDevicesSection( FILE* aFile, BOARD* aPcb )
for( module = aPcb->m_Modules; module != NULL; module = module->Next() ) for( module = aPcb->m_Modules; module != NULL; module = module->Next() )
{ {
fprintf( aFile, "DEVICE \"%s\"\n", TO_UTF8( module->m_Reference->m_Text ) ); fprintf( aFile, "DEVICE \"%s\"\n", TO_UTF8( module->GetReference() ) );
fprintf( aFile, "PART \"%s\"\n", TO_UTF8( module->m_Value->m_Text ) ); fprintf( aFile, "PART \"%s\"\n", TO_UTF8( module->GetValue() ) );
fprintf( aFile, "PACKAGE \"%s\"\n", TO_UTF8( module->m_LibRef ) ); fprintf( aFile, "PACKAGE \"%s\"\n", TO_UTF8( module->GetLibRef() ) );
// The TYPE attribute is almost freeform // The TYPE attribute is almost freeform
const char* ty = "TH"; const char* ty = "TH";
if( module->m_Attributs & MOD_CMS ) if( module->GetAttributes() & MOD_CMS )
ty = "SMD"; ty = "SMD";
if( module->m_Attributs & MOD_VIRTUAL ) if( module->GetAttributes() & MOD_VIRTUAL )
ty = "VIRTUAL"; ty = "VIRTUAL";
fprintf( aFile, "TYPE %s\n", ty ); fprintf( aFile, "TYPE %s\n", ty );
} }
@ -990,19 +989,19 @@ static void FootprintWriteShape( FILE* aFile, MODULE* module )
int Yaxis_sign = -1; int Yaxis_sign = -1;
// Flip for bottom side components // Flip for bottom side components
if( module->flag ) if( module->GetFlag() )
Yaxis_sign = 1; Yaxis_sign = 1;
/* creates header: */ /* creates header: */
fprintf( aFile, "\nSHAPE %s\n", TO_UTF8( module->m_Reference->m_Text ) ); fprintf( aFile, "\nSHAPE %s\n", TO_UTF8( module->GetReference() ) );
if( module->m_Attributs & MOD_VIRTUAL ) if( module->GetAttributes() & MOD_VIRTUAL )
{ {
fprintf( aFile, "INSERT SMD\n" ); fprintf( aFile, "INSERT SMD\n" );
} }
else else
{ {
if( module->m_Attributs & MOD_CMS ) if( module->GetAttributes() & MOD_CMS )
{ {
fprintf( aFile, "INSERT SMD\n" ); fprintf( aFile, "INSERT SMD\n" );
} }

37
pcbnew/export_vrml.cpp Normal file → Executable file
View File

@ -264,6 +264,7 @@ static void write_triangle_bag( FILE* output_file, int color_index, //{{{
else else
{ {
marker_found++; marker_found++;
switch( marker_found ) switch( marker_found )
{ {
case 1: // Material marker case 1: // Material marker
@ -309,6 +310,7 @@ static void write_triangle_bag( FILE* output_file, int color_index, //{{{
// Index marker // Index marker
// OK, that's sick ... // OK, that's sick ...
int j = 0; int j = 0;
for( TRIANGLEBAG::const_iterator i = triangles.begin(); for( TRIANGLEBAG::const_iterator i = triangles.begin();
i != triangles.end(); i != triangles.end();
i++ ) i++ )
@ -323,6 +325,7 @@ static void write_triangle_bag( FILE* output_file, int color_index, //{{{
break; break;
} }
} }
lineno++; lineno++;
} }
} }
@ -523,10 +526,13 @@ static void export_vrml_arc( int layer, double centerx, double centery,
double start_angle = atan2( arc_starty - centery, arc_startx - centerx ); double start_angle = atan2( arc_starty - centery, arc_startx - centerx );
int count = KiROUND( arc_angle / 360.0 * SEGM_COUNT_PER_360 ); int count = KiROUND( arc_angle / 360.0 * SEGM_COUNT_PER_360 );
if( count < 0 ) if( count < 0 )
count = -count; count = -count;
if( count == 0 ) if( count == 0 )
count = 1; count = 1;
double divisions = arc_angle*M_PI/180.0 / count; double divisions = arc_angle*M_PI/180.0 / count;
double outer_radius = hypot( arc_starty - centery, arc_startx - centerx ) double outer_radius = hypot( arc_starty - centery, arc_startx - centerx )
@ -561,13 +567,17 @@ static void export_vrml_varc( TRIANGLEBAG& triangles,
double radius = hypot( arc_starty - centery, arc_startx - centerx ); double radius = hypot( arc_starty - centery, arc_startx - centerx );
int count = KiROUND( arc_angle / 360.0 * SEGM_COUNT_PER_360 ); int count = KiROUND( arc_angle / 360.0 * SEGM_COUNT_PER_360 );
if( count < 0 ) if( count < 0 )
count = -count; count = -count;
if( count == 0 ) if( count == 0 )
count = 1; count = 1;
double divisions = arc_angle*M_PI/180.0 / count; double divisions = arc_angle*M_PI/180.0 / count;
double alpha = 0; double alpha = 0;
for( int ii = 0; ii <= count; alpha += divisions, ii++ ) for( int ii = 0; ii <= count; alpha += divisions, ii++ )
{ {
double angle_rot = start_angle + alpha; double angle_rot = start_angle + alpha;
@ -665,12 +675,13 @@ static void export_vrml_pcbtext( TEXTE_PCB* text )
if( text->m_MultilineAllowed ) if( text->m_MultilineAllowed )
{ {
wxPoint pos = text->m_Pos; wxPoint pos = text->m_Pos;
wxArrayString* list = wxStringSplit( text->m_Text, '\n' ); wxArrayString* list = wxStringSplit( text->GetText(), '\n' );
wxPoint offset; wxPoint offset;
offset.y = text->GetInterline(); offset.y = text->GetInterline();
RotatePoint( &offset, text->GetOrientation() ); RotatePoint( &offset, text->GetOrientation() );
for( unsigned i = 0; i<list->Count(); i++ ) for( unsigned i = 0; i<list->Count(); i++ )
{ {
wxString txt = list->Item( i ); wxString txt = list->Item( i );
@ -688,7 +699,7 @@ static void export_vrml_pcbtext( TEXTE_PCB* text )
else else
{ {
DrawGraphicText( NULL, NULL, text->m_Pos, BLACK, DrawGraphicText( NULL, NULL, text->m_Pos, BLACK,
text->m_Text, text->GetOrientation(), size, text->GetText(), text->GetOrientation(), size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->m_Thickness, text->m_Italic, text->m_Thickness, text->m_Italic,
true, true,
@ -804,9 +815,11 @@ static void export_vrml_zones( BOARD* pcb )
for( int ic = 1; ic <= imax; ic++ ) for( int ic = 1; ic <= imax; ic++ )
{ {
CPolyPt* endcorner = &zone->m_FilledPolysList[ic]; CPolyPt* endcorner = &zone->m_FilledPolysList[ic];
if( begincorner->utility == 0 ) // Draw only basic outlines, not extra segments if( begincorner->utility == 0 ) // Draw only basic outlines, not extra segments
export_vrml_line( layer, begincorner->x, begincorner->y, export_vrml_line( layer, begincorner->x, begincorner->y,
endcorner->x, endcorner->y, width, 1 ); endcorner->x, endcorner->y, width, 1 );
if( (endcorner->end_contour) || (ic == imax) ) // the last corner of a filled area is found: draw it if( (endcorner->end_contour) || (ic == imax) ) // the last corner of a filled area is found: draw it
{ {
if( endcorner->utility == 0 ) // Draw only basic outlines, not extra segments if( endcorner->utility == 0 ) // Draw only basic outlines, not extra segments
@ -838,7 +851,7 @@ static void export_vrml_text_module( TEXTE_MODULE* module ) //{{{
s_text_layer = module->GetLayer(); s_text_layer = module->GetLayer();
s_text_width = module->m_Thickness; s_text_width = module->m_Thickness;
DrawGraphicText( NULL, NULL, module->m_Pos, BLACK, DrawGraphicText( NULL, NULL, module->m_Pos, BLACK,
module->m_Text, module->GetDrawRotation(), size, module->GetText(), module->GetDrawRotation(), size,
module->m_HJustify, module->m_VJustify, module->m_HJustify, module->m_VJustify,
module->m_Thickness, module->m_Italic, module->m_Thickness, module->m_Italic,
true, true,
@ -1019,8 +1032,8 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
double boardIU2WRML ) double boardIU2WRML )
{ {
// Reference and value // Reference and value
export_vrml_text_module( aModule->m_Reference ); export_vrml_text_module( &aModule->Reference() );
export_vrml_text_module( aModule->m_Value ); export_vrml_text_module( &aModule->Value() );
// Export module edges // Export module edges
for( EDA_ITEM* item = aModule->m_Drawings; item != NULL; item = item->Next() ) for( EDA_ITEM* item = aModule->m_Drawings; item != NULL; item = item->Next() )
@ -1084,11 +1097,11 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
double roty = - vrmlm->m_MatRotation.y; double roty = - vrmlm->m_MatRotation.y;
double rotz = - vrmlm->m_MatRotation.z; double rotz = - vrmlm->m_MatRotation.z;
if ( isFlipped ) if( isFlipped )
{ {
rotx += 180.0; rotx += 180.0;
NEGATE(roty); NEGATE( roty );
NEGATE(rotz); NEGATE( rotz );
} }
// Do some quaternion munching // Do some quaternion munching
@ -1098,6 +1111,7 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
compose_quat( q1, q2, q1 ); compose_quat( q1, q2, q1 );
build_quat( 0, 0, 1, rotz / 180.0 * M_PI, q2 ); build_quat( 0, 0, 1, rotz / 180.0 * M_PI, q2 );
compose_quat( q1, q2, q1 ); compose_quat( q1, q2, q1 );
// Note here aModule->GetOrientation() is in 0.1 degrees, // Note here aModule->GetOrientation() is in 0.1 degrees,
// so module rotation is aModule->GetOrientation() / 1800.0 // so module rotation is aModule->GetOrientation() / 1800.0
build_quat( 0, 0, 1, aModule->GetOrientation() / 1800.0 * M_PI, q2 ); build_quat( 0, 0, 1, aModule->GetOrientation() / 1800.0 * M_PI, q2 );
@ -1105,6 +1119,7 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
from_quat( q1, rot ); from_quat( q1, rot );
fprintf( aOutputFile, "Transform {\n" ); fprintf( aOutputFile, "Transform {\n" );
// A null rotation would fail the acos! // A null rotation would fail the acos!
if( rot[3] != 0.0 ) if( rot[3] != 0.0 )
{ {
@ -1117,7 +1132,7 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
double offsety = vrmlm->m_MatPosition.y * IU_PER_MILS * 1000.0; double offsety = vrmlm->m_MatPosition.y * IU_PER_MILS * 1000.0;
double offsetz = vrmlm->m_MatPosition.z * IU_PER_MILS * 1000.0; double offsetz = vrmlm->m_MatPosition.z * IU_PER_MILS * 1000.0;
if ( isFlipped ) if( isFlipped )
NEGATE(offsetz); NEGATE(offsetz);
else // In normal mode, Y axis is reversed in Pcbnew. else // In normal mode, Y axis is reversed in Pcbnew.
NEGATE(offsety); NEGATE(offsety);
@ -1125,8 +1140,8 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
RotatePoint(&offsetx, &offsety, aModule->GetOrientation()); RotatePoint(&offsetx, &offsety, aModule->GetOrientation());
fprintf( aOutputFile, " translation %g %g %g\n", fprintf( aOutputFile, " translation %g %g %g\n",
(offsetx + aModule->m_Pos.x) * boardIU2WRML, (offsetx + aModule->GetPosition().x) * boardIU2WRML,
- (offsety + aModule->m_Pos.y) * boardIU2WRML, // Y axis is reversed in Pcbnew - (offsety + aModule->GetPosition().y) * boardIU2WRML, // Y axis is reversed in Pcbnew
(offsetz + layer_z[aModule->GetLayer()]) * boardIU2WRML); (offsetz + layer_z[aModule->GetLayer()]) * boardIU2WRML);
fprintf( aOutputFile, " scale %g %g %g\n", fprintf( aOutputFile, " scale %g %g %g\n",

View File

@ -373,27 +373,27 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
continue; continue;
} }
if( module->m_Attributs & MOD_VIRTUAL ) if( module->GetAttributes() & MOD_VIRTUAL )
{ {
D( printf( "skipping module %s because it's virtual\n", D( printf( "skipping module %s because it's virtual\n",
TO_UTF8( module->GetReference() ) );) TO_UTF8( module->GetReference() ) );)
continue; continue;
} }
if( ( module->m_Attributs & MOD_CMS ) == 0 ) if( ( module->GetAttributes() & MOD_CMS ) == 0 )
{ {
if( aForceSmdItems ) // true to fix a bunch of mis-labeled modules: if( aForceSmdItems ) // true to fix a bunch of mis-labeled modules:
{ {
if( !HasNonSMDPins( module ) ) if( !HasNonSMDPins( module ) )
{ {
// all module's pins are SMD, mark the part for pick and place // all module's pins are SMD, mark the part for pick and place
module->m_Attributs |= MOD_CMS; module->SetAttributes( module->GetAttributes() | MOD_CMS );
OnModify(); OnModify();
} }
else else
{ {
D(printf( "skipping %s because its attribute is not CMS and it has non SMD pins\n", D(printf( "skipping %s because its attribute is not CMS and it has non SMD pins\n",
TO_UTF8(module->GetReference()) ) ); TO_UTF8(module->GetReference()) ) );
continue; continue;
} }
} }
@ -425,15 +425,16 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
continue; continue;
} }
if( module->m_Attributs & MOD_VIRTUAL ) if( module->GetAttributes() & MOD_VIRTUAL )
continue; continue;
if( (module->m_Attributs & MOD_CMS) == 0 ) if( (module->GetAttributes() & MOD_CMS) == 0 )
continue; continue;
LIST_MOD item; LIST_MOD item;
item.m_Module = module; item.m_Module = module;
item.m_Reference = module->m_Reference->m_Text; item.m_Reference = module->GetReference();
item.m_Value = module->m_Value->m_Text; item.m_Value = module->GetValue();
item.m_Layer = module->GetLayer(); item.m_Layer = module->GetLayer();
list.push_back( item ); list.push_back( item );
} }
@ -470,11 +471,11 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
wxPoint module_pos; wxPoint module_pos;
const wxString& ref = list[ii].m_Reference; const wxString& ref = list[ii].m_Reference;
const wxString& val = list[ii].m_Value; const wxString& val = list[ii].m_Value;
const wxString& pkg = list[ii].m_Module->m_LibRef; const wxString& pkg = list[ii].m_Module->GetLibRef();
sprintf( line, "%-8.8s %-16.16s %-16.16s", sprintf( line, "%-8.8s %-16.16s %-16.16s",
TO_UTF8( ref ), TO_UTF8( val ), TO_UTF8( pkg ) ); TO_UTF8( ref ), TO_UTF8( val ), TO_UTF8( pkg ) );
module_pos = list[ii].m_Module->m_Pos; module_pos = list[ii].m_Module->GetPosition();
module_pos -= File_Place_Offset; module_pos -= File_Place_Offset;
char* text = line + strlen( line ); char* text = line + strlen( line );
@ -483,7 +484,7 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
sprintf( text, " %9.4f %9.4f %8.1f ", sprintf( text, " %9.4f %9.4f %8.1f ",
module_pos.x * conv_unit, module_pos.x * conv_unit,
-module_pos.y * conv_unit, -module_pos.y * conv_unit,
double(list[ii].m_Module->m_Orient) / 10 ); double(list[ii].m_Module->GetOrientation()) / 10 );
int layer = list[ii].m_Module->GetLayer(); int layer = list[ii].m_Module->GetLayer();
@ -605,31 +606,31 @@ bool PCB_EDIT_FRAME::DoGenFootprintsReport( const wxString& aFullFilename, bool
for( MODULE* Module = GetBoard()->m_Modules; Module; Module = Module->Next() ) for( MODULE* Module = GetBoard()->m_Modules; Module; Module = Module->Next() )
{ {
sprintf( line, "$MODULE %s\n", EscapedUTF8( Module->m_Reference->m_Text ).c_str() ); sprintf( line, "$MODULE %s\n", EscapedUTF8( Module->GetReference() ).c_str() );
fputs( line, rptfile ); fputs( line, rptfile );
sprintf( line, "reference %s\n", EscapedUTF8( Module->m_Reference->m_Text ).c_str() ); sprintf( line, "reference %s\n", EscapedUTF8( Module->GetReference() ).c_str() );
fputs( line, rptfile ); fputs( line, rptfile );
sprintf( line, "value %s\n", EscapedUTF8( Module->m_Value->m_Text ).c_str() ); sprintf( line, "value %s\n", EscapedUTF8( Module->GetValue() ).c_str() );
fputs( line, rptfile ); fputs( line, rptfile );
sprintf( line, "footprint %s\n", EscapedUTF8( Module->m_LibRef ).c_str() ); sprintf( line, "footprint %s\n", EscapedUTF8( Module->GetLibRef() ).c_str() );
fputs( line, rptfile ); fputs( line, rptfile );
msg = wxT( "attribut" ); msg = wxT( "attribut" );
if( Module->m_Attributs & MOD_VIRTUAL ) if( Module->GetAttributes() & MOD_VIRTUAL )
msg += wxT( " virtual" ); msg += wxT( " virtual" );
if( Module->m_Attributs & MOD_CMS ) if( Module->GetAttributes() & MOD_CMS )
msg += wxT( " smd" ); msg += wxT( " smd" );
if( ( Module->m_Attributs & (MOD_VIRTUAL | MOD_CMS) ) == 0 ) if( ( Module->GetAttributes() & (MOD_VIRTUAL | MOD_CMS) ) == 0 )
msg += wxT( " none" ); msg += wxT( " none" );
msg += wxT( "\n" ); msg += wxT( "\n" );
fputs( TO_UTF8( msg ), rptfile ); fputs( TO_UTF8( msg ), rptfile );
module_pos = Module->m_Pos; module_pos = Module->GetPosition();
module_pos.x -= File_Place_Offset.x; module_pos.x -= File_Place_Offset.x;
module_pos.y -= File_Place_Offset.y; module_pos.y -= File_Place_Offset.y;
@ -638,7 +639,7 @@ bool PCB_EDIT_FRAME::DoGenFootprintsReport( const wxString& aFullFilename, bool
module_pos.y * conv_unit ); module_pos.y * conv_unit );
fputs( line, rptfile ); fputs( line, rptfile );
sprintf( line, "orientation %.2f\n", (double) Module->m_Orient / 10 ); sprintf( line, "orientation %.2f\n", (double) Module->GetOrientation() / 10 );
if( Module->GetLayer() == LAYER_N_FRONT ) if( Module->GetLayer() == LAYER_N_FRONT )
strcat( line, "layer component\n" ); strcat( line, "layer component\n" );
@ -696,8 +697,7 @@ bool PCB_EDIT_FRAME::DoGenFootprintsReport( const wxString& aFullFilename, bool
fprintf( rptfile, "$EndPAD\n" ); fprintf( rptfile, "$EndPAD\n" );
} }
fprintf( rptfile, "$EndMODULE %s\n\n", fprintf( rptfile, "$EndMODULE %s\n\n", TO_UTF8 (Module->GetReference() ) );
TO_UTF8(Module->m_Reference->m_Text ) );
} }
} }
catch( IO_ERROR ioe ) catch( IO_ERROR ioe )

View File

@ -241,7 +241,7 @@ void PCB_BASE_FRAME::GlobalChange_PadSettings( D_PAD* aPad,
if( !aSameFootprints && (module != Module_Ref) ) if( !aSameFootprints && (module != Module_Ref) )
continue; continue;
if( module->m_LibRef != Module_Ref->m_LibRef ) if( module->GetLibRef() != Module_Ref->GetLibRef() )
continue; continue;
bool saveMe = false; bool saveMe = false;
@ -280,7 +280,7 @@ void PCB_BASE_FRAME::GlobalChange_PadSettings( D_PAD* aPad,
if( !aSameFootprints && (module != Module_Ref) ) if( !aSameFootprints && (module != Module_Ref) )
continue; continue;
if( module->m_LibRef != Module_Ref->m_LibRef ) if( module->GetLibRef() != Module_Ref->GetLibRef() )
continue; continue;
// Erase module on screen // Erase module on screen

View File

@ -397,7 +397,7 @@ MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR,
parseInt( parameters[7], conv_unit ) ); parseInt( parameters[7], conv_unit ) );
} }
module->Reference().SetPos( textPos ); module->Reference().SetPosition( textPos );
module->Reference().SetPos0( textPos ); module->Reference().SetPos0( textPos );
int orientation = parseInt( parameters[paramCnt-4] ); int orientation = parseInt( parameters[paramCnt-4] );
@ -415,7 +415,7 @@ MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR,
module->Value().SetSize( module->Reference().GetSize() ); module->Value().SetSize( module->Reference().GetSize() );
module->Value().SetThickness( module->Reference().GetThickness() ); module->Value().SetThickness( module->Reference().GetThickness() );
textPos.y += tsize + thickness; textPos.y += tsize + thickness;
module->Value().SetPos( textPos ); module->Value().SetPosition( textPos );
module->Value().SetPos0( textPos ); module->Value().SetPos0( textPos );
while( aLineReader->ReadLine() ) while( aLineReader->ReadLine() )

View File

@ -631,8 +631,8 @@ void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
throw( IO_ERROR ) throw( IO_ERROR )
{ {
m_out->Print( aNestLevel, "(dimension %s (width %s)", m_out->Print( aNestLevel, "(dimension %s (width %s)",
FMT_IU( aDimension->m_Value ).c_str(), FMT_IU( aDimension->GetValue() ).c_str(),
FMT_IU( aDimension->m_Width ).c_str() ); FMT_IU( aDimension->GetWidth() ).c_str() );
formatLayer( aDimension ); formatLayer( aDimension );
@ -641,7 +641,7 @@ void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
m_out->Print( 0, "\n" ); m_out->Print( 0, "\n" );
Format( (TEXTE_PCB*) &aDimension->m_Text, aNestLevel+1 ); Format( (TEXTE_PCB*) &aDimension->Text(), aNestLevel+1 );
m_out->Print( aNestLevel+1, "(feature1 (pts (xy %s %s) (xy %s %s)))\n", m_out->Print( aNestLevel+1, "(feature1 (pts (xy %s %s) (xy %s %s)))\n",
FMT_IU( aDimension->m_featureLineDO.x ).c_str(), FMT_IU( aDimension->m_featureLineDO.x ).c_str(),
@ -852,7 +852,7 @@ void PCB_IO::format( PCB_TARGET* aTarget, int aNestLevel ) const
void PCB_IO::format( MODULE* aModule, int aNestLevel ) const void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
throw( IO_ERROR ) throw( IO_ERROR )
{ {
m_out->Print( aNestLevel, "(module %s", m_out->Quotew( aModule->m_LibRef ).c_str() ); m_out->Print( aNestLevel, "(module %s", m_out->Quotew( aModule->GetLibRef() ).c_str() );
if( aModule->IsLocked() ) if( aModule->IsLocked() )
m_out->Print( aNestLevel, " locked" ); m_out->Print( aNestLevel, " locked" );
@ -870,30 +870,30 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
else else
m_out->Print( 0, "\n" ); m_out->Print( 0, "\n" );
m_out->Print( aNestLevel+1, "(at %s", FMT_IU( aModule->m_Pos ).c_str() ); m_out->Print( aNestLevel+1, "(at %s", FMT_IU( aModule->GetPosition() ).c_str() );
if( aModule->m_Orient != 0.0 ) if( aModule->GetOrientation() != 0.0 )
m_out->Print( 0, " %s", FMT_ANGLE( aModule->m_Orient ).c_str() ); m_out->Print( 0, " %s", FMT_ANGLE( aModule->GetOrientation() ).c_str() );
m_out->Print( 0, ")\n" ); m_out->Print( 0, ")\n" );
if( !aModule->m_Doc.IsEmpty() ) if( !aModule->GetDescription().IsEmpty() )
m_out->Print( aNestLevel+1, "(descr %s)\n", m_out->Print( aNestLevel+1, "(descr %s)\n",
m_out->Quotew( aModule->m_Doc ).c_str() ); m_out->Quotew( aModule->GetDescription() ).c_str() );
if( !aModule->m_KeyWord.IsEmpty() ) if( !aModule->GetKeywords().IsEmpty() )
m_out->Print( aNestLevel+1, "(tags %s)\n", m_out->Print( aNestLevel+1, "(tags %s)\n",
m_out->Quotew( aModule->m_KeyWord ).c_str() ); m_out->Quotew( aModule->GetKeywords() ).c_str() );
if( !aModule->m_Path.IsEmpty() ) if( !aModule->GetPath().IsEmpty() )
m_out->Print( aNestLevel+1, "(path %s)\n", m_out->Print( aNestLevel+1, "(path %s)\n",
m_out->Quotew( aModule->m_Path ).c_str() ); m_out->Quotew( aModule->GetPath() ).c_str() );
if( aModule->m_CntRot90 != 0 ) if( aModule->GetPlacementCost90() != 0 )
m_out->Print( aNestLevel+1, "(autoplace_cost90 %d)\n", aModule->m_CntRot90 ); m_out->Print( aNestLevel+1, "(autoplace_cost90 %d)\n", aModule->GetPlacementCost90() );
if( aModule->m_CntRot180 != 0 ) if( aModule->GetPlacementCost180() != 0 )
m_out->Print( aNestLevel+1, "(autoplace_cost180 %d)\n", aModule->m_CntRot180 ); m_out->Print( aNestLevel+1, "(autoplace_cost180 %d)\n", aModule->GetPlacementCost180() );
if( aModule->GetLocalSolderMaskMargin() != 0 ) if( aModule->GetLocalSolderMaskMargin() != 0 )
m_out->Print( aNestLevel+1, "(solder_mask_margin %s)\n", m_out->Print( aNestLevel+1, "(solder_mask_margin %s)\n",
@ -911,33 +911,33 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
m_out->Print( aNestLevel+1, "(clearance %s)\n", m_out->Print( aNestLevel+1, "(clearance %s)\n",
FMT_IU( aModule->GetLocalClearance() ).c_str() ); FMT_IU( aModule->GetLocalClearance() ).c_str() );
if( aModule->m_ZoneConnection != UNDEFINED_CONNECTION ) if( aModule->GetZoneConnection() != UNDEFINED_CONNECTION )
m_out->Print( aNestLevel+1, "(zone_connect %d)\n", aModule->m_ZoneConnection ); m_out->Print( aNestLevel+1, "(zone_connect %d)\n", aModule->GetZoneConnection() );
if( aModule->m_ThermalWidth != 0 ) if( aModule->GetThermalWidth() != 0 )
m_out->Print( aNestLevel+1, "(thermal_width %s)\n", m_out->Print( aNestLevel+1, "(thermal_width %s)\n",
FMT_IU( aModule->m_ThermalWidth ).c_str() ); FMT_IU( aModule->GetThermalWidth() ).c_str() );
if( aModule->m_ThermalGap != 0 ) if( aModule->GetThermalGap() != 0 )
m_out->Print( aNestLevel+1, "(thermal_gap %s)\n", m_out->Print( aNestLevel+1, "(thermal_gap %s)\n",
FMT_IU( aModule->m_ThermalGap ).c_str() ); FMT_IU( aModule->GetThermalGap() ).c_str() );
// Attributes // Attributes
if( aModule->m_Attributs != MOD_DEFAULT ) if( aModule->GetAttributes() != MOD_DEFAULT )
{ {
m_out->Print( aNestLevel+1, "(attr" ); m_out->Print( aNestLevel+1, "(attr" );
if( aModule->m_Attributs & MOD_CMS ) if( aModule->GetAttributes() & MOD_CMS )
m_out->Print( 0, " smd" ); m_out->Print( 0, " smd" );
if( aModule->m_Attributs & MOD_VIRTUAL ) if( aModule->GetAttributes() & MOD_VIRTUAL )
m_out->Print( 0, " virtual" ); m_out->Print( 0, " virtual" );
m_out->Print( 0, ")\n" ); m_out->Print( 0, ")\n" );
} }
Format( (BOARD_ITEM*) aModule->m_Reference, aNestLevel+1 ); Format( (BOARD_ITEM*) &aModule->Reference(), aNestLevel+1 );
Format( (BOARD_ITEM*) aModule->m_Value, aNestLevel+1 ); Format( (BOARD_ITEM*) &aModule->Value(), aNestLevel+1 );
// Save drawing elements. // Save drawing elements.
for( BOARD_ITEM* gr = aModule->m_Drawings; gr; gr = gr->Next() ) for( BOARD_ITEM* gr = aModule->m_Drawings; gr; gr = gr->Next() )

View File

@ -948,15 +948,16 @@ MODULE* LEGACY_PLUGIN::LoadMODULE()
TEXTE_MODULE* textm; TEXTE_MODULE* textm;
if( tnum == TEXT_is_REFERENCE ) if( tnum == TEXT_is_REFERENCE )
textm = module->m_Reference; textm = &module->Reference();
else if( tnum == TEXT_is_VALUE ) else if( tnum == TEXT_is_VALUE )
textm = module->m_Value; textm = &module->Value();
else else
{ {
// text is a drawing // text is a drawing
textm = new TEXTE_MODULE( module.get() ); textm = new TEXTE_MODULE( module.get() );
module->m_Drawings.PushBack( textm ); module->m_Drawings.PushBack( textm );
} }
loadMODULE_TEXT( textm ); loadMODULE_TEXT( textm );
} }
@ -1013,7 +1014,7 @@ MODULE* LEGACY_PLUGIN::LoadMODULE()
if( cntRot180 > 10 ) if( cntRot180 > 10 )
cntRot180 = 10; cntRot180 = 10;
module->m_CntRot180 = cntRot180; module->SetPlacementCost180( cntRot180 );
int cntRot90 = itmp1 & 0x0F; int cntRot90 = itmp1 & 0x0F;
if( cntRot90 > 10 ) if( cntRot90 > 10 )
@ -1023,7 +1024,7 @@ MODULE* LEGACY_PLUGIN::LoadMODULE()
if( itmp1 > 10 ) if( itmp1 > 10 )
itmp1 = 0; itmp1 = 0;
module->m_CntRot90 = (itmp1 << 4) | cntRot90; module->SetPlacementCost90( (itmp1 << 4) | cntRot90 );
} }
else if( TESTLINE( "At" ) ) // (At)tributes of module else if( TESTLINE( "At" ) ) // (At)tributes of module
@ -1056,12 +1057,12 @@ MODULE* LEGACY_PLUGIN::LoadMODULE()
else if( TESTLINE( "Cd" ) ) else if( TESTLINE( "Cd" ) )
{ {
// e.g. "Cd Double rangee de contacts 2 x 4 pins\r\n" // e.g. "Cd Double rangee de contacts 2 x 4 pins\r\n"
module->m_Doc = FROM_UTF8( StrPurge( line + SZ( "Cd" ) ) ); module->SetDescription( FROM_UTF8( StrPurge( line + SZ( "Cd" ) ) ) );
} }
else if( TESTLINE( "Kw" ) ) // Key words else if( TESTLINE( "Kw" ) ) // Key words
{ {
module->m_KeyWord = FROM_UTF8( StrPurge( line + SZ( "Kw" ) ) ); module->SetKeywords( FROM_UTF8( StrPurge( line + SZ( "Kw" ) ) ) );
} }
else if( TESTLINE( ".SolderPasteRatio" ) ) else if( TESTLINE( ".SolderPasteRatio" ) )
@ -2429,7 +2430,7 @@ void LEGACY_PLUGIN::loadDIMENSION()
else if( TESTLINE( "Va" ) ) else if( TESTLINE( "Va" ) )
{ {
BIU value = biuParse( line + SZ( "Va" ) ); BIU value = biuParse( line + SZ( "Va" ) );
dim->m_Value = value; dim->SetValue( value );
} }
else if( TESTLINE( "Ge" ) ) else if( TESTLINE( "Ge" ) )
@ -2456,7 +2457,7 @@ void LEGACY_PLUGIN::loadDIMENSION()
char buf[2048]; char buf[2048];
ReadDelimitedText( buf, line + SZ( "Te" ), sizeof(buf) ); ReadDelimitedText( buf, line + SZ( "Te" ), sizeof(buf) );
dim->m_Text.SetText( FROM_UTF8( buf ) ); dim->SetText( FROM_UTF8( buf ) );
} }
else if( TESTLINE( "Po" ) ) else if( TESTLINE( "Po" ) )
@ -2477,10 +2478,9 @@ void LEGACY_PLUGIN::loadDIMENSION()
dim->SetPosition( wxPoint( pos_x, pos_y ) ); dim->SetPosition( wxPoint( pos_x, pos_y ) );
dim->SetTextSize( wxSize( width, height ) ); dim->SetTextSize( wxSize( width, height ) );
dim->m_Text.SetMirrored( mirror && *mirror == '0' ); dim->Text().SetMirrored( mirror && *mirror == '0' );
dim->Text().SetThickness( thickn );
dim->m_Text.SetThickness( thickn ); dim->Text().SetOrientation( orient );
dim->m_Text.SetOrientation( orient );
} }
else if( TESTLINE( "Sb" ) ) else if( TESTLINE( "Sb" ) )
@ -2498,7 +2498,7 @@ void LEGACY_PLUGIN::loadDIMENSION()
dim->m_crossBarO.y = crossBarOy; dim->m_crossBarO.y = crossBarOy;
dim->m_crossBarF.x = crossBarFx; dim->m_crossBarF.x = crossBarFx;
dim->m_crossBarF.y = crossBarFy; dim->m_crossBarF.y = crossBarFy;
dim->m_Width = width; dim->SetWidth( width );
(void) ignore; (void) ignore;
} }
@ -3416,7 +3416,7 @@ void LEGACY_PLUGIN::SaveMODULE( const MODULE* me ) const
fprintf( m_fp, "Sc %lX\n", me->GetTimeStamp() ); fprintf( m_fp, "Sc %lX\n", me->GetTimeStamp() );
fprintf( m_fp, "AR %s\n", TO_UTF8( me->GetPath() ) ); fprintf( m_fp, "AR %s\n", TO_UTF8( me->GetPath() ) );
fprintf( m_fp, "Op %X %X 0\n", me->m_CntRot90, me->m_CntRot180 ); fprintf( m_fp, "Op %X %X 0\n", me->GetPlacementCost90(), me->GetPlacementCost180() );
if( me->GetLocalSolderMaskMargin() != 0 ) if( me->GetLocalSolderMaskMargin() != 0 )
fprintf( m_fp, ".SolderMask %s\n", fmtBIU( me->GetLocalSolderMaskMargin() ).c_str() ); fprintf( m_fp, ".SolderMask %s\n", fmtBIU( me->GetLocalSolderMaskMargin() ).c_str() );
@ -3454,9 +3454,9 @@ void LEGACY_PLUGIN::SaveMODULE( const MODULE* me ) const
fprintf( m_fp, "\n" ); fprintf( m_fp, "\n" );
} }
saveMODULE_TEXT( me->m_Reference ); saveMODULE_TEXT( &me->Reference() );
saveMODULE_TEXT( me->m_Value ); saveMODULE_TEXT( &me->Value() );
// save drawing elements // save drawing elements
for( BOARD_ITEM* gr = me->m_Drawings; gr; gr = gr->Next() ) for( BOARD_ITEM* gr = me->m_Drawings; gr; gr = gr->Next() )
@ -3739,19 +3739,19 @@ void LEGACY_PLUGIN::saveDIMENTION( const DIMENSION* me ) const
fprintf( m_fp, "Ge %d %d %lX\n", me->GetShape(), me->GetLayer(), me->GetTimeStamp() ); fprintf( m_fp, "Ge %d %d %lX\n", me->GetShape(), me->GetLayer(), me->GetTimeStamp() );
fprintf( m_fp, "Va %s\n", fmtBIU( me->m_Value ).c_str() ); fprintf( m_fp, "Va %s\n", fmtBIU( me->GetValue() ).c_str() );
if( !me->m_Text.GetText().IsEmpty() ) if( !me->GetText().IsEmpty() )
fprintf( m_fp, "Te %s\n", EscapedUTF8( me->m_Text.GetText() ).c_str() ); fprintf( m_fp, "Te %s\n", EscapedUTF8( me->GetText() ).c_str() );
else else
fprintf( m_fp, "Te \"?\"\n" ); fprintf( m_fp, "Te \"?\"\n" );
fprintf( m_fp, "Po %s %s %s %s %d\n", fprintf( m_fp, "Po %s %s %s %s %d\n",
fmtBIUPoint( me->m_Text.GetPosition() ).c_str(), fmtBIUPoint( me->Text().GetPosition() ).c_str(),
fmtBIUSize( me->m_Text.GetSize() ).c_str(), fmtBIUSize( me->Text().GetSize() ).c_str(),
fmtBIU( me->m_Text.GetThickness() ).c_str(), fmtBIU( me->Text().GetThickness() ).c_str(),
fmtDEG( me->m_Text.GetOrientation() ).c_str(), fmtDEG( me->Text().GetOrientation() ).c_str(),
me->m_Text.IsMirrored() ? 0 : 1 // strange but true me->Text().IsMirrored() ? 0 : 1 // strange but true
); );
fprintf( m_fp, "Sb %d %s %s %s\n", S_SEGMENT, fprintf( m_fp, "Sb %d %s %s %s\n", S_SEGMENT,

View File

@ -284,7 +284,7 @@ void FOOTPRINT_EDIT_FRAME::Export_Module( MODULE* aModule )
if( aModule == NULL ) if( aModule == NULL )
return; return;
fn.SetName( aModule->m_LibRef ); fn.SetName( aModule->GetLibRef() );
wxString wildcard = wxGetTranslation( KiCadFootprintLibFileWildcard ); wxString wildcard = wxGetTranslation( KiCadFootprintLibFileWildcard );
@ -728,17 +728,17 @@ MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName )
module->SetLastEditTime(); module->SetLastEditTime();
// Update its name in lib // Update its name in lib
module->m_LibRef = moduleName; module->SetLibRef( moduleName );
// Update reference: // Update reference:
module->m_Reference->m_Text = moduleName; module->SetReference( moduleName );
module->m_Reference->SetThickness( GetDesignSettings().m_ModuleTextWidth ); module->Reference().SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Reference->SetSize( GetDesignSettings().m_ModuleTextSize ); module->Reference().SetSize( GetDesignSettings().m_ModuleTextSize );
// Set the value field to a default value // Set the value field to a default value
module->m_Value->m_Text = wxT( "VAL**" ); module->SetValue( wxT( "VAL**" ) );
module->m_Value->SetThickness( GetDesignSettings().m_ModuleTextWidth ); module->Value().SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Value->SetSize( GetDesignSettings().m_ModuleTextSize ); module->Value().SetSize( GetDesignSettings().m_ModuleTextSize );
module->SetPosition( wxPoint( 0, 0 ) ); module->SetPosition( wxPoint( 0, 0 ) );
SetMsgPanel( module ); SetMsgPanel( module );

View File

@ -81,7 +81,7 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
GetBoard()->m_Status_Pcb = 0; GetBoard()->m_Status_Pcb = 0;
newModule = new MODULE( *aModule ); newModule = new MODULE( *aModule );
newModule->SetParent( GetBoard() ); newModule->SetParent( GetBoard() );
newModule->m_Link = aModule->GetTimeStamp(); newModule->SetLink( aModule->GetTimeStamp() );
aModule = newModule; aModule = newModule;
@ -97,7 +97,7 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
// Put it on FRONT layer, // Put it on FRONT layer,
// because this is the default in ModEdit, and in libs // because this is the default in ModEdit, and in libs
if( aModule->GetLayer() != LAYER_N_FRONT ) if( aModule->GetLayer() != LAYER_N_FRONT )
aModule->Flip( aModule->m_Pos ); aModule->Flip( aModule->GetPosition() );
// Put it in orientation 0, // Put it in orientation 0,
// because this is the default orientation in ModEdit, and in libs // because this is the default orientation in ModEdit, and in libs
@ -231,7 +231,7 @@ MODULE* PCB_BASE_FRAME::Load_Module_From_Library( const wxString& aLibrary,
AddHistoryComponentName( HistoryList, moduleName ); AddHistoryComponentName( HistoryList, moduleName );
module->SetFlags( IS_NEW ); module->SetFlags( IS_NEW );
module->m_Link = 0; module->SetLink( 0 );
module->SetTimeStamp( GetNewTimeStamp() ); module->SetTimeStamp( GetNewTimeStamp() );
GetBoard()->m_Status_Pcb = 0; GetBoard()->m_Status_Pcb = 0;
@ -241,7 +241,7 @@ MODULE* PCB_BASE_FRAME::Load_Module_From_Library( const wxString& aLibrary,
// Put it on FRONT layer, // Put it on FRONT layer,
// (Can be stored flipped if the lib is an archive built from a board) // (Can be stored flipped if the lib is an archive built from a board)
if( module->IsFlipped() ) if( module->IsFlipped() )
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
// Place it in orientation 0, // Place it in orientation 0,
// even if it is not saved with orientation 0 in lib // even if it is not saved with orientation 0 in lib
@ -493,7 +493,7 @@ MODULE* FOOTPRINT_EDIT_FRAME::Select_1_Module_From_BOARD( BOARD* aPcb )
module = aPcb->m_Modules; module = aPcb->m_Modules;
for( ; module != NULL; module = (MODULE*) module->Next() ) for( ; module != NULL; module = (MODULE*) module->Next() )
listnames.Add( module->m_Reference->m_Text ); listnames.Add( module->GetReference() );
msg.Printf( _( "Modules [%d items]" ), listnames.GetCount() ); msg.Printf( _( "Modules [%d items]" ), listnames.GetCount() );
@ -510,7 +510,7 @@ MODULE* FOOTPRINT_EDIT_FRAME::Select_1_Module_From_BOARD( BOARD* aPcb )
for( ; module != NULL; module = (MODULE*) module->Next() ) for( ; module != NULL; module = (MODULE*) module->Next() )
{ {
if( CmpName == module->m_Reference->m_Text ) if( CmpName == module->GetReference() )
break; break;
} }

View File

@ -348,13 +348,13 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// Search the old module (source) if exists // Search the old module (source) if exists
// Because this source could be deleted when editing the main board... // Because this source could be deleted when editing the main board...
if( module_in_edit->m_Link ) // this is not a new module ... if( module_in_edit->GetLink() ) // this is not a new module ...
{ {
source_module = mainpcb->m_Modules; source_module = mainpcb->m_Modules;
for( ; source_module != NULL; source_module = (MODULE*) source_module->Next() ) for( ; source_module != NULL; source_module = (MODULE*) source_module->Next() )
{ {
if( module_in_edit->m_Link == source_module->GetTimeStamp() ) if( module_in_edit->GetLink() == source_module->GetTimeStamp() )
break; break;
} }
} }
@ -382,7 +382,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// Create the "new" module // Create the "new" module
MODULE* newmodule = new MODULE( *module_in_edit ); MODULE* newmodule = new MODULE( *module_in_edit );
newmodule->SetParent( mainpcb ); newmodule->SetParent( mainpcb );
newmodule->m_Link = 0; newmodule->SetLink( 0 );
// Put the footprint in the main pcb linked list. // Put the footprint in the main pcb linked list.
mainpcb->Add( newmodule ); mainpcb->Add( newmodule );
@ -395,7 +395,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// and the source_module (old module) is deleted // and the source_module (old module) is deleted
PICKED_ITEMS_LIST pickList; PICKED_ITEMS_LIST pickList;
pcbframe->Exchange_Module( source_module, newmodule, &pickList ); pcbframe->Exchange_Module( source_module, newmodule, &pickList );
newmodule->SetTimeStamp( module_in_edit->m_Link ); newmodule->SetTimeStamp( module_in_edit->GetLink() );
if( pickList.GetCount() ) if( pickList.GetCount() )
pcbframe->SaveCopyInUndoList( pickList, UR_UNSPECIFIED ); pcbframe->SaveCopyInUndoList( pickList, UR_UNSPECIFIED );
@ -477,20 +477,20 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
// otherwise you cannot see what you are doing on board // otherwise you cannot see what you are doing on board
if( GetBoard() && GetBoard()->m_Modules ) if( GetBoard() && GetBoard()->m_Modules )
{ {
TEXTE_MODULE* ref = GetBoard()->m_Modules->m_Reference; TEXTE_MODULE* ref = &GetBoard()->m_Modules->Reference();
TEXTE_MODULE* val = GetBoard()->m_Modules->m_Value; TEXTE_MODULE* val = &GetBoard()->m_Modules->Value();
if( val && ref ) if( val && ref )
{ {
ref->SetType( TEXT_is_REFERENCE ); // just in case ... ref->SetType( TEXT_is_REFERENCE ); // just in case ...
if( ref->m_Text.Length() == 0 ) if( ref->GetLength() == 0 )
ref->m_Text = L"Ref**"; ref->SetText( wxT( "Ref**" ) );
val->SetType( TEXT_is_VALUE ); // just in case ... val->SetType( TEXT_is_VALUE ); // just in case ...
if( val->m_Text.Length() == 0 ) if( val->GetLength() == 0 )
val->m_Text = L"Val**"; val->SetText( L"Val**" );
} }
} }
@ -769,29 +769,29 @@ void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
#define ROTATE( z ) RotatePoint( (&z), angle ) #define ROTATE( z ) RotatePoint( (&z), angle )
RotateMarkedItems( module, wxPoint(0,0), true ); RotateMarkedItems( module, wxPoint(0,0), true );
pos = module->m_Reference->GetPosition(); pos = module->Reference().GetPosition();
ROTATE( pos ); ROTATE( pos );
module->m_Reference->SetPosition( pos ); module->Reference().SetPosition( pos );
module->m_Reference->SetPos0( module->m_Reference->GetPosition() ); module->Reference().SetPos0( module->Reference().GetPosition() );
module->m_Reference->m_Orient += angle; module->Reference().m_Orient += angle;
if( module->m_Reference->m_Orient >= 1800 ) if( module->Reference().m_Orient >= 1800 )
module->m_Reference->m_Orient -= 1800; module->Reference().m_Orient -= 1800;
pos = module->m_Value->GetPosition(); pos = module->Value().GetPosition();
ROTATE( pos ); ROTATE( pos );
module->m_Value->SetPosition( pos ); module->Value().SetPosition( pos );
module->m_Value->SetPos0( module->m_Value->m_Pos ); module->Value().SetPos0( module->Value().m_Pos );
module->m_Value->m_Orient += angle; module->Value().m_Orient += angle;
if( module->m_Value->m_Orient >= 1800 ) if( module->Value().m_Orient >= 1800 )
module->m_Value->m_Orient -= 1800; module->Value().m_Orient -= 1800;
break; break;
case ID_MODEDIT_MODULE_MIRROR: case ID_MODEDIT_MODULE_MIRROR:
// Mirror reference. // Mirror reference.
textmod = module->m_Reference; textmod = &module->Reference();
NEGATE( textmod->m_Pos.x ); NEGATE( textmod->m_Pos.x );
NEGATE( textmod->m_Pos0.x ); NEGATE( textmod->m_Pos0.x );
@ -799,7 +799,7 @@ void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
textmod->m_Orient = 3600 - textmod->m_Orient; textmod->m_Orient = 3600 - textmod->m_Orient;
// Mirror value. // Mirror value.
textmod = module->m_Value; textmod = &module->Value();
NEGATE( textmod->m_Pos.x ); NEGATE( textmod->m_Pos.x );
NEGATE( textmod->m_Pos0.x ); NEGATE( textmod->m_Pos0.x );

View File

@ -408,10 +408,10 @@ void FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard( wxUpdateUIEvent& aEvent
PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) GetParent(); PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) GetParent();
MODULE* module_in_edit = GetBoard()->m_Modules; MODULE* module_in_edit = GetBoard()->m_Modules;
bool canInsert = ( module_in_edit && !module_in_edit->m_Link ); bool canInsert = ( module_in_edit && !module_in_edit->GetLink() );
// If the source was deleted, the module can inserted but not updated in the board. // If the source was deleted, the module can inserted but not updated in the board.
if( module_in_edit && module_in_edit->m_Link ) // this is not a new module if( module_in_edit && module_in_edit->GetLink() ) // this is not a new module
{ {
BOARD* mainpcb = frame->GetBoard(); BOARD* mainpcb = frame->GetBoard();
MODULE* source_module = mainpcb->m_Modules; MODULE* source_module = mainpcb->m_Modules;
@ -419,7 +419,7 @@ void FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard( wxUpdateUIEvent& aEvent
// search if the source module was not deleted: // search if the source module was not deleted:
for( ; source_module != NULL; source_module = source_module->Next() ) for( ; source_module != NULL; source_module = source_module->Next() )
{ {
if( module_in_edit->m_Link == source_module->GetTimeStamp() ) if( module_in_edit->GetLink() == source_module->GetTimeStamp() )
break; break;
} }
@ -435,9 +435,9 @@ void FOOTPRINT_EDIT_FRAME::OnUpdateReplaceModuleInBoard( wxUpdateUIEvent& aEvent
PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) GetParent(); PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) GetParent();
MODULE* module_in_edit = GetBoard()->m_Modules; MODULE* module_in_edit = GetBoard()->m_Modules;
bool canReplace = ( module_in_edit && module_in_edit->m_Link ); bool canReplace = ( module_in_edit && module_in_edit->GetLink() );
if( module_in_edit && module_in_edit->m_Link ) // this is not a new module if( module_in_edit && module_in_edit->GetLink() ) // this is not a new module
{ {
BOARD* mainpcb = frame->GetBoard(); BOARD* mainpcb = frame->GetBoard();
MODULE* source_module = mainpcb->m_Modules; MODULE* source_module = mainpcb->m_Modules;
@ -445,7 +445,7 @@ void FOOTPRINT_EDIT_FRAME::OnUpdateReplaceModuleInBoard( wxUpdateUIEvent& aEvent
// search if the source module was not deleted: // search if the source module was not deleted:
for( ; source_module != NULL; source_module = source_module->Next() ) for( ; source_module != NULL; source_module = source_module->Next() )
{ {
if( module_in_edit->m_Link == source_module->GetTimeStamp() ) if( module_in_edit->GetLink() == source_module->GetTimeStamp() )
break; break;
} }

View File

@ -80,7 +80,7 @@ MODULE* PCB_BASE_FRAME::GetModuleByName()
while( module ) while( module )
{ {
if( module->m_Reference->m_Text.CmpNoCase( moduleName ) == 0 ) if( module->GetReference().CmpNoCase( moduleName ) == 0 )
break; break;
module = module->Next(); module = module->Next();
@ -200,8 +200,8 @@ void Abort_MoveOrCopyModule( EDA_DRAW_PANEL* Panel, wxDC* DC )
/* Redraw the module. */ /* Redraw the module. */
if( module && s_ModuleInitialCopy ) if( module && s_ModuleInitialCopy )
{ {
if( s_ModuleInitialCopy->m_Orient != module->m_Orient ) if( s_ModuleInitialCopy->GetOrientation() != module->GetOrientation() )
pcbframe->Rotate_Module( NULL, module, s_ModuleInitialCopy->m_Orient, false ); pcbframe->Rotate_Module( NULL, module, s_ModuleInitialCopy->GetOrientation(), false );
if( s_ModuleInitialCopy->GetLayer() != module->GetLayer() ) if( s_ModuleInitialCopy->GetLayer() != module->GetLayer() )
pcbframe->Change_Side_Module( module, NULL ); pcbframe->Change_Side_Module( module, NULL );
@ -243,7 +243,7 @@ void MoveFootprint( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition,
} }
/* Redraw the module at the new position. */ /* Redraw the module at the new position. */
g_Offset_Module = module->m_Pos - aPanel->GetScreen()->GetCrossHairPosition(); g_Offset_Module = module->GetPosition() - aPanel->GetScreen()->GetCrossHairPosition();
DrawModuleOutlines( aPanel, aDC, module ); DrawModuleOutlines( aPanel, aDC, module );
DrawSegmentWhileMovingFootprint( aPanel, aDC ); DrawSegmentWhileMovingFootprint( aPanel, aDC );
@ -263,8 +263,8 @@ bool PCB_EDIT_FRAME::Delete_Module( MODULE* aModule, wxDC* aDC, bool aAskBeforeD
if( aAskBeforeDeleting ) if( aAskBeforeDeleting )
{ {
msg.Printf( _( "Delete Module %s (value %s) ?" ), msg.Printf( _( "Delete Module %s (value %s) ?" ),
GetChars( aModule->m_Reference->m_Text ), GetChars( aModule->GetReference() ),
GetChars( aModule->m_Value->m_Text ) ); GetChars( aModule->GetValue() ) );
if( !IsOK( this, msg ) ) if( !IsOK( this, msg ) )
{ {
@ -329,7 +329,7 @@ void PCB_EDIT_FRAME::Change_Side_Module( MODULE* Module, wxDC* DC )
} }
/* Flip the module */ /* Flip the module */
Module->Flip( Module->m_Pos ); Module->Flip( Module->GetPosition() );
SetMsgPanel( Module ); SetMsgPanel( Module );
@ -464,7 +464,7 @@ void PCB_BASE_FRAME::Rotate_Module( wxDC* DC, MODULE* module, int angle, bool in
GetBoard()->m_Status_Pcb &= ~( LISTE_RATSNEST_ITEM_OK | CONNEXION_OK ); GetBoard()->m_Status_Pcb &= ~( LISTE_RATSNEST_ITEM_OK | CONNEXION_OK );
if( incremental ) if( incremental )
module->SetOrientation( module->m_Orient + angle ); module->SetOrientation( module->GetOrientation() + angle );
else else
module->SetOrientation( angle ); module->SetOrientation( angle );

View File

@ -235,10 +235,10 @@ MODULE* PCB_EDIT_FRAME::Genere_Self( wxDC* DC )
return NULL; return NULL;
// here the module is already in the BOARD, Create_1_Module() does that. // here the module is already in the BOARD, Create_1_Module() does that.
module->m_LibRef = wxT( "MuSelf" ); module->SetLibRef( wxT( "MuSelf" ) );
module->m_Attributs = MOD_VIRTUAL | MOD_CMS; module->SetAttributes( MOD_VIRTUAL | MOD_CMS );
module->ClearFlags(); module->ClearFlags();
module->m_Pos = Mself.m_End; module->SetPosition( Mself.m_End );
// Generate segments // Generate segments
for( unsigned jj = 1; jj < buffer.size(); jj++ ) for( unsigned jj = 1; jj < buffer.size(); jj++ )
@ -281,15 +281,15 @@ MODULE* PCB_EDIT_FRAME::Genere_Self( wxDC* DC )
// Modify text positions. // Modify text positions.
SetMsgPanel( module ); SetMsgPanel( module );
module->m_Value->m_Pos.x = module->m_Reference->m_Pos.x = module->Value().m_Pos.x = module->Reference().m_Pos.x =
( Mself.m_Start.x + Mself.m_End.x ) / 2; ( Mself.m_Start.x + Mself.m_End.x ) / 2;
module->m_Value->m_Pos.y = module->m_Reference->m_Pos.y = module->Value().m_Pos.y = module->Reference().m_Pos.y =
( Mself.m_Start.y + Mself.m_End.y ) / 2; ( Mself.m_Start.y + Mself.m_End.y ) / 2;
module->m_Reference->m_Pos.y -= module->m_Reference->m_Size.y; module->Reference().m_Pos.y -= module->Reference().m_Size.y;
module->m_Value->m_Pos.y += module->m_Value->m_Size.y; module->Value().m_Pos.y += module->Value().m_Size.y;
module->m_Reference->SetPos0( module->m_Reference->m_Pos - module->m_Pos ); module->Reference().SetPos0( module->Reference().m_Pos - module->GetPosition() );
module->m_Value->SetPos0( module->m_Value->m_Pos - module->m_Pos ); module->Value().SetPos0( module->Value().m_Pos - module->GetPosition() );
module->CalculateBoundingBox(); module->CalculateBoundingBox();
module->Draw( m_canvas, DC, GR_OR ); module->Draw( m_canvas, DC, GR_OR );
@ -535,21 +535,21 @@ MODULE* PCB_EDIT_FRAME::Create_MuWaveBasicShape( const wxString& name, int pad_c
#define DEFAULT_SIZE 30 #define DEFAULT_SIZE 30
module->SetTimeStamp( GetNewTimeStamp() ); module->SetTimeStamp( GetNewTimeStamp() );
module->m_Value->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE ); module->Value().m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE );
module->m_Value->SetPos0( wxPoint( 0, -DEFAULT_SIZE ) ); module->Value().SetPos0( wxPoint( 0, -DEFAULT_SIZE ) );
module->m_Value->m_Pos.y += module->m_Value->GetPos0().y; module->Value().m_Pos.y += module->Value().GetPos0().y;
module->m_Value->m_Thickness = DEFAULT_SIZE / 4; module->Value().m_Thickness = DEFAULT_SIZE / 4;
module->m_Reference->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE ); module->Reference().m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE );
module->m_Reference->SetPos0( wxPoint( 0, DEFAULT_SIZE ) ); module->Reference().SetPos0( wxPoint( 0, DEFAULT_SIZE ) );
module->m_Reference->m_Pos.y += module->m_Reference->GetPos0().y; module->Reference().m_Pos.y += module->Reference().GetPos0().y;
module->m_Reference->m_Thickness = DEFAULT_SIZE / 4; module->Reference().m_Thickness = DEFAULT_SIZE / 4;
// Create 2 pads used in gaps and stubs. The gap is between these 2 pads // Create 2 pads used in gaps and stubs. The gap is between these 2 pads
// the stub is the pad 2 // the stub is the pad 2
@ -1063,7 +1063,7 @@ void PCB_EDIT_FRAME::Edit_Gap( wxDC* DC, MODULE* aModule )
return; return;
// Test if module is a gap type (name begins with GAP, and has 2 pads). // Test if module is a gap type (name begins with GAP, and has 2 pads).
msg = aModule->m_Reference->m_Text.Left( 3 ); msg = aModule->GetReference().Left( 3 );
if( msg != wxT( "GAP" ) ) if( msg != wxT( "GAP" ) )
return; return;
@ -1110,7 +1110,7 @@ void PCB_EDIT_FRAME::Edit_Gap( wxDC* DC, MODULE* aModule )
wxPoint padpos = pad->GetPos0() + aModule->GetPosition(); wxPoint padpos = pad->GetPos0() + aModule->GetPosition();
RotatePoint( &padpos.x, &padpos.y, RotatePoint( &padpos.x, &padpos.y,
aModule->m_Pos.x, aModule->m_Pos.y, aModule->GetOrientation() ); aModule->GetPosition().x, aModule->GetPosition().y, aModule->GetOrientation() );
pad->SetPosition( padpos ); pad->SetPosition( padpos );
@ -1123,7 +1123,7 @@ void PCB_EDIT_FRAME::Edit_Gap( wxDC* DC, MODULE* aModule )
padpos = next_pad->GetPos0() + aModule->GetPosition(); padpos = next_pad->GetPos0() + aModule->GetPosition();
RotatePoint( &padpos.x, &padpos.y, RotatePoint( &padpos.x, &padpos.y,
aModule->m_Pos.x, aModule->m_Pos.y, aModule->GetOrientation() ); aModule->GetPosition().x, aModule->GetPosition().y, aModule->GetOrientation() );
next_pad->SetPosition( padpos ); next_pad->SetPosition( padpos );

View File

@ -215,7 +215,7 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName( void )
Module = (MODULE*) GetBoard()->m_Modules; Module = (MODULE*) GetBoard()->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Next() ) for( ; Module != NULL; Module = (MODULE*) Module->Next() )
listnames.Add( Module->m_Reference->m_Text ); listnames.Add( Module->GetReference() );
EDA_LIST_DIALOG dlg( this, _( "Components" ), listnames, wxEmptyString ); EDA_LIST_DIALOG dlg( this, _( "Components" ), listnames, wxEmptyString );
@ -227,7 +227,7 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName( void )
for( ; Module != NULL; Module = Module->Next() ) for( ; Module != NULL; Module = Module->Next() )
{ {
if( Module->m_Reference->m_Text == ref ) if( Module->GetReference() == ref )
break; break;
} }
@ -271,13 +271,14 @@ bool PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
// Search for duplicate footprints. // Search for duplicate footprints.
MODULE* module = GetBoard()->m_Modules; MODULE* module = GetBoard()->m_Modules;
for( ; module != NULL; module = module->Next() ) for( ; module != NULL; module = module->Next() )
{ {
MODULE* altmodule = module->Next(); MODULE* altmodule = module->Next();
for( ; altmodule != NULL; altmodule = altmodule->Next() ) for( ; altmodule != NULL; altmodule = altmodule->Next() )
{ {
if( module->m_Reference->m_Text.CmpNoCase( altmodule->m_Reference->m_Text ) == 0 ) if( module->GetReference().CmpNoCase( altmodule->GetReference() ) == 0 )
{ {
aDuplicate.push_back( module ); aDuplicate.push_back( module );
break; break;
@ -305,7 +306,7 @@ bool PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
for( ii = 0; ii < moduleInfoList.size(); ii++ ) for( ii = 0; ii < moduleInfoList.size(); ii++ )
{ {
COMPONENT_INFO* cmp_info = moduleInfoList[ii]; COMPONENT_INFO* cmp_info = moduleInfoList[ii];
if( module->m_Reference->m_Text.CmpNoCase( cmp_info->m_Reference ) == 0 ) if( module->GetReference().CmpNoCase( cmp_info->m_Reference ) == 0 )
break; // Module is in net list. break; // Module is in net list.
} }

View File

@ -335,19 +335,20 @@ int NETLIST_READER::SetPadsNetName( const wxString & aModule, const wxString & a
void NETLIST_READER::RemoveExtraFootprints() void NETLIST_READER::RemoveExtraFootprints()
{ {
MODULE* nextModule; MODULE* nextModule;
MODULE* module = m_pcbframe->GetBoard()->m_Modules; MODULE* module = m_pcbframe->GetBoard()->m_Modules;
for( ; module != NULL; module = nextModule ) for( ; module != NULL; module = nextModule )
{ {
unsigned ii; unsigned ii;
nextModule = module->Next(); nextModule = module->Next();
if( module->m_ModuleStatus & MODULE_is_LOCKED ) if( module->IsLocked() )
continue; continue;
for( ii = 0; ii < m_componentsInNetlist.size(); ii++ ) for( ii = 0; ii < m_componentsInNetlist.size(); ii++ )
{ {
COMPONENT_INFO* cmp_info = m_componentsInNetlist[ii]; COMPONENT_INFO* cmp_info = m_componentsInNetlist[ii];
if( module->GetReference().CmpNoCase( cmp_info->m_Reference ) == 0 ) if( module->GetReference().CmpNoCase( cmp_info->m_Reference ) == 0 )
break; // Module is found in net list. break; // Module is found in net list.
} }
@ -370,7 +371,7 @@ MODULE* NETLIST_READER::FindModule( const wxString& aId )
{ {
if( m_UseTimeStamp ) // identification by time stamp if( m_UseTimeStamp ) // identification by time stamp
{ {
if( aId.CmpNoCase( module->m_Path ) == 0 ) if( aId.CmpNoCase( module->GetPath() ) == 0 )
return module; return module;
} }
else // identification by Reference else // identification by Reference

View File

@ -335,7 +335,7 @@ bool NETLIST_READER::SetPadNetName( char* aText )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Module [%s]: Pad [%s] not found" ), msg.Printf( _( "Module [%s]: Pad [%s] not found" ),
GetChars( m_currModule->m_Reference->m_Text ), GetChars( m_currModule->GetReference() ),
GetChars( pinName ) ); GetChars( pinName ) );
m_messageWindow->AppendText( msg + wxT( "\n" ) ); m_messageWindow->AppendText( msg + wxT( "\n" ) );
} }

View File

@ -198,8 +198,8 @@ void PCB_BASE_FRAME::DeletePad( D_PAD* aPad, bool aQuery )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Delete Pad (module %s %s) " ), msg.Printf( _( "Delete Pad (module %s %s) " ),
GetChars( module->m_Reference->m_Text ), GetChars( module->GetReference() ),
GetChars( module->m_Value->m_Text ) ); GetChars( module->GetValue() ) );
if( !IsOK( this, msg ) ) if( !IsOK( this, msg ) )
return; return;

View File

@ -516,7 +516,7 @@ void PCB_MODULE::AddToBoard()
module->SetAttributes( MOD_DEFAULT | MOD_CMS ); module->SetAttributes( MOD_DEFAULT | MOD_CMS );
// reference text // reference text
TEXTE_MODULE* ref_text = module->m_Reference; TEXTE_MODULE* ref_text = &module->Reference();
ref_text->SetText( m_name.text ); ref_text->SetText( m_name.text );
ref_text->SetType( TEXT_is_REFERENCE ); ref_text->SetType( TEXT_is_REFERENCE );
@ -537,7 +537,7 @@ void PCB_MODULE::AddToBoard()
ref_text->SetDrawCoord(); ref_text->SetDrawCoord();
// value text // value text
TEXTE_MODULE* val_text = module->m_Value; TEXTE_MODULE* val_text = &module->Value();
val_text->SetText( m_value.text ); val_text->SetText( m_value.text );
val_text->SetType( TEXT_is_REFERENCE ); val_text->SetType( TEXT_is_REFERENCE );

View File

@ -1373,7 +1373,7 @@ DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
auto_ptr< DIMENSION > dimension( new DIMENSION( NULL ) ); auto_ptr< DIMENSION > dimension( new DIMENSION( NULL ) );
dimension->m_Value = parseBoardUnits( "dimension value" ); dimension->SetValue( parseBoardUnits( "dimension value" ) );
NeedLEFT(); NeedLEFT();
token = NextTok(); token = NextTok();
@ -1405,7 +1405,7 @@ DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
case T_gr_text: case T_gr_text:
{ {
TEXTE_PCB* text = parseTEXTE_PCB(); TEXTE_PCB* text = parseTEXTE_PCB();
dimension->m_Text = *text; dimension->Text() = *text;
dimension->SetPosition( text->GetPosition() ); dimension->SetPosition( text->GetPosition() );
delete text; delete text;
break; break;
@ -1593,12 +1593,12 @@ MODULE* PCB_PARSER::parseMODULE() throw( IO_ERROR, PARSE_ERROR )
break; break;
case T_autoplace_cost90: case T_autoplace_cost90:
module->m_CntRot90 = parseInt( "auto place cost at 90 degrees" ); module->SetPlacementCost90( parseInt( "auto place cost at 90 degrees" ) );
NeedRIGHT(); NeedRIGHT();
break; break;
case T_autoplace_cost180: case T_autoplace_cost180:
module->m_CntRot180 = parseInt( "auto place cost at 180 degrees" ); module->SetPlacementCost180( parseInt( "auto place cost at 180 degrees" ) );
NeedRIGHT(); NeedRIGHT();
break; break;

View File

@ -123,7 +123,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule )
bool trace_val = GetPlotValue(); bool trace_val = GetPlotValue();
bool trace_ref = GetPlotReference(); bool trace_ref = GetPlotReference();
TEXTE_MODULE* textModule = aModule->m_Reference; TEXTE_MODULE* textModule = &aModule->Reference();
unsigned textLayer = textModule->GetLayer(); unsigned textLayer = textModule->GetLayer();
if( textLayer >= LAYER_COUNT ) if( textLayer >= LAYER_COUNT )
@ -135,7 +135,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule )
if( !textModule->IsVisible() && !GetPlotInvisibleText() ) if( !textModule->IsVisible() && !GetPlotInvisibleText() )
trace_ref = false; trace_ref = false;
textModule = aModule->m_Value; textModule = &aModule->Value();
textLayer = textModule->GetLayer(); textLayer = textModule->GetLayer();
if( textLayer > LAYER_COUNT ) if( textLayer > LAYER_COUNT )
@ -151,17 +151,17 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule )
if( trace_ref ) if( trace_ref )
{ {
if( GetReferenceColor() == UNSPECIFIED_COLOR ) if( GetReferenceColor() == UNSPECIFIED_COLOR )
PlotTextModule( aModule->m_Reference, getColor( textLayer ) ); PlotTextModule( &aModule->Reference(), getColor( textLayer ) );
else else
PlotTextModule( aModule->m_Reference, GetReferenceColor() ); PlotTextModule( &aModule->Reference(), GetReferenceColor() );
} }
if( trace_val ) if( trace_val )
{ {
if( GetValueColor() == UNSPECIFIED_COLOR ) if( GetValueColor() == UNSPECIFIED_COLOR )
PlotTextModule( aModule->m_Value, getColor( textLayer ) ); PlotTextModule( &aModule->Value(), getColor( textLayer ) );
else else
PlotTextModule( aModule->m_Value, GetValueColor() ); PlotTextModule( &aModule->Value(), GetValueColor() );
} }
for( textModule = (TEXTE_MODULE*) aModule->m_Drawings.GetFirst(); for( textModule = (TEXTE_MODULE*) aModule->m_Drawings.GetFirst();
@ -253,10 +253,10 @@ void BRDITEMS_PLOTTER::PlotTextModule( TEXTE_MODULE* pt_texte,
bool allow_bold = pt_texte->m_Bold || thickness; bool allow_bold = pt_texte->m_Bold || thickness;
m_plotter->Text( pos, aColor, m_plotter->Text( pos, aColor,
pt_texte->m_Text, pt_texte->GetText(),
orient, size, orient, size,
pt_texte->m_HJustify, pt_texte->m_VJustify, pt_texte->m_HJustify, pt_texte->m_VJustify,
thickness, pt_texte->m_Italic, allow_bold ); thickness, pt_texte->m_Italic, allow_bold );
} }
@ -275,7 +275,7 @@ void BRDITEMS_PLOTTER::PlotDimension( DIMENSION* aDim )
// the white items are not seen on a white paper or screen // the white items are not seen on a white paper or screen
m_plotter->SetColor( color != WHITE ? color : LIGHTGRAY); m_plotter->SetColor( color != WHITE ? color : LIGHTGRAY);
PlotTextePcb( &aDim->m_Text ); PlotTextePcb( &aDim->Text() );
draw.SetStart( aDim->m_crossBarO ); draw.SetStart( aDim->m_crossBarO );
draw.SetEnd( aDim->m_crossBarF ); draw.SetEnd( aDim->m_crossBarF );
@ -470,7 +470,7 @@ void BRDITEMS_PLOTTER::PlotTextePcb( TEXTE_PCB* pt_texte )
wxPoint pos; wxPoint pos;
wxSize size; wxSize size;
if( pt_texte->m_Text.IsEmpty() ) if( pt_texte->GetText().IsEmpty() )
return; return;
if( ( GetLayerMask( pt_texte->GetLayer() ) & m_layerMask ) == 0 ) if( ( GetLayerMask( pt_texte->GetLayer() ) & m_layerMask ) == 0 )
@ -494,7 +494,7 @@ void BRDITEMS_PLOTTER::PlotTextePcb( TEXTE_PCB* pt_texte )
if( pt_texte->m_MultilineAllowed ) if( pt_texte->m_MultilineAllowed )
{ {
wxArrayString* list = wxStringSplit( pt_texte->m_Text, '\n' ); wxArrayString* list = wxStringSplit( pt_texte->GetText(), '\n' );
wxPoint offset; wxPoint offset;
offset.y = pt_texte->GetInterline(); offset.y = pt_texte->GetInterline();
@ -514,9 +514,9 @@ void BRDITEMS_PLOTTER::PlotTextePcb( TEXTE_PCB* pt_texte )
} }
else else
{ {
m_plotter->Text( pos, UNSPECIFIED_COLOR, pt_texte->m_Text, orient, size, m_plotter->Text( pos, UNSPECIFIED_COLOR, pt_texte->GetText(), orient, size,
pt_texte->m_HJustify, pt_texte->m_VJustify, pt_texte->m_HJustify, pt_texte->m_VJustify,
thickness, pt_texte->m_Italic, allow_bold ); thickness, pt_texte->m_Italic, allow_bold );
} }
} }

View File

@ -377,11 +377,11 @@ static void Print_Module( EDA_DRAW_PANEL* aPanel, wxDC* aDC, MODULE* aModule,
if( mlayer & aMasklayer ) if( mlayer & aMasklayer )
{ {
if( aModule->m_Reference->IsVisible() ) if( aModule->Reference().IsVisible() )
aModule->m_Reference->Draw( aPanel, aDC, aDraw_mode ); aModule->Reference().Draw( aPanel, aDC, aDraw_mode );
if( aModule->m_Value->IsVisible() ) if( aModule->Value().IsVisible() )
aModule->m_Value->Draw( aPanel, aDC, aDraw_mode ); aModule->Value().Draw( aPanel, aDC, aDraw_mode );
} }
for( EDA_ITEM* item = aModule->m_Drawings; item; item = item->Next() ) for( EDA_ITEM* item = aModule->m_Drawings; item; item = item->Next() )

View File

@ -555,7 +555,7 @@ IMAGE* SPECCTRA_DB::makeIMAGE( BOARD* aBoard, MODULE* aModule )
IMAGE* image = new IMAGE(0); IMAGE* image = new IMAGE(0);
image->image_id = TO_UTF8( aModule->m_LibRef ); image->image_id = TO_UTF8( aModule->GetLibRef() );
// from the pads, and make an IMAGE using collated padstacks. // from the pads, and make an IMAGE using collated padstacks.
for( int p=0; p<moduleItems.GetCount(); ++p ) for( int p=0; p<moduleItems.GetCount(); ++p )
@ -1365,12 +1365,12 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
comp->places.push_back( place ); comp->places.push_back( place );
place->SetRotation( module->GetOrientation()/10.0 ); place->SetRotation( module->GetOrientation()/10.0 );
place->SetVertex( mapPt( module->m_Pos ) ); place->SetVertex( mapPt( module->GetPosition() ) );
place->component_id = componentId; place->component_id = componentId;
place->part_number = TO_UTF8( module->GetValue() ); place->part_number = TO_UTF8( module->GetValue() );
// module is flipped from bottom side, set side to T_back // module is flipped from bottom side, set side to T_back
if( module->flag ) if( module->GetFlag() )
{ {
int angle = 1800 - module->GetOrientation(); int angle = 1800 - module->GetOrientation();
NORMALIZE_ANGLE_POS(angle); NORMALIZE_ANGLE_POS(angle);
@ -1679,11 +1679,12 @@ void SPECCTRA_DB::FlipMODULEs( BOARD* aBoard )
{ {
for( MODULE* module = aBoard->m_Modules; module; module = module->Next() ) for( MODULE* module = aBoard->m_Modules; module; module = module->Next() )
{ {
module->flag = 0; module->SetFlag( 0 );
if( module->GetLayer() == LAYER_N_BACK ) if( module->GetLayer() == LAYER_N_BACK )
{ {
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
module->flag = 1; module->SetFlag( 1 );
} }
} }
@ -1700,10 +1701,10 @@ void SPECCTRA_DB::RevertMODULEs( BOARD* aBoard )
// top view. Restore those that were flipped. // top view. Restore those that were flipped.
for( MODULE* module = aBoard->m_Modules; module; module = module->Next() ) for( MODULE* module = aBoard->m_Modules; module; module = module->Next() )
{ {
if( module->flag ) if( module->GetFlag() )
{ {
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
module->flag = 0; module->SetFlag( 0 );
} }
} }

View File

@ -440,21 +440,25 @@ void SPECCTRA_DB::FromSESSION( BOARD* aBoard ) throw( IO_ERROR )
{ {
// convert from degrees to tenths of degrees used in KiCad. // convert from degrees to tenths of degrees used in KiCad.
int orientation = (int) (place->rotation * 10.0); int orientation = (int) (place->rotation * 10.0);
if( module->GetLayer() != LAYER_N_FRONT ) if( module->GetLayer() != LAYER_N_FRONT )
{ {
// module is on copper layer (back) // module is on copper layer (back)
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
} }
module->SetOrientation( orientation ); module->SetOrientation( orientation );
} }
else if( place->side == T_back ) else if( place->side == T_back )
{ {
int orientation = (int) ((place->rotation + 180.0) * 10.0); int orientation = (int) ((place->rotation + 180.0) * 10.0);
if( module->GetLayer() != LAYER_N_BACK ) if( module->GetLayer() != LAYER_N_BACK )
{ {
// module is on component layer (front) // module is on component layer (front)
module->Flip( module->m_Pos ); module->Flip( module->GetPosition() );
} }
module->SetOrientation( orientation ); module->SetOrientation( orientation );
} }
else else

View File

@ -106,9 +106,9 @@ void DIALOG_EXCHANGE_MODULE::Init()
{ {
SetFocus(); SetFocus();
m_OldModule->AppendText( m_CurrentModule->m_LibRef ); m_OldModule->AppendText( m_CurrentModule->GetLibRef() );
m_NewModule->AppendText( m_CurrentModule->m_LibRef ); m_NewModule->AppendText( m_CurrentModule->GetLibRef() );
m_OldValue->AppendText( m_CurrentModule->m_Value->m_Text ); m_OldValue->AppendText( m_CurrentModule->GetValue() );
m_Selection->SetSelection( s_SelectionMode ); m_Selection->SetSelection( s_SelectionMode );
// Enable/disable widgets: // Enable/disable widgets:
@ -317,16 +317,16 @@ void DIALOG_EXCHANGE_MODULE::Change_ModuleId( bool aUseValue )
if( newmodulename == wxEmptyString ) if( newmodulename == wxEmptyString )
return; return;
lib_reference = m_CurrentModule->m_LibRef; lib_reference = m_CurrentModule->GetLibRef();
if( aUseValue ) if( aUseValue )
{ {
check_module_value = true; check_module_value = true;
value = m_CurrentModule->m_Value->m_Text; value = m_CurrentModule->GetValue();
msg.Printf( _( "Change modules <%s> -> <%s> (val = %s)?" ), msg.Printf( _( "Change modules <%s> -> <%s> (val = %s)?" ),
GetChars( m_CurrentModule->m_LibRef ), GetChars( m_CurrentModule->GetLibRef() ),
GetChars( newmodulename ), GetChars( newmodulename ),
GetChars( m_CurrentModule->m_Value->m_Text ) ); GetChars( m_CurrentModule->GetValue() ) );
} }
else else
{ {
@ -351,12 +351,12 @@ void DIALOG_EXCHANGE_MODULE::Change_ModuleId( bool aUseValue )
{ {
PtBack = Module->Back(); PtBack = Module->Back();
if( lib_reference.CmpNoCase( Module->m_LibRef ) != 0 ) if( lib_reference.CmpNoCase( Module->GetLibRef() ) != 0 )
continue; continue;
if( check_module_value ) if( check_module_value )
{ {
if( value.CmpNoCase( Module->m_Value->m_Text ) != 0 ) if( value.CmpNoCase( Module->GetValue() ) != 0 )
continue; continue;
} }
@ -413,7 +413,7 @@ void DIALOG_EXCHANGE_MODULE::Change_ModuleAll()
{ {
PtBack = Module->Back(); PtBack = Module->Back();
if( Change_1_Module( Module, Module->m_LibRef, &pickList, ShowErr ) ) if( Change_1_Module( Module, Module->GetLibRef(), &pickList, ShowErr ) )
change = true; change = true;
else if( ShowErr ) else if( ShowErr )
ShowErr--; ShowErr--;
@ -458,12 +458,12 @@ bool DIALOG_EXCHANGE_MODULE::Change_1_Module( MODULE* Module,
wxBusyCursor dummy; wxBusyCursor dummy;
/* Copy parameters from the old module. */ /* Copy parameters from the old module. */
oldnamecmp = Module->m_LibRef; oldnamecmp = Module->GetLibRef();
namecmp = new_module; namecmp = new_module;
/* Load module. */ /* Load module. */
line.Printf( _( "Change module %s (%s) " ), line.Printf( _( "Change module %s (%s) " ),
GetChars( Module->m_Reference->m_Text ), GetChars( Module->GetReference() ),
GetChars( oldnamecmp ) ); GetChars( oldnamecmp ) );
m_WinMessages->AppendText( line ); m_WinMessages->AppendText( line );
@ -484,7 +484,7 @@ bool DIALOG_EXCHANGE_MODULE::Change_1_Module( MODULE* Module,
m_Parent->Exchange_Module( Module, NewModule, aUndoPickList ); m_Parent->Exchange_Module( Module, NewModule, aUndoPickList );
Maj_ListeCmp( NewModule->m_Reference->m_Text, oldnamecmp, namecmp, ShowError ); Maj_ListeCmp( NewModule->GetReference(), oldnamecmp, namecmp, ShowError );
return true; return true;
} }
@ -517,7 +517,7 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aOldModule,
GetBoard()->m_Status_Pcb = 0; GetBoard()->m_Status_Pcb = 0;
oldpos = GetScreen()->GetCrossHairPosition(); oldpos = GetScreen()->GetCrossHairPosition();
GetScreen()->SetCrossHairPosition( aOldModule->m_Pos, false ); GetScreen()->SetCrossHairPosition( aOldModule->GetPosition(), false );
/* place module without ratsnest refresh: this will be made later /* place module without ratsnest refresh: this will be made later
* when all modules are on board * when all modules are on board
@ -528,22 +528,22 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aOldModule,
/* Flip footprint if needed */ /* Flip footprint if needed */
if( aOldModule->GetLayer() != aNewModule->GetLayer() ) if( aOldModule->GetLayer() != aNewModule->GetLayer() )
{ {
aNewModule->Flip( aNewModule->m_Pos ); aNewModule->Flip( aNewModule->GetPosition() );
} }
/* Rotate footprint if needed */ /* Rotate footprint if needed */
if( aOldModule->m_Orient != aNewModule->m_Orient ) if( aOldModule->GetOrientation() != aNewModule->GetOrientation() )
{ {
Rotate_Module( NULL, aNewModule, aOldModule->m_Orient, false ); Rotate_Module( NULL, aNewModule, aOldModule->GetOrientation(), false );
} }
/* Update reference and value */ /* Update reference and value */
aNewModule->m_Reference->m_Text = aOldModule->m_Reference->m_Text; aNewModule->SetReference( aOldModule->GetReference() );
aNewModule->m_Value->m_Text = aOldModule->m_Value->m_Text; aNewModule->SetValue( aOldModule->GetValue() );
/* Updating other parameters */ /* Updating other parameters */
aNewModule->SetTimeStamp( aOldModule->GetTimeStamp() ); aNewModule->SetTimeStamp( aOldModule->GetTimeStamp() );
aNewModule->m_Path = aOldModule->m_Path; aNewModule->SetPath( aOldModule->GetPath() );
/* Update pad netnames ( when possible) */ /* Update pad netnames ( when possible) */
pad = aNewModule->m_Pads; pad = aNewModule->m_Pads;
@ -650,14 +650,14 @@ void PCB_EDIT_FRAME::RecreateCmpFileFromBoard( wxCommandEvent& aEvent )
{ {
fprintf( FichCmp, "\nBeginCmp\n" ); fprintf( FichCmp, "\nBeginCmp\n" );
fprintf( FichCmp, "TimeStamp = %8.8lX\n", Module->GetTimeStamp() ); fprintf( FichCmp, "TimeStamp = %8.8lX\n", Module->GetTimeStamp() );
fprintf( FichCmp, "Path = %s\n", TO_UTF8( Module->m_Path ) ); fprintf( FichCmp, "Path = %s\n", TO_UTF8( Module->GetPath() ) );
fprintf( FichCmp, "Reference = %s;\n", fprintf( FichCmp, "Reference = %s;\n",
!Module->m_Reference->m_Text.IsEmpty() ? !Module->GetReference().IsEmpty() ?
TO_UTF8( Module->m_Reference->m_Text ) : "[NoRef]" ); TO_UTF8( Module->GetReference() ) : "[NoRef]" );
fprintf( FichCmp, "ValeurCmp = %s;\n", fprintf( FichCmp, "ValeurCmp = %s;\n",
!Module->m_Value->m_Text.IsEmpty() ? !Module->GetValue().IsEmpty() ?
TO_UTF8( Module->m_Value->m_Text ) : "[NoVal]" ); TO_UTF8( Module->GetValue() ) : "[NoVal]" );
fprintf( FichCmp, "IdModule = %s;\n", TO_UTF8( Module->m_LibRef ) ); fprintf( FichCmp, "IdModule = %s;\n", TO_UTF8( Module->GetLibRef() ) );
fprintf( FichCmp, "EndCmp\n" ); fprintf( FichCmp, "EndCmp\n" );
} }