Pcbnew: Export vrml: fix an issue for 3D shapes having a local offset defined: the local offset was not correctly scaled.
This commit is contained in:
parent
8cd77e78f9
commit
77945c4eb8
|
@ -300,7 +300,10 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel,
|
||||||
* with outlines thickness = 0 is a faster than
|
* with outlines thickness = 0 is a faster than
|
||||||
* just draw filled polygons but with outlines thickness = m_ZoneMinThickness
|
* just draw filled polygons but with outlines thickness = m_ZoneMinThickness
|
||||||
* So DO NOT use draw filled polygons with outlines having a thickness > 0
|
* So DO NOT use draw filled polygons with outlines having a thickness > 0
|
||||||
* Note: Extra segments ( added by kbool to joint holes with external outline) are not drawn
|
* Note: Extra segments ( added to joint holes with external outline) flagged by
|
||||||
|
* m_utility != 0 are not drawn
|
||||||
|
* Note not all polygon libraries provide a flag for these extra-segments, therefore
|
||||||
|
* the m_utility member can be always 0
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
// Draw outlines:
|
// Draw outlines:
|
||||||
|
|
|
@ -1111,10 +1111,11 @@ static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
|
||||||
fprintf( aOutputFile, " rotation %g %g %g %g\n", rot[0], rot[1], rot[2], rot[3] );
|
fprintf( aOutputFile, " rotation %g %g %g %g\n", rot[0], rot[1], rot[2], rot[3] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust 3D shape offset position
|
// adjust 3D shape local offset position
|
||||||
int offsetx = vrmlm->m_MatPosition.x;
|
// they are given in inch, so they are converted in board IU.
|
||||||
int offsety = vrmlm->m_MatPosition.y;
|
double offsetx = vrmlm->m_MatPosition.x * IU_PER_MILS * 1000.0;
|
||||||
double offsetz = vrmlm->m_MatPosition.z;
|
double offsety = vrmlm->m_MatPosition.y * IU_PER_MILS * 1000.0;
|
||||||
|
double offsetz = vrmlm->m_MatPosition.z * IU_PER_MILS * 1000.0;
|
||||||
|
|
||||||
if ( isFlipped )
|
if ( isFlipped )
|
||||||
NEGATE(offsetz);
|
NEGATE(offsetz);
|
||||||
|
@ -1124,8 +1125,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",
|
||||||
(double) (offsetx + aModule->m_Pos.x) * boardIU2WRML,
|
(offsetx + aModule->m_Pos.x) * boardIU2WRML,
|
||||||
- (double)(offsety + aModule->m_Pos.y) * boardIU2WRML, // Y axis is reversed in Pcbnew
|
- (offsety + aModule->m_Pos.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",
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// PolyLine.cpp ... implementation of CPolyLine class from FreePCB.
|
// PolyLine.cpp ... implementation of CPolyLine class from FreePCB.
|
||||||
|
|
||||||
//
|
//
|
||||||
// implementation for kicad and kbool polygon clipping library
|
// implementation for kicad, using clipper polygon clipping library
|
||||||
|
// for transformations not handled (at least for Kicad) by boost::polygon
|
||||||
//
|
//
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
//#include <kbool/include/kbool/booleng.h>
|
|
||||||
#include <pad_shapes.h>
|
#include <pad_shapes.h>
|
||||||
#include <wx/gdicmn.h> // for wxPoint definition
|
#include <wx/gdicmn.h> // for wxPoint definition
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue