Commit 57c19271 authored by dickelbeck's avatar dickelbeck

more amazing free software

parent 68e942b2
...@@ -5,6 +5,14 @@ Started 2007-June-11 ...@@ -5,6 +5,14 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Feb-4 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
specctra_export.cpp now supports blind/buried/microvias. Changed (fixed?) how
modules are displayed on back of board. Needs testing with various angles
of rotation.
2008-Feb-3 UPDATE Dick Hollenbeck <dick@softplc.com> 2008-Feb-3 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
+pcbnew +pcbnew
......
...@@ -263,7 +263,7 @@ void WinEDA_BasePcbFrame::ProcessItemSelection( wxCommandEvent& event ) ...@@ -263,7 +263,7 @@ void WinEDA_BasePcbFrame::ProcessItemSelection( wxCommandEvent& event )
BOARD_ITEM* item = (*m_Collector)[itemNdx]; BOARD_ITEM* item = (*m_Collector)[itemNdx];
DrawPanel->m_AbortRequest = false; DrawPanel->m_AbortRequest = false;
#if defined (DEBUG) && 0 #if 0 && defined (DEBUG)
item->Show( 0, std::cout ); item->Show( 0, std::cout );
#endif #endif
...@@ -282,7 +282,7 @@ void WinEDA_BasePcbFrame::SetCurItem( BOARD_ITEM* aItem ) ...@@ -282,7 +282,7 @@ void WinEDA_BasePcbFrame::SetCurItem( BOARD_ITEM* aItem )
{ {
aItem->Display_Infos( this ); aItem->Display_Infos( this );
#if defined(DEBUG) #if 0 && defined(DEBUG)
aItem->Show( 0, std::cout ); aItem->Show( 0, std::cout );
#endif #endif
...@@ -294,7 +294,7 @@ void WinEDA_BasePcbFrame::SetCurItem( BOARD_ITEM* aItem ) ...@@ -294,7 +294,7 @@ void WinEDA_BasePcbFrame::SetCurItem( BOARD_ITEM* aItem )
//MsgPanel->EraseMsgBox(); //MsgPanel->EraseMsgBox();
m_Pcb->Display_Infos( this ); // show the BOARD stuff m_Pcb->Display_Infos( this ); // show the BOARD stuff
#if defined(DEBUG) #if 0 && defined(DEBUG)
std::cout << "SetCurItem(NULL)\n"; std::cout << "SetCurItem(NULL)\n";
#endif #endif
......
...@@ -345,154 +345,6 @@ void MODULE::DrawEdgesOnly( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -345,154 +345,6 @@ void MODULE::DrawEdgesOnly( WinEDA_DrawPanel* panel, wxDC* DC,
} }
#if 0
/*************************************/
int MODULE::WriteDescr( FILE* File )
/*************************************/
/* Sauvegarde de la description d'un MODULE
*/
{
char StringStat[20];
TEXTE_MODULE* PtText;
EDGE_MODULE* PtEdge;
D_PAD* ptpad;
EDA_BaseStruct* PtStruct;
int ii, NbLigne = 0;
wxString msg;
if( GetState( DELETED ) )
return NbLigne;
/* Generation du fichier module: */
fprintf( File, "$MODULE %s\n", CONV_TO_UTF8( m_LibRef ) );
NbLigne++;
/* Generation des coord et caracteristiques */
memset( StringStat, 0, sizeof(StringStat) );
if( IsLocked() )
StringStat[0] = 'F';
else
StringStat[0] = '~';
if( m_ModuleStatus & MODULE_is_PLACED )
StringStat[1] = 'P';
else
StringStat[1] = '~';
fprintf( File, "Po %d %d %d %d %8.8lX %8.8lX %s\n",
m_Pos.x, m_Pos.y,
m_Orient, m_Layer, m_LastEdit_Time,
m_TimeStamp, StringStat );
NbLigne++;
fprintf( File, "Li %s\n", CONV_TO_UTF8( m_LibRef ) );
NbLigne++;
if( !m_Doc.IsEmpty() )
{
fprintf( File, "Cd %s\n", CONV_TO_UTF8( m_Doc ) );
NbLigne++;
}
if( !m_KeyWord.IsEmpty() )
{
fprintf( File, "Kw %s\n", CONV_TO_UTF8( m_KeyWord ) );
NbLigne++;
}
fprintf( File, "Sc %8.8lX\n", m_TimeStamp );
NbLigne++;
fprintf( File, "Op %X %X 0\n", m_CntRot90, m_CntRot180 );
NbLigne++;
/* Attributs du module */
if( m_Attributs != MOD_DEFAULT )
{
fprintf( File, "At " );
if( m_Attributs & MOD_CMS )
fprintf( File, "SMD " );
if( m_Attributs & MOD_VIRTUAL )
fprintf( File, "VIRTUAL " );
fprintf( File, "\n" );
}
/* Texte Reference du module */
fprintf( File, "T%d %d %d %d %d %d %d %c %c %d \"%.16s\"\n",
m_Reference->m_Type,
m_Reference->m_Pos0.x, m_Reference->m_Pos0.y,
m_Reference->m_Size.y, m_Reference->m_Size.x,
m_Reference->m_Orient + m_Orient, m_Reference->m_Width,
m_Reference->m_Miroir ? 'N' : 'M', m_Reference->m_NoShow ? 'I' : 'V',
m_Reference->GetLayer(),
CONV_TO_UTF8( m_Reference->m_Text ) );
NbLigne++;
/* Texte Value du module */
fprintf( File, "T%d %d %d %d %d %d %d %c %c %d \"%.16s\"\n",
m_Value->m_Type,
m_Value->m_Pos0.x, m_Value->m_Pos0.y,
m_Value->m_Size.y, m_Value->m_Size.x,
m_Value->m_Orient + m_Orient, m_Value->m_Width,
m_Value->m_Miroir ? 'N' : 'M', m_Value->m_NoShow ? 'I' : 'V',
m_Value->GetLayer(),
CONV_TO_UTF8( m_Value->m_Text ) );
NbLigne++;
/* Generation des elements Drawing modules */
PtStruct = m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
{
switch( PtStruct->Type() )
{
case TYPETEXTEMODULE:
PtText = ( (TEXTE_MODULE*) PtStruct );
fprintf( File, "T%d %d %d %d %d %d %d %c %c %d \"%s\"\n",
PtText->m_Type,
PtText->m_Pos0.x, PtText->m_Pos0.y,
PtText->m_Size.y, PtText->m_Size.x,
PtText->m_Orient + m_Orient, PtText->m_Width,
PtText->m_Miroir ? 'N' : 'M',
PtText->m_NoShow ? 'I' : 'V',
PtText->GetLayer(), CONV_TO_UTF8( PtText->m_Text ) );
NbLigne++;
break;
case TYPEEDGEMODULE:
PtEdge = (EDGE_MODULE*) PtStruct;
PtEdge->WriteDescr( File );
break;
default:
msg.Printf( wxT( "Type (%d) Draw Module inconnu" ),
PtStruct->Type() );
DisplayError( NULL, msg );
break;
}
/* Fin switch gestion des Items draw */
}
/* Generation de la liste des pads */
ptpad = m_Pads;
for( ; ptpad != NULL; ptpad = (D_PAD*) ptpad->Pnext )
{
ii = ptpad->WriteDescr( File );
NbLigne += ii;
}
/* Generation des informations de trac�3D */
Write_3D_Descr( File );
/* Fin de description: */
fprintf( File, "$EndMODULE %s\n", CONV_TO_UTF8( m_LibRef ) );
NbLigne++;
return NbLigne;
}
#endif
bool MODULE::Save( FILE* aFile ) const bool MODULE::Save( FILE* aFile ) const
{ {
char statusTxt[8]; char statusTxt[8];
......
...@@ -3480,7 +3480,6 @@ PCB* SPECCTRA_DB::MakePCB() ...@@ -3480,7 +3480,6 @@ PCB* SPECCTRA_DB::MakePCB()
pcb->structure->rules = new RULE( pcb->structure, T_rule ); pcb->structure->rules = new RULE( pcb->structure, T_rule );
pcb->placement = new PLACEMENT( pcb ); pcb->placement = new PLACEMENT( pcb );
//pcb->placement->flip_style = T_mirror_first;
pcb->library = new LIBRARY( pcb ); pcb->library = new LIBRARY( pcb );
......
...@@ -282,26 +282,6 @@ static int Pad_list_Sort_by_Shapes( const void* refptr, const void* objptr ) ...@@ -282,26 +282,6 @@ static int Pad_list_Sort_by_Shapes( const void* refptr, const void* objptr )
} }
/*
static int Track_list_Sort_by_Netcode( const void* o1, const void* o2 )
{
TRACK* t1 = *(TRACK**) o1;
TRACK* t2 = *(TRACK**) o2;
int diff;
if( (diff = t1->GetNet() - t2->GetNet()) )
return diff;
if( (diff = t1->m_Width - t2->m_Width) )
return diff;
if( (diff = t1->GetLayer() - t2->GetLayer()) )
return diff;
return diff; // zero here
}
*/
/** /**
* Function makePath * Function makePath
* creates a PATH element with a single straight line, a pair of vertices. * creates a PATH element with a single straight line, a pair of vertices.
...@@ -317,21 +297,6 @@ static PATH* makePath( const POINT& aStart, const POINT& aEnd, const std::string ...@@ -317,21 +297,6 @@ static PATH* makePath( const POINT& aStart, const POINT& aEnd, const std::string
} }
/*
static QARC* makeArc( const POINT& aStart, const POINT& aEnd,
const POINT& aCenter, const std::string& aLayerName )
{
QARC* qarc = new QARC(0);
qarc->SetStart( aStart );
qarc->SetEnd( aEnd );
qarc->SetCenter( aCenter );
qarc->SetLayerId( aLayerName.c_str() );
return qarc;
}
*/
IMAGE* SPECCTRA_DB::makeIMAGE( MODULE* aModule ) IMAGE* SPECCTRA_DB::makeIMAGE( MODULE* aModule )
{ {
PADSTACKS& padstacks = pcb->library->padstacks; PADSTACKS& padstacks = pcb->library->padstacks;
...@@ -391,25 +356,61 @@ IMAGE* SPECCTRA_DB::makeIMAGE( MODULE* aModule ) ...@@ -391,25 +356,61 @@ IMAGE* SPECCTRA_DB::makeIMAGE( MODULE* aModule )
PADSTACK* SPECCTRA_DB::makeVia( const SEGVIA* aVia ) PADSTACK* SPECCTRA_DB::makeVia( const SEGVIA* aVia )
{ {
CIRCLE* circle;
SHAPE* shape;
double dsnDiameter;
char name[48]; char name[48];
PADSTACK* padstack = new PADSTACK( pcb->library ); PADSTACK* padstack = new PADSTACK( pcb->library );
SHAPE* shape = new SHAPE( padstack ); switch( aVia->Shape() )
padstack->Append( shape ); {
case VIA_THROUGH:
shape = new SHAPE( padstack );
padstack->Append( shape );
// @todo: handle the aVia->Shape() differently for each type of via: MICROVIA, etc. circle = new CIRCLE( shape );
shape->SetShape( circle );
CIRCLE* circle = new CIRCLE( shape ); dsnDiameter = scale( aVia->m_Width );
shape->SetShape( circle ); circle->SetDiameter( dsnDiameter );
double dsnDiameter = scale( aVia->m_Width );
circle->SetDiameter( dsnDiameter );
circle->SetLayerId( "signal" );
snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter ); circle->SetLayerId( "signal" );
name[ sizeof(name)-1 ] = 0;
padstack->SetPadstackId( name ); snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter );
name[ sizeof(name)-1 ] = 0;
padstack->SetPadstackId( name );
break;
case VIA_BLIND_BURIED:
case VIA_MICROVIA:
int topLayer;
int botLayer;
aVia->ReturnLayerPair( &topLayer, &botLayer );
topLayer = kicadLayer2pcb[topLayer];
botLayer = kicadLayer2pcb[botLayer];
if( topLayer > botLayer )
EXCHG( topLayer, botLayer );
dsnDiameter = scale( aVia->m_Width );
for( int layer=topLayer; layer<=botLayer; ++layer )
{
shape = new SHAPE( padstack );
padstack->Append( shape );
circle = new CIRCLE( shape );
shape->SetShape( circle );
circle->SetDiameter( dsnDiameter );
circle->SetLayerId( layerIds[layer].c_str() );
}
snprintf( name, sizeof(name), "Via[%d-%d]_%.6g_mil", topLayer, botLayer, dsnDiameter );
name[ sizeof(name)-1 ] = 0;
padstack->SetPadstackId( name );
break;
}
return padstack; return padstack;
} }
...@@ -586,70 +587,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads ) ...@@ -586,70 +587,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
{ {
SHAPE* shape; SHAPE* shape;
PATH* path; PATH* path;
#if 0
// each oval is 2 lines and 4 (quarter circle) qarcs
QARC* qarc;
shape = new SHAPE( padstack );
padstack->Append( shape );
path = makePath(
POINT( -dr, -radius ), // aStart
POINT( dr, -radius ), // aEnd
layerName );
shape->SetShape( path );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( dr, -radius), // aStart
POINT( dr, 0.0 ), // aEnd
POINT( dr, 0.0 ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( dr, 0.0), // aStart
POINT( dr, radius), // aEnd
POINT( dr, 0.0 ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
path = makePath(
POINT( dr, radius ), // aStart
POINT( -dr, radius ), // aEnd
layerName );
shape->SetShape( path );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( -dr, radius), // aStart
POINT( -dr, 0.0), // aEnd
POINT( -dr, 0.0 ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( -dr, 0.0), // aStart
POINT( -dr, -radius), // aEnd
POINT( -dr, 0.0 ), // aCenter
layerName );
shape->SetShape( qarc );
#else
// see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408 // see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
shape = new SHAPE( padstack ); shape = new SHAPE( padstack );
padstack->Append( shape ); padstack->Append( shape );
path = makePath( POINT(-dr, 0.0), POINT(dr, 0.0), layerName ); path = makePath( POINT(-dr, 0.0), POINT(dr, 0.0), layerName );
shape->SetShape( path ); shape->SetShape( path );
path->aperture_width = 2.0 * radius; path->aperture_width = 2.0 * radius;
#endif
++coppers; ++coppers;
} }
} }
...@@ -666,70 +609,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads ) ...@@ -666,70 +609,12 @@ void SPECCTRA_DB::makePADSTACKs( BOARD* aBoard, TYPE_COLLECTOR& aPads )
{ {
SHAPE* shape; SHAPE* shape;
PATH* path; PATH* path;
#if 0
// each oval is 2 lines and 2 qarcs
QARC* qarc;
shape = new SHAPE( padstack );
padstack->Append( shape );
path = makePath(
POINT( -radius, -dr ), // aStart
POINT( -radius, dr ), // aEnd
layerName );
shape->SetShape( path );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( -radius, dr ), // aStart
POINT( 0.0, dy ), // aEnd
POINT( 0.0, dr ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( 0.0, dy ), // aStart
POINT( radius, dr), // aEnd
POINT( 0.0, dr ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
path = makePath(
POINT( radius, dr ), // aStart
POINT( radius, -dr ), // aEnd
layerName );
shape->SetShape( path );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( radius, -dr ), // aStart
POINT( 0.0, -dy ), // aEnd
POINT( 0.0, -dr ), // aCenter
layerName );
shape->SetShape( qarc );
shape = new SHAPE( padstack );
padstack->Append( shape );
qarc = makeArc(
POINT( 0.0, -dy ), // aStart
POINT( -radius, -dr ), // aEnd
POINT( 0.0, -dr ), // aCenter
layerName );
shape->SetShape( qarc );
#else
// see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408 // see http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
shape = new SHAPE( padstack ); shape = new SHAPE( padstack );
padstack->Append( shape ); padstack->Append( shape );
path = makePath( POINT(0.0, -dr), POINT(0.0, dr), layerName ); path = makePath( POINT(0.0, -dr), POINT(0.0, dr), layerName );
shape->SetShape( path ); shape->SetShape( path );
path->aperture_width = 2.0 * radius; path->aperture_width = 2.0 * radius;
#endif
++coppers; ++coppers;
} }
} }
...@@ -811,6 +696,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -811,6 +696,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
} }
} }
//pcb->placement->flip_style = T_rotate_first;
// Since none of these statements cause any immediate output, the order // Since none of these statements cause any immediate output, the order
// of them is somewhat flexible. The outputting to disk is done at the // of them is somewhat flexible. The outputting to disk is done at the
...@@ -844,6 +730,13 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -844,6 +730,13 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
layer->name = layerIds.back(); layer->name = layerIds.back();
layer->properties.push_back( PROPERTY() );
PROPERTY* property = &layer->properties.back();
property->name = "index";
char temp[32];
sprintf( temp, "%d", pcbNdx );
property->value = temp;
// layer->type = @todo need this, the export would be better. // layer->type = @todo need this, the export would be better.
} }
} }
...@@ -914,7 +807,6 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -914,7 +807,6 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
} }
else else
{ {
#if 1
PATH* path = new PATH( boundary ); PATH* path = new PATH( boundary );
boundary->paths.push_back( path ); boundary->paths.push_back( path );
...@@ -925,17 +817,6 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -925,17 +817,6 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
// otherwise it will. // otherwise it will.
path->points.push_back( ppairs[i].start ); path->points.push_back( ppairs[i].start );
} }
#else
for( unsigned i=0; i<ppairs.size(); ++i )
{
PATH* path = new PATH( boundary );
boundary->paths.push_back( path );
path->layer_id = "pcb";
path->points.push_back( ppairs[i].start );
path->points.push_back( ppairs[i].end );
}
#endif
} }
pcb->structure->SetBOUNDARY( boundary ); pcb->structure->SetBOUNDARY( boundary );
...@@ -1090,8 +971,16 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -1090,8 +971,16 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
place->part_number = CONV_TO_UTF8( module->GetValue() ); place->part_number = CONV_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->flag )
{
int angle = 1800 - module->m_Orient;
NORMALIZE_ANGLE_POS(angle);
place->SetRotation( angle/10.0 );
place->side = T_back; place->side = T_back;
}
} }
} }
...@@ -1200,7 +1089,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -1200,7 +1089,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
wiring->wires.push_back( wire ); wiring->wires.push_back( wire );
wire->net_id = netname; wire->net_id = netname;
wire->wire_type = T_protect; // @todo, this should be configurable wire->wire_type = T_normal; // @todo, this should be configurable
int kiLayer = track->GetLayer(); int kiLayer = track->GetLayer();
int pcbLayer = kicadLayer2pcb[kiLayer]; int pcbLayer = kicadLayer2pcb[kiLayer];
...@@ -1251,7 +1140,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -1251,7 +1140,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
dsnVia->net_id = CONV_TO_UTF8( equipot->m_Netname ); dsnVia->net_id = CONV_TO_UTF8( equipot->m_Netname );
dsnVia->via_type = T_protect; // @todo, this should be configurable dsnVia->via_type = T_normal; // @todo, this should be configurable
} }
} }
...@@ -1291,4 +1180,3 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) ...@@ -1291,4 +1180,3 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
} // namespace DSN } // namespace DSN
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment