+ Add selected sketches to one Face, implement specialized view provider for Face

This commit is contained in:
wmayer 2015-11-13 13:38:24 +01:00
parent 6944658bd4
commit bf0d8d68bb
5 changed files with 118 additions and 32 deletions

View File

@ -43,6 +43,10 @@ public:
/// recalculate the feature
App::DocumentObjectExecReturn *execute(void);
short mustExecute() const;
/// returns the type name of the ViewProvider
const char* getViewProviderName(void) const {
return "PartGui::ViewProviderFace";
}
//@}
protected:

View File

@ -145,6 +145,7 @@ void PartGuiExport initPartGui()
PartGui::ViewProviderConeParametric ::init();
PartGui::ViewProviderTorusParametric ::init();
PartGui::ViewProviderRuledSurface ::init();
PartGui::ViewProviderFace ::init();
PartGui::DimensionLinear ::initClass();
PartGui::DimensionAngular ::initClass();
PartGui::ArcEngine ::initClass();

View File

@ -1034,7 +1034,7 @@ CmdPartMakeFace::CmdPartMakeFace()
sAppModule = "Part";
sGroup = QT_TR_NOOP("Part");
sMenuText = QT_TR_NOOP("Make face from sketch");
sToolTipText = QT_TR_NOOP("Make face from a selected sketch");
sToolTipText = QT_TR_NOOP("Make face from selected sketches");
sWhatsThis = "Part_MakeFace";
sStatusTip = sToolTipText;
}
@ -1043,16 +1043,27 @@ void CmdPartMakeFace::activated(int iMsg)
{
std::vector<Part::Part2DObject*> sketches = Gui::Selection().getObjectsOfType<Part::Part2DObject>();
openCommand("Make face");
for (std::vector<Part::Part2DObject*>::iterator it = sketches.begin(); it != sketches.end(); ++it) {
App::DocumentObjectT obj(*it);
try {
App::DocumentT doc(sketches.front()->getDocument());
std::stringstream str;
str << obj.getDocumentPython()
<< ".addObject(\"Part::Face\", \"Face\").Sources = "
<< obj.getObjectPython();
str << doc.getDocumentPython()
<< ".addObject(\"Part::Face\", \"Face\").Sources = (";
for (std::vector<Part::Part2DObject*>::iterator it = sketches.begin(); it != sketches.end(); ++it) {
App::DocumentObjectT obj(*it);
str << obj.getObjectPython() << ", ";
}
str << ")";
doCommand(Doc,str.str().c_str());
commitCommand();
updateActive();
}
catch (...) {
abortCommand();
throw;
}
commitCommand();
updateActive();
}
bool CmdPartMakeFace::isActive(void)

View File

@ -26,18 +26,11 @@
#ifndef _PreComp_
#endif
/// Here the FreeCAD includes sorted by Base,App,Gui......
#include <Base/Parameter.h>
#include <Mod/Part/App/FeatureFace.h>
#include <Mod/Part/App/Part2DObject.h>
#include "ViewProviderPlaneParametric.h"
//#include "Tree.h"
using namespace PartGui;
using namespace std;
//**************************************************************************
@ -45,10 +38,10 @@ using namespace std;
PROPERTY_SOURCE(PartGui::ViewProviderPlaneParametric, PartGui::ViewProviderPart)
ViewProviderPlaneParametric::ViewProviderPlaneParametric()
{
sPixmap = "Tree_Part_Plane_Parametric.svg";
sPixmap = "Tree_Part_Plane_Parametric.svg";
}
ViewProviderPlaneParametric::~ViewProviderPlaneParametric()
@ -56,20 +49,80 @@ ViewProviderPlaneParametric::~ViewProviderPlaneParametric()
}
// **********************************************************************************
std::vector<std::string> ViewProviderPlaneParametric::getDisplayModes(void) const
{
// get the modes of the father
std::vector<std::string> StrList;
// get the modes of the father
std::vector<std::string> StrList;
// add your own modes
StrList.push_back("Flat Lines");
StrList.push_back("Shaded");
StrList.push_back("Wireframe");
StrList.push_back("Points");
// add your own modes
StrList.push_back("Flat Lines");
StrList.push_back("Shaded");
StrList.push_back("Wireframe");
StrList.push_back("Points");
return StrList;
return StrList;
}
// ----------------------------------------------------------------------------
PROPERTY_SOURCE(PartGui::ViewProviderFace, PartGui::ViewProviderPlaneParametric)
ViewProviderFace::ViewProviderFace()
{
}
ViewProviderFace::~ViewProviderFace()
{
}
std::vector<App::DocumentObject*> ViewProviderFace::claimChildren(void) const
{
return std::vector<App::DocumentObject*>(static_cast<Part::Face*>(getObject())->Sources.getValues());
}
bool ViewProviderFace::canDragObjects() const
{
return true;
}
bool ViewProviderFace::canDragObject(App::DocumentObject* obj) const
{
if (!obj)
return false;
if (obj->getTypeId().isDerivedFrom(Part::Part2DObject::getClassTypeId()))
return true;
else
return false;
}
void ViewProviderFace::dragObject(App::DocumentObject* obj)
{
Part::Face* face = static_cast<Part::Face*>(getObject());
std::vector<App::DocumentObject*> sources = face->Sources.getValues();
for (std::vector<App::DocumentObject*>::iterator it = sources.begin(); it != sources.end(); ++it) {
if (*it == obj) {
sources.erase(it);
face->Sources.setValues(sources);
break;
}
}
}
bool ViewProviderFace::canDropObjects() const
{
return true;
}
bool ViewProviderFace::canDropObject(App::DocumentObject* obj) const
{
return canDragObject(obj);
}
void ViewProviderFace::dropObject(App::DocumentObject* obj)
{
Part::Face* face = static_cast<Part::Face*>(getObject());
std::vector<App::DocumentObject*> sources = face->Sources.getValues();
sources.push_back(obj);
face->Sources.setValues(sources);
}

View File

@ -36,7 +36,7 @@ class SoTransform;
namespace PartGui {
class PartGuiExport ViewProviderPlaneParametric:public ViewProviderPart
class PartGuiExport ViewProviderPlaneParametric : public ViewProviderPart
{
PROPERTY_HEADER(PartGui::ViewProviderPlaneParametric);
@ -52,6 +52,23 @@ protected:
};
class PartGuiExport ViewProviderFace : public ViewProviderPlaneParametric
{
PROPERTY_HEADER(PartGui::ViewProviderFace);
public:
ViewProviderFace();
virtual ~ViewProviderFace();
virtual std::vector<App::DocumentObject*> claimChildren(void) const;
virtual bool canDragObjects() const;
virtual bool canDragObject(App::DocumentObject*) const;
virtual void dragObject(App::DocumentObject*);
virtual bool canDropObjects() const;
virtual bool canDropObject(App::DocumentObject*) const;
virtual void dropObject(App::DocumentObject*);
};
} // namespace PartGui