26#ifndef CADSTAR_PCB_ARCHIVE_LOADER_H_ 
   27#define CADSTAR_PCB_ARCHIVE_LOADER_H_ 
   46                                         bool                  aLogLayerWarnings,
 
 
   68        for( std::pair<SYMDEF_ID, FOOTPRINT*> libItem : 
m_libraryMap )
 
 
   88    std::vector<std::unique_ptr<FOOTPRINT>> 
LoadLibrary();
 
  128    std::map<std::tuple<ROUTECODE_ID, NETCLASS_ID, SPACING_CLASS_ID>, std::shared_ptr<NETCLASS>>
 
  176                          int aDielectricSublayer );
 
  183                        long aStartWidth = std::numeric_limits<long>::max(),
 
  184                        long aEndWidth = std::numeric_limits<long>::max() );
 
  187    int loadNetVia( 
const NET_ID& aCadstarNetID, 
const NET_PCB::VIA& aCadstarVia );
 
  212                          const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  213                          const LAYER_ID& aCadstarLayerOverride = wxEmptyString,
 
  214                          const VECTOR2I& aMoveVector = { 0, 0 },
 
  215                          double aRotationAngle = 0.0, 
double aScalingFactor = 1.0,
 
  216                          const VECTOR2I& aTransformCentre = { 0, 0 },
 
  217                          bool aMirrorInvert = false );
 
  234                           int aLineThickness, 
const wxString& aShapeName,
 
  235                           BOARD_ITEM_CONTAINER* aContainer,
 
  236                           const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  237                           const VECTOR2I& aMoveVector = { 0, 0 },
 
  238                           double aRotationAngle = 0.0, 
double aScalingFactor = 1.0,
 
  239                           const VECTOR2I& aTransformCentre = { 0, 0 },
 
  240                           bool aMirrorInvert = false );
 
  257                                     BOARD_ITEM_CONTAINER* aContainer,
 
  258                                     const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  259                                     const VECTOR2I& aMoveVector = { 0, 0 },
 
  260                                     double aRotationAngle = 0.0,
 
  261                                     double aScalingFactor = 1.0,
 
  262                                     const VECTOR2I& aTransformCentre = { 0, 0 },
 
  263                                     bool aMirrorInvert = false );
 
  281                                      BOARD_ITEM_CONTAINER* aContainer,
 
  282                                      const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  283                                      const VECTOR2I& aMoveVector = { 0, 0 },
 
  284                                      double aRotationAngle = 0.0, 
double aScalingFactor = 1.0,
 
  285                                      const VECTOR2I& aTransformCentre = { 0, 0 },
 
  286                                      bool aMirrorInvert = false );
 
  301                                                   BOARD_ITEM_CONTAINER* aContainer = 
nullptr,
 
  302                                                   const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  303                                                   const VECTOR2I& aMoveVector = { 0, 0 },
 
  304                                                   double aRotationAngle = 0.0,
 
  305                                                   double aScalingFactor = 1.0,
 
  306                                                   const VECTOR2I& aTransformCentre = { 0, 0 },
 
  307                                                   bool aMirrorInvert = false );
 
  323                                   const VERTEX& aCadstarVertex,
 
  324                                   BOARD_ITEM_CONTAINER* aContainer = 
nullptr,
 
  325                                   const GROUP_ID& aCadstarGroupID = wxEmptyString,
 
  326                                   const VECTOR2I& aMoveVector = { 0, 0 },
 
  327                                   double aRotationAngle = 0.0, 
double aScalingFactor = 1.0,
 
  328                                   const VECTOR2I& aTransformCentre = { 0, 0 },
 
  329                                   bool aMirrorInvert = false );
 
  339                                   BOARD_ITEM_CONTAINER* aParentContainer );
 
  354                                               BOARD_ITEM_CONTAINER* aContainer = 
nullptr,
 
  355                                               const VECTOR2I& aMoveVector = { 0, 0 },
 
  356                                               double aRotationAngle = 0.0,
 
  357                                               double aScalingFactor = 1.0,
 
  358                                               const VECTOR2I& aTransformCentre = { 0, 0 },
 
  359                                               bool aMirrorInvert = false );
 
  381                                                  BOARD_ITEM_CONTAINER* aParentContainer,
 
  382                                                  NETINFO_ITEM* aNet = 
nullptr,
 
  384                                                  int aWidthOverride = -1 );
 
  395                       const wxString& aAttributeValue );
 
  406                           const long& aOffsetAmount );
 
  425              const std::map<ATTRIBUTE_ID, ATTRIBUTE_VALUE>& aCadstarAttributeMap );
 
  464        if( 
Header.Format.Version > 8 )
 
  466            return (
double) aCadstarAngle / 100.0;
 
  470            return (
double) aCadstarAngle;
 
 
  484        if( 
Header.Format.Version > 8 )
 
 
 
