Dxf importer: fix some issues, especially the rotation angle of texts.
This commit is contained in:
parent
c56d6ad2dd
commit
b0ab53ac26
|
@ -316,24 +316,20 @@ void DXF_IMPORT_PLUGIN::addArc( const DL_ArcData& aData )
|
|||
// Init arc centre:
|
||||
VECTOR2D center( mapX( aData.cx ), mapY( aData.cy ) );
|
||||
|
||||
// aData.anglex is in degrees.
|
||||
double startangle = aData.angle1;
|
||||
double endangle = aData.angle2;
|
||||
|
||||
// Init arc start point
|
||||
double arcStartx = aData.radius;
|
||||
double arcStarty = 0;
|
||||
|
||||
// aData.anglex is in degrees. Our internal units are 0.1 degree
|
||||
// so convert DXF angles (in degrees) to our units
|
||||
#define DXF2ANGLEUI 10
|
||||
double startangle = aData.angle1 * DXF2ANGLEUI;
|
||||
double endangle = aData.angle2 * DXF2ANGLEUI;
|
||||
|
||||
RotatePoint( &arcStartx, &arcStarty, -startangle );
|
||||
VECTOR2D arcStart( mapX( arcStartx + aData.cx ), mapY( arcStarty + aData.cy ) );
|
||||
VECTOR2D startPoint( aData.radius, 0.0 );
|
||||
startPoint = startPoint.Rotate( startangle * M_PI / 180.0 );
|
||||
VECTOR2D arcStart( mapX( startPoint.x + aData.cx ), mapY( startPoint.y + aData.cy ) );
|
||||
|
||||
// calculate arc angle (arcs are CCW, and should be < 0 in Pcbnew)
|
||||
double angle = -( endangle - startangle );
|
||||
|
||||
if( angle > 0.0 )
|
||||
angle -= 3600.0;
|
||||
angle -= 360.0;
|
||||
|
||||
double lineWidth = mapWidth( attributes.getWidth() );
|
||||
m_internalImporter.AddArc( center, arcStart, angle, lineWidth );
|
||||
|
@ -447,13 +443,17 @@ void DXF_IMPORT_PLUGIN::addText( const DL_TextData& aData )
|
|||
}
|
||||
#endif
|
||||
|
||||
double angle = aData.angle * 10;
|
||||
double angleInRads = angle / 10.0 * M_PI / 180.0;
|
||||
// dxf_lib imports text angle in radians (although there are no comment about that.
|
||||
// So, for the moment, convert this angle to degrees
|
||||
double angle_degree = aData.angle * 180 / M_PI;
|
||||
// We also need the angle in radians. so convert angle_degree to radians
|
||||
// regardless the aData.angle unit
|
||||
double angleInRads = angle_degree * M_PI / 180.0;
|
||||
double cosine = cos(angleInRads);
|
||||
double sine = sin(angleInRads);
|
||||
|
||||
m_internalImporter.AddText( refPoint, text, textHeight, charWidth, textThickness, angle,
|
||||
hJustify, vJustify );
|
||||
m_internalImporter.AddText( refPoint, text, textHeight, charWidth, textThickness,
|
||||
angle_degree, hJustify, vJustify );
|
||||
|
||||
// Calculate the boundary box and update the image limits:
|
||||
bottomLeft.x = bottomLeft.x * cosine - bottomLeft.y * sine;
|
||||
|
@ -600,13 +600,17 @@ void DXF_IMPORT_PLUGIN::addMText( const DL_MTextData& aData )
|
|||
}
|
||||
#endif
|
||||
|
||||
double angle = aData.angle * 10;
|
||||
double angleInRads = angle / 10.0 * M_PI / 180.0;
|
||||
// dxf_lib imports text angle in radians (although there are no comment about that.
|
||||
// So, for the moment, convert this angle to degrees
|
||||
double angle_degree = aData.angle * 180/M_PI;
|
||||
// We also need the angle in radians. so convert angle_degree to radians
|
||||
// regardless the aData.angle unit
|
||||
double angleInRads = angle_degree * M_PI / 180.0;
|
||||
double cosine = cos(angleInRads);
|
||||
double sine = sin(angleInRads);
|
||||
|
||||
m_internalImporter.AddText( textpos, text, textHeight, charWidth,
|
||||
textThickness, angle, hJustify, vJustify );
|
||||
textThickness, angle_degree, hJustify, vJustify );
|
||||
|
||||
bottomLeft.x = bottomLeft.x * cosine - bottomLeft.y * sine;
|
||||
bottomLeft.y = bottomLeft.x * sine + bottomLeft.y * cosine;
|
||||
|
@ -924,7 +928,7 @@ void DXF_IMPORT_PLUGIN::insertArc( const VECTOR2D& aSegStart, const VECTOR2D& aS
|
|||
double cy = h * sin( offAng ) + ym;
|
||||
VECTOR2D center( SCALE_FACTOR( cx ), SCALE_FACTOR( -cy ) );
|
||||
VECTOR2D arc_start;
|
||||
double angle = RAD2DECIDEG( ang );
|
||||
double angle = RAD2DEG( ang );
|
||||
|
||||
if( ang < 0.0 )
|
||||
{
|
||||
|
|
|
@ -202,22 +202,20 @@ public:
|
|||
* @param aCenter is the arc center point expressed in mm.
|
||||
* @param aStart is the arc arm end point expressed in mm.
|
||||
* Its length is the arc radius.
|
||||
* @param aAngle is the arc angle expressed in decidegrees.
|
||||
* @param aAngle is the arc angle expressed in degrees.
|
||||
* @param aWidth is the segment thickness in mm. Use -1 for default line thickness
|
||||
*/
|
||||
virtual void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, double aWidth ) = 0;
|
||||
|
||||
virtual void AddPolygon( const std::vector< VECTOR2D >& aVertices, double aWidth ) = 0;
|
||||
|
||||
//virtual void AddArc( const VECTOR2D& aOrigin, double aStartAngle, double aEndAngle ) = 0;
|
||||
//
|
||||
/**
|
||||
* @brief Creates an object representing a text.
|
||||
* @param aOrigin is the text position.
|
||||
* @param aText is the displayed text.
|
||||
* @param aHeight is the text height expressed in mm.
|
||||
* @param aWidth is the text width expressed in mm.
|
||||
* @param aOrientation is the text orientation angle expressed in decidegrees.
|
||||
* @param aOrientation is the text orientation angle expressed in degrees.
|
||||
* @param aHJustify is the text horizontal justification.
|
||||
* @param aVJustify is the text vertical justification.
|
||||
* @param aWidth is the segment thickness in mm. Use -1 for default line thickness
|
||||
|
|
|
@ -90,7 +90,8 @@ void GRAPHICS_IMPORTER_PCBNEW::AddCircle( const VECTOR2D& aCenter, double aRadiu
|
|||
}
|
||||
|
||||
|
||||
void GRAPHICS_IMPORTER_PCBNEW::AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, double aWidth )
|
||||
void GRAPHICS_IMPORTER_PCBNEW::AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart,
|
||||
double aAngle, double aWidth )
|
||||
{
|
||||
unique_ptr<DRAWSEGMENT> arc( createDrawing() );
|
||||
arc->SetShape( S_ARC );
|
||||
|
@ -98,7 +99,7 @@ void GRAPHICS_IMPORTER_PCBNEW::AddArc( const VECTOR2D& aCenter, const VECTOR2D&
|
|||
arc->SetWidth( MapLineWidth( aWidth ) );
|
||||
arc->SetCenter( MapCoordinate( aCenter) );
|
||||
arc->SetArcStart( MapCoordinate( aStart ) );
|
||||
arc->SetAngle( aAngle );
|
||||
arc->SetAngle( aAngle * 10.0 ); // Pcbnew uses the decidegree
|
||||
|
||||
if( arc->Type() == PCB_MODULE_EDGE_T )
|
||||
static_cast<EDGE_MODULE*>( arc.get() )->SetLocalCoord();
|
||||
|
@ -138,7 +139,7 @@ void GRAPHICS_IMPORTER_PCBNEW::AddText( const VECTOR2D& aOrigin, const wxString&
|
|||
boardItem->SetLayer( GetLayer() );
|
||||
textItem->SetThickness( MapLineWidth( aThickness ) );
|
||||
textItem->SetTextPos( MapCoordinate( aOrigin ) );
|
||||
textItem->SetTextAngle( aOrientation );
|
||||
textItem->SetTextAngle( aOrientation * 10.0 ); // Pcbnew uses the decidegree
|
||||
textItem->SetTextWidth( aWidth * ImportScalingFactor() );
|
||||
textItem->SetTextHeight( aHeight * ImportScalingFactor() );
|
||||
textItem->SetVertJustify( aVJustify );
|
||||
|
|
|
@ -62,7 +62,8 @@ public:
|
|||
|
||||
void AddCircle( const VECTOR2D& aOrigin, double aRadius, double aWidth ) override;
|
||||
|
||||
void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, double aWidth ) override;
|
||||
void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle,
|
||||
double aWidth ) override;
|
||||
|
||||
void AddPolygon( const std::vector< VECTOR2D >& aVertices, double aWidth ) override;
|
||||
|
||||
|
|
Loading…
Reference in New Issue