Loading change_log.txt +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading pcbnew/basepcbframe.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading pcbnew/class_module.cpp +0 −148 Original line number Original line Diff line number Diff line Loading @@ -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]; Loading pcbnew/specctra.cpp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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 ); Loading pcbnew/specctra_export.cpp +68 −180 Original line number Original line Diff line number Diff line Loading @@ -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. Loading @@ -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; Loading Loading @@ -391,18 +356,23 @@ 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() ) { case VIA_THROUGH: shape = new SHAPE( padstack ); padstack->Append( shape ); padstack->Append( shape ); // @todo: handle the aVia->Shape() differently for each type of via: MICROVIA, etc. circle = new CIRCLE( shape ); CIRCLE* circle = new CIRCLE( shape ); shape->SetShape( circle ); shape->SetShape( circle ); double dsnDiameter = scale( aVia->m_Width ); dsnDiameter = scale( aVia->m_Width ); circle->SetDiameter( dsnDiameter ); circle->SetDiameter( dsnDiameter ); circle->SetLayerId( "signal" ); circle->SetLayerId( "signal" ); Loading @@ -410,6 +380,37 @@ PADSTACK* SPECCTRA_DB::makeVia( const SEGVIA* aVia ) snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter ); snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter ); name[ sizeof(name)-1 ] = 0; name[ sizeof(name)-1 ] = 0; padstack->SetPadstackId( name ); 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; } } Loading Loading @@ -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; } } } } Loading @@ -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; } } } } Loading Loading @@ -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 Loading Loading @@ -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. } } } } Loading Loading @@ -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 ); Loading @@ -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 ); Loading Loading @@ -1091,9 +972,17 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) // 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; } } } } } //-----<create the nets>------------------------------------------------ //-----<create the nets>------------------------------------------------ Loading Loading @@ -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]; Loading Loading @@ -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 } } } } Loading Loading @@ -1291,4 +1180,3 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) } // namespace DSN } // namespace DSN Loading
change_log.txt +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading
pcbnew/basepcbframe.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading
pcbnew/class_module.cpp +0 −148 Original line number Original line Diff line number Diff line Loading @@ -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]; Loading
pcbnew/specctra.cpp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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 ); Loading
pcbnew/specctra_export.cpp +68 −180 Original line number Original line Diff line number Diff line Loading @@ -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. Loading @@ -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; Loading Loading @@ -391,18 +356,23 @@ 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() ) { case VIA_THROUGH: shape = new SHAPE( padstack ); padstack->Append( shape ); padstack->Append( shape ); // @todo: handle the aVia->Shape() differently for each type of via: MICROVIA, etc. circle = new CIRCLE( shape ); CIRCLE* circle = new CIRCLE( shape ); shape->SetShape( circle ); shape->SetShape( circle ); double dsnDiameter = scale( aVia->m_Width ); dsnDiameter = scale( aVia->m_Width ); circle->SetDiameter( dsnDiameter ); circle->SetDiameter( dsnDiameter ); circle->SetLayerId( "signal" ); circle->SetLayerId( "signal" ); Loading @@ -410,6 +380,37 @@ PADSTACK* SPECCTRA_DB::makeVia( const SEGVIA* aVia ) snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter ); snprintf( name, sizeof(name), "Via_%.6g_mil", dsnDiameter ); name[ sizeof(name)-1 ] = 0; name[ sizeof(name)-1 ] = 0; padstack->SetPadstackId( name ); 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; } } Loading Loading @@ -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; } } } } Loading @@ -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; } } } } Loading Loading @@ -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 Loading Loading @@ -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. } } } } Loading Loading @@ -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 ); Loading @@ -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 ); Loading Loading @@ -1091,9 +972,17 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) // 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; } } } } } //-----<create the nets>------------------------------------------------ //-----<create the nets>------------------------------------------------ Loading Loading @@ -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]; Loading Loading @@ -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 } } } } Loading Loading @@ -1291,4 +1180,3 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) } // namespace DSN } // namespace DSN