33class GLWidget :
public QOpenGLWidget,
public QOpenGLFunctions_4_3_Core
42 static void deleteInstance();
43 static GLWidget *getInstance() {
return sInstance; }
45 PCBoard *getPCB()
const {
return mPCB.get(); }
47 void setPCB(
const std::shared_ptr<PCBoard>&);
48 void setBottomView(
bool b);
49 void setLayerAlpha(
int z,
float a);
51 void scheduleSnapshot(
const std::string &savePath) { mSnapshotSavePath = savePath; }
53 bool areFootprintsShown()
const {
return mShowFootprints; }
54 bool areGridLinesShown()
const {
return mShowGridLines; }
55 bool areGridPointsShown()
const {
return mShowGridPoints; }
56 bool isRatsNestShown()
const {
return mShowRatsNest; }
57 bool isTriangulationShown()
const {
return mShowTriangulation; }
58 bool isRatsNestLimited()
const {
return mLimitRatsNest; }
60 void onKeyRelease(QKeyEvent *);
64 void focusOn(
const Object&);
65 void showFootprints(
bool b) { mShowFootprints = b; }
66 void showGridLines(
bool b) { mShowGridLines = b; }
67 void showGridPoints(
bool b);
68 void showRatsNest(
bool b) { mShowRatsNest = b; }
69 void showTriangulation(
bool b) { mShowTriangulation = b; }
70 void showGridAStar(
bool b);
71 void setLimitRatsNest(
bool b);
74 void initializeGL()
override;
76 void paintEvent(QPaintEvent *)
override;
77 void paintGL()
override;
78 void paintQt(QPainter *, QPaintEvent *);
80 void resizeEvent(QResizeEvent *)
override;
81 void mouseMoveEvent(QMouseEvent *)
override;
82 void mousePressEvent(QMouseEvent *)
override;
83 void mouseReleaseEvent(QMouseEvent *)
override;
84 void wheelEvent(QWheelEvent *)
override;
89 QElapsedTimer mFrameTimer;
94 uint32_t ackDirtyMask() {
auto m = mDirty; mDirty = 0;
return m; }
96 std::shared_ptr<PCBoard> mPCB;
98 std::unique_ptr<NavMesh> mNavMesh;
99 std::unique_ptr<ui::NavGrid> mNavGrid;
100 std::unique_ptr<PCBoardMesh> mBoardMain[2];
101 std::unique_ptr<PCBoardMesh> mBoardPins[2];
102 std::unique_ptr<RatsNest> mRatsNest;
103 std::unique_ptr<RoutePainter> mRoutePainter;
104 std::unique_ptr<RoutePainter> mRoutePainterPreview;
105 std::unique_ptr<RoutePainterLines> mRoutePainterLines;
106 std::unique_ptr<TriList> mTriList;
107 std::unique_ptr<ViaPainter> mViaPainter;
108 std::unique_ptr<ViaPainter> mViaPainterPreview;
109 void resetSceneNodes();
112 bool mShowGridPoints{
true};
113 bool mShowGridAStar{
false};
114 bool mShowGridLines{
true};
115 bool mShowFootprints{
true};
116 bool mShowRatsNest{
true};
117 bool mShowTriangulation{
true};
118 bool mBottomView{
false};
119 bool mLimitRatsNest{
false};
121 float mFootprintFillAlphaBase{0.2f};
122 float mFootprintLineAlphaBase{1.0f};
123 float mPinFillAlphaBase{0.7f};
124 float mPinLineAlphaBase{0.0f};
130 QPointF getNormalizedCursorPos()
const;
131 QPointF normalizedPos(
const QPoint&)
const;
132 QPoint pixelPos(
const QPointF&)
const;
133 QPoint worldPosToPixels(
const Point_2&)
const;
134 Point_2 pixelsToWorldPos(QPoint)
const;
141 bool setHover(
Pin *);
143 std::set<Object *> objects;
150 uint getFirstLayerForSelection()
const;
151 Object *selectAt(
const Point_2&)
const;
152 void updateHoverSelection();
153 void updateRectangleSelection(
bool append);
154 void clearRectangleSelection();
158 void drawInfo(QPainter *);
159 void drawCosts(QPainter *);
160 void highlightSelected(QPainter&);
163 std::string mSnapshotSavePath;
166 static GLWidget *sInstance;