The attached patch fixes an IDF bug in the rotation of an object on the bottom side of the board.
The patch also changes the default IDF model replacement from a simple cylinder to a star-shaped object; this makes it obvious to a user when a faulty component file has been included. cheers, Cirilo
=== modified file 'pcbnew/exporters/export_idf.cpp' --- pcbnew/exporters/export_idf.cpp 2014-01-29 16:42:21 +0000 +++ pcbnew/exporters/export_idf.cpp 2014-02-06 21:23:07 +0000 @@ -334,7 +334,7 @@ refdes = aIDFBoard.GetRefDes(); } - double rotz = modfile->m_MatRotation.z + aModule->GetOrientation()/10.0; + double rotz = aModule->GetOrientation()/10.0; double locx = modfile->m_MatPosition.x; double locy = modfile->m_MatPosition.y; double locz = modfile->m_MatPosition.z; @@ -343,6 +343,7 @@ if( top ) { + rotz += modfile->m_MatRotation.z; locy = -locy; RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; @@ -352,6 +353,7 @@ RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; + rotz -= modfile->m_MatRotation.z; rotz = 180.0 - rotz; if( rotz >= 360.0 ) === modified file 'pcbnew/exporters/idf.cpp' --- pcbnew/exporters/idf.cpp 2014-02-05 09:27:21 +0000 +++ pcbnew/exporters/idf.cpp 2014-02-06 21:35:38 +0000 @@ -1055,13 +1055,35 @@ if( parent->RegisterOutline( "NOGEOM_NOPART" ) ) return true; + // Create a star shape 5mm high with points on 5 and 2.5 mm circles fprintf( aLibFile, ".ELECTRICAL\n" ); fprintf( aLibFile, "\"NOGEOM\" \"NOPART\" MM 5\n" ); - // TODO: for now we shall use a simple cylinder; a more intricate - // and readily recognized feature (a stylistic X) would be of - // much greater value. - fprintf( aLibFile, "0 0 0 0\n" ); - fprintf( aLibFile, "0 2.5 0 360\n" ); + + double a, da, x, y; + da = M_PI / 5.0; + a = da / 2.0; + + for( int i = 0; i < 10; ++i ) + { + if( i & 1 ) + { + x = 2.5 * cos( a ); + y = 2.5 * sin( a ); + } + else + { + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + } + + a += da; + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); + } + + a = da / 2.0; + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); fprintf( aLibFile, ".END_ELECTRICAL\n\n" ); return true;
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp