Some code unification for sketchbased features

This commit is contained in:
jrheinlaender
2013-05-23 17:33:23 +04:30
committed by Stefan Tröger
parent c382fb3afb
commit dfd27740a9
7 changed files with 31 additions and 75 deletions

View File

@@ -58,27 +58,10 @@ using namespace Gui;
TaskSketchBasedParameters::TaskSketchBasedParameters(ViewProvider *vp, QWidget *parent,
const std::string& pixmapname, const QString& parname)
: TaskBox(Gui::BitmapFactory().pixmap(pixmapname.c_str()),parname,true, parent),
vp(vp)
vp(vp), blockUpdate(false)
{
}
/*
App::DocumentObject* TaskSketchBasedParameters::getBaseFeature()
{
PartDesign::SketchBased* pcSketchBased = static_cast<PartDesign::SketchBased*>(vp->getObject());
App::DocumentObject* baseFeature = pcSketchBased->BaseFeature.getValue();
if (baseFeature == NULL) {
if (ActivePartObject != NULL) {
baseFeature = ActivePartObject->getPrevSolidFeature(pcSketchBased, false);
}
if (baseFeature == NULL) {
// For legacy features
baseFeature = pcSketchBased->getSupport();
}
}
return baseFeature;
}*/
const QString TaskSketchBasedParameters::onAddSelection(const Gui::SelectionChanges& msg)
{
@@ -101,13 +84,12 @@ const QString TaskSketchBasedParameters::onAddSelection(const Gui::SelectionChan
std::vector<std::string> upToFaces(1,subname);
pcSketchBased->UpToFace.setValue(selObj, upToFaces);
if (updateView())
pcSketchBased->getDocument()->recomputeFeature(pcSketchBased);
recomputeFeature();
return refStr;
}
void TaskSketchBasedParameters::onButtonFace(const bool pressed) {
void TaskSketchBasedParameters::onSelectReference(const bool pressed, const bool edge, const bool face, const bool planar) {
// Note: Even if there is no solid, App::Plane and Part::Datum can still be selected
App::DocumentObject* solid = PartDesignGui::ActivePartObject->getPrevSolidFeature(NULL, false);
PartDesign::SketchBased* pcSketchBased = static_cast<PartDesign::SketchBased*>(vp->getObject());
@@ -120,7 +102,7 @@ void TaskSketchBasedParameters::onButtonFace(const bool pressed) {
}
Gui::Selection().clearSelection();
Gui::Selection().addSelectionGate
(new ReferenceSelection(solid, false, true, false));
(new ReferenceSelection(solid, edge, face, planar));
} else {
Gui::Selection().rmvSelectionGate();
Gui::Document* doc = Gui::Application::Instance->activeDocument();
@@ -168,8 +150,7 @@ const QByteArray TaskSketchBasedParameters::onFaceName(const QString& text)
std::vector<std::string> upToFaces(1,ss.str());
PartDesign::SketchBased* pcSketchBased = static_cast<PartDesign::SketchBased*>(vp->getObject());
pcSketchBased->UpToFace.setValue(obj, upToFaces);
if (updateView())
pcSketchBased->getDocument()->recomputeFeature(pcSketchBased);
recomputeFeature();
return QByteArray(ss.str().c_str());
}
@@ -188,7 +169,13 @@ QString TaskSketchBasedParameters::getFaceReference(const QString& obj, const QS
void TaskSketchBasedParameters::onUpdateView(bool on)
{
if (on) {
blockUpdate = !on;
recomputeFeature();
}
void TaskSketchBasedParameters::recomputeFeature()
{
if (!blockUpdate) {
PartDesign::SketchBased* pcSketchBased = static_cast<PartDesign::SketchBased*>(vp->getObject());
pcSketchBased->getDocument()->recomputeFeature(pcSketchBased);
}