KiCad PCB EDA Suite
Loading...
Searching...
No Matches
STEP_PCB_MODEL Class Reference

#include <step_pcb_model.h>

Public Member Functions

 STEP_PCB_MODEL (const wxString &aPcbName)
 
virtual ~STEP_PCB_MODEL ()
 
bool AddPadHole (const PAD *aPad, const VECTOR2D &aOrigin)
 
bool AddPadShape (const PAD *aPad, const VECTOR2D &aOrigin, bool aVia)
 
bool AddViaShape (const PCB_VIA *aVia, const VECTOR2D &aOrigin)
 
bool AddTrackSegment (const PCB_TRACK *aTrack, const VECTOR2D &aOrigin)
 
bool AddCopperPolygonShapes (const SHAPE_POLY_SET *aPolyShapes, PCB_LAYER_ID aLayer, const VECTOR2D &aOrigin, bool aTrack)
 
bool AddComponent (const std::string &aFileName, const std::string &aRefDes, bool aBottom, VECTOR2D aPosition, double aRotation, VECTOR3D aOffset, VECTOR3D aOrientation, VECTOR3D aScale, bool aSubstituteModels=true)
 
void SetBoardColor (double r, double g, double b)
 
void SetCopperColor (double r, double g, double b)
 
void SetEnabledLayers (const LSET &aLayers)
 
void SetFuseShapes (bool aValue)
 
void SetStackup (const BOARD_STACKUP &aStackup)
 
void SetNetFilter (const wxString &aFilter)
 
void OCCSetMergeMaxDistance (double aDistance=OCC_MAX_DISTANCE_TO_MERGE_POINTS)
 
void SetMaxError (int aMaxError)
 
bool CreatePCB (SHAPE_POLY_SET &aOutline, VECTOR2D aOrigin, bool aPushBoardBody)
 
bool MakeShapes (std::vector< TopoDS_Shape > &aShapes, const SHAPE_POLY_SET &aPolySet, bool aConvertToArcs, double aThickness, double aZposition, const VECTOR2D &aOrigin)
 Convert a SHAPE_POLY_SET to TopoDS_Shape's (polygonal vertical prisms)
 
bool MakeShapeAsCylinder (TopoDS_Shape &aShape, const SHAPE_LINE_CHAIN &aChain, double aThickness, double aZposition, const VECTOR2D &aOrigin)
 Convert a SHAPE_LINE_CHAIN containing only one 360 deg arc to a TopoDS_Shape ( vertical cylinder) it is a specialized version of MakeShape()
 
bool MakeShapeAsThickSegment (TopoDS_Shape &aShape, VECTOR2D aStartPoint, VECTOR2D aEndPoint, double aWidth, double aThickness, double aZposition, const VECTOR2D &aOrigin)
 Convert a SHAPE_LINE_CHAIN containing only one 360 deg arc to a TopoDS_Shape ( vertical cylinder) it is a specialized version of MakeShape()
 
bool WriteSTEP (const wxString &aFileName, bool aOptimize)
 
bool WriteBREP (const wxString &aFileName)
 
bool WriteXAO (const wxString &aFileName)
 
bool WriteGLTF (const wxString &aFileName)
 Write the assembly in binary GLTF Format.
 

Private Member Functions

bool isBoardOutlineValid ()
 
void getLayerZPlacement (const PCB_LAYER_ID aLayer, double &aZPos, double &aThickness)
 
void getBoardBodyZPlacement (double &aZPos, double &aThickness)
 
bool getModelLabel (const std::string &aFileNameUTF8, VECTOR3D aScale, TDF_Label &aLabel, bool aSubstituteModels, wxString *aErrorMessage=nullptr)
 Load a 3D model data.
 
bool getModelLocation (bool aBottom, VECTOR2D aPosition, double aRotation, VECTOR3D aOffset, VECTOR3D aOrientation, TopLoc_Location &aLocation)
 
bool readIGES (Handle(TDocStd_Document)&m_doc, const char *fname)
 
bool readSTEP (Handle(TDocStd_Document)&m_doc, const char *fname)
 
TDF_Label transferModel (Handle(TDocStd_Document)&source, Handle(TDocStd_Document) &dest, VECTOR3D aScale)
 
 Handle (XCAFApp_Application) m_app
 
 Handle (TDocStd_Document) m_doc
 
 Handle (XCAFDoc_ShapeTool) m_assy
 

Private Attributes

TDF_Label m_assy_label
 
bool m_hasPCB
 
bool m_fuseShapes
 
int m_platingThickness
 
