From 8cc98b9a88c1c694d368d42a110486bbd31bdda3 Mon Sep 17 00:00:00 2001 From: Benjamin Nauck Date: Sun, 9 Feb 2025 14:09:56 +0100 Subject: [PATCH] Mod: Use new addObject(...) that requires additional changes --- src/App/OriginGroupExtension.cpp | 2 +- src/Mod/CAM/App/AppPathPy.cpp | 8 +-- src/Mod/Fem/App/AppFemPy.cpp | 3 +- src/Mod/Fem/App/FemVTKTools.cpp | 2 +- src/Mod/Measure/Gui/TaskMeasure.cpp | 17 +++--- src/Mod/Mesh/Gui/Segmentation.cpp | 3 +- src/Mod/Mesh/Gui/SegmentationBestFit.cpp | 3 +- src/Mod/Mesh/Gui/ViewProvider.cpp | 2 +- src/Mod/Part/Gui/DlgProjectionOnSurface.cpp | 3 +- src/Mod/Part/Gui/SectionCutting.cpp | 9 +-- src/Mod/Points/App/AppPointsPy.cpp | 7 +-- src/Mod/ReverseEngineering/Gui/Command.cpp | 3 +- .../ReverseEngineering/Gui/Segmentation.cpp | 3 +- .../Gui/SegmentationManual.cpp | 3 +- src/Mod/Sketcher/App/AppSketcherPy.cpp | 4 +- src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp | 4 +- src/Mod/Spreadsheet/Gui/Command.cpp | 5 +- src/Mod/TechDraw/App/DrawProjGroup.cpp | 58 +++++++++---------- .../TechDraw/Gui/TaskSurfaceFinishSymbols.cpp | 3 +- 19 files changed, 60 insertions(+), 82 deletions(-) diff --git a/src/App/OriginGroupExtension.cpp b/src/App/OriginGroupExtension.cpp index e709e38a1d..5b8a9a0163 100644 --- a/src/App/OriginGroupExtension.cpp +++ b/src/App/OriginGroupExtension.cpp @@ -158,7 +158,7 @@ App::DocumentObjectExecReturn* OriginGroupExtension::extensionExecute() App::DocumentObject* OriginGroupExtension::getLocalizedOrigin(App::Document* doc) { - App::DocumentObject* originObject = doc->addObject("App::Origin", "Origin"); + auto* originObject = doc->addObject("Origin"); QByteArray byteArray = tr("Origin").toUtf8(); originObject->Label.setValue(byteArray.constData()); return originObject; diff --git a/src/Mod/CAM/App/AppPathPy.cpp b/src/Mod/CAM/App/AppPathPy.cpp index ac3f14c2a4..5239ca7632 100644 --- a/src/Mod/CAM/App/AppPathPy.cpp +++ b/src/Mod/CAM/App/AppPathPy.cpp @@ -228,8 +228,7 @@ private: std::string gcode = buffer.str(); Path::Toolpath path; path.setFromGCode(gcode); - Path::Feature* object = static_cast( - pcDoc->addObject("Path::Feature", file.fileNamePure().c_str())); + auto* object = pcDoc->addObject(file.fileNamePure().c_str()); object->Path.setValue(path); pcDoc->recompute(); } @@ -254,9 +253,8 @@ private: if (!pcDoc) { pcDoc = App::GetApplication().newDocument(); } - Path::PathPy* pPath = static_cast(pcObj); - Path::Feature* pcFeature = - static_cast(pcDoc->addObject("Path::Feature", name)); + auto* pPath = static_cast(pcObj); + auto* pcFeature = pcDoc->addObject(name); Path::Toolpath* pa = pPath->getToolpathPtr(); if (!pa) { throw Py::Exception(PyExc_ReferenceError, "object doesn't reference a valid path"); diff --git a/src/Mod/Fem/App/AppFemPy.cpp b/src/Mod/Fem/App/AppFemPy.cpp index 232fe7a62d..b758250e02 100644 --- a/src/Mod/Fem/App/AppFemPy.cpp +++ b/src/Mod/Fem/App/AppFemPy.cpp @@ -168,8 +168,7 @@ private: #ifdef FC_USE_VTK if (FemPostPipeline::canRead(file)) { - FemPostPipeline* pcFeature = static_cast( - pcDoc->addObject("Fem::FemPostPipeline", file.fileNamePure().c_str())); + auto* pcFeature = pcDoc->addObject(file.fileNamePure().c_str()); pcFeature->Label.setValue(file.fileNamePure().c_str()); pcFeature->read(file); diff --git a/src/Mod/Fem/App/FemVTKTools.cpp b/src/Mod/Fem/App/FemVTKTools.cpp index f976c25251..ff9550584c 100644 --- a/src/Mod/Fem/App/FemVTKTools.cpp +++ b/src/Mod/Fem/App/FemVTKTools.cpp @@ -619,7 +619,7 @@ App::DocumentObject* FemVTKTools::readResult(const char* filename, App::Document } } - App::DocumentObject* mesh = pcDoc->addObject("Fem::FemMeshObject", "ResultMesh"); + auto* mesh = pcDoc->addObject("ResultMesh"); std::unique_ptr fmesh(new FemMesh()); importVTKMesh(dataset, fmesh.get()); static_cast(mesh->getPropertyByName("FemMesh"))->setValuePtr(fmesh.release()); diff --git a/src/Mod/Measure/Gui/TaskMeasure.cpp b/src/Mod/Measure/Gui/TaskMeasure.cpp index 9ed4d88ec0..f8dab48655 100644 --- a/src/Mod/Measure/Gui/TaskMeasure.cpp +++ b/src/Mod/Measure/Gui/TaskMeasure.cpp @@ -219,13 +219,12 @@ Measure::MeasureBase* TaskMeasure::createObject(const App::MeasureType* measureT auto pyMeasureClass = measureType->pythonClass; // Create a MeasurePython instance - auto featurePython = doc->addObject("Measure::MeasurePython", measureType->label.c_str()); - _mMeasureObject = dynamic_cast(featurePython); + _mMeasureObject = doc->addObject(measureType->label.c_str()); // Create an instance of the pyMeasureClass, the classe's initializer sets the object as // proxy Py::Tuple args(1); - args.setItem(0, Py::asObject(featurePython->getPyObject())); + args.setItem(0, Py::asObject(_mMeasureObject->getPyObject())); PyObject* result = PyObject_CallObject(pyMeasureClass, args.ptr()); Py_XDECREF(result); } @@ -249,8 +248,7 @@ void TaskMeasure::update() App::DocumentObject* sub = ob->getSubObject(sel.SubName); // Resolve App::Link - if (sub->isDerivedFrom()) { - auto link = static_cast(sub); + if (auto link = Base::freecad_dynamic_cast(sub)) { sub = link->getLinkedObject(true); } @@ -341,7 +339,7 @@ void TaskMeasure::initViewObject() dynamic_cast(viewObject)->positionAnno(_mMeasureObject); // Set the ShowDelta Property if it exists on the measurements view object - auto* prop = dynamic_cast(viewObject->getPropertyByName("ShowDelta")); + auto* prop = viewObject->getPropertyByName("ShowDelta"); setDeltaPossible(prop != nullptr); if (prop) { prop->setValue(showDelta->isChecked()); @@ -370,10 +368,9 @@ void TaskMeasure::ensureGroup(Measure::MeasureBase* measurement) if (!obj || !obj->isValid() || !obj->isDerivedFrom()) { - obj = doc->addObject("App::DocumentObjectGroup", - measurementGroupName, - true, - "MeasureGui::ViewProviderMeasureGroup"); + obj = doc->addObject(measurementGroupName, + true, + "MeasureGui::ViewProviderMeasureGroup"); } auto group = static_cast(obj); diff --git a/src/Mod/Mesh/Gui/Segmentation.cpp b/src/Mod/Mesh/Gui/Segmentation.cpp index fd6c1d2ca2..2170290c6d 100644 --- a/src/Mod/Mesh/Gui/Segmentation.cpp +++ b/src/Mod/Mesh/Gui/Segmentation.cpp @@ -120,8 +120,7 @@ void Segmentation::accept() std::string internalname = "Segments_"; internalname += myMesh->getNameInDocument(); - App::DocumentObjectGroup* group = static_cast( - document->addObject("App::DocumentObjectGroup", internalname.c_str())); + auto* group = document->addObject(internalname.c_str()); std::string labelname = "Segments "; labelname += myMesh->Label.getValue(); group->Label.setValue(labelname); diff --git a/src/Mod/Mesh/Gui/SegmentationBestFit.cpp b/src/Mod/Mesh/Gui/SegmentationBestFit.cpp index c3a020238a..22b85df072 100644 --- a/src/Mod/Mesh/Gui/SegmentationBestFit.cpp +++ b/src/Mod/Mesh/Gui/SegmentationBestFit.cpp @@ -505,8 +505,7 @@ void SegmentationBestFit::accept() std::string internalname = "Segments_"; internalname += myMesh->getNameInDocument(); - App::DocumentObjectGroup* group = static_cast( - document->addObject("App::DocumentObjectGroup", internalname.c_str())); + auto* group = document->addObject(internalname.c_str()); std::string labelname = "Segments "; labelname += myMesh->Label.getValue(); group->Label.setValue(labelname); diff --git a/src/Mod/Mesh/Gui/ViewProvider.cpp b/src/Mod/Mesh/Gui/ViewProvider.cpp index 923073307a..dde4802bb6 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.cpp +++ b/src/Mod/Mesh/Gui/ViewProvider.cpp @@ -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(doc->addObject("Mesh::Feature", name)); + auto splitMesh = doc->addObject(name); // Note: deletes also kernel splitMesh->Mesh.setValuePtr(kernel); getObject()->purgeTouched(); diff --git a/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp index 1bf794f2b6..1a9d35660a 100644 --- a/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp +++ b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp @@ -1556,8 +1556,7 @@ TaskProjectOnSurface::TaskProjectOnSurface(App::Document* doc) { setDocumentName(doc->getName()); doc->openTransaction(QT_TRANSLATE_NOOP("Command", "Project on surface")); - auto obj = doc->addObject("Part::ProjectOnSurface", "Projection"); - auto feature = dynamic_cast(obj); + auto feature = doc->addObject("Projection"); widget = new DlgProjectOnSurface(feature); taskbox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("Part_ProjectionOnSurface"), widget->windowTitle(), true, nullptr); diff --git a/src/Mod/Part/Gui/SectionCutting.cpp b/src/Mod/Part/Gui/SectionCutting.cpp index bf7d5c2e12..e1ec8b856c 100644 --- a/src/Mod/Part/Gui/SectionCutting.cpp +++ b/src/Mod/Part/Gui/SectionCutting.cpp @@ -1019,13 +1019,10 @@ std::vector createLinks(App::Document* doc, const std::vec // if the object is part of an App::Part container, // the link needs to get the container placement - auto parents = itCuts->getInList(); - if (!parents.empty()) { + if (auto parents = itCuts->getInList(); !parents.empty()) { for (auto parent : parents) { if (auto pcPartParent = dynamic_cast(parent)) { - auto placement = Base::freecad_dynamic_cast( - pcPartParent->getPropertyByName("Placement")); - if (placement) { + if (auto placement = pcPartParent->getPropertyByName("Placement")) { pcLink->Placement.setValue(placement->getValue()); } } @@ -2421,7 +2418,7 @@ App::DocumentObject* SectionCut::createBooleanFragments( Part::Compound* SectionCut::createCompound(const std::vector& links, int transparency) { - auto CutCompoundPart = dynamic_cast(doc->addObject("Part::Compound", CompoundName)); + auto CutCompoundPart = doc->addObject(CompoundName); if (!CutCompoundPart) { throw Base::RuntimeError((std::string("SectionCut error: ") + std::string(CompoundName) + std::string(" could not be added\n")).c_str()); diff --git a/src/Mod/Points/App/AppPointsPy.cpp b/src/Mod/Points/App/AppPointsPy.cpp index 677c3059c4..fb6aa8cbde 100644 --- a/src/Mod/Points/App/AppPointsPy.cpp +++ b/src/Mod/Points/App/AppPointsPy.cpp @@ -295,8 +295,7 @@ private: pcFeature->purgeTouched(); } else { - Points::Feature* pcFeature = static_cast( - pcDoc->addObject("Points::Feature", file.fileNamePure().c_str())); + auto* pcFeature = pcDoc->addObject(file.fileNamePure().c_str()); pcFeature->Points.setValue(reader->getPoints()); pcDoc->recomputeFeature(pcFeature); pcFeature->purgeTouched(); @@ -413,8 +412,8 @@ private: if (!pcDoc) { pcDoc = App::GetApplication().newDocument(); } - PointsPy* pPoints = static_cast(pcObj); - Points::Feature* pcFeature = pcDoc->addObject(name); + auto* pPoints = static_cast(pcObj); + auto* pcFeature = pcDoc->addObject(name); // copy the data pcFeature->Points.setValue(*(pPoints->getPointKernelPtr())); return Py::asObject(pcFeature->getPyObject()); diff --git a/src/Mod/ReverseEngineering/Gui/Command.cpp b/src/Mod/ReverseEngineering/Gui/Command.cpp index ef03de7103..ed92c81b48 100644 --- a/src/Mod/ReverseEngineering/Gui/Command.cpp +++ b/src/Mod/ReverseEngineering/Gui/Command.cpp @@ -497,8 +497,7 @@ void CmdSegmentationFromComponents::activated(int) for (auto it : sel) { std::string internalname = "Segments_"; internalname += it->getNameInDocument(); - App::DocumentObjectGroup* group = static_cast( - doc->addObject("App::DocumentObjectGroup", internalname.c_str())); + auto* group = doc->addObject(internalname.c_str()); std::string labelname = "Segments "; labelname += it->Label.getValue(); group->Label.setValue(labelname); diff --git a/src/Mod/ReverseEngineering/Gui/Segmentation.cpp b/src/Mod/ReverseEngineering/Gui/Segmentation.cpp index a2046d3aae..54ab2b9d49 100644 --- a/src/Mod/ReverseEngineering/Gui/Segmentation.cpp +++ b/src/Mod/ReverseEngineering/Gui/Segmentation.cpp @@ -138,8 +138,7 @@ void Segmentation::accept() std::string internalname = "Segments_"; internalname += myMesh->getNameInDocument(); - App::DocumentObjectGroup* group = static_cast( - document->addObject("App::DocumentObjectGroup", internalname.c_str())); + auto* group = document->addObject(internalname.c_str()); std::string labelname = "Segments "; labelname += myMesh->Label.getValue(); group->Label.setValue(labelname); diff --git a/src/Mod/ReverseEngineering/Gui/SegmentationManual.cpp b/src/Mod/ReverseEngineering/Gui/SegmentationManual.cpp index b50e70cd10..55b7d376cb 100644 --- a/src/Mod/ReverseEngineering/Gui/SegmentationManual.cpp +++ b/src/Mod/ReverseEngineering/Gui/SegmentationManual.cpp @@ -295,8 +295,7 @@ void SegmentationManual::createSegment() algo.GetFacetsFlag(facets, MeshCore::MeshFacet::SELECTED); std::unique_ptr segment(mesh.meshFromSegment(facets)); - Mesh::Feature* feaSegm = - static_cast(adoc->addObject("Mesh::Feature", "Segment")); + auto* feaSegm = adoc->addObject("Segment"); Mesh::MeshObject* feaMesh = feaSegm->Mesh.startEditing(); feaMesh->swap(*segment); feaMesh->clearFacetSelection(); diff --git a/src/Mod/Sketcher/App/AppSketcherPy.cpp b/src/Mod/Sketcher/App/AppSketcherPy.cpp index 05eac05d99..00a6d937cb 100644 --- a/src/Mod/Sketcher/App/AppSketcherPy.cpp +++ b/src/Mod/Sketcher/App/AppSketcherPy.cpp @@ -95,8 +95,8 @@ private: } if (file.hasExtension("skf")) { - Sketcher::SketchObjectSF* pcFeature = static_cast( - pcDoc->addObject("Sketcher::SketchObjectSF", file.fileNamePure().c_str())); + auto filename = file.fileNamePure().c_str(); + auto* pcFeature = pcDoc->addObject(filename); pcFeature->SketchFlatFile.setValue(EncodedName.c_str()); pcDoc->recompute(); diff --git a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp index 1225f09123..3da6814815 100644 --- a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp +++ b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp @@ -69,8 +69,8 @@ private: { try { Base::FileInfo file(Name); - Spreadsheet::Sheet* pcSheet = static_cast( - pcDoc->addObject("Spreadsheet::Sheet", file.fileNamePure().c_str())); + auto filename = file.fileNamePure().c_str(); + auto* pcSheet = pcDoc->addObject(filename); pcSheet->importFromFile(Name, '\t', '"', '\\'); pcSheet->execute(); diff --git a/src/Mod/Spreadsheet/Gui/Command.cpp b/src/Mod/Spreadsheet/Gui/Command.cpp index b16e547755..edc1a4ecb8 100644 --- a/src/Mod/Spreadsheet/Gui/Command.cpp +++ b/src/Mod/Spreadsheet/Gui/Command.cpp @@ -200,9 +200,8 @@ void CmdSpreadsheetImport::activated(int iMsg) &selectedFilter); if (!fileName.isEmpty()) { std::string FeatName = getUniqueObjectName("Spreadsheet"); - Sheet* sheet = freecad_dynamic_cast( - App::GetApplication().getActiveDocument()->addObject("Spreadsheet::Sheet", - FeatName.c_str())); + auto* doc = App::GetApplication().getActiveDocument(); + Sheet* sheet = doc->addObject(FeatName.c_str()); if (sheet) { char delim, quote, escape; std::string errMsg = "Import"; diff --git a/src/Mod/TechDraw/App/DrawProjGroup.cpp b/src/Mod/TechDraw/App/DrawProjGroup.cpp index 67994b22e4..6cc158927e 100644 --- a/src/Mod/TechDraw/App/DrawProjGroup.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroup.cpp @@ -463,43 +463,39 @@ App::DocumentObject* DrawProjGroup::addProjection(const char* viewProjType) if (checkViewProjType(viewProjType) && !hasProjection(viewProjType)) { std::string FeatName = getDocument()->getUniqueObjectName("ProjItem"); - auto docObj(getDocument()->addObject("TechDraw::DrawProjGroupItem",//add to Document - FeatName.c_str())); - view = dynamic_cast(docObj); - if (!view && docObj) { + view = getDocument()->addObject(FeatName.c_str()); + if (!view) { //should never happen that we create a DPGI that isn't a DPGI!! Base::Console().Error("PROBLEM - DPG::addProjection - created a non DPGI! %s / %s\n", getNameInDocument(), viewProjType); throw Base::TypeError("Error: new projection is not a DPGI!"); } - if (view) {//coverity CID 151722 - // the label must be set before the view is added - view->Label.setValue(viewProjType); - // somewhere deep in DocumentObject, duplicate Labels have a numeric suffix applied, - // so we need to wait until that happens before building the translated label - view->translateLabel("DrawProjGroupItem", viewProjType, view->Label.getValue()); - addView(view);//from DrawViewCollection - view->Source.setValues(Source.getValues()); - view->XSource.setValues(XSource.getValues()); + // the label must be set before the view is added + view->Label.setValue(viewProjType); + // somewhere deep in DocumentObject, duplicate Labels have a numeric suffix applied, + // so we need to wait until that happens before building the translated label + view->translateLabel("DrawProjGroupItem", viewProjType, view->Label.getValue()); + addView(view);//from DrawViewCollection + view->Source.setValues(Source.getValues()); + view->XSource.setValues(XSource.getValues()); - // the Scale is already set by DrawView - view->Type.setValue(viewProjType); - if (strcmp(viewProjType, "Front") != 0) {//not Front! - vecs = getDirsFromFront(view); - view->Direction.setValue(vecs.first); - view->XDirection.setValue(vecs.second); - view->recomputeFeature(); - } - else {//Front - Anchor.setValue(view); - Anchor.purgeTouched(); - requestPaint();//make sure the group object is on the Gui page - view->LockPosition.setValue( - true);//lock "Front" position within DPG (note not Page!). - view->LockPosition.setStatus(App::Property::ReadOnly, - true);//Front should stay locked. - view->LockPosition.purgeTouched(); - } + // the Scale is already set by DrawView + view->Type.setValue(viewProjType); + if (strcmp(viewProjType, "Front") != 0) {//not Front! + vecs = getDirsFromFront(view); + view->Direction.setValue(vecs.first); + view->XDirection.setValue(vecs.second); + view->recomputeFeature(); + } + else {//Front + Anchor.setValue(view); + Anchor.purgeTouched(); + requestPaint();//make sure the group object is on the Gui page + view->LockPosition.setValue( + true);//lock "Front" position within DPG (note not Page!). + view->LockPosition.setStatus(App::Property::ReadOnly, + true);//Front should stay locked. + view->LockPosition.purgeTouched(); } } return view; diff --git a/src/Mod/TechDraw/Gui/TaskSurfaceFinishSymbols.cpp b/src/Mod/TechDraw/Gui/TaskSurfaceFinishSymbols.cpp index c61dd520ed..671a9dfc6e 100644 --- a/src/Mod/TechDraw/Gui/TaskSurfaceFinishSymbols.cpp +++ b/src/Mod/TechDraw/Gui/TaskSurfaceFinishSymbols.cpp @@ -397,8 +397,7 @@ bool TaskSurfaceFinishSymbols::accept() { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Surface Finish Symbols")); App::Document *doc = Application::Instance->activeDocument()->getDocument(); - App::DocumentObject *docObject = doc->addObject("TechDraw::DrawViewSymbol", "SurfaceSymbol"); - TechDraw::DrawViewSymbol *surfaceSymbol = dynamic_cast(docObject); + auto* surfaceSymbol = doc->addObject("SurfaceSymbol"); surfaceSymbol->Symbol.setValue(completeSymbol()); surfaceSymbol->Rotation.setValue(ui->leAngle->text().toDouble());