Merge pull request #19142 from hyarion/refactor/add-template-addobject

Add new addObject<T>() function
This commit is contained in:
Chris Hennes
2025-02-11 09:42:47 -06:00
committed by GitHub
95 changed files with 335 additions and 340 deletions

View File

@@ -303,8 +303,7 @@ private:
pcDoc = App::GetApplication().newDocument();
}
MeshPy* pMesh = static_cast<MeshPy*>(pcObj);
Mesh::Feature* pcFeature =
static_cast<Mesh::Feature*>(pcDoc->addObject("Mesh::Feature", name));
Mesh::Feature* pcFeature = pcDoc->addObject<Mesh::Feature>(name);
Mesh::MeshObject* mo = pMesh->getMeshObjectPtr();
if (!mo) {
throw Py::Exception(PyExc_ReferenceError, "object doesn't reference a valid mesh");

View File

@@ -119,8 +119,7 @@ void Importer::createMeshFromSegments(const std::string& name,
Feature* Importer::createMesh(const std::string& name, MeshObject& mesh)
{
Mesh::Feature* pcFeature =
static_cast<Mesh::Feature*>(document->addObject("Mesh::Feature", name.c_str()));
Mesh::Feature* pcFeature = document->addObject<Mesh::Feature>(name.c_str());
pcFeature->Label.setValue(name);
pcFeature->Mesh.swapMesh(mesh);
return pcFeature;

View File

@@ -503,8 +503,7 @@ void CmdMeshFromGeometry::activated(int)
}
// create a mesh feature and assign the mesh
Mesh::Feature* mf =
static_cast<Mesh::Feature*>(doc->addObject("Mesh::Feature", "Mesh"));
Mesh::Feature* mf = doc->addObject<Mesh::Feature>("Mesh");
mf->Mesh.setValue(mesh.getKernel());
}
}
@@ -1703,8 +1702,7 @@ void CmdMeshMerge::activated(int)
}
openCommand(QT_TRANSLATE_NOOP("Command", "Mesh merge"));
Mesh::Feature* pcFeature =
static_cast<Mesh::Feature*>(pcDoc->addObject("Mesh::Feature", "Mesh"));
Mesh::Feature* pcFeature = pcDoc->addObject<Mesh::Feature>("Mesh");
Mesh::MeshObject* newMesh = pcFeature->Mesh.startEditing();
std::vector<App::DocumentObject*> objs =
Gui::Selection().getObjectsOfType(Mesh::Feature::getClassTypeId());
@@ -1759,8 +1757,7 @@ void CmdMeshSplitComponents::activated(int)
std::unique_ptr<MeshObject> kernel(mesh.meshFromSegment(comp));
kernel->setTransform(mesh.getTransform());
Mesh::Feature* feature =
static_cast<Mesh::Feature*>(pcDoc->addObject("Mesh::Feature", "Component"));
Mesh::Feature* feature = pcDoc->addObject<Mesh::Feature>("Component");
feature->Mesh.setValuePtr(kernel.release());
}
}

View File

@@ -120,8 +120,7 @@ void Segmentation::accept()
std::string internalname = "Segments_";
internalname += myMesh->getNameInDocument();
App::DocumentObjectGroup* group = static_cast<App::DocumentObjectGroup*>(
document->addObject("App::DocumentObjectGroup", internalname.c_str()));
auto* group = document->addObject<App::DocumentObjectGroup>(internalname.c_str());
std::string labelname = "Segments ";
labelname += myMesh->Label.getValue();
group->Label.setValue(labelname);
@@ -129,8 +128,7 @@ void Segmentation::accept()
const std::vector<MeshCore::MeshSegment>& data = it->GetSegments();
for (const auto& jt : data) {
Mesh::MeshObject* segment = mesh->meshFromSegment(jt);
Mesh::Feature* feaSegm =
static_cast<Mesh::Feature*>(group->addObject("Mesh::Feature", "Segment"));
auto* feaSegm = group->addObject<Mesh::Feature>("Segment");
Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing();
feaMesh->swap(*segment);
feaSegm->Mesh.finishEditing();

View File

@@ -505,8 +505,7 @@ void SegmentationBestFit::accept()
std::string internalname = "Segments_";
internalname += myMesh->getNameInDocument();
App::DocumentObjectGroup* group = static_cast<App::DocumentObjectGroup*>(
document->addObject("App::DocumentObjectGroup", internalname.c_str()));
auto* group = document->addObject<App::DocumentObjectGroup>(internalname.c_str());
std::string labelname = "Segments ";
labelname += myMesh->Label.getValue();
group->Label.setValue(labelname);
@@ -514,8 +513,7 @@ void SegmentationBestFit::accept()
const std::vector<MeshCore::MeshSegment>& data = it->GetSegments();
for (const auto& jt : data) {
Mesh::MeshObject* segment = mesh->meshFromSegment(jt);
Mesh::Feature* feaSegm =
static_cast<Mesh::Feature*>(group->addObject("Mesh::Feature", "Segment"));
auto* feaSegm = group->addObject<Mesh::Feature>("Segment");
Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing();
feaMesh->swap(*segment);
feaSegm->Mesh.finishEditing();

View File

@@ -975,7 +975,7 @@ public:
Gui::Document* gui = mesh->getDocument();
App::Document* doc = gui->getDocument();
auto cpy = static_cast<Mesh::Feature*>(doc->addObject("Mesh::Feature"));
auto cpy = doc->addObject<Mesh::Feature>();
auto org = mesh->getObject<Mesh::Feature>();
cpy->Label.setValue(org->Label.getValue());
cpy->Mesh.setValue(org->Mesh.getValue());
@@ -1630,7 +1630,7 @@ void ViewProviderMesh::splitMesh(const MeshCore::MeshKernel& toolMesh,
removeFacets(indices);
auto doc = App::GetApplication().getActiveDocument();
const char* name = pcObject->getNameInDocument();
auto splitMesh = dynamic_cast<Mesh::Feature*>(doc->addObject("Mesh::Feature", name));
auto splitMesh = doc->addObject<Mesh::Feature>(name);
// Note: deletes also kernel
splitMesh->Mesh.setValuePtr(kernel);
getObject()->purgeTouched();

View File

@@ -480,12 +480,10 @@ public:
}
}
if (!group) {
group = dynamic_cast<App::DocumentObjectGroup*>(
doc->addObject("App::DocumentObjectGroup", internalname.c_str()));
group = doc->addObject<App::DocumentObjectGroup>(internalname.c_str());
}
auto anno = dynamic_cast<App::AnnotationLabel*>(
group->addObject("App::AnnotationLabel", internalname.c_str()));
auto anno = group->addObject<App::AnnotationLabel>(internalname.c_str());
QStringList lines = s.split(QLatin1String("\n"));
std::vector<std::string> text;
for (const auto& line : lines) {