Abstract interface for BOARD_ITEMs capable of storing other items inside.
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
Manage one layer needed to make a physical board.
 
Information pertinent to a Pcbnew printed circuit board.
 
wxString LAYER_ID
ID of a Sheet (if schematic) or board Layer (if PCB)
 
PROGRESS_REPORTER * m_progressReporter
 
std::map< TEMPLATE_ID, ZONE * > m_zonesMap
Map between Cadstar and KiCad zones.
 
std::map< std::tuple< ROUTECODE_ID, NETCLASS_ID, SPACING_CLASS_ID >, std::shared_ptr< NETCLASS > > m_netClassMap
Map between Cadstar and KiCad classes.
 
CADSTAR_PCB_ARCHIVE_LOADER(wxString aFilename, LAYER_MAPPING_HANDLER aLayerMappingHandler, bool aLogLayerWarnings, PROGRESS_REPORTER *aProgressReporter)
 
bool m_doneCopperWarning
Used by loadCoppers() to avoid multiple duplicate warnings.
 
std::set< PADCODE_ID > m_padcodesTested
Used by getKiCadPad() to avoid multiple duplicate warnings.
 
int getKiCadLength(long long aCadstarLength)
 
void initStackupItem(const LAYER &aCadstarLayer, BOARD_STACKUP_ITEM *aKiCadItem, int aDielectricSublayer)
 
int m_numCopperLayers
Number of layers in the design.
 
std::vector< LAYER_ID > m_powerPlaneLayers
List of layers that are marked as power plane in CADSTAR.
 
