feat: Add sketch mode UI tab with drawing tools
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
3
icons/circle.svg
Normal file
3
icons/circle.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg version="1.1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="24" cy="24" r="16" fill="none" stroke="#000" stroke-width="4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 159 B |
3
icons/line.svg
Normal file
3
icons/line.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg version="1.1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m 8,40 32,-32" fill="none" stroke="#000" stroke-width="4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 152 B |
3
icons/rectangle.svg
Normal file
3
icons/rectangle.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg version="1.1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect x="8" y="12" width="32" height="24" fill="none" stroke="#000" stroke-width="4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 170 B |
3
icons/save-sketch.svg
Normal file
3
icons/save-sketch.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg version="1.1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m8 24 12 12 20-24" fill="none" stroke="#000" stroke-width="4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 156 B |
@@ -42,12 +42,12 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
mainToolBar->setFloatable(false);
|
mainToolBar->setFloatable(false);
|
||||||
mainToolBar->setStyleSheet("QToolBar { border: 0px }");
|
mainToolBar->setStyleSheet("QToolBar { border: 0px }");
|
||||||
|
|
||||||
QTabWidget *tabWidget = new QTabWidget();
|
m_tabWidget = new QTabWidget();
|
||||||
mainToolBar->addWidget(tabWidget);
|
mainToolBar->addWidget(m_tabWidget);
|
||||||
|
|
||||||
// --- SOLID Tab ---
|
// --- SOLID Tab ---
|
||||||
QWidget *solidTab = new QWidget();
|
m_solidTab = new QWidget();
|
||||||
QHBoxLayout *solidLayout = new QHBoxLayout(solidTab);
|
QHBoxLayout *solidLayout = new QHBoxLayout(m_solidTab);
|
||||||
solidLayout->setContentsMargins(5, 5, 5, 5);
|
solidLayout->setContentsMargins(5, 5, 5, 5);
|
||||||
solidLayout->setSpacing(5);
|
solidLayout->setSpacing(5);
|
||||||
solidLayout->setAlignment(Qt::AlignLeft);
|
solidLayout->setAlignment(Qt::AlignLeft);
|
||||||
@@ -67,15 +67,55 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
extrudeButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
extrudeButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
||||||
solidLayout->addWidget(extrudeButton);
|
solidLayout->addWidget(extrudeButton);
|
||||||
|
|
||||||
tabWidget->addTab(solidTab, "SOLID");
|
m_tabWidget->addTab(m_solidTab, "SOLID");
|
||||||
|
|
||||||
// --- SURFACE Tab ---
|
// --- SURFACE Tab ---
|
||||||
QWidget *surfaceTab = new QWidget();
|
m_surfaceTab = new QWidget();
|
||||||
tabWidget->addTab(surfaceTab, "SURFACE");
|
m_tabWidget->addTab(m_surfaceTab, "SURFACE");
|
||||||
|
|
||||||
// --- TOOLS Tab ---
|
// --- TOOLS Tab ---
|
||||||
QWidget *toolsTab = new QWidget();
|
m_toolsTab = new QWidget();
|
||||||
tabWidget->addTab(toolsTab, "TOOLS");
|
m_tabWidget->addTab(m_toolsTab, "TOOLS");
|
||||||
|
|
||||||
|
// --- SKETCH Tab ---
|
||||||
|
m_sketchTab = new QWidget();
|
||||||
|
QHBoxLayout *sketchLayout = new QHBoxLayout(m_sketchTab);
|
||||||
|
sketchLayout->setContentsMargins(5, 5, 5, 5);
|
||||||
|
sketchLayout->setSpacing(5);
|
||||||
|
sketchLayout->setAlignment(Qt::AlignLeft);
|
||||||
|
|
||||||
|
QToolButton *lineButton = new QToolButton();
|
||||||
|
lineButton->setText("Line");
|
||||||
|
lineButton->setIcon(QIcon(":/icons/line.svg"));
|
||||||
|
lineButton->setIconSize(QSize(48, 48));
|
||||||
|
lineButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||||
|
lineButton->setFixedSize(56, 56);
|
||||||
|
sketchLayout->addWidget(lineButton);
|
||||||
|
|
||||||
|
QToolButton *rectangleButton = new QToolButton();
|
||||||
|
rectangleButton->setText("Rectangle");
|
||||||
|
rectangleButton->setIcon(QIcon(":/icons/rectangle.svg"));
|
||||||
|
rectangleButton->setIconSize(QSize(48, 48));
|
||||||
|
rectangleButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||||
|
rectangleButton->setFixedSize(56, 56);
|
||||||
|
sketchLayout->addWidget(rectangleButton);
|
||||||
|
|
||||||
|
QToolButton *circleButton = new QToolButton();
|
||||||
|
circleButton->setText("Circle");
|
||||||
|
circleButton->setIcon(QIcon(":/icons/circle.svg"));
|
||||||
|
circleButton->setIconSize(QSize(48, 48));
|
||||||
|
circleButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||||
|
circleButton->setFixedSize(56, 56);
|
||||||
|
sketchLayout->addWidget(circleButton);
|
||||||
|
|
||||||
|
QToolButton *saveSketchButton = new QToolButton();
|
||||||
|
saveSketchButton->setText("Save Sketch");
|
||||||
|
saveSketchButton->setIcon(QIcon(":/icons/save-sketch.svg"));
|
||||||
|
saveSketchButton->setIconSize(QSize(48, 48));
|
||||||
|
saveSketchButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||||
|
saveSketchButton->setFixedSize(56, 56);
|
||||||
|
connect(saveSketchButton, &QToolButton::clicked, this, &MainWindow::saveSketch);
|
||||||
|
sketchLayout->addWidget(saveSketchButton);
|
||||||
|
|
||||||
m_viewport = new ViewportWidget;
|
m_viewport = new ViewportWidget;
|
||||||
setCentralWidget(m_viewport);
|
setCentralWidget(m_viewport);
|
||||||
@@ -109,9 +149,22 @@ void MainWindow::createSketch()
|
|||||||
feature->setPlane(SketchFeature::SketchPlane::YZ);
|
feature->setPlane(SketchFeature::SketchPlane::YZ);
|
||||||
}
|
}
|
||||||
m_document->addFeature(feature);
|
m_document->addFeature(feature);
|
||||||
|
|
||||||
|
m_tabWidget->removeTab(m_tabWidget->indexOf(m_toolsTab));
|
||||||
|
m_tabWidget->removeTab(m_tabWidget->indexOf(m_surfaceTab));
|
||||||
|
m_tabWidget->removeTab(m_tabWidget->indexOf(m_solidTab));
|
||||||
|
m_tabWidget->addTab(m_sketchTab, "SKETCH");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveSketch()
|
||||||
|
{
|
||||||
|
m_tabWidget->removeTab(m_tabWidget->indexOf(m_sketchTab));
|
||||||
|
m_tabWidget->addTab(m_solidTab, "SOLID");
|
||||||
|
m_tabWidget->addTab(m_surfaceTab, "SURFACE");
|
||||||
|
m_tabWidget->addTab(m_toolsTab, "TOOLS");
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::newFile()
|
void MainWindow::newFile()
|
||||||
{
|
{
|
||||||
m_document->clear();
|
m_document->clear();
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
class ViewportWidget;
|
class ViewportWidget;
|
||||||
class Document;
|
class Document;
|
||||||
class Feature;
|
class Feature;
|
||||||
|
class QTabWidget;
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
@@ -20,6 +22,7 @@ private slots:
|
|||||||
bool save();
|
bool save();
|
||||||
bool saveAs();
|
bool saveAs();
|
||||||
void createSketch();
|
void createSketch();
|
||||||
|
void saveSketch();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setCurrentFile(const QString &fileName);
|
void setCurrentFile(const QString &fileName);
|
||||||
@@ -27,6 +30,12 @@ private:
|
|||||||
ViewportWidget *m_viewport;
|
ViewportWidget *m_viewport;
|
||||||
Document *m_document;
|
Document *m_document;
|
||||||
QString m_currentFile;
|
QString m_currentFile;
|
||||||
|
|
||||||
|
QTabWidget *m_tabWidget;
|
||||||
|
QWidget *m_solidTab;
|
||||||
|
QWidget *m_surfaceTab;
|
||||||
|
QWidget *m_toolsTab;
|
||||||
|
QWidget *m_sketchTab;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
Reference in New Issue
Block a user