38 PCBoard(
const Nanometers UnitLength = Nanometers(163840.0));
42 const std::string& name()
const {
return mName; }
43 const std::string& getSourceFilePath()
const {
return mSourceFilePath; }
45 uint getNumLayers()
const {
return mLayers.size(); }
46 const Layer& getLayer(uint i)
const {
return mLayers.at(i); }
48 LayoutArea& getLayoutArea() {
return mLayoutArea; }
49 const LayoutArea& getLayoutArea()
const {
return mLayoutArea; }
51 PCBoard& operator=(
const PCBoard&) =
delete;
53 Net *getNet(
const std::string &name)
const;
54 Net *getNet(uint)
const;
55 Net *getNet(PyObject *)
const;
56 Component *getComponent(
const std::string &name)
const;
58 Component *getComponent(PyObject *)
const;
59 Component *getComponentAt(
const Point_2&,
int z = -1)
const;
60 Pin *getPin(
const std::string &name)
const;
61 Pin *getPin(PyObject *)
const;
64 uint getNumNets()
const {
return mNets.size(); }
65 const std::vector<Net *>& getNets()
const {
return mNets; }
67 uint getNumComponents()
const {
return mParts.size(); }
68 const std::vector<Component *>& getComponents()
const {
return mParts; }
73 const ObjectsBVH *getBVH()
const {
return mBVH; }
75 const NavGrid& getNavGrid()
const {
return mNavGrid; }
76 NavGrid& getNavGrid() {
return mNavGrid; }
94 void pruneLayers(std::set<uint> &keep);
95 void pruneConnections(std::set<Connection *> &keep,
bool deleteNets =
true);
96 void pruneNets(std::set<Net *> &keep);
97 void prunePins(std::set<Pin *> &keep);
98 void pruneComponents(std::set<Component *> &keep);
99 void removeEmptyNets();
101 Real metersToUnits(Nanometers nm)
const {
return nm.value() / mUnitLength_nm.value(); }
102 Nanometers unitsToNanometers(Real r)
const {
return mUnitLength_nm * r; }
103 Micrometers unitsToMicrometers(Real r)
const {
return Micrometers(mUnitLength_nm * r); }
105 uint getLayerForSide(
char t_or_b)
const;
106 const std::vector<Layer>& getLayers()
const {
return mLayers; }
107 Layer& getLayer(uint i) {
return mLayers[i]; }
109 void setName(
const std::string &name) { mName = name; }
110 void setSourceFilePath(
const std::string &path) { mSourceFilePath = path; }
124 void setMinViaDiameter(Micrometers);
125 Real getMinViaDiameter()
const {
return mTech.vias.minDiameter; }
127 void setMinClearancePins(Micrometers);
128 Real getMinClearancePins()
const {
return mTech.pins.minClearance; }
129 void setMinClearanceNets(Micrometers);
130 Real getMinClearanceNets()
const {
return mTech.nets.minClearance; }
131 void setMinTrackWidth(Micrometers);
132 Real getMinTrackWidth()
const {
return mTech.nets.minTrackWidth; }
134 Bbox_2 getComponentAreaBbox()
const {
return mComponentAreaBbox; }
135 void recomputeComponentAreaBbox();
136 Bbox_2 getActiveAreaBbox()
const {
return mActiveAreaBbox; }
137 void setActiveAreaBbox(
const Bbox_2 &box) { mActiveAreaBbox = box; }
146 void rasterizeTracks(
const Connection&, int8_t count = 1);
147 void unrasterizeTracks(
const Connection&, int8_t count = -1);
153 PyObject *getPy(PyObject *dict, uint depth = 3,
bool asNumpy =
true)
const;
154 PyObject *getLayersPy()
const;
160 bool hasChanged()
const {
return mHasChanged; }
161 void setChanged(uint32_t mask) { mHasChanged |= mask; }
162 uint32_t ackChanges()
const {
return mHasChanged.exchange(0); }
165 LayoutArea mLayoutArea;
167 std::string mSourceFilePath;
168 std::vector<Component *> mParts;
169 Bbox_2 mComponentAreaBbox;
170 std::vector<Net *> mNets;
171 std::vector<Layer> mLayers;
172 std::map<std::string, Component *> mPartsByName;
173 std::map<std::string, Net *> mNetsByName;
174 Point_2 mLayoutAreaOrigin;
175 Bbox_2 mLayoutAreaBbox;
177 NavTriangulation *mTNG{0};
179 Bbox_2 mActiveAreaBbox;
182 Real minDiameter{0.0};
185 Real minClearance{0.0};
188 Real minClearance{0.0};
189 Real minTrackWidth{0.0};
192 const Nanometers mUnitLength_nm;
193 mutable std::atomic<uint32_t> mHasChanged{0};
194 mutable std::mutex mLock;
198 void removedLayersUpdate(uint removedZMin, uint removedZMax);