void drawCadstarText(const TEXT &aCadstarText, BOARD_ITEM_CONTAINER *aContainer, const GROUP_ID &aCadstarGroupID=wxEmptyString, const LAYER_ID &aCadstarLayerOverride=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
 
bool isLayerSet(const LAYER_ID &aCadstarLayerID)
 
LAYERPAIR getLayerPair(const LAYERPAIR_ID &aCadstarLayerPairID)
 
FOOTPRINT * getFootprintFromCadstarID(const COMPONENT_ID &aCadstarComponentID)
 
PADCODE getPadCode(const PADCODE_ID &aCadstarPadCodeID)
 
int loadNetVia(const NET_ID &aCadstarNetID, const NET_PCB::VIA &aCadstarVia)
Load via and return via size.
 
EDA_ANGLE getAngle(const long long &aCadstarAngle)
 
std::vector< PCB_SHAPE * > getShapesFromVertices(const std::vector< VERTEX > &aCadstarVertices, BOARD_ITEM_CONTAINER *aContainer=nullptr, const GROUP_ID &aCadstarGroupID=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
Returns a vector of pointers to PCB_SHAPE objects.
 
void applyTextCode(EDA_TEXT *aKiCadText, const TEXTCODE_ID &aCadstarTextCodeID)
Apply cadstar textcode parameters to a KiCad text object.
 
std::map< COMPONENT_ID, FOOTPRINT * > m_componentMap
Map between Cadstar and KiCad components on the board.
 
SHAPE_LINE_CHAIN getLineChainFromShapes(const std::vector< PCB_SHAPE * > &aShapes)
Returns a SHAPE_LINE_CHAIN object from a series of PCB_SHAPE objects.
 
std::map< PAD_ID, std::vector< PAD_ID > > ASSOCIATED_COPPER_PADS
Map of pad anchor points (first) to copper pads (second).
 
void applyDimensionSettings(const DIMENSION &aCadstarDim, PCB_DIMENSION_BASE *aKiCadDim)
 
void loadNetTracks(const NET_ID &aCadstarNetID, const NET_PCB::ROUTE &aCadstarRoute, long aStartWidth=std::numeric_limits< long >::max(), long aEndWidth=std::numeric_limits< long >::max())
 
ZONE * getZoneFromCadstarShape(const SHAPE &aCadstarShape, const int &aLineThickness, BOARD_ITEM_CONTAINER *aParentContainer)
 
PCB_LAYER_ID getKiCadCopperLayerID(unsigned int aLayerNum, bool aDetectMaxLayer=true)
 
std::vector< PCB_TRACK * > makeTracksFromShapes(const std::vector< PCB_SHAPE * > &aShapes, BOARD_ITEM_CONTAINER *aParentContainer, NETINFO_ITEM *aNet=nullptr, PCB_LAYER_ID aLayerOverride=UNDEFINED_LAYER, int aWidthOverride=-1)
Returns a vector of pointers to TRACK/ARC objects.
 
VIACODE getViaCode(const VIACODE_ID &aCadstarViaCodeID)
 
VECTOR2I m_designCenter
Used for calculating the required offset to apply to the Cadstar design so that it fits in KiCad canv...
 
void Load(BOARD *aBoard, PROJECT *aProject)
Loads a CADSTAR PCB Archive file into the KiCad BOARD object given.
 
void drawCadstarCutoutsAsShapes(const std::vector< CUTOUT > &aCutouts, const PCB_LAYER_ID &aKiCadLayer, int aLineThickness, BOARD_ITEM_CONTAINER *aContainer, const GROUP_ID &aCadstarGroupID=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
Uses PCB_SHAPEs to draw the cutouts on m_board object.
 
void logBoardStackupWarning(const wxString &aCadstarLayerName, const PCB_LAYER_ID &aKiCadLayer)
 
std::vector< FOOTPRINT * > GetLoadedLibraryFootpints() const
Return a copy of the loaded library footprints (caller owns the objects)
 
PCB_SHAPE * getShapeFromVertex(const POINT &aCadstarStartPoint, const VERTEX &aCadstarVertex, BOARD_ITEM_CONTAINER *aContainer=nullptr, const GROUP_ID &aCadstarGroupID=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
Returns a pointer to a PCB_SHAPE object.
 
void checkAndLogHatchCode(const HATCHCODE_ID &aCadstarHatchcodeID)
 
bool m_doneSpacingClassWarning
Used by getKiCadNet() to avoid multiple duplicate warnings.
 
int m_numNets
Number of nets loaded so far.
 
void loadDocumentationSymbols()
 
void loadLibraryPads(const SYMDEF_PCB &aComponent, FOOTPRINT *aFootprint)
 
void loadComponentLibrary()
 
~CADSTAR_PCB_ARCHIVE_LOADER()
 
PAD * getKiCadPad(const COMPONENT_PAD &aCadstarPad, FOOTPRINT *aParent)
 
void drawCadstarShape(const SHAPE &aCadstarShape, const PCB_LAYER_ID &aKiCadLayer, int aLineThickness, const wxString &aShapeName, BOARD_ITEM_CONTAINER *aContainer, const GROUP_ID &aCadstarGroupID=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
 
NETINFO_ITEM * getKiCadNet(const NET_ID &aCadstarNetID)
Searches m_netMap and returns the NETINFO_ITEM pointer if exists.
 
void logBoardStackupMessage(const wxString &aCadstarLayerName, const PCB_LAYER_ID &aKiCadLayer)
 
int getLineThickness(const LINECODE_ID &aCadstarLineCodeID)
 
bool m_doneTearDropWarning
 
std::map< NET_ID, NETINFO_ITEM * > m_netMap
Map between Cadstar and KiCad Nets.
 
void loadComponentAttributes(const COMPONENT &aComponent, FOOTPRINT *aFootprint)
 
PCB_GROUP * getKiCadGroup(const GROUP_ID &aCadstarGroupID)
 
bool m_logLayerWarnings
Used in loadBoardStackup()
 
HATCHCODE getHatchCode(const HATCHCODE_ID &aCadstarHatchcodeID)
 
void loadLibraryCoppers(const SYMDEF_PCB &aComponent, FOOTPRINT *aFootprint)
 
LAYER_TYPE getLayerType(const LAYER_ID aCadstarLayerID)
 
bool isFootprint(BOARD_ITEM_CONTAINER *aContainer)
 
void loadLibraryFigures(const SYMDEF_PCB &aComponent, FOOTPRINT *aFootprint)
 
TEXTCODE getTextCode(const TEXTCODE_ID &aCadstarTextCodeID)
 
wxString getAttributeName(const ATTRIBUTE_ID &aCadstarAttributeID)
 
wxString getAttributeValue(const ATTRIBUTE_ID &aCadstarAttributeID, const std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > &aCadstarAttributeMap)
 
void applyRouteOffset(VECTOR2I *aPointToOffset, const VECTOR2I &aRefPoint, const long &aOffsetAmount)
CADSTAR's Post Processor does an action called "Route Offset" which is applied when a route is wider ...
 
VECTOR2I getKiCadPoint(const VECTOR2I &aCadstarPoint)
Scales, offsets and inverts y axis to make the point usable directly in KiCad.
 
void remapUnsureLayers()
Callback m_layerMappingHandler for layers we aren't sure of.
 
double getAngleTenthDegree(const long long &aCadstarAngle)
 
LSET getKiCadLayerSet(const LAYER_ID &aCadstarLayerID)
 
void addToGroup(const GROUP_ID &aCadstarGroupID, BOARD_ITEM *aKiCadItem)
 
std::map< SYMDEF_ID, FOOTPRINT * > m_libraryMap
Map between Cadstar and KiCad components in the library.
 
COPPERCODE getCopperCode(const COPPERCODE_ID &aCadstaCopperCodeID)
 
SHAPE_POLY_SET getPolySetFromCadstarShape(const SHAPE &aCadstarShape, int aLineThickness=-1, BOARD_ITEM_CONTAINER *aContainer=nullptr, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
Returns a SHAPE_POLY_SET object from a Cadstar SHAPE.
 
EDA_ANGLE getHatchCodeAngle(const HATCHCODE_ID &aCadstarHatchcodeID)
 
int getKiCadHatchCodeThickness(const HATCHCODE_ID &aCadstarHatchcodeID)
 
PCB_LAYER_ID getKiCadLayer(const LAYER_ID &aCadstarLayerID)
 
std::set< HATCHCODE_ID > m_hatchcodesTested
Used by checkAndLogHatchCode() to avoid multiple duplicate warnings.
 
void loadLibraryAreas(const SYMDEF_PCB &aComponent, FOOTPRINT *aFootprint)
 
GROUP_ID createUniqueGroupID(const wxString &aName)
Adds a new PCB_GROUP* to m_groupMap.
 
int getKiCadHatchCodeGap(const HATCHCODE_ID &aCadstarHatchcodeID)
 
std::vector< std::unique_ptr< FOOTPRINT > > LoadLibrary()
Parse a CADSTAR PCB Archive and load the footprints contained within.
 
ROUTECODE getRouteCode(const ROUTECODE_ID &aCadstarRouteCodeID)
 
void drawCadstarVerticesAsShapes(const std::vector< VERTEX > &aCadstarVertices, const PCB_LAYER_ID &aKiCadLayer, int aLineThickness, BOARD_ITEM_CONTAINER *aContainer, const GROUP_ID &aCadstarGroupID=wxEmptyString, const VECTOR2I &aMoveVector={ 0, 0 }, double aRotationAngle=0.0, double aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, bool aMirrorInvert=false)
Uses PCB_SHAPE to draw the vertices on m_board object.
 
void addAttribute(const ATTRIBUTE_LOCATION &aCadstarAttrLoc, const ATTRIBUTE_ID &aCadstarAttributeID, FOOTPRINT *aFootprint, const wxString &aAttributeValue)
Adds a CADSTAR Attribute to a KiCad footprint.
 
std::map< GROUP_ID, PCB_GROUP * > m_groupMap
Map between Cadstar and KiCad groups.
 
bool calculateZonePriorities(PCB_LAYER_ID &aLayer)
Tries to make a best guess as to the zone priorities based on the pour status.
 
std::map< LAYER_ID, PCB_LAYER_ID > m_layermap
Map between Cadstar and KiCad Layers.
 
PAD *& getPadReference(FOOTPRINT *aFootprint, const PAD_ID aCadstarPadID)
 
bool m_doneNetClassWarning
Used by getKiCadNet() to avoid multiple duplicate warnings.
 
double getAngleDegrees(const long long &aCadstarAngle)
 
PART getPart(const PART_ID &aCadstarPartID)
 
LAYER_MAPPING_HANDLER m_layerMappingHandler
Callback to get layer mapping.
 
std::map< SYMDEF_ID, ASSOCIATED_COPPER_PADS > m_librarycopperpads
Associated copper pads (if any) for each component library definition.
 
long PAD_ID
Pad identifier (pin) in the PCB.
 
int KiCadUnitMultiplier
Use this value to convert units in this CPA file to KiCad units.
 
CADSTAR_PCB_ARCHIVE_PARSER(const wxString &aFilename)
 
KICAD_T Type() const
Returns the type of object.
 
LSET is a set of PCB_LAYER_IDs.
 
Handle the data for a net.
 
A progress reporter interface for use in multi-threaded environments.
 
Container for project specific data.
 
PCB_LAYER_ID
A quick note on layer IDs:
 
std::function< std::map< wxString, PCB_LAYER_ID >(const std::vector< INPUT_LAYER_DESC > &)> LAYER_MAPPING_HANDLER
Pointer to a function that takes a map of source and KiCad layers and returns a re-mapped version.
 
Represent a point in x,y coordinates.
 
Represents a vertex in a shape.
 
Linear, leader (radius/diameter) or angular dimension.
 
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
 
VECTOR2< int32_t > VECTOR2I