Mesh: modernize type checking

This commit is contained in:
Florian Foinant-Willig
2023-10-15 21:39:13 +02:00
parent 939f30420c
commit 2e16f5aa36
9 changed files with 41 additions and 44 deletions

View File

@@ -70,7 +70,7 @@ App::DocumentObjectExecReturn* HarmonizeNormals::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -94,7 +94,7 @@ App::DocumentObjectExecReturn* FlipNormals::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -118,7 +118,7 @@ App::DocumentObjectExecReturn* FixNonManifolds::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -142,7 +142,7 @@ App::DocumentObjectExecReturn* FixDuplicatedFaces::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -166,7 +166,7 @@ App::DocumentObjectExecReturn* FixDuplicatedPoints::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -190,7 +190,7 @@ App::DocumentObjectExecReturn* FixDegenerations::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -217,7 +217,7 @@ App::DocumentObjectExecReturn* FixDeformations::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -242,7 +242,7 @@ App::DocumentObjectExecReturn* FixIndices::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -270,7 +270,7 @@ App::DocumentObjectExecReturn* FillHoles::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();
@@ -299,7 +299,7 @@ App::DocumentObjectExecReturn* RemoveComponents::execute()
return new App::DocumentObjectExecReturn("No mesh linked");
}
App::Property* prop = link->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
std::unique_ptr<MeshObject> mesh(new MeshObject);
*mesh = kernel->getValue();

View File

@@ -64,7 +64,7 @@ App::DocumentObjectExecReturn* SegmentByMesh::execute()
App::DocumentObject* mesh = Source.getValue();
if (mesh) {
App::Property* prop = mesh->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
kernel = static_cast<Mesh::PropertyMeshKernel*>(prop);
}
}
@@ -79,7 +79,7 @@ App::DocumentObjectExecReturn* SegmentByMesh::execute()
App::DocumentObject* tool = Tool.getValue();
if (tool) {
App::Property* prop = tool->getPropertyByName("Mesh");
if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyMeshKernel>()) {
toolmesh = static_cast<Mesh::PropertyMeshKernel*>(prop);
}
}

View File

