Arc shaped track segments: fix plotters and export vrml.
Export Hyperlinx is not fixed.
This commit is contained in:
parent
6e593aa1e0
commit
c877cb967f
|
@ -968,13 +968,39 @@ static void export_vrml_tracks( MODEL_VRML& aModel, BOARD* pcb )
|
||||||
export_vrml_via( aModel, pcb, (const VIA*) track );
|
export_vrml_via( aModel, pcb, (const VIA*) track );
|
||||||
}
|
}
|
||||||
else if( ( track->GetLayer() == B_Cu || track->GetLayer() == F_Cu )
|
else if( ( track->GetLayer() == B_Cu || track->GetLayer() == F_Cu )
|
||||||
&& !aModel.m_plainPCB )
|
&& !aModel.m_plainPCB )
|
||||||
export_vrml_line( aModel, track->GetLayer(),
|
{
|
||||||
track->GetStart().x * BOARD_SCALE,
|
if( track->Type() == PCB_ARC_T )
|
||||||
track->GetStart().y * BOARD_SCALE,
|
{
|
||||||
track->GetEnd().x * BOARD_SCALE,
|
ARC* arc = static_cast<ARC*>( track );
|
||||||
track->GetEnd().y * BOARD_SCALE,
|
VECTOR2D center( arc->GetCenter() );
|
||||||
track->GetWidth() * BOARD_SCALE );
|
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,
|
||||||
|
track->GetEnd().x * BOARD_SCALE,
|
||||||
|
track->GetEnd().y * BOARD_SCALE,
|
||||||
|
track->GetWidth() * BOARD_SCALE );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -575,7 +575,20 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter,
|
||||||
gbr_metadata.SetNetName( track->GetNetname() );
|
gbr_metadata.SetNetName( track->GetNetname() );
|
||||||
int width = track->GetWidth() + itemplotter.getFineWidthAdj();
|
int width = track->GetWidth() + itemplotter.getFineWidthAdj();
|
||||||
aPlotter->SetColor( itemplotter.getColor( track->GetLayer() ) );
|
aPlotter->SetColor( itemplotter.getColor( track->GetLayer() ) );
|
||||||
aPlotter->ThickSegment( track->GetStart(), track->GetEnd(), width, plotMode, &gbr_metadata );
|
|
||||||
|
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
aPlotter->EndBlock( NULL );
|
aPlotter->EndBlock( NULL );
|
||||||
|
|
Loading…
Reference in New Issue