Arc shaped track segments: fix plotters and export vrml.

Export Hyperlinx is not fixed.
This commit is contained in:
jean-pierre charras 2020-04-08 17:30:20 +02:00
parent 6e593aa1e0
commit c877cb967f
2 changed files with 47 additions and 8 deletions

View File

@ -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 )

View File

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