diff -r 03f8e6d42e13 -r 2f79053c2e9a src/modeleditor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/modeleditor.cpp Fri Mar 04 11:40:19 2022 +0200 @@ -0,0 +1,85 @@ +/* + * LDForge: LDraw parts authoring CAD + * Copyright (C) 2013 - 2020 Teemu Piippo + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "modeleditor.h" +#include "linetypes/triangle.h" +#include "linetypes/quadrilateral.h" + +ModelEditor::ModelEditor(Model& model) : + storedModel{model} +{ +} + +ModelEditor::~ModelEditor() +{ + for (ldraw::id_t id : this->modifiedObjects) + { + const QModelIndex index = this->model().find(id); + if (index.isValid()) + { + Q_EMIT this->objectModified(index.row()); + } + } +} + +ldraw::id_t ModelEditor::append(std::unique_ptr&& object) +{ + this->storedModel.append(std::move(object)); + Q_EMIT this->objectAdded(this->model().size() - 1); + return object->id; +} + +void ModelEditor::remove(int position) +{ + this->storedModel.remove(position); +} + +auto ModelEditor::setObjectProperty( + const ldraw::id_t id, + const ldraw::Property property, + const QVariant& value) + -> ldraw::Object::SetPropertyResult +{ + ldraw::Object* const object = this->storedModel.findObjectById(id); + if (object != nullptr) + { + const ldraw::Object::SetPropertyResult result = object->setProperty(ldraw::PropertyKeyValue{property, value}); + modifiedObjects.insert(id); + return result; + } + else + { + return ldraw::Object::SetPropertyResult::PropertyNotHandled; + } +} + +void ModelEditor::setObjectPoint(ldraw::id_t id, int pointId, const glm::vec3& value) +{ + ldraw::Object* object = this->storedModel.findObjectById(id); + if (object != nullptr) + { + object->setProperty(ldraw::PropertyKeyValue{ldraw::pointProperty(pointId), QVariant::fromValue(value)}); + modifiedObjects.insert(id); + } +} + +const Model &ModelEditor::model() +{ + return this->storedModel; +} +