feat: Implement in-viewport sketch plane selection

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-15 11:09:28 -07:00
parent d2fe4226ea
commit 8424097127
4 changed files with 181 additions and 36 deletions

View File

@@ -102,29 +102,32 @@ bool ApplicationController::saveDocumentAs()
void ApplicationController::beginSketchCreation()
{
QStringList items;
items << "Top (XY)" << "Front (XZ)" << "Right (YZ)";
emit planeSelectionModeStarted();
}
bool ok;
QString item = QInputDialog::getItem(m_mainWindow, "Select Sketch Plane",
"Plane:", items, 0, false, &ok);
if (ok && !item.isEmpty()) {
auto feature = new SketchFeature("Sketch");
m_activeSketch = feature;
ViewportWidget::SketchPlane plane;
if (item == "Top (XY)") {
plane = ViewportWidget::SketchPlane::XY;
void ApplicationController::onPlaneSelected(ViewportWidget::SketchPlane plane)
{
auto feature = new SketchFeature("Sketch");
m_activeSketch = feature;
switch (plane) {
case ViewportWidget::SketchPlane::XY:
feature->setPlane(SketchFeature::SketchPlane::XY);
} else if (item == "Front (XZ)") {
plane = ViewportWidget::SketchPlane::XZ;
break;
case ViewportWidget::SketchPlane::XZ:
feature->setPlane(SketchFeature::SketchPlane::XZ);
} else { // "Right (YZ)"
plane = ViewportWidget::SketchPlane::YZ;
break;
case ViewportWidget::SketchPlane::YZ:
feature->setPlane(SketchFeature::SketchPlane::YZ);
}
m_document->addFeature(feature);
emit sketchModeStarted(plane);
break;
case ViewportWidget::SketchPlane::NONE:
delete feature;
m_activeSketch = nullptr;
return;
}
m_document->addFeature(feature);
emit sketchModeStarted(plane);
}
void ApplicationController::addLine(const gp_Pnt& start, const gp_Pnt& end)