@@ -141,7 +141,7 @@ void MeshObject::getFacesFromSubElement(const Data::Segment* element,
std::vector<Base::Vector3d>& /*pointNormals*/,
std::vector<Facet>& faces) const
{
if (element && element->getTypeId() == MeshSegment::getClassTypeId()) {
if (element && element->is<MeshSegment>()) {
const MeshSegment* segm = static_cast<const MeshSegment*>(element);
if (segm->segment) {
Base::Reference<MeshObject> submesh(

View File

@@ -483,15 +483,14 @@ void CmdMeshFromGeometry::activated(int)
std::vector<App::DocumentObject*> geo =
Gui::Selection().getObjectsOfType(App::GeoFeature::getClassTypeId());
for (auto it : geo) {
if (!it->getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) {
if (!it->isDerivedFrom<Mesh::Feature>()) {
// exclude meshes
std::map<std::string, App::Property*> Map;
it->getPropertyMap(Map);
Mesh::MeshObject mesh;
for (const auto& jt : Map) {
if (jt.first == "Shape"
&& jt.second->getTypeId().isDerivedFrom(
App::PropertyComplexGeoData::getClassTypeId())) {
&& jt.second->isDerivedFrom<App::PropertyComplexGeoData>()) {
std::vector<Base::Vector3d> aPoints;
std::vector<Data::ComplexGeoData::Facet> aTopo;
const Data::ComplexGeoData* data =
@@ -675,7 +674,7 @@ void CmdMeshPolySegm::activated(int)
if (it == docObj.begin()) {
Gui::Document* doc = getActiveGuiDocument();
Gui::MDIView* view = doc->getActiveView();
if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view->isDerivedFrom<Gui::View3DInventor>()) {
Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer();
viewer->setEditing(true);
viewer->startSelection(Gui::View3DInventorViewer::Clip);
@@ -732,7 +731,7 @@ void CmdMeshAddFacet::activated(int)
for (auto it : docObj) {
Gui::Document* doc = Gui::Application::Instance->getDocument(it->getDocument());
Gui::MDIView* view = doc->getActiveView();
if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view->isDerivedFrom<Gui::View3DInventor>()) {
MeshGui::MeshFaceAddition* edit =
new MeshGui::MeshFaceAddition(static_cast<Gui::View3DInventor*>(view));
edit->startEditing(static_cast<MeshGui::ViewProviderMesh*>(
@@ -783,7 +782,7 @@ void CmdMeshPolyCut::activated(int)
if (it == docObj.begin()) {
Gui::Document* doc = getActiveGuiDocument();
Gui::MDIView* view = doc->getActiveView();
if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view->isDerivedFrom<Gui::View3DInventor>()) {
Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer();
viewer->setEditing(true);
@@ -848,7 +847,7 @@ void CmdMeshPolyTrim::activated(int)
if (it == docObj.begin()) {
Gui::Document* doc = getActiveGuiDocument();
Gui::MDIView* view = doc->getActiveView();
if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view->isDerivedFrom<Gui::View3DInventor>()) {
Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer();
viewer->setEditing(true);
@@ -1001,7 +1000,7 @@ void CmdMeshPolySplit::activated(int)
if (it == docObj.begin()) {
Gui::Document* doc = getActiveGuiDocument();
Gui::MDIView* view = doc->getActiveView();
if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view->isDerivedFrom<Gui::View3DInventor>()) {
Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer();
viewer->setEditing(true);
viewer->startSelection(Gui::View3DInventorViewer::Clip);

View File

@@ -258,7 +258,7 @@ void DlgEvaluateMeshImp::changeEvent(QEvent* e)
void DlgEvaluateMeshImp::slotCreatedObject(const App::DocumentObject& Obj)
{
// add new mesh object to the list
if (Obj.getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) {
if (Obj.isDerivedFrom<Mesh::Feature>()) {
QString label = QString::fromUtf8(Obj.Label.getValue());
QString name = QString::fromLatin1(Obj.getNameInDocument());
d->ui.meshNameButton->addItem(label, name);
@@ -268,7 +268,7 @@ void DlgEvaluateMeshImp::slotCreatedObject(const App::DocumentObject& Obj)
void DlgEvaluateMeshImp::slotDeletedObject(const App::DocumentObject& Obj)
{
// remove mesh objects from the list
if (Obj.getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) {
if (Obj.isDerivedFrom<Mesh::Feature>()) {
int index = d->ui.meshNameButton->findData(QString::fromLatin1(Obj.getNameInDocument()));
if (index > 0) {
d->ui.meshNameButton->removeItem(index);
@@ -290,16 +290,15 @@ void DlgEvaluateMeshImp::slotChangedObject(const App::DocumentObject& Obj,
const App::Property& Prop)
{
// if the current mesh object was modified update everything
if (&Obj == d->meshFeature && Prop.getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (&Obj == d->meshFeature && Prop.is<Mesh::PropertyMeshKernel>()) {
removeViewProviders();
cleanInformation();
showInformation();
d->self_intersections.clear();
}
else if (Obj.getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) {
else if (Obj.isDerivedFrom<Mesh::Feature>()) {
// if the label has changed update the entry in the list
if (Prop.getTypeId() == App::PropertyString::getClassTypeId()
&& strcmp(Prop.getName(), "Label") == 0) {
if (Prop.is<App::PropertyString>() && strcmp(Prop.getName(), "Label") == 0) {
QString label = QString::fromUtf8(Obj.Label.getValue());
QString name = QString::fromLatin1(Obj.getNameInDocument());
int index = d->ui.meshNameButton->findData(name);
@@ -353,7 +352,7 @@ void DlgEvaluateMeshImp::addViewProvider(const char* name,
if (d->view) {
ViewProviderMeshDefects* vp =
static_cast<ViewProviderMeshDefects*>(Base::Type::createInstanceByName(name));
assert(vp->getTypeId().isDerivedFrom(Gui::ViewProvider::getClassTypeId()));
assert(vp->isDerivedFrom<Gui::ViewProvider>());
vp->attach(d->meshFeature);
d->view->getViewer()->addViewProvider(vp);
vp->showDefects(indices);

View File

@@ -162,7 +162,7 @@ Gui::View3DInventorViewer* MeshSelection::getViewer() const
return nullptr;
}
Gui::MDIView* view = doc->getActiveView();
if (view && view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
if (view && view->isDerivedFrom<Gui::View3DInventor>()) {
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
return viewer;
}
@@ -561,7 +561,7 @@ void MeshSelection::pickFaceCallback(void* ud, SoEventCallback* n)
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp || !vp->getTypeId().isDerivedFrom(ViewProviderMesh::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMesh>()) {
return;
}
ViewProviderMesh* mesh = static_cast<ViewProviderMesh*>(vp);

View File

@@ -506,10 +506,10 @@ void ViewProviderMesh::updateData(const App::Property* prop)
{
Gui::ViewProviderGeometryObject::updateData(prop);
if (prop->getTypeId() == App::PropertyColorList::getClassTypeId()) {
if (prop->is<App::PropertyColorList>()) {
Coloring.setStatus(App::Property::Hidden, false);
}
else if (prop->getTypeId() == Mesh::PropertyMaterial::getClassTypeId()) {
else if (prop->is<Mesh::PropertyMaterial>()) {
Coloring.setStatus(App::Property::Hidden, false);
}
}
@@ -1708,7 +1708,7 @@ void ViewProviderMesh::faceInfoCallback(void* ud, SoEventCallback* n)
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp || !vp->getTypeId().isDerivedFrom(ViewProviderMesh::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMesh>()) {
return;
}
@@ -1791,7 +1791,7 @@ void ViewProviderMesh::fillHoleCallback(void* ud, SoEventCallback* n)
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp || !vp->getTypeId().isDerivedFrom(ViewProviderMesh::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMesh>()) {
return;
}
ViewProviderMesh* that = static_cast<ViewProviderMesh*>(vp);
@@ -1868,7 +1868,7 @@ void ViewProviderMesh::markPartCallback(void* ud, SoEventCallback* n)
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp || !vp->getTypeId().isDerivedFrom(ViewProviderMesh::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMesh>()) {
return;
}
ViewProviderMesh* that = static_cast<ViewProviderMesh*>(vp);
@@ -2501,7 +2501,7 @@ void ViewProviderIndexedFaceSet::attach(App::DocumentObject* pcFeat)
void ViewProviderIndexedFaceSet::updateData(const App::Property* prop)
{
ViewProviderMesh::updateData(prop);
if (prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop->is<Mesh::PropertyMeshKernel>()) {
ViewProviderMeshBuilder builder;
builder.createMesh(prop, pcMeshCoord, pcMeshFaces);
showOpenEdges(OpenEdges.getValue());
@@ -2592,7 +2592,7 @@ void ViewProviderMeshObject::attach(App::DocumentObject* pcFeat)
void ViewProviderMeshObject::updateData(const App::Property* prop)
{
ViewProviderMesh::updateData(prop);
if (prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop->is<Mesh::PropertyMeshKernel>()) {
const Mesh::PropertyMeshKernel* mesh = static_cast<const Mesh::PropertyMeshKernel*>(prop);
this->pcMeshNode->mesh.setValue(
Base::Reference<const Mesh::MeshObject>(mesh->getValuePtr()));

View File

@@ -289,7 +289,7 @@ void ViewProviderMeshCurvature::attach(App::DocumentObject* pcFeat)
void ViewProviderMeshCurvature::updateData(const App::Property* prop)
{
// set to the expected size
if (prop->getTypeId().isDerivedFrom(App::PropertyLink::getClassTypeId())) {
if (prop->isDerivedFrom<App::PropertyLink>()) {
Mesh::Feature* object =
static_cast<const App::PropertyLink*>(prop)->getValue<Mesh::Feature*>();
Gui::coinRemoveAllChildren(this->pcLinkRoot);
@@ -309,7 +309,7 @@ void ViewProviderMeshCurvature::updateData(const App::Property* prop)
ViewProviderMesh::updateTransform(p, pcTransform);
}
}
else if (prop->getTypeId() == Mesh::PropertyCurvatureList::getClassTypeId()) {
else if (prop->is<Mesh::PropertyCurvatureList>()) {
const Mesh::PropertyCurvatureList* curv =
static_cast<const Mesh::PropertyCurvatureList*>(prop);
if (curv->getSize() < 3) { // invalid array
@@ -545,8 +545,7 @@ void ViewProviderMeshCurvature::curvatureInfoCallback(void* ud, SoEventCallback*
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp
|| !vp->getTypeId().isDerivedFrom(ViewProviderMeshCurvature::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMeshCurvature>()) {
return;
}
ViewProviderMeshCurvature* self = static_cast<ViewProviderMeshCurvature*>(vp);
@@ -582,7 +581,7 @@ void ViewProviderMeshCurvature::curvatureInfoCallback(void* ud, SoEventCallback*
// By specifying the indexed mesh node 'pcFaceSet' we make sure that the picked point is
// really from the mesh we render and not from any other geometry
Gui::ViewProvider* vp = view->getViewProviderByPathFromTail(point->getPath());
if (!vp || !vp->getTypeId().isDerivedFrom(ViewProviderMeshCurvature::getClassTypeId())) {
if (!vp || !vp->isDerivedFrom<ViewProviderMeshCurvature>()) {
return;
}
ViewProviderMeshCurvature* that = static_cast<ViewProviderMeshCurvature*>(vp);
@@ -605,7 +604,7 @@ ViewProviderMeshCurvature::curvatureInfo(bool detail, int index1, int index2, in
// get the curvature info of the three points of the picked facet
App::Property* prop = pcObject->getPropertyByName("CurvInfo");
std::stringstream str;
if (prop && prop->getTypeId() == Mesh::PropertyCurvatureList::getClassTypeId()) {
if (prop && prop->is<Mesh::PropertyCurvatureList>()) {
Mesh::PropertyCurvatureList* curv = static_cast<Mesh::PropertyCurvatureList*>(prop);
const Mesh::CurvatureInfo& cVal1 = (*curv)[index1];
const Mesh::CurvatureInfo& cVal2 = (*curv)[index2];

View File

@@ -100,7 +100,7 @@ void ViewProviderMeshFaceSet::attach(App::DocumentObject* pcFeat)
void ViewProviderMeshFaceSet::updateData(const App::Property* prop)
{
ViewProviderMesh::updateData(prop);
if (prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) {
if (prop->is<Mesh::PropertyMeshKernel>()) {
const Mesh::MeshObject* mesh =
static_cast<const Mesh::PropertyMeshKernel*>(prop)->getValuePtr();