#include "SketchFeature.h" #include "SketchObject.h" #include "SketchLine.h" #include "SketchRectangle.h" #include 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& 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; }