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 ()
 
void SpecializeVariant (OUTPUT_FORMAT aVariant)
 
bool AddPadShape (const PAD *aPad, const VECTOR2D &aOrigin, bool aVia)
 
bool AddHole (const SHAPE_SEGMENT &aShape, int aPlatingThickness, PCB_LAYER_ID aLayerTop, PCB_LAYER_ID aLayerBot, bool aVia, const VECTOR2D &aOrigin)
 
bool AddBarrel (const SHAPE_SEGMENT &aShape, PCB_LAYER_ID aLayerTop, PCB_LAYER_ID aLayerBot, bool aVia, const VECTOR2D &aOrigin)
 
bool AddPolygonShapes (const SHAPE_POLY_SET *aPolyShapes, PCB_LAYER_ID aLayer, const VECTOR2D &aOrigin)
 
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 SetCopperColor (double r, double g, double b)
 
void SetPadColor (double r, double g, double b)
 
void SetEnabledLayers (const LSET &aLayers)
 
void SetFuseShapes (bool aValue)
 
void SetSimplifyShapes (bool aValue)
 
void SetAddVisMaterials (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, or flat faces)
 
bool MakeShapeAsThickSegment (TopoDS_Shape &aShape, VECTOR2D aStartPoint, VECTOR2D aEndPoint, double aWidth, double aThickness, double aZposition, const VECTOR2D &aOrigin)
 Make a segment shape based on start and end point.
 
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.
 
bool WritePLY (const wxString &aFileName)
 
bool WriteSTL (const wxString &aFileName)
 

Private Member Functions

bool isBoardOutlineValid ()
 
void getLayerZPlacement (const PCB_LAYER_ID aLayer, double &aZPos, double &aThickness)
 
void getCopperLayerZPlacement (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) &aDoc, const char *aFname)
 
bool readSTEP (Handle(TDocStd_Document) &aDoc, const char *aFname)
 
bool readVRML (Handle(TDocStd_Document) &aDoc, const char *aFname)
 
bool performMeshing (Handle(XCAFDoc_ShapeTool) &aShapeTool)
 
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_simplifyShapes
 
bool m_fuseShapes
 
std::vector< TDF_Label > m_pcb_labels
 
MODEL_MAP m_models
 
int m_components
 
double m_precision
 
double m_angleprec
 
double m_copperColor [3]
 
double m_padColor [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
 
std::vector< TopoDS_Shape > m_board_copper_pads
 
std::vector< TopoDS_Shape > m_board_copper_vias
 
std::vector< TopoDS_Shape > m_board_copper_fused
 
std::vector< TopoDS_Shape > m_board_silkscreen
 
std::vector< TopoDS_Shape > m_board_soldermask
 
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
 
OUTPUT_FORMAT m_outFmt
 The current output format for created file.
 

Detailed Description

Definition at line 90 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 779 of file step_pcb_model.cpp.

Member Function Documentation

◆ AddBarrel()

bool STEP_PCB_MODEL::AddBarrel ( const SHAPE_SEGMENT aShape,
PCB_LAYER_ID  aLayerTop,
PCB_LAYER_ID  aLayerBot,
bool  aVia,
const VECTOR2D aOrigin 
)

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

◆ AddHole()

bool STEP_PCB_MODEL::AddHole ( const SHAPE_SEGMENT aShape,
int  aPlatingThickness,
PCB_LAYER_ID  aLayerTop,
PCB_LAYER_ID  aLayerBot,
bool  aVia,
const VECTOR2D aOrigin 
)

◆ AddPadShape()

◆ AddPolygonShapes()

◆ CreatePCB()

◆ getBoardBodyZPlacement()

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

Definition at line 1081 of file step_pcb_model.cpp.

References B_Cu, F_Cu, and getLayerZPlacement().

Referenced by CreatePCB(), and getModelLocation().

◆ getCopperLayerZPlacement()

◆ getLayerZPlacement()

void STEP_PCB_MODEL::getLayerZPlacement ( const PCB_LAYER_ID  aLayer,
double &  aZPos,
double &  aThickness 
)
private

◆ 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 2460 of file step_pcb_model.cpp.

References fileType(), FMT_IGES, FMT_STEP, FMT_STEPZ, FMT_WRL, FMT_WRZ, getModelLabel(), Handle(), m_components, m_models, m_outFmt, prefixNames(), readIGES(), readSTEP(), readVRML(), 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 1237 of file step_pcb_model.cpp.

References m_pcb_labels.

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

◆ MakeShapeAsThickSegment()

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

Make a segment shape based on start and end point.

If they're too close, make a 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 segment, or 0.0: flat face pointing up, -0.0: down.
aOriginis the origin of the coordinates
Returns
true if success

Definition at line 1243 of file step_pcb_model.cpp.

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

Referenced by AddBarrel(), AddHole(), and AddPadShape().

◆ 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, or flat faces)

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, or 0.0: flat face pointing up, -0.0: down.
aOriginis the origin of the coordinates
Returns
true if success

