feat: Implement circle drawing tool
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -8,10 +8,12 @@
|
||||
#include "SketchFeature.h"
|
||||
#include "SketchLine.h"
|
||||
#include "SketchRectangle.h"
|
||||
#include "SketchCircle.h"
|
||||
#include "SketchObject.h"
|
||||
#include "ApplicationController.h"
|
||||
#include "RectangleTool.h"
|
||||
#include "LineTool.h"
|
||||
#include "CircleTool.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QKeyEvent>
|
||||
#include <QWheelEvent>
|
||||
@@ -61,6 +63,7 @@ ViewportWidget::ViewportWidget(QWidget *parent)
|
||||
|
||||
m_sketchTools.insert(static_cast<int>(ApplicationController::ToolType::Line), new LineTool(this));
|
||||
m_sketchTools.insert(static_cast<int>(ApplicationController::ToolType::Rectangle), new RectangleTool(this));
|
||||
m_sketchTools.insert(static_cast<int>(ApplicationController::ToolType::Circle), new CircleTool(this));
|
||||
|
||||
m_snapping = new Snapping(this);
|
||||
}
|
||||
@@ -511,6 +514,39 @@ void ViewportWidget::drawSketch(const SketchFeature* sketch)
|
||||
|
||||
vertexCounts[start]++;
|
||||
vertexCounts[end]++;
|
||||
} else if (obj->type() == SketchObject::ObjectType::Circle) {
|
||||
auto circle = static_cast<const SketchCircle*>(obj);
|
||||
const auto& center = circle->center();
|
||||
double radius = circle->radius();
|
||||
QVector3D centerPos(center.X(), center.Y(), center.Z());
|
||||
|
||||
const int numSegments = 64;
|
||||
QVector3D u_axis, v_axis;
|
||||
switch (sketch->plane()) {
|
||||
case SketchFeature::SketchPlane::XY:
|
||||
u_axis = QVector3D(1, 0, 0);
|
||||
v_axis = QVector3D(0, 1, 0);
|
||||
break;
|
||||
case SketchFeature::SketchPlane::XZ:
|
||||
u_axis = QVector3D(1, 0, 0);
|
||||
v_axis = QVector3D(0, 0, 1);
|
||||
break;
|
||||
case SketchFeature::SketchPlane::YZ:
|
||||
u_axis = QVector3D(0, 1, 0);
|
||||
v_axis = QVector3D(0, 0, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < numSegments; ++i) {
|
||||
double angle1 = 2.0 * M_PI * double(i) / double(numSegments);
|
||||
QVector3D p1 = centerPos + radius * (cos(angle1) * u_axis + sin(angle1) * v_axis);
|
||||
|
||||
double angle2 = 2.0 * M_PI * double(i + 1) / double(numSegments);
|
||||
QVector3D p2 = centerPos + radius * (cos(angle2) * u_axis + sin(angle2) * v_axis);
|
||||
|
||||
lineVertices << p1.x() << p1.y() << p1.z();
|
||||
lineVertices << p2.x() << p2.y() << p2.z();
|
||||
}
|
||||
} else if (obj->type() == SketchObject::ObjectType::Rectangle) {
|
||||
auto rect = static_cast<const SketchRectangle*>(obj);
|
||||
const auto& p1 = rect->corner1();
|
||||
|
||||
Reference in New Issue
Block a user