Files
unnamed-cad-software/src/SketchFeature.cpp
2026-02-16 20:45:39 -07:00

99 lines
2.5 KiB
C++

#include "SketchFeature.h"
#include "SketchObject.h"
#include "SketchLine.h"
#include "SketchRectangle.h"
#include <QJsonArray>
SketchFeature::SketchFeature(const QString& name)
: Feature(name)
{
}
SketchFeature::~SketchFeature()
{
qDeleteAll(m_objects);
}
QString SketchFeature::type() const
{
return "Sketch";
}
void SketchFeature::setPlane(SketchPlane plane)
{
m_plane = plane;
}
SketchFeature::SketchPlane SketchFeature::plane() const
{
return m_plane;
}
const TopoDS_Shape& SketchFeature::shape() const
{
return m_shape;
}
void SketchFeature::addObject(SketchObject* object)
{
m_objects.append(object);
}
const QList<SketchObject*>& SketchFeature::objects() const
{
return m_objects;
}
void SketchFeature::read(const QJsonObject& json)
{
Feature::read(json);
if (json.contains("plane") && json["plane"].isString()) {
QString planeStr = json["plane"].toString();
if (planeStr == "XY") m_plane = SketchPlane::XY;
else if (planeStr == "XZ") m_plane = SketchPlane::XZ;
else if (planeStr == "YZ") m_plane = SketchPlane::YZ;
}
if (json.contains("objects") && json["objects"].isArray()) {
QJsonArray objectsArray = json["objects"].toArray();
qDeleteAll(m_objects);
m_objects.clear();
for (const QJsonValue& value : objectsArray) {
QJsonObject objectJson = value.toObject();
if (objectJson.contains("type") && objectJson["type"].isString()) {
QString type = objectJson["type"].toString();
if (type == "Line") {
auto line = new SketchLine();
line->read(objectJson);
m_objects.append(line);
} else if (type == "Rectangle") {
auto rect = new SketchRectangle();
rect->read(objectJson);
m_objects.append(rect);
}
}
}
}
}
void SketchFeature::write(QJsonObject& json) const
{
Feature::write(json);
QString planeStr;
switch (m_plane) {
case SketchPlane::XY: planeStr = "XY"; break;
case SketchPlane::XZ: planeStr = "XZ"; break;
case SketchPlane::YZ: planeStr = "YZ"; break;
}
json["plane"] = planeStr;
QJsonArray objectsArray;
for (const auto& object : m_objects) {
QJsonObject objectJson;
object->write(objectJson);
objectsArray.append(objectJson);
}
json["objects"] = objectsArray;
}