Definition at line 1554 of file step_pcb_model.cpp.

References _, approximateLineChainWithArcs(), SHAPE_POLY_SET::CPolygon(), SHAPE_POLY_SET::CPolygons(), formatBBox(), EDA_IU_SCALE::IUTomm(), m_mergeOCCMaxDist, makeWireFromChain(), pcbIUScale, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE, SHAPE_POLY_SET::Polygon(), ReportMessage(), SHAPE_POLY_SET::Simplify(), VECTOR2< T >::x, and VECTOR2< T >::y.

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

◆ OCCSetMergeMaxDistance()

void STEP_PCB_MODEL::OCCSetMergeMaxDistance ( double  aDistance = OCC_MAX_DISTANCE_TO_MERGE_POINTS)

Definition at line 1230 of file step_pcb_model.cpp.

References m_mergeOCCMaxDist.

◆ performMeshing()

bool STEP_PCB_MODEL::performMeshing ( Handle(XCAFDoc_ShapeTool) &  aShapeTool)
private

Definition at line 2921 of file step_pcb_model.cpp.

References DEG2RAD(), and ReportMessage().

Referenced by WriteGLTF(), WritePLY(), and WriteSTL().

◆ readIGES()

bool STEP_PCB_MODEL::readIGES ( Handle(TDocStd_Document) &  aDoc,
const char *  aFname 
)
private

Definition at line 2774 of file step_pcb_model.cpp.

References USER_PREC.

Referenced by getModelLabel().

◆ readSTEP()

bool STEP_PCB_MODEL::readSTEP ( Handle(TDocStd_Document) &  aDoc,
const char *  aFname 
)
private

Definition at line 2817 of file step_pcb_model.cpp.

References USER_PREC.

Referenced by getModelLabel().

◆ readVRML()

bool STEP_PCB_MODEL::readVRML ( Handle(TDocStd_Document) &  aDoc,
const char *  aFname 
)
private

Definition at line 2859 of file step_pcb_model.cpp.

Referenced by getModelLabel().

◆ SetAddVisMaterials()

void STEP_PCB_MODEL::SetAddVisMaterials ( bool  aValue)

◆ SetCopperColor()

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

Definition at line 1214 of file step_pcb_model.cpp.

References m_copperColor.

◆ SetEnabledLayers()

void STEP_PCB_MODEL::SetEnabledLayers ( const LSET aLayers)

Definition at line 1184 of file step_pcb_model.cpp.

References m_enabledLayers.

◆ SetFuseShapes()

void STEP_PCB_MODEL::SetFuseShapes ( bool  aValue)

Definition at line 1190 of file step_pcb_model.cpp.

References m_fuseShapes.

◆ SetMaxError()

void STEP_PCB_MODEL::SetMaxError ( int  aMaxError)
inline

Definition at line 133 of file step_pcb_model.h.

References m_maxError.

◆ SetNetFilter()

void STEP_PCB_MODEL::SetNetFilter ( const wxString &  aFilter)

Definition at line 1208 of file step_pcb_model.cpp.

References m_netFilter.

◆ SetPadColor()

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

Definition at line 1222 of file step_pcb_model.cpp.

References m_padColor.

◆ SetSimplifyShapes()

void STEP_PCB_MODEL::SetSimplifyShapes ( bool  aValue)

Definition at line 1196 of file step_pcb_model.cpp.

References m_simplifyShapes.

◆ SetStackup()

void STEP_PCB_MODEL::SetStackup ( const BOARD_STACKUP aStackup)

Definition at line 1202 of file step_pcb_model.cpp.

References m_stackup.

◆ SpecializeVariant()

void STEP_PCB_MODEL::SpecializeVariant ( OUTPUT_FORMAT  aVariant)
inline

Definition at line 97 of file step_pcb_model.h.

References m_outFmt.

◆ transferModel()

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

Definition at line 2878 of file step_pcb_model.cpp.

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

Referenced by getModelLabel().

◆ WriteBREP()