std::vector< TDF_Label > m_pcb_labels
 
MODEL_MAP m_models
 
int m_components
 
double m_precision
 
double m_angleprec
 
double m_boardColor [3]
 
double m_copperColor [3]
 
BOARD_STACKUP m_stackup
 
LSET m_enabledLayers
 
wxString m_netFilter
 
double m_minx
 
double m_mergeOCCMaxDist
 
std::vector< TopoDS_Shape > m_copperCutouts
 
std::vector< TopoDS_Shape > m_boardCutouts
 
std::vector< TopoDS_Shape > m_board_outlines
 
std::vector< TopoDS_Shape > m_board_copper_zones
 
std::vector< TopoDS_Shape > m_board_copper_tracks
 
std::vector< TopoDS_Shape > m_board_copper_pads
 
std::vector< TopoDS_Shape > m_board_copper_fused
 
std::map< wxString, std::pair< gp_Pnt, TopoDS_Shape > > m_pad_points
 
wxString m_pcbName
 Name of the PCB, which will most likely be the file name of the path.
 
int m_maxError
 

Detailed Description

Definition at line 78 of file step_pcb_model.h.

Constructor & Destructor Documentation

◆ STEP_PCB_MODEL()

◆ ~STEP_PCB_MODEL()

STEP_PCB_MODEL::~STEP_PCB_MODEL ( )
virtual

Definition at line 444 of file step_pcb_model.cpp.

Member Function Documentation

◆ AddComponent()

bool STEP_PCB_MODEL::AddComponent ( const std::string &  aFileName,
const std::string &  aRefDes,
bool  aBottom,
VECTOR2D  aPosition,
double  aRotation,
VECTOR3D  aOffset,
VECTOR3D  aOrientation,
VECTOR3D  aScale,
bool  aSubstituteModels = true 
)

Definition at line 838 of file step_pcb_model.cpp.

References getModelLabel(), getModelLocation(), m_assy_label, and ReportMessage().

◆ AddCopperPolygonShapes()

bool STEP_PCB_MODEL::AddCopperPolygonShapes ( const SHAPE_POLY_SET aPolyShapes,
PCB_LAYER_ID  aLayer,
const VECTOR2D aOrigin,
bool  aTrack 
)

◆ AddPadHole()

◆ AddPadShape()

◆ AddTrackSegment()

◆ AddViaShape()

bool STEP_PCB_MODEL::AddViaShape ( const PCB_VIA aVia,
const VECTOR2D aOrigin 
)

◆ CreatePCB()

◆ getBoardBodyZPlacement()

void STEP_PCB_MODEL::getBoardBodyZPlacement ( double &  aZPos,
double &  aThickness 
)
private

Definition at line 743 of file step_pcb_model.cpp.

References B_Cu, F_Cu, and getLayerZPlacement().

Referenced by CreatePCB(), and getModelLocation().

◆ getLayerZPlacement()

◆ getModelLabel()

bool STEP_PCB_MODEL::getModelLabel ( const std::string &  aFileNameUTF8,
VECTOR3D  aScale,
TDF_Label &  aLabel,
bool  aSubstituteModels,
wxString *  aErrorMessage = nullptr 
)
private

Load a 3D model data.

Parameters
aFileNameUTF8is the filename encoded UTF8 (different formats allowed) but for WRML files a model data can be loaded instead of the vrml data, not suitable in a step file.
aScaleis the X,Y,Z scaling factors.
aLabelis the TDF_Label to store the data.
aSubstituteModels= true to allows data substitution, false to disallow.
aErrorMessage(can be nullptr) is an error message to be displayed on error.
Returns
true if successfully loaded, false on error.

Definition at line 2085 of file step_pcb_model.cpp.

References fileType(), FMT_IGES, FMT_STEP, FMT_STEPZ, FMT_WRL, FMT_WRZ, getModelLabel(), Handle(), m_components, m_models, readIGES(), readSTEP(), ReportMessage(), TO_UTF8, transferModel(), VECTOR3< T >::x, VECTOR3< T >::y, and VECTOR3< T >::z.

Referenced by AddComponent(), and getModelLabel().

◆ getModelLocation()

bool STEP_PCB_MODEL::getModelLocation ( bool  aBottom,
VECTOR2D  aPosition,
double  aRotation,
VECTOR3D  aOffset,
VECTOR3D  aOrientation,
TopLoc_Location &  aLocation 
)
private

◆ Handle() [1/3]

STEP_PCB_MODEL::Handle ( TDocStd_Document  )
private

◆ Handle() [2/3]

