From 0ea6a2ed0d356a826f57f3a4bd4ec2f6cfd3fa8f Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 4 Mar 2016 17:16:57 +0100 Subject: [PATCH] + removed unneeded pure virtual method getFaces from PropertyComplexGeoData + extend interface of ComplexGeoData::getPoints to also return normals if available --- src/App/ComplexGeoData.h | 1 + src/App/PropertyGeo.h | 3 --- src/Mod/Fem/App/FemMeshProperty.cpp | 7 ------- src/Mod/Fem/App/FemMeshProperty.h | 3 --- src/Mod/Mesh/App/AppMeshPy.cpp | 15 +++++++++------ src/Mod/Mesh/App/Mesh.cpp | 1 + src/Mod/Mesh/App/Mesh.h | 1 + src/Mod/Mesh/App/MeshProperties.cpp | 7 ------- src/Mod/Mesh/App/MeshProperties.h | 4 ---- src/Mod/Mesh/Gui/Command.cpp | 7 +++++-- src/Mod/Part/App/PropertyTopoShape.cpp | 7 ------- src/Mod/Part/App/PropertyTopoShape.h | 4 ---- src/Mod/Points/App/PropertyPointKernel.cpp | 7 ------- src/Mod/Points/App/PropertyPointKernel.h | 4 ---- src/Mod/Points/Gui/Command.cpp | 3 ++- src/Mod/ReverseEngineering/Gui/Command.cpp | 6 +++++- 16 files changed, 24 insertions(+), 56 deletions(-) diff --git a/src/App/ComplexGeoData.h b/src/App/ComplexGeoData.h index 3641266d2..950ed2588 100644 --- a/src/App/ComplexGeoData.h +++ b/src/App/ComplexGeoData.h @@ -138,6 +138,7 @@ public: { return Base::Vector3d(); } /** Get points from object with given accuracy */ virtual void getPoints(std::vector &Points, + std::vector &Normals, float Accuracy, uint16_t flags=0) const {} /** Get lines from object with given accuracy */ virtual void getLines(std::vector &Points,std::vector &lines, diff --git a/src/App/PropertyGeo.h b/src/App/PropertyGeo.h index 9bef38266..4691b2d20 100644 --- a/src/App/PropertyGeo.h +++ b/src/App/PropertyGeo.h @@ -357,9 +357,6 @@ public: //@{ virtual const Data::ComplexGeoData* getComplexData() const = 0; virtual Base::BoundBox3d getBoundingBox() const = 0; - virtual void getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags=0) const = 0; //@} }; diff --git a/src/Mod/Fem/App/FemMeshProperty.cpp b/src/Mod/Fem/App/FemMeshProperty.cpp index 38206bc84..43e269ad1 100644 --- a/src/Mod/Fem/App/FemMeshProperty.cpp +++ b/src/Mod/Fem/App/FemMeshProperty.cpp @@ -91,13 +91,6 @@ void PropertyFemMesh::transformGeometry(const Base::Matrix4D &rclMat) hasSetValue(); } -void PropertyFemMesh::getFaces(std::vector &aPoints, - std::vector &aTopo, - float accuracy, uint16_t flags) const -{ - _FemMesh->getFaces(aPoints, aTopo, accuracy, flags); -} - PyObject *PropertyFemMesh::getPyObject(void) { FemMeshPy* mesh = new FemMeshPy(&*_FemMesh); diff --git a/src/Mod/Fem/App/FemMeshProperty.h b/src/Mod/Fem/App/FemMeshProperty.h index 00630a99a..444d811e6 100644 --- a/src/Mod/Fem/App/FemMeshProperty.h +++ b/src/Mod/Fem/App/FemMeshProperty.h @@ -61,9 +61,6 @@ public: /** Returns the bounding box around the underlying mesh kernel */ Base::BoundBox3d getBoundingBox() const; void transformGeometry(const Base::Matrix4D &rclMat); - void getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags=0) const; //@} /** @name Python interface */ diff --git a/src/Mod/Mesh/App/AppMeshPy.cpp b/src/Mod/Mesh/App/AppMeshPy.cpp index a21127b07..5621aa465 100644 --- a/src/Mod/Mesh/App/AppMeshPy.cpp +++ b/src/Mod/Mesh/App/AppMeshPy.cpp @@ -293,12 +293,15 @@ private: if (shape && shape->getTypeId().isDerivedFrom(App::PropertyComplexGeoData::getClassTypeId())) { std::vector aPoints; std::vector aTopo; - static_cast(shape)->getFaces(aPoints, aTopo,fTolerance); - mesh->addFacets(aTopo, aPoints); - if (global_mesh.countFacets() == 0) - global_mesh = *mesh; - else - global_mesh.addMesh(*mesh); + const Data::ComplexGeoData* data = static_cast(shape)->getComplexData(); + if (data) { + data->getFaces(aPoints, aTopo,fTolerance); + mesh->addFacets(aTopo, aPoints); + if (global_mesh.countFacets() == 0) + global_mesh = *mesh; + else + global_mesh.addMesh(*mesh); + } } } else { diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index 6059c21ba..21e54a386 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -253,6 +253,7 @@ MeshPoint MeshObject::getPoint(unsigned long index) const } void MeshObject::getPoints(std::vector &Points, + std::vector &Normals, float Accuracy, uint16_t flags) const { unsigned long ctpoints = _kernel.CountPoints(); diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index fdd09c0aa..a38b10859 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -129,6 +129,7 @@ public: double getVolume() const; /** Get points from object with given accuracy */ virtual void getPoints(std::vector &Points, + std::vector &Normals, float Accuracy, uint16_t flags=0) const; virtual void getFaces(std::vector &Points,std::vector &Topo, float Accuracy, uint16_t flags=0) const; diff --git a/src/Mod/Mesh/App/MeshProperties.cpp b/src/Mod/Mesh/App/MeshProperties.cpp index 38258bc2a..be252455a 100644 --- a/src/Mod/Mesh/App/MeshProperties.cpp +++ b/src/Mod/Mesh/App/MeshProperties.cpp @@ -502,13 +502,6 @@ Base::BoundBox3d PropertyMeshKernel::getBoundingBox() const return _meshObject->getBoundBox(); } -void PropertyMeshKernel::getFaces(std::vector &aPoints, - std::vector &aTopo, - float accuracy, uint16_t flags) const -{ - _meshObject->getFaces(aPoints, aTopo, accuracy, flags); -} - unsigned int PropertyMeshKernel::getMemSize (void) const { unsigned int size = 0; diff --git a/src/Mod/Mesh/App/MeshProperties.h b/src/Mod/Mesh/App/MeshProperties.h index 567eecde7..fb2f122d1 100644 --- a/src/Mod/Mesh/App/MeshProperties.h +++ b/src/Mod/Mesh/App/MeshProperties.h @@ -207,10 +207,6 @@ public: const Data::ComplexGeoData* getComplexData() const; /** Returns the bounding box around the underlying mesh kernel */ Base::BoundBox3d getBoundingBox() const; - /** Get faces from object with given accuracy */ - virtual void getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags=0) const; //@} /** @name Modification */ diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index 8e766a204..ad8dadee6 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -526,8 +526,11 @@ void CmdMeshFromGeometry::activated(int iMsg) if (jt->first == "Shape" && jt->second->getTypeId().isDerivedFrom(App::PropertyComplexGeoData::getClassTypeId())) { std::vector aPoints; std::vector aTopo; - static_cast(jt->second)->getFaces(aPoints, aTopo,(float)tol); - mesh.setFacets(aTopo, aPoints); + const Data::ComplexGeoData* data = static_cast(jt->second)->getComplexData(); + if (data) { + data->getFaces(aPoints, aTopo,(float)tol); + mesh.setFacets(aTopo, aPoints); + } } } diff --git a/src/Mod/Part/App/PropertyTopoShape.cpp b/src/Mod/Part/App/PropertyTopoShape.cpp index 6c9a40b74..eaff9ca79 100644 --- a/src/Mod/Part/App/PropertyTopoShape.cpp +++ b/src/Mod/Part/App/PropertyTopoShape.cpp @@ -133,13 +133,6 @@ Base::BoundBox3d PropertyPartShape::getBoundingBox() const return box; } -void PropertyPartShape::getFaces(std::vector &aPoints, - std::vector &aTopo, - float accuracy, uint16_t flags) const -{ - _Shape.getFaces(aPoints, aTopo, accuracy, flags); -} - void PropertyPartShape::transformGeometry(const Base::Matrix4D &rclTrf) { aboutToSetValue(); diff --git a/src/Mod/Part/App/PropertyTopoShape.h b/src/Mod/Part/App/PropertyTopoShape.h index d51e4df26..e08eb41d3 100644 --- a/src/Mod/Part/App/PropertyTopoShape.h +++ b/src/Mod/Part/App/PropertyTopoShape.h @@ -67,10 +67,6 @@ public: //@{ /** Returns the bounding box around the underlying mesh kernel */ Base::BoundBox3d getBoundingBox() const; - /** Get faces from object with given accuracy */ - virtual void getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags=0) const; //@} /** @name Python interface */ diff --git a/src/Mod/Points/App/PropertyPointKernel.cpp b/src/Mod/Points/App/PropertyPointKernel.cpp index d47f2b17b..6e9a01c43 100644 --- a/src/Mod/Points/App/PropertyPointKernel.cpp +++ b/src/Mod/Points/App/PropertyPointKernel.cpp @@ -76,13 +76,6 @@ Base::BoundBox3d PropertyPointKernel::getBoundingBox() const return box; } -void PropertyPointKernel::getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags) const -{ - _cPoints->getFaces(Points, Topo, Accuracy, flags); -} - PyObject *PropertyPointKernel::getPyObject(void) { PointsPy* points = new PointsPy(&*_cPoints); diff --git a/src/Mod/Points/App/PropertyPointKernel.h b/src/Mod/Points/App/PropertyPointKernel.h index 02fcf15cf..eb4453e5a 100644 --- a/src/Mod/Points/App/PropertyPointKernel.h +++ b/src/Mod/Points/App/PropertyPointKernel.h @@ -52,10 +52,6 @@ public: //@{ /** Returns the bounding box around the underlying mesh kernel */ Base::BoundBox3d getBoundingBox() const; - /** Get faces from object with given accuracy */ - virtual void getFaces(std::vector &Points, - std::vector &Topo, - float Accuracy, uint16_t flags=0) const; //@} /** @name Python interface */ diff --git a/src/Mod/Points/Gui/Command.cpp b/src/Mod/Points/Gui/Command.cpp index 707dd03d3..e80aa0913 100644 --- a/src/Mod/Points/Gui/Command.cpp +++ b/src/Mod/Points/Gui/Command.cpp @@ -195,7 +195,8 @@ void CmdPointsConvert::activated(int iMsg) if (prop) { const Data::ComplexGeoData* data = prop->getComplexData(); std::vector vertexes; - data->getPoints(vertexes, 0.0f); + std::vector normals; + data->getPoints(vertexes, normals, 0.0f); if (!vertexes.empty()) { App::Document* doc = (*it)->getDocument(); Points::Feature* fea = static_cast(doc->addObject("Points::Feature", "Points")); diff --git a/src/Mod/ReverseEngineering/Gui/Command.cpp b/src/Mod/ReverseEngineering/Gui/Command.cpp index db268810e..6b0a04d30 100644 --- a/src/Mod/ReverseEngineering/Gui/Command.cpp +++ b/src/Mod/ReverseEngineering/Gui/Command.cpp @@ -107,7 +107,11 @@ void CmdApproxPlane::activated(int iMsg) if (jt->second->getTypeId().isDerivedFrom(App::PropertyComplexGeoData::getClassTypeId())) { std::vector aPoints; std::vector aTopo; - static_cast(jt->second)->getFaces(aPoints, aTopo,0.01f); + const Data::ComplexGeoData* data = static_cast(jt->second)->getComplexData(); + if (!data) + continue; + + data->getFaces(aPoints, aTopo,0.01f); // get a reference normal for the plane fit Base::Vector3f refNormal(0,0,0);