bool STEP_PCB_MODEL::WriteBREP ( const wxString &  aFileName)

◆ 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 2949 of file step_pcb_model.cpp.

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

◆ WritePLY()

bool STEP_PCB_MODEL::WritePLY ( const wxString &  aFileName)

◆ WriteSTEP()

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

◆ WriteSTL()

bool STEP_PCB_MODEL::WriteSTL ( const wxString &  aFileName)

◆ WriteXAO()

bool STEP_PCB_MODEL::WriteXAO ( const wxString &  aFileName)

Definition at line 2283 of file step_pcb_model.cpp.

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

Member Data Documentation

◆ m_angleprec

double STEP_PCB_MODEL::m_angleprec
private

Definition at line 253 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 245 of file step_pcb_model.h.

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

◆ m_board_copper

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

Definition at line 270 of file step_pcb_model.h.

Referenced by AddPolygonShapes(), and CreatePCB().

◆ m_board_copper_fused

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

Definition at line 273 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 271 of file step_pcb_model.h.

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

◆ m_board_copper_vias

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

Definition at line 272 of file step_pcb_model.h.

Referenced by AddBarrel(), and CreatePCB().

◆ m_board_outlines

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

Definition at line 269 of file step_pcb_model.h.

Referenced by CreatePCB().

◆ m_board_silkscreen

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

Definition at line 274 of file step_pcb_model.h.

Referenced by AddPolygonShapes(), and CreatePCB().

◆ m_board_soldermask

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

Definition at line 275 of file step_pcb_model.h.

Referenced by AddPolygonShapes(), and CreatePCB().

◆ m_boardCutouts

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

Definition at line 266 of file step_pcb_model.h.

Referenced by AddHole(), and CreatePCB().

◆ m_components

int STEP_PCB_MODEL::m_components
private

Definition at line 251 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 254 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 265 of file step_pcb_model.h.

Referenced by AddHole(), and CreatePCB().

◆ m_enabledLayers

LSET STEP_PCB_MODEL::m_enabledLayers
private

Definition at line 257 of file step_pcb_model.h.

Referenced by AddPadShape(), AddPolygonShapes(), CreatePCB(), and SetEnabledLayers().

◆ m_fuseShapes

bool STEP_PCB_MODEL::m_fuseShapes
private

Definition at line 248 of file step_pcb_model.h.

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

◆ m_hasPCB

bool STEP_PCB_MODEL::m_hasPCB
private

Definition at line 246 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 283 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 260 of file step_pcb_model.h.

Referenced by STEP_PCB_MODEL().

◆ m_models

MODEL_MAP STEP_PCB_MODEL::m_models
private

Definition at line 250 of file step_pcb_model.h.

Referenced by getModelLabel().

◆ m_netFilter

wxString STEP_PCB_MODEL::m_netFilter
private

Definition at line 258 of file step_pcb_model.h.

Referenced by SetNetFilter().

◆ m_outFmt

OUTPUT_FORMAT STEP_PCB_MODEL::m_outFmt
private

The current output format for created file.

Definition at line 286 of file step_pcb_model.h.

Referenced by getModelLabel(), SpecializeVariant(), STEP_PCB_MODEL(), WriteBREP(), WriteGLTF(), WritePLY(), WriteSTEP(), WriteSTL(), and WriteXAO().

◆ m_pad_points

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

Definition at line 278 of file step_pcb_model.h.

Referenced by AddPadShape(), and WriteXAO().

◆ m_padColor

double STEP_PCB_MODEL::m_padColor[3]
private

Definition at line 255 of file step_pcb_model.h.

Referenced by CreatePCB(), and SetPadColor().

◆ m_pcb_labels

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

Definition at line 249 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 281 of file step_pcb_model.h.

Referenced by CreatePCB(), and STEP_PCB_MODEL().

◆ m_precision

double STEP_PCB_MODEL::m_precision
private

Definition at line 252 of file step_pcb_model.h.

Referenced by STEP_PCB_MODEL().

◆ m_simplifyShapes

bool STEP_PCB_MODEL::m_simplifyShapes
private

Definition at line 247 of file step_pcb_model.h.

Referenced by AddPadShape(), AddPolygonShapes(), SetSimplifyShapes(), and STEP_PCB_MODEL().

◆ m_stackup

BOARD_STACKUP STEP_PCB_MODEL::m_stackup
private

Definition at line 256 of file step_pcb_model.h.

Referenced by CreatePCB(), getCopperLayerZPlacement(), and SetStackup().


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