STEP_PCB_MODEL::Handle ( XCAFApp_Application  )
private

◆ Handle() [3/3]

STEP_PCB_MODEL::Handle ( XCAFDoc_ShapeTool  )
private

◆ isBoardOutlineValid()

bool STEP_PCB_MODEL::isBoardOutlineValid ( )
private
Returns
true if the board(s) outline is valid. False otherwise

Definition at line 940 of file step_pcb_model.cpp.

References m_pcb_labels.

Referenced by CreatePCB(), WriteBREP(), WriteGLTF(), and WriteSTEP().

◆ MakeShapeAsCylinder()

bool STEP_PCB_MODEL::MakeShapeAsCylinder ( TopoDS_Shape &  aShape,
const SHAPE_LINE_CHAIN aChain,
double  aThickness,
double  aZposition,
const VECTOR2D aOrigin 
)

Convert a SHAPE_LINE_CHAIN containing only one 360 deg arc to a TopoDS_Shape ( vertical cylinder) it is a specialized version of MakeShape()

Parameters
aShapeis the TopoDS_Shape to initialize (must be empty)
aChainis a closed SHAPE_LINE_CHAIN, image of a circle: containing one 360 deg arc
aThicknessis the height of the created cylinder
aOriginis the origin of the coordinates
Returns
true if success

Definition at line 968 of file step_pcb_model.cpp.

References SHAPE_LINE_CHAIN::CArcs(), SHAPE_ARC::GetCenter(), SHAPE_ARC::GetRadius(), SHAPE_LINE_CHAIN::IsClosed(), EDA_IU_SCALE::IUTomm(), pcbIUScale, ReportMessage(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ MakeShapeAsThickSegment()

bool STEP_PCB_MODEL::MakeShapeAsThickSegment ( TopoDS_Shape &  aShape,
VECTOR2D  aStartPoint,
VECTOR2D  aEndPoint,
double  aWidth,
double  aThickness,
double  aZposition,
const VECTOR2D aOrigin 
)

Convert a SHAPE_LINE_CHAIN containing only one 360 deg arc to a TopoDS_Shape ( vertical cylinder) it is a specialized version of MakeShape()

Parameters
aShapeis the TopoDS_Shape to initialize (must be empty)
aStartPointis the start point of the segment
aEndPointis the end point of the segment
aWidthis the width of the segment
aThicknessis the height of the created cylinder
aOriginis the origin of the coordinates
Returns
true if success

Definition at line 1001 of file step_pcb_model.cpp.

References EuclideanNorm(), Handle(), EDA_IU_SCALE::IUTomm(), m_mergeOCCMaxDist, pcbIUScale, ReportMessage(), RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by AddPadHole(), AddPadShape(), and AddTrackSegment().

◆ MakeShapes()

bool STEP_PCB_MODEL::MakeShapes ( std::vector< TopoDS_Shape > &  aShapes,
const SHAPE_POLY_SET aPolySet,
bool  aConvertToArcs,
double  aThickness,
double  aZposition,
const VECTOR2D aOrigin 
)

Convert a SHAPE_POLY_SET to TopoDS_Shape's (polygonal vertical prisms)

Parameters
aShapesis the TopoDS_Shape list to append to
aPolySetis a polygon set
aConvertToArcsset to approximate with arcs
aThicknessis the height of the created prism
aOriginis the origin of the coordinates
Returns
true if success

Definition at line 1152 of file step_pcb_model.cpp.

References _, SEG::A, addSegment(), ANGLE_360, approximateLineChainWithArcs(), SHAPE_LINE_CHAIN::Arc(), SHAPE_LINE_CHAIN::ArcIndex(), SEG::B, SHAPE_LINE_CHAIN::CPoint(), SHAPE_POLY_SET::CPolygons(), SHAPE_LINE_CHAIN::CSegment(), formatBBox(), SHAPE_ARC::GetP0(), SHAPE_ARC::GetP1(), Handle(), SHAPE_LINE_CHAIN::IsArcSegment(), SHAPE_LINE_CHAIN::IsArcStart(), EDA_IU_SCALE::IUTomm(), m_mergeOCCMaxDist, SHAPE_LINE_CHAIN::NextShape(), pcbIUScale, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE, SHAPE_LINE_CHAIN::PointCount(), ReportMessage(), SHAPE_POLY_SET::Simplify(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by AddCopperPolygonShapes(), AddPadShape(), and CreatePCB().

◆ OCCSetMergeMaxDistance()

void STEP_PCB_MODEL::OCCSetMergeMaxDistance ( double  aDistance = OCC_MAX_DISTANCE_TO_MERGE_POINTS)

Definition at line 933 of file step_pcb_model.cpp.

References m_mergeOCCMaxDist.

◆ readIGES()

bool STEP_PCB_MODEL::readIGES ( Handle(TDocStd_Document)&  m_doc,
const char *  fname 
)
private

Definition at line 2370 of file step_pcb_model.cpp.

References USER_PREC.

Referenced by getModelLabel().

◆ readSTEP()

bool STEP_PCB_MODEL::readSTEP ( Handle(TDocStd_Document)&  m_doc,
const char *  fname 
)
private

Definition at line 2413 of file step_pcb_model.cpp.

References USER_PREC.

Referenced by getModelLabel().

◆ SetBoardColor()

void STEP_PCB_MODEL::SetBoardColor ( double  r,
double  g,
double  b 
)

Definition at line 917 of file step_pcb_model.cpp.

References m_boardColor.

◆ SetCopperColor()

void STEP_PCB_MODEL::SetCopperColor ( double  r,
double  g,
double  b 
)

Definition at line 925 of file step_pcb_model.cpp.

References m_copperColor.

◆ SetEnabledLayers()

void STEP_PCB_MODEL::SetEnabledLayers ( const LSET aLayers)

Definition at line 893 of file step_pcb_model.cpp.

References m_enabledLayers.

◆ SetFuseShapes()

void STEP_PCB_MODEL::SetFuseShapes ( bool  aValue)

Definition at line 899 of file step_pcb_model.cpp.

References m_fuseShapes.

◆ SetMaxError()

void STEP_PCB_MODEL::SetMaxError ( int  aMaxError)
inline

Definition at line 120 of file step_pcb_model.h.

References m_maxError.

◆ SetNetFilter()

void STEP_PCB_MODEL::SetNetFilter ( const wxString &  aFilter)

Definition at line 911 of file step_pcb_model.cpp.

References m_netFilter.

◆ SetStackup()

void STEP_PCB_MODEL::SetStackup ( const BOARD_STACKUP aStackup)

Definition at line 905 of file step_pcb_model.cpp.

References m_stackup.

◆ transferModel()

TDF_Label STEP_PCB_MODEL::transferModel ( Handle(TDocStd_Document)&  source,
Handle(TDocStd_Document) &  dest,
VECTOR3D  aScale 
)
private

Definition at line 2455 of file step_pcb_model.cpp.

References Handle(), ReportMessage(), VECTOR3< T >::x, VECTOR3< T >::y, and VECTOR3< T >::z.

Referenced by getModelLabel().

◆ WriteBREP()

bool STEP_PCB_MODEL::WriteBREP ( const wxString &  aFileName)

Definition at line 1899 of file step_pcb_model.cpp.

References getOneShape(), Handle(), isBoardOutlineValid(), and ReportMessage().

◆ WriteGLTF()

bool STEP_PCB_MODEL::WriteGLTF ( const wxString &  aFileName)

Write the assembly in binary GLTF Format.

We only support binary GLTF because GLTF is weird Officially, binary GLTF is actually json+binary in one file If we elected non-binary output with opecascade, it will generate that one file as two separate files, one containing json that references the binary Which is actually more annoying to deal with (to do the temp file rename, since we dont control the binary name) and silly when you can just have the one file.

Parameters
aFileNameOutput file path
Returns
true if the write succeeded without error

Definition at line 2594 of file step_pcb_model.cpp.

References KIPLATFORM::IO::DuplicatePermissions(), GetISO8601CurrentDateTime(), GetSemanticVersion(), isBoardOutlineValid(), and ReportMessage().

◆ WriteSTEP()

bool STEP_PCB_MODEL::WriteSTEP ( const wxString &  aFileName,
bool  aOptimize 
)

◆ WriteXAO()

bool STEP_PCB_MODEL::WriteXAO ( const wxString &  aFileName)

Definition at line 1930 of file step_pcb_model.cpp.

References getOneShape(), Handle(), m_pad_points, name, and ReportMessage().

Member Data Documentation

◆ m_angleprec

double STEP_PCB_MODEL::m_angleprec
private

Definition at line 243 of file step_pcb_model.h.

Referenced by STEP_PCB_MODEL().

◆ m_assy_label

TDF_Label STEP_PCB_MODEL::m_assy_label
private

Definition at line 235 of file step_pcb_model.h.

Referenced by AddComponent(), CreatePCB(), and STEP_PCB_MODEL().

◆ m_board_copper_fused

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_board_copper_fused
private

Definition at line 263 of file step_pcb_model.h.

Referenced by CreatePCB().

◆ m_board_copper_pads

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_board_copper_pads
private

Definition at line 262 of file step_pcb_model.h.

Referenced by AddPadShape(), and CreatePCB().

◆ m_board_copper_tracks

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_board_copper_tracks
private

Definition at line 261 of file step_pcb_model.h.

Referenced by AddCopperPolygonShapes(), AddTrackSegment(), and CreatePCB().

◆ m_board_copper_zones

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_board_copper_zones
private

Definition at line 260 of file step_pcb_model.h.

Referenced by AddCopperPolygonShapes(), and CreatePCB().

◆ m_board_outlines

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_board_outlines
private

Definition at line 259 of file step_pcb_model.h.

Referenced by CreatePCB().

◆ m_boardColor

double STEP_PCB_MODEL::m_boardColor[3]
private

Definition at line 244 of file step_pcb_model.h.

Referenced by CreatePCB(), and SetBoardColor().

◆ m_boardCutouts

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_boardCutouts
private

Definition at line 256 of file step_pcb_model.h.

Referenced by AddPadHole(), and CreatePCB().

◆ m_components

int STEP_PCB_MODEL::m_components
private

Definition at line 241 of file step_pcb_model.h.

Referenced by getModelLabel(), and STEP_PCB_MODEL().

◆ m_copperColor

double STEP_PCB_MODEL::m_copperColor[3]
private

Definition at line 245 of file step_pcb_model.h.

Referenced by CreatePCB(), and SetCopperColor().

◆ m_copperCutouts

std::vector<TopoDS_Shape> STEP_PCB_MODEL::m_copperCutouts
private

Definition at line 255 of file step_pcb_model.h.

Referenced by AddPadHole(), and CreatePCB().

◆ m_enabledLayers

LSET STEP_PCB_MODEL::m_enabledLayers
private

◆ m_fuseShapes

bool STEP_PCB_MODEL::m_fuseShapes
private

Definition at line 237 of file step_pcb_model.h.

Referenced by CreatePCB(), SetFuseShapes(), and STEP_PCB_MODEL().

◆ m_hasPCB

bool STEP_PCB_MODEL::m_hasPCB
private

Definition at line 236 of file step_pcb_model.h.

Referenced by CreatePCB(), and STEP_PCB_MODEL().

◆ m_maxError

int STEP_PCB_MODEL::m_maxError
private

Definition at line 271 of file step_pcb_model.h.

Referenced by SetMaxError(), and STEP_PCB_MODEL().

◆ m_mergeOCCMaxDist

double STEP_PCB_MODEL::m_mergeOCCMaxDist
private

◆ m_minx

double STEP_PCB_MODEL::m_minx
private

Definition at line 250 of file step_pcb_model.h.

Referenced by STEP_PCB_MODEL().

◆ m_models

MODEL_MAP STEP_PCB_MODEL::m_models
private

Definition at line 240 of file step_pcb_model.h.

Referenced by getModelLabel().

◆ m_netFilter

wxString STEP_PCB_MODEL::m_netFilter
private

Definition at line 248 of file step_pcb_model.h.

Referenced by SetNetFilter().

◆ m_pad_points

std::map<wxString, std::pair<gp_Pnt, TopoDS_Shape> > STEP_PCB_MODEL::m_pad_points
private

Definition at line 266 of file step_pcb_model.h.

Referenced by AddPadShape(), and WriteXAO().

◆ m_pcb_labels

std::vector<TDF_Label> STEP_PCB_MODEL::m_pcb_labels
private

Definition at line 239 of file step_pcb_model.h.

Referenced by CreatePCB(), and isBoardOutlineValid().

◆ m_pcbName

wxString STEP_PCB_MODEL::m_pcbName
private

Name of the PCB, which will most likely be the file name of the path.

Definition at line 269 of file step_pcb_model.h.

Referenced by CreatePCB(), and STEP_PCB_MODEL().

◆ m_platingThickness

int STEP_PCB_MODEL::m_platingThickness
private

Definition at line 238 of file step_pcb_model.h.

Referenced by AddPadHole(), and STEP_PCB_MODEL().

◆ m_precision

double STEP_PCB_MODEL::m_precision
private

Definition at line 242 of file step_pcb_model.h.

Referenced by STEP_PCB_MODEL().

◆ m_stackup

BOARD_STACKUP STEP_PCB_MODEL::m_stackup
private

Definition at line 246 of file step_pcb_model.h.

Referenced by getLayerZPlacement(), and SetStackup().


The documentation for this class was generated from the following files: