Arc shaped track segments: fix plotters and export vrml.
Export Hyperlinx is not fixed.
This commit is contained in:
parent
6e593aa1e0
commit
c877cb967f
|
@ -969,6 +969,31 @@ static void export_vrml_tracks( MODEL_VRML& aModel, BOARD* pcb )
|
|||
}
|
||||
else if( ( track->GetLayer() == B_Cu || track->GetLayer() == F_Cu )
|
||||
&& !aModel.m_plainPCB )
|
||||
{
|
||||
if( track->Type() == PCB_ARC_T )
|
||||
{
|
||||
ARC* arc = static_cast<ARC*>( track );
|
||||
VECTOR2D center( arc->GetCenter() );
|
||||
double arc_angle_degree = arc->GetAngle()/10;
|
||||
|
||||
// Vrml exporter does not export arcs with angle < 1.0 degree
|
||||
// ( to avoid issues with vrml viewers).
|
||||
// The best way is to convert them to a small straight line
|
||||
if( arc_angle_degree < -1.0 || arc_angle_degree > 1.0 )
|
||||
export_vrml_arc( aModel, track->GetLayer(),
|
||||
center.x * BOARD_SCALE, center.y * BOARD_SCALE,
|
||||
arc->GetStart().x * BOARD_SCALE,
|
||||
arc->GetStart().y * BOARD_SCALE,
|
||||
arc->GetWidth() * BOARD_SCALE, arc_angle_degree );
|
||||
else
|
||||
export_vrml_line( aModel, arc->GetLayer(),
|
||||
arc->GetStart().x * BOARD_SCALE,
|
||||
arc->GetStart().y * BOARD_SCALE,
|
||||
arc->GetEnd().x * BOARD_SCALE,
|
||||
arc->GetEnd().y * BOARD_SCALE,
|
||||
arc->GetWidth() * BOARD_SCALE );
|
||||
}
|
||||
else
|
||||
export_vrml_line( aModel, track->GetLayer(),
|
||||
track->GetStart().x * BOARD_SCALE,
|
||||
track->GetStart().y * BOARD_SCALE,
|
||||
|
@ -977,6 +1002,7 @@ static void export_vrml_tracks( MODEL_VRML& aModel, BOARD* pcb )
|
|||
track->GetWidth() * BOARD_SCALE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void export_vrml_zones( MODEL_VRML& aModel, BOARD* aPcb )
|
||||
|
|
|
@ -575,6 +575,19 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter,
|
|||
gbr_metadata.SetNetName( track->GetNetname() );
|
||||
int width = track->GetWidth() + itemplotter.getFineWidthAdj();
|
||||
aPlotter->SetColor( itemplotter.getColor( track->GetLayer() ) );
|
||||
|
||||
if( track->Type() == PCB_ARC_T )
|
||||
{
|
||||
ARC* arc = static_cast<ARC*>( track );
|
||||
VECTOR2D center( arc->GetCenter() );
|
||||
auto radius = arc->GetRadius();
|
||||
auto start_angle = arc->GetArcAngleStart();
|
||||
auto end_angle = start_angle + arc->GetAngle();
|
||||
|
||||
aPlotter->ThickArc( wxPoint( center.x, center.y ), -end_angle, -start_angle,
|
||||
radius, width, plotMode, &gbr_metadata );
|
||||
}
|
||||
else
|
||||
aPlotter->ThickSegment( track->GetStart(), track->GetEnd(), width, plotMode, &gbr_metadata );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue