\doxysection{PCBoard.\+hpp}
\hypertarget{PCBoard_8hpp_source}{}\label{PCBoard_8hpp_source}\index{/home/chr/devel/PhD/Environment/pub/PCBEnv/pcbenv/cxx/PCBoard.hpp@{/home/chr/devel/PhD/Environment/pub/PCBEnv/pcbenv/cxx/PCBoard.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ }
\DoxyCodeLine{00002\ \textcolor{preprocessor}{\#ifndef\ GYM\_PCB\_PCBOARD\_H}}
\DoxyCodeLine{00003\ \textcolor{preprocessor}{\#define\ GYM\_PCB\_PCBOARD\_H}}
\DoxyCodeLine{00004\ }
\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#include\ "{}Units.hpp"{}}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#include\ "{}Geometry.hpp"{}}}
\DoxyCodeLine{00007\ \textcolor{preprocessor}{\#include\ <map>}}
\DoxyCodeLine{00008\ \textcolor{preprocessor}{\#include\ <vector>}}
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <future>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <shared\_mutex>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <atomic>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ "{}LayoutArea.hpp"{}}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ "{}Layer.hpp"{}}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ "{}NavGrid.hpp"{}}}
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ "{}BVH.hpp"{}}}
\DoxyCodeLine{00016\ }
\DoxyCodeLine{00017\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classCloneEnv}{CloneEnv}};}
\DoxyCodeLine{00018\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classComponent}{Component}};}
\DoxyCodeLine{00019\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classPin}{Pin}};}
\DoxyCodeLine{00020\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classNet}{Net}};}
\DoxyCodeLine{00021\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classConnection}{Connection}};}
\DoxyCodeLine{00022\ \textcolor{keyword}{class\ }\mbox{\hyperlink{classNavTriangulation}{NavTriangulation}};}
\DoxyCodeLine{00023\ }
\DoxyCodeLine{00024\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_NAV\_GRID\ \ \ (1\ <<\ 0)}}
\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_NAV\_TRIS\ \ \ (1\ <<\ 1)}}
\DoxyCodeLine{00026\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_ROUTES\ \ \ \ \ (1\ <<\ 2)}}
\DoxyCodeLine{00027\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_COMPONENTS\ (1\ <<\ 3)}}
\DoxyCodeLine{00028\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_PINS\ \ \ \ \ \ \ (1\ <<\ 4)}}
\DoxyCodeLine{00029\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_NET\_COLORS\ (1\ <<\ 5)}}
\DoxyCodeLine{00030\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_OBJECTS\ \ \ \ (1\ <<\ 6)\ }\textcolor{comment}{//\ use\ after\ add/remove(Component)}}
\DoxyCodeLine{00031\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_NEW\_BOARD\ \ (1\ <<\ 15)}}
\DoxyCodeLine{00032\ }
\DoxyCodeLine{00033\ \textcolor{preprocessor}{\#define\ PCB\_CHANGED\_OBJECTS\_SET\ (PCB\_CHANGED\_OBJECTS\ |\ PCB\_CHANGED\_COMPONENTS\ |\ PCB\_CHANGED\_PINS\ |\ PCB\_CHANGED\_ROUTES)}}
\DoxyCodeLine{00034\ }
\DoxyCodeLine{00035\ \textcolor{keyword}{class\ }PCBoard}
\DoxyCodeLine{00036\ \{}
\DoxyCodeLine{00037\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00038\ \ \ \ \ PCBoard(\textcolor{keyword}{const}\ Nanometers\ UnitLength\ =\ Nanometers(163840.0));}
\DoxyCodeLine{00039\ \ \ \ \ PCBoard\ *clone(\mbox{\hyperlink{classCloneEnv}{CloneEnv}}\&)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00040\ \ \ \ \ \string~PCBoard();}
\DoxyCodeLine{00041\ }
\DoxyCodeLine{00042\ \ \ \ \ \textcolor{keyword}{const}\ std::string\&\ name()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mName;\ \}}
\DoxyCodeLine{00043\ \ \ \ \ \textcolor{keyword}{const}\ std::string\&\ getSourceFilePath()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mSourceFilePath;\ \}}
\DoxyCodeLine{00044\ }
\DoxyCodeLine{00045\ \ \ \ \ uint\ getNumLayers()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mLayers.size();\ \}}
\DoxyCodeLine{00046\ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{classLayer}{Layer}}\&\ getLayer(uint\ i)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mLayers.at(i);\ \}}
\DoxyCodeLine{00047\ }
\DoxyCodeLine{00048\ \ \ \ \ \mbox{\hyperlink{classLayoutArea}{LayoutArea}}\&\ getLayoutArea()\ \{\ \textcolor{keywordflow}{return}\ mLayoutArea;\ \}}
\DoxyCodeLine{00049\ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{classLayoutArea}{LayoutArea}}\&\ getLayoutArea()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mLayoutArea;\ \}}
\DoxyCodeLine{00050\ }
\DoxyCodeLine{00051\ \ \ \ \ PCBoard\&\ operator=(\textcolor{keyword}{const}\ PCBoard\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00052\ }
\DoxyCodeLine{00053\ \ \ \ \ \mbox{\hyperlink{classNet}{Net}}\ *getNet(\textcolor{keyword}{const}\ std::string\ \&name)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00054\ \ \ \ \ \mbox{\hyperlink{classNet}{Net}}\ *getNet(uint)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00055\ \ \ \ \ \mbox{\hyperlink{classNet}{Net}}\ *getNet(PyObject\ *)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00056\ \ \ \ \ \mbox{\hyperlink{classComponent}{Component}}\ *getComponent(\textcolor{keyword}{const}\ std::string\ \&name)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00057\ \ \ \ \ \mbox{\hyperlink{classComponent}{Component}}\ *getComponent(uint)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00058\ \ \ \ \ \mbox{\hyperlink{classComponent}{Component}}\ *getComponent(PyObject\ *)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00059\ \ \ \ \ \mbox{\hyperlink{classComponent}{Component}}\ *getComponentAt(\textcolor{keyword}{const}\ Point\_2\&,\ \textcolor{keywordtype}{int}\ z\ =\ -\/1)\ \textcolor{keyword}{const};\ \textcolor{comment}{//\ -\/1\ for\ all\ layers}}
\DoxyCodeLine{00060\ \ \ \ \ \mbox{\hyperlink{classPin}{Pin}}\ *getPin(\textcolor{keyword}{const}\ std::string\ \&name)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00061\ \ \ \ \ \mbox{\hyperlink{classPin}{Pin}}\ *getPin(PyObject\ *)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00062\ \ \ \ \ \mbox{\hyperlink{classConnection}{Connection}}\ *getConnection(PyObject\ *)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00063\ }
\DoxyCodeLine{00064\ \ \ \ \ uint\ getNumNets()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mNets.size();\ \}}
\DoxyCodeLine{00065\ \ \ \ \ \textcolor{keyword}{const}\ std::vector<Net\ *>\&\ getNets()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mNets;\ \}}
\DoxyCodeLine{00066\ }
\DoxyCodeLine{00067\ \ \ \ \ uint\ getNumComponents()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mParts.size();\ \}}
\DoxyCodeLine{00068\ \ \ \ \ \textcolor{keyword}{const}\ std::vector<Component\ *>\&\ getComponents()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mParts;\ \}}
\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keywordtype}{void}\ renumberComs();}
\DoxyCodeLine{00070\ \ \ \ \ \textcolor{keywordtype}{void}\ renumberPins();}
\DoxyCodeLine{00071\ \ \ \ \ \textcolor{keywordtype}{void}\ renumberNets();}
\DoxyCodeLine{00072\ }
\DoxyCodeLine{00073\ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{classObjectsBVH}{ObjectsBVH}}\ *getBVH()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mBVH;\ \}}
\DoxyCodeLine{00074\ }
\DoxyCodeLine{00075\ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{classNavGrid}{NavGrid}}\&\ getNavGrid()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mNavGrid;\ \}}
\DoxyCodeLine{00076\ \ \ \ \ \mbox{\hyperlink{classNavGrid}{NavGrid}}\&\ getNavGrid()\ \{\ \textcolor{keywordflow}{return}\ mNavGrid;\ \}}
\DoxyCodeLine{00077\ \ \ \ \ \mbox{\hyperlink{classNavTriangulation}{NavTriangulation}}\ *getTNG()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mTNG;\ \}}
\DoxyCodeLine{00078\ \ \ \ \ \textcolor{keywordtype}{bool}\ rebuildTNG();}
\DoxyCodeLine{00079\ }
\DoxyCodeLine{00081\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classPCBoard_a195d87088c401f1affe36f27b3af2160}{forceConnectionsToGrid}}();}
\DoxyCodeLine{00082\ }
\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classPCBoard_a5ecfb8b59c2092246765d88f46c73c3b}{initPathfindingForNet}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00085\ \ \ \ \ \textcolor{keywordtype}{void}\ finiPathfindingForNet(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00086\ \ \ \ \ \textcolor{keywordtype}{void}\ initPathfindingFor(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00087\ \ \ \ \ \textcolor{keywordtype}{void}\ finiPathfindingFor(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00088\ }
\DoxyCodeLine{00089\ \ \ \ \ \textcolor{keywordtype}{void}\ add(\mbox{\hyperlink{classComponent}{Component}}\&);}
\DoxyCodeLine{00090\ \ \ \ \ \textcolor{keywordtype}{void}\ add(\mbox{\hyperlink{classNet}{Net}}\&);}
\DoxyCodeLine{00091\ \ \ \ \ \mbox{\hyperlink{classComponent}{Component}}\ *remove(\mbox{\hyperlink{classComponent}{Component}}\&);}
\DoxyCodeLine{00092\ \ \ \ \ \mbox{\hyperlink{classNet}{Net}}\ *remove(\mbox{\hyperlink{classNet}{Net}}\&);}
\DoxyCodeLine{00093\ }
\DoxyCodeLine{00094\ \ \ \ \ \textcolor{keywordtype}{void}\ pruneLayers(std::set<uint>\ \&keep);}
\DoxyCodeLine{00095\ \ \ \ \ \textcolor{keywordtype}{void}\ pruneConnections(std::set<Connection\ *>\ \&keep,\ \textcolor{keywordtype}{bool}\ deleteNets\ =\ \textcolor{keyword}{true});}
\DoxyCodeLine{00096\ \ \ \ \ \textcolor{keywordtype}{void}\ pruneNets(std::set<Net\ *>\ \&keep);}
\DoxyCodeLine{00097\ \ \ \ \ \textcolor{keywordtype}{void}\ prunePins(std::set<Pin\ *>\ \&keep);}
\DoxyCodeLine{00098\ \ \ \ \ \textcolor{keywordtype}{void}\ pruneComponents(std::set<Component\ *>\ \&keep);}
\DoxyCodeLine{00099\ \ \ \ \ \textcolor{keywordtype}{void}\ removeEmptyNets();}
\DoxyCodeLine{00100\ }
\DoxyCodeLine{00101\ \ \ \ \ Real\ metersToUnits(Nanometers\ nm)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ nm.value()\ /\ mUnitLength\_nm.value();\ \}}
\DoxyCodeLine{00102\ \ \ \ \ Nanometers\ unitsToNanometers(Real\ r)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mUnitLength\_nm\ *\ r;\ \}}
\DoxyCodeLine{00103\ \ \ \ \ Micrometers\ unitsToMicrometers(Real\ r)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ Micrometers(mUnitLength\_nm\ *\ r);\ \}}
\DoxyCodeLine{00104\ }
\DoxyCodeLine{00105\ \ \ \ \ uint\ getLayerForSide(\textcolor{keywordtype}{char}\ t\_or\_b)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00106\ \ \ \ \ \textcolor{keyword}{const}\ std::vector<Layer>\&\ getLayers()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mLayers;\ \}}
\DoxyCodeLine{00107\ \ \ \ \ Layer\&\ getLayer(uint\ i)\ \{\ \textcolor{keywordflow}{return}\ mLayers[i];\ \}}
\DoxyCodeLine{00108\ }
\DoxyCodeLine{00109\ \ \ \ \ \textcolor{keywordtype}{void}\ setName(\textcolor{keyword}{const}\ std::string\ \&name)\ \{\ mName\ =\ name;\ \}}
\DoxyCodeLine{00110\ \ \ \ \ \textcolor{keywordtype}{void}\ setSourceFilePath(\textcolor{keyword}{const}\ std::string\ \&path)\ \{\ mSourceFilePath\ =\ path;\ \}}
\DoxyCodeLine{00112\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classPCBoard_a049e6c141b0fd139b23c95ac9c23e095}{setNumLayers}}(uint\ N);}
\DoxyCodeLine{00113\ }
\DoxyCodeLine{00122\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classPCBoard_a04428685a8b54f758edcad5ffd8326c3}{adjustLayoutAreaMargins}}(Real\ min,\ Real\ max\ =\ std::numeric\_limits<Real>::infinity());}
\DoxyCodeLine{00123\ }
\DoxyCodeLine{00124\ \ \ \ \ \textcolor{keywordtype}{void}\ setMinViaDiameter(Micrometers);}
\DoxyCodeLine{00125\ \ \ \ \ Real\ getMinViaDiameter()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mTech.vias.minDiameter;\ \}}
\DoxyCodeLine{00126\ }
\DoxyCodeLine{00127\ \ \ \ \ \textcolor{keywordtype}{void}\ setMinClearancePins(Micrometers);}
\DoxyCodeLine{00128\ \ \ \ \ Real\ getMinClearancePins()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mTech.pins.minClearance;\ \}}
\DoxyCodeLine{00129\ \ \ \ \ \textcolor{keywordtype}{void}\ setMinClearanceNets(Micrometers);}
\DoxyCodeLine{00130\ \ \ \ \ Real\ getMinClearanceNets()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mTech.nets.minClearance;\ \}}
\DoxyCodeLine{00131\ \ \ \ \ \textcolor{keywordtype}{void}\ setMinTrackWidth(Micrometers);}
\DoxyCodeLine{00132\ \ \ \ \ Real\ getMinTrackWidth()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mTech.nets.minTrackWidth;\ \}}
\DoxyCodeLine{00133\ }
\DoxyCodeLine{00134\ \ \ \ \ Bbox\_2\ getComponentAreaBbox()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mComponentAreaBbox;\ \}}
\DoxyCodeLine{00135\ \ \ \ \ \textcolor{keywordtype}{void}\ recomputeComponentAreaBbox();}
\DoxyCodeLine{00136\ \ \ \ \ Bbox\_2\ getActiveAreaBbox()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mActiveAreaBbox;\ \}}
\DoxyCodeLine{00137\ \ \ \ \ \textcolor{keywordtype}{void}\ setActiveAreaBbox(\textcolor{keyword}{const}\ Bbox\_2\ \&box)\ \{\ mActiveAreaBbox\ =\ box;\ \}}
\DoxyCodeLine{00138\ }
\DoxyCodeLine{00143\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{classPCBoard_a7ab066f817c5b8f20d9d6a8c93c61a59}{runPathFinding}}(\mbox{\hyperlink{classConnection}{Connection}}\&,\ \mbox{\hyperlink{classConnection}{Connection}}\ *ref\ =\ 0,\ \textcolor{keyword}{const}\ \mbox{\hyperlink{structAStarCosts}{AStarCosts}}\ *\ =\ 0);}
\DoxyCodeLine{00144\ \ \ \ \ \textcolor{keywordtype}{bool}\ runPathFindingTri(\mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00145\ }
\DoxyCodeLine{00146\ \ \ \ \ \textcolor{keywordtype}{void}\ rasterizeTracks(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&,\ int8\_t\ count\ =\ 1);}
\DoxyCodeLine{00147\ \ \ \ \ \textcolor{keywordtype}{void}\ unrasterizeTracks(\textcolor{keyword}{const}\ \mbox{\hyperlink{classConnection}{Connection}}\&,\ int8\_t\ count\ =\ -\/1);}
\DoxyCodeLine{00148\ \ \ \ \ \textcolor{keywordtype}{void}\ eraseTracks(\mbox{\hyperlink{classConnection}{Connection}}\&);}
\DoxyCodeLine{00149\ \ \ \ \ \textcolor{keywordtype}{void}\ wipe();}
\DoxyCodeLine{00150\ }
\DoxyCodeLine{00151\ \ \ \ \ Real\ sumViolationArea(\mbox{\hyperlink{classConnection}{Connection}}\&,\ \mbox{\hyperlink{classConnection}{Connection}}\ *ref\ =\ 0);}
\DoxyCodeLine{00152\ }
\DoxyCodeLine{00153\ \ \ \ \ PyObject\ *getPy(PyObject\ *dict,\ uint\ depth\ =\ 3,\ \textcolor{keywordtype}{bool}\ asNumpy\ =\ \textcolor{keyword}{true})\ \textcolor{keyword}{const};}
\DoxyCodeLine{00154\ \ \ \ \ PyObject\ *getLayersPy()\ \textcolor{keyword}{const};}
\DoxyCodeLine{00155\ }
\DoxyCodeLine{00159\ \ \ \ \ std::mutex\&\ \mbox{\hyperlink{classPCBoard_afca7f09ebf781baaff53b82cc6ff7aa9}{getLock}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mLock;\ \}}
\DoxyCodeLine{00160\ \ \ \ \ \textcolor{keywordtype}{bool}\ hasChanged()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mHasChanged;\ \}}
\DoxyCodeLine{00161\ \ \ \ \ \textcolor{keywordtype}{void}\ setChanged(uint32\_t\ mask)\ \{\ mHasChanged\ |=\ mask;\ \}}
\DoxyCodeLine{00162\ \ \ \ \ uint32\_t\ ackChanges()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ mHasChanged.exchange(0);\ \}}
\DoxyCodeLine{00163\ }
\DoxyCodeLine{00164\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00165\ \ \ \ \ LayoutArea\ mLayoutArea;}
\DoxyCodeLine{00166\ \ \ \ \ std::string\ mName;}
\DoxyCodeLine{00167\ \ \ \ \ std::string\ mSourceFilePath;}
\DoxyCodeLine{00168\ \ \ \ \ std::vector<Component\ *>\ mParts;}
\DoxyCodeLine{00169\ \ \ \ \ Bbox\_2\ mComponentAreaBbox;}
\DoxyCodeLine{00170\ \ \ \ \ std::vector<Net\ *>\ mNets;}
\DoxyCodeLine{00171\ \ \ \ \ std::vector<Layer>\ mLayers;}
\DoxyCodeLine{00172\ \ \ \ \ std::map<std::string,\ Component\ *>\ mPartsByName;}
\DoxyCodeLine{00173\ \ \ \ \ std::map<std::string,\ Net\ *>\ mNetsByName;}
\DoxyCodeLine{00174\ \ \ \ \ Point\_2\ mLayoutAreaOrigin;}
\DoxyCodeLine{00175\ \ \ \ \ Bbox\_2\ mLayoutAreaBbox;}
\DoxyCodeLine{00176\ \ \ \ \ NavGrid\ mNavGrid;}
\DoxyCodeLine{00177\ \ \ \ \ NavTriangulation\ *mTNG\{0\};}
\DoxyCodeLine{00178\ \ \ \ \ ObjectsBVH\ *mBVH\{0\};}
\DoxyCodeLine{00179\ \ \ \ \ Bbox\_2\ mActiveAreaBbox;}
\DoxyCodeLine{00180\ \ \ \ \ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{00181\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{00182\ \ \ \ \ \ \ \ \ \ \ \ \ Real\ minDiameter\{0.0\};}
\DoxyCodeLine{00183\ \ \ \ \ \ \ \ \ \}\ vias;}
\DoxyCodeLine{00184\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ \ \ \ \ Real\ minClearance\{0.0\};}
\DoxyCodeLine{00186\ \ \ \ \ \ \ \ \ \}\ pins;}
\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }\{}
\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ \ \ \ \ Real\ minClearance\{0.0\};}
\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ \ \ \ \ Real\ minTrackWidth\{0.0\};}
\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ \}\ nets;}
\DoxyCodeLine{00191\ \ \ \ \ \}\ mTech;}
\DoxyCodeLine{00192\ \ \ \ \ \textcolor{keyword}{const}\ Nanometers\ mUnitLength\_nm;}
\DoxyCodeLine{00193\ \ \ \ \ \textcolor{keyword}{mutable}\ std::atomic<uint32\_t>\ mHasChanged\{0\};}
\DoxyCodeLine{00194\ \ \ \ \ \textcolor{keyword}{mutable}\ std::mutex\ mLock;}
\DoxyCodeLine{00195\ }
\DoxyCodeLine{00196\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00197\ \ \ \ \ \textcolor{keywordtype}{void}\ rebuildBVH();}
\DoxyCodeLine{00198\ \ \ \ \ \textcolor{keywordtype}{void}\ removedLayersUpdate(uint\ removedZMin,\ uint\ removedZMax);}
\DoxyCodeLine{00199\ \};}
\DoxyCodeLine{00200\ }
\DoxyCodeLine{00201\ \textcolor{keyword}{inline}\ uint\ PCBoard::getLayerForSide(\textcolor{keywordtype}{char}\ side)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00202\ \textcolor{keyword}{}\{}
\DoxyCodeLine{00203\ \ \ \ \ \textcolor{keywordflow}{if}\ (side\ ==\ \textcolor{charliteral}{'t'})}
\DoxyCodeLine{00204\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{00205\ \ \ \ \ assert(side\ ==\ \textcolor{charliteral}{'b'});}
\DoxyCodeLine{00206\ \ \ \ \ \textcolor{keywordflow}{return}\ mLayers.size()\ -\/\ 1;}
\DoxyCodeLine{00207\ \}}
\DoxyCodeLine{00208\ }
\DoxyCodeLine{00209\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ GYM\_PCB\_PCBOARD\_H}}

\end{DoxyCode}
