From dd392efeb147d6df50f8d67cdca8f59981224e75 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 16 Oct 2014 19:36:54 +0200 Subject: [PATCH] + fixes #0001735: Ellipsoids visibility problems --- src/Mod/Part/Gui/ViewProvider.cpp | 56 ------------------- src/Mod/Part/Gui/ViewProvider.h | 17 ------ .../Part/Gui/ViewProviderSphereParametric.cpp | 41 +++++++++----- .../Part/Gui/ViewProviderSphereParametric.h | 27 +++++---- 4 files changed, 39 insertions(+), 102 deletions(-) diff --git a/src/Mod/Part/Gui/ViewProvider.cpp b/src/Mod/Part/Gui/ViewProvider.cpp index bf7acf375..57aeb38a8 100644 --- a/src/Mod/Part/Gui/ViewProvider.cpp +++ b/src/Mod/Part/Gui/ViewProvider.cpp @@ -1132,59 +1132,3 @@ void ViewProviderPartBase::showControlPointsOfFace(const TopoDS_Face& face) pcControlPoints->addChild(nodes); } - -// ---------------------------------------------------------------------------- - -PROPERTY_SOURCE(PartGui::ViewProviderEllipsoid, PartGui::ViewProviderPartBase) - -ViewProviderEllipsoid::ViewProviderEllipsoid() -{ - pSphere = new SoSphere(); - pSphere->ref(); - pScaling = new SoScale(); - pScaling->ref(); - sPixmap = "Tree_Part_Ellipsoid_Parametric.svg"; -} - -ViewProviderEllipsoid::~ViewProviderEllipsoid() -{ - pSphere->unref(); - pScaling->unref(); -} - -void ViewProviderEllipsoid::updateData(const App::Property* prop) -{ - if (prop->getTypeId() == Part::PropertyPartShape::getClassTypeId()) { - const TopoDS_Shape& cShape = static_cast(prop)->getValue(); - // clear anchor nodes - //vertexShapeMap.clear(); - EdgeRoot->removeAllChildren(); - FaceRoot->removeAllChildren(); - VertexRoot->removeAllChildren(); - // do nothing if shape is empty - if (cShape.IsNull()) - return; - App::DocumentObject* object = this->getObject(); - if (object && object->isDerivedFrom(Part::Ellipsoid::getClassTypeId())) { - double angle1 = static_cast(object)->Angle1.getValue(); - double angle2 = static_cast(object)->Angle2.getValue(); - double angle3 = static_cast(object)->Angle3.getValue(); - float radius1 = static_cast(object)->Radius1.getValue(); - float radius2 = static_cast(object)->Radius2.getValue(); - if (angle1 == -90.0 && angle2 == 90.0 && angle3 == 360.0) { - float scale = radius1/radius2; - pScaling->scaleFactor.setValue(1,1,scale); - pSphere->radius.setValue(radius2); - FaceRoot->addChild(pScaling); - FaceRoot->addChild(pSphere); - return; // ok, done - } - } - - // if not a full ellipsoid do it the general way - ViewProviderPartBase::updateData(prop); - } - else { - Gui::ViewProviderGeometryObject::updateData(prop); - } -} diff --git a/src/Mod/Part/Gui/ViewProvider.h b/src/Mod/Part/Gui/ViewProvider.h index 4d9058fd3..56e2389fb 100644 --- a/src/Mod/Part/Gui/ViewProvider.h +++ b/src/Mod/Part/Gui/ViewProvider.h @@ -131,23 +131,6 @@ private: std::map vertexShapeMap; }; -class PartGuiExport ViewProviderEllipsoid : public ViewProviderPartBase -{ - PROPERTY_HEADER(PartGui::ViewProviderEllipsoid); - -public: - /// constructor - ViewProviderEllipsoid(); - /// destructor - virtual ~ViewProviderEllipsoid(); - - void updateData(const App::Property*); - -private: - SoSphere* pSphere; - SoScale * pScaling; -}; - #if defined(FC_USE_FAST_SHAPE_RENDERING) class PartGuiExport ViewProviderPart : public ViewProviderPartExt { diff --git a/src/Mod/Part/Gui/ViewProviderSphereParametric.cpp b/src/Mod/Part/Gui/ViewProviderSphereParametric.cpp index 4c525c5e0..8d18c5a6c 100644 --- a/src/Mod/Part/Gui/ViewProviderSphereParametric.cpp +++ b/src/Mod/Part/Gui/ViewProviderSphereParametric.cpp @@ -26,18 +26,9 @@ #ifndef _PreComp_ #endif -/// Here the FreeCAD includes sorted by Base,App,Gui...... -#include - #include "ViewProviderSphereParametric.h" - -//#include "Tree.h" - - - using namespace PartGui; -using namespace std; //************************************************************************** @@ -45,7 +36,6 @@ using namespace std; PROPERTY_SOURCE(PartGui::ViewProviderSphereParametric, PartGui::ViewProviderPart) - ViewProviderSphereParametric::ViewProviderSphereParametric() { sPixmap = "Tree_Part_Sphere_Parametric.svg"; @@ -56,13 +46,34 @@ ViewProviderSphereParametric::~ViewProviderSphereParametric() } - - -// ********************************************************************************** - std::vector ViewProviderSphereParametric::getDisplayModes(void) const { - // get the modes of the father + std::vector StrList; + + // add your own modes + StrList.push_back("Flat Lines"); + StrList.push_back("Shaded"); + StrList.push_back("Wireframe"); + StrList.push_back("Points"); + + return StrList; +} + +// ---------------------------------------------------------------------------- + +PROPERTY_SOURCE(PartGui::ViewProviderEllipsoid, PartGui::ViewProviderPart) + +ViewProviderEllipsoid::ViewProviderEllipsoid() +{ + sPixmap = "Tree_Part_Ellipsoid_Parametric.svg"; +} + +ViewProviderEllipsoid::~ViewProviderEllipsoid() +{ +} + +std::vector ViewProviderEllipsoid::getDisplayModes(void) const +{ std::vector StrList; // add your own modes diff --git a/src/Mod/Part/Gui/ViewProviderSphereParametric.h b/src/Mod/Part/Gui/ViewProviderSphereParametric.h index 90dfe680c..6d90ccd84 100644 --- a/src/Mod/Part/Gui/ViewProviderSphereParametric.h +++ b/src/Mod/Part/Gui/ViewProviderSphereParametric.h @@ -26,22 +26,9 @@ #include "ViewProvider.h" - -class TopoDS_Shape; -class TopoDS_Face; -class SoSeparator; -class SbVec3f; -class SoTransform; - -namespace Gui { - class View3DInventorViewer; - class SoFCSelection; -} - namespace PartGui { - -class PartGuiExport ViewProviderSphereParametric:public ViewProviderPart +class PartGuiExport ViewProviderSphereParametric : public ViewProviderPart { PROPERTY_HEADER(PartGui::ViewProviderSphereParametric); @@ -57,6 +44,18 @@ protected: }; +class PartGuiExport ViewProviderEllipsoid : public ViewProviderPart +{ + PROPERTY_HEADER(PartGui::ViewProviderEllipsoid); + +public: + /// constructor + ViewProviderEllipsoid(); + /// destructor + virtual ~ViewProviderEllipsoid(); + std::vector getDisplayModes(void) const; +}; + } // namespace PartGui