Commit 57c19271 authored by dickelbeck's avatar dickelbeck
Browse files

more amazing free software

parent 68e942b2
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -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
+3 −3
Original line number Original line Diff line number Diff line
@@ -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 )
    {
    {
        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 )
        //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


+0 −148
Original line number Original line Diff line number Diff line
@@ -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];
+0 −1
Original line number Original line Diff line number Diff line
@@ -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 );
    
    
+68 −180
Original line number Original line Diff line number Diff line
@@ -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
}
}




/*
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,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" ); 
@@ -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;
}        
}        
@@ -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 )
                        {
                        {
                            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 )
        }
        }
    }
    }


    //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 )
            
            
            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 )
            }
            }
            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 )
                    // 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 );
@@ -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>------------------------------------------------
@@ -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 )
            
            
            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 )


    
    
}       // namespace DSN
}       // namespace DSN