X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=97f253c6766468ff7f7dae10564be001c944d3e4;hb=0bf596dd0b3bb3cde5e14ed00efdf0565d460591;hp=fc2ffb51bb4fc85431ca5ec362c9ce0f1d895cf6;hpb=f8a5e3c97b28bc4e8a53a12be59b11544a968d41;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index fc2ffb51b..97f253c67 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -3,22 +3,23 @@ #include #include #include -#include -#include -#include #include #include #include #include +#include #include +#include +#include +#include + #include #include #include - #include + #include -#include #include #include @@ -46,11 +47,18 @@ #include #include +#include + +#include +#include #include #include #include +#include +#include + #ifdef _DEBUG #include #endif @@ -68,26 +76,25 @@ PartSet_Module::PartSet_Module(XGUI_Workshop* theWshop) XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr(); - connect(anOperationMgr, SIGNAL(operationStarted()), - this, SLOT(onOperationStarted())); + connect(anOperationMgr, SIGNAL(operationStarted()), this, SLOT(onOperationStarted())); - connect(anOperationMgr, SIGNAL(operationStopped(ModuleBase_Operation*)), - this, SLOT(onOperationStopped(ModuleBase_Operation*))); + connect(anOperationMgr, SIGNAL(operationStopped(ModuleBase_Operation*)), this, + SLOT(onOperationStopped(ModuleBase_Operation*))); XGUI_ContextMenuMgr* aContextMenuMgr = myWorkshop->contextMenuMgr(); - connect(aContextMenuMgr, SIGNAL(actionTriggered(const QString&, bool)), - this, SLOT(onContextMenuCommand(const QString&, bool))); + connect(aContextMenuMgr, SIGNAL(actionTriggered(const QString&, bool)), this, + SLOT(onContextMenuCommand(const QString&, bool))); - connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), - this, SLOT(onMousePressed(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), - this, SLOT(onMouseReleased(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), - this, SLOT(onMouseMoved(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), - this, SLOT(onKeyRelease(QKeyEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), - this, SLOT(onMouseDoubleClick(QMouseEvent*))); + connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), this, + SLOT(onMousePressed(QMouseEvent*))); + connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), this, + SLOT(onMouseReleased(QMouseEvent*))); + connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), this, + SLOT(onMouseMoved(QMouseEvent*))); + connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), this, + SLOT(onKeyRelease(QKeyEvent*))); + connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), this, + SLOT(onMouseDoubleClick(QMouseEvent*))); } PartSet_Module::~PartSet_Module() @@ -101,18 +108,18 @@ XGUI_Workshop* PartSet_Module::workshop() const void PartSet_Module::createFeatures() { - Config_ModuleReader aXMLReader = Config_ModuleReader(); - aXMLReader.readAll(); - myFeaturesInFiles = aXMLReader.featuresInFiles(); - - //!! Test registering of validators - PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); + //Registering of validators + SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); aFactory->registerValidator("PartSet_DistanceValidator", new PartSet_DistanceValidator); aFactory->registerValidator("PartSet_LengthValidator", new PartSet_LengthValidator); aFactory->registerValidator("PartSet_PerpendicularValidator", new PartSet_PerpendicularValidator); aFactory->registerValidator("PartSet_ParallelValidator", new PartSet_ParallelValidator); aFactory->registerValidator("PartSet_RadiusValidator", new PartSet_RadiusValidator); + + Config_ModuleReader aXMLReader = Config_ModuleReader(); + aXMLReader.readAll(); + myFeaturesInFiles = aXMLReader.featuresInFiles(); } void PartSet_Module::featureCreated(QAction* theFeature) @@ -120,11 +127,6 @@ void PartSet_Module::featureCreated(QAction* theFeature) connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered())); } -QStringList PartSet_Module::nestedFeatures(QString) -{ - return QStringList(); -} - std::string PartSet_Module::featureFile(const std::string& theFeatureId) { return myFeaturesInFiles[theFeatureId]; @@ -142,11 +144,11 @@ void PartSet_Module::onFeatureTriggered() // myWorkshop->viewer()->activeView()); QAction* aCmd = dynamic_cast(sender()); //Do nothing on uncheck - if(aCmd->isCheckable() && !aCmd->isChecked()) + if (aCmd->isCheckable() && !aCmd->isChecked()) return; launchOperation(aCmd->data().toString()); } - + void PartSet_Module::launchOperation(const QString& theCmdId) { ModuleBase_Operation* anOperation = createOperation(theCmdId.toStdString()); @@ -157,18 +159,18 @@ void PartSet_Module::launchOperation(const QString& theCmdId) std::list aSelected = aSelection->getSelected(); std::list aHighlighted = aSelection->getHighlighted(); aPreviewOp->initSelection(aSelected, aHighlighted); - } + } sendOperation(anOperation); } void PartSet_Module::onOperationStarted() { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); if (aPreviewOp) { XGUI_PropertyPanel* aPropPanel = myWorkshop->propertyPanel(); - connect(aPropPanel, SIGNAL(storedPoint2D(FeaturePtr, const std::string&)), - this, SLOT(onStorePoint2D(FeaturePtr, const std::string&)), Qt::UniqueConnection); + connect(aPropPanel, SIGNAL(storedPoint2D(ObjectPtr, const std::string&)), this, + SLOT(onStorePoint2D(ObjectPtr, const std::string&)), Qt::UniqueConnection); } } @@ -179,8 +181,17 @@ void PartSet_Module::onOperationStopped(ModuleBase_Operation* theOperation) PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(theOperation); if (aPreviewOp) { XGUI_PropertyPanel* aPropPanel = myWorkshop->propertyPanel(); - //disconnect(aPropPanel, SIGNAL(storedPoint2D(FeaturePtr, const std::string&)), - // this, SLOT(onStorePoint2D(FeaturePtr, const std::string&))); + //disconnect(aPropPanel, SIGNAL(storedPoint2D(ObjectPtr, const std::string&)), + // this, SLOT(onStorePoint2D(ObjectPtr, const std::string&))); + } else { + // Activate results of current feature for selection + FeaturePtr aFeature = theOperation->feature(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + std::list aResults = aFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.cbegin(); aIt != aResults.cend(); ++aIt) { + aDisplayer->activate(*aIt); + } } } @@ -196,39 +207,41 @@ void PartSet_Module::onContextMenuCommand(const QString& theId, bool isChecked) void PartSet_Module::onMousePressed(QMouseEvent* theEvent) { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); - if (aPreviewOp) { + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); + if (aPreviewOp && (!aView.IsNull())) { XGUI_Selection* aSelection = myWorkshop->selector()->selection(); // Initialise operation with preliminary selection std::list aSelected = aSelection->getSelected(); std::list aHighlighted = aSelection->getHighlighted(); - aPreviewOp->mousePressed(theEvent, myWorkshop->viewer()->activeView(), aSelected, aHighlighted); + aPreviewOp->mousePressed(theEvent, aView, aSelected, aHighlighted); } } void PartSet_Module::onMouseReleased(QMouseEvent* theEvent) { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); - if (aPreviewOp) - { + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); + if (aPreviewOp && (!aView.IsNull())) { XGUI_Selection* aSelection = myWorkshop->selector()->selection(); // Initialise operation with preliminary selection std::list aSelected = aSelection->getSelected(); std::list aHighlighted = aSelection->getHighlighted(); - aPreviewOp->mouseReleased(theEvent, myWorkshop->viewer()->activeView(), aSelected, aHighlighted); + aPreviewOp->mouseReleased(theEvent, aView, aSelected, aHighlighted); } } void PartSet_Module::onMouseMoved(QMouseEvent* theEvent) { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); - if (aPreviewOp) - aPreviewOp->mouseMoved(theEvent, myWorkshop->viewer()->activeView()); + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); + if (aPreviewOp && (!aView.IsNull())) + aPreviewOp->mouseMoved(theEvent, aView); } void PartSet_Module::onKeyRelease(QKeyEvent* theEvent) @@ -242,21 +255,21 @@ void PartSet_Module::onKeyRelease(QKeyEvent* theEvent) void PartSet_Module::onMouseDoubleClick(QMouseEvent* theEvent) { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); - if (aPreviewOp) - { + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); + Handle(V3d_View) aView = myWorkshop->viewer()->activeView(); + if (aPreviewOp && (!aView.IsNull())) { XGUI_Selection* aSelection = myWorkshop->selector()->selection(); // Initialise operation with preliminary selection std::list aSelected = aSelection->getSelected(); std::list aHighlighted = aSelection->getHighlighted(); - aPreviewOp->mouseDoubleClick(theEvent, myWorkshop->viewer()->activeView(), aSelected, - aHighlighted); + aPreviewOp->mouseDoubleClick(theEvent, aView, aSelected, aHighlighted); } } void PartSet_Module::onPlaneSelected(double theX, double theY, double theZ) { + //erasePlanes(); myWorkshop->viewer()->setViewProjection(theX, theY, theZ); myWorkshop->actionsMgr()->update(); @@ -268,21 +281,29 @@ void PartSet_Module::onFitAllView() myWorkshop->viewer()->fitAll(); } -void PartSet_Module::onLaunchOperation(std::string theName, FeaturePtr theFeature) +void PartSet_Module::onRestartOperation(std::string theName, ObjectPtr theObject) { - ModuleBase_Operation* anOperation = createOperation(theName.c_str(), - theFeature ? theFeature->getKind() : ""); - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(anOperation); - if (aPreviewOp) - { + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + + std::string aKind = aFeature ? aFeature->getKind() : ""; + ModuleBase_Operation* anOperation = createOperation(theName, aKind); + PartSet_OperationSketchBase* aSketchOp = dynamic_cast(anOperation); + if (aSketchOp) { XGUI_Selection* aSelection = myWorkshop->selector()->selection(); // Initialise operation with preliminary selection std::list aSelected = aSelection->getSelected(); std::list aHighlighted = aSelection->getHighlighted(); - aPreviewOp->initFeature(theFeature); - aPreviewOp->initSelection(aSelected, aHighlighted); - } else { - anOperation->setEditingFeature(theFeature); + aSketchOp->initFeature(aFeature); + aSketchOp->initSelection(aSelected, aHighlighted); + } else if (aFeature) { + anOperation->setEditingFeature(aFeature); + //Deactivate result of current feature in order to avoid its selection + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + std::list aResults = aFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.cbegin(); aIt != aResults.cend(); ++aIt) { + aDisplayer->deactivate(*aIt); + } } sendOperation(anOperation); myWorkshop->actionsMgr()->updateCheckState(); @@ -294,25 +315,16 @@ void PartSet_Module::onMultiSelectionEnabled(bool theEnabled) aViewer->enableMultiselection(theEnabled); } -void PartSet_Module::onStopSelection(const QFeatureList& theFeatures, const bool isStop) +void PartSet_Module::onStopSelection(const QList& theFeatures, const bool isStop) { XGUI_Displayer* aDisplayer = myWorkshop->displayer(); if (!isStop) { - QFeatureList::const_iterator anIt = theFeatures.begin(), aLast = theFeatures.end(); - for (; anIt != aLast; anIt++) { - activateFeature((*anIt), false); + foreach(ObjectPtr aObject, theFeatures) + { + activateFeature(aObject, false); } } - QResultList aResults; - foreach(FeaturePtr aFeature, theFeatures) { - if (aFeature->results().size() > 0) { - std::list& aResList = aFeature->results(); - std::list::iterator aIt; - for (aIt = aResList.begin(); aIt != aResList.end(); ++aIt) - aResults.append(*aIt); - } - } - aDisplayer->stopSelection(aResults, isStop, false); + aDisplayer->stopSelection(theFeatures, isStop, false); XGUI_ViewerProxy* aViewer = myWorkshop->viewer(); aViewer->enableSelection(!isStop); @@ -320,7 +332,7 @@ void PartSet_Module::onStopSelection(const QFeatureList& theFeatures, const bool aDisplayer->updateViewer(); } -void PartSet_Module::onSetSelection(const QResultList& theFeatures) +void PartSet_Module::onSetSelection(const QList& theFeatures) { XGUI_Displayer* aDisplayer = myWorkshop->displayer(); aDisplayer->setSelected(theFeatures, false); @@ -330,33 +342,58 @@ void PartSet_Module::onSetSelection(const QResultList& theFeatures) void PartSet_Module::onCloseLocalContext() { XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->deactivateObjectsOutOfContext(); aDisplayer->closeLocalContexts(); } -void PartSet_Module::onFeatureConstructed(FeaturePtr theFeature, int theMode) +void PartSet_Module::onFeatureConstructed(ObjectPtr theFeature, int theMode) { bool isDisplay = theMode != PartSet_OperationSketchBase::FM_Hide; - // TODO visualizePreview(theFeature, isDisplay, false); - if (!isDisplay) { - ModuleBase_Operation* aCurOperation = myWorkshop->operationMgr()->currentOperation(); - FeaturePtr aSketch; - PartSet_OperationSketchBase* aPrevOp = dynamic_cast(aCurOperation); - if (aPrevOp) { - std::list aList = aPrevOp->subFeatures(); - XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - std::list aModes = aPrevOp->getSelectionModes(aPrevOp->feature()); - - std::list::const_iterator anIt = aList.begin(), - aLast = aList.end(); - for (; anIt != aLast; anIt++) - visualizePreview((*anIt), false, false); - aDisplayer->updateViewer(); + ModuleBase_Operation* aCurOperation = myWorkshop->operationMgr()->currentOperation(); + PartSet_OperationSketchBase* aPrevOp = dynamic_cast(aCurOperation); + if (aPrevOp) { + std::list aList = aPrevOp->subFeatures(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + std::list aModes = aPrevOp->getSelectionModes(aPrevOp->feature()); + std::list::iterator aSFIt; + for (aSFIt = aList.begin(); aSFIt != aList.end(); ++aSFIt) { + std::list aResults = (*aSFIt)->results(); + std::list::iterator aIt; + for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { + if (isDisplay) + aDisplayer->activateInLocalContext((*aIt), aModes, false); + else + aDisplayer->erase((*aIt), false); + } + if (!isDisplay) + aDisplayer->erase((*aSFIt), false); } } - - if (theMode == PartSet_OperationSketchBase::FM_Activation || - theMode == PartSet_OperationSketchBase::FM_Deactivation) - activateFeature(theFeature, true); + if (isDisplay) + ModelAPI_EventCreator::get()->sendUpdated( + theFeature, Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY)); + /* bool isDisplay = theMode != PartSet_OperationSketchBase::FM_Hide; + // TODO visualizePreview(theFeature, isDisplay, false); + if (!isDisplay) { + ModuleBase_Operation* aCurOperation = myWorkshop->operationMgr()->currentOperation(); + FeaturePtr aSketch; + PartSet_OperationSketchBase* aPrevOp = dynamic_cast(aCurOperation); + if (aPrevOp) { + std::list aList = aPrevOp->subFeatures(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + std::list aModes = aPrevOp->getSelectionModes(aPrevOp->feature()); + + std::list::const_iterator anIt = aList.begin(), + aLast = aList.end(); + //TODO for (; anIt != aLast; anIt++) + // visualizePreview((*anIt), false, false); + //aDisplayer->updateViewer(); + } + } + + if (theMode == PartSet_OperationSketchBase::FM_Activation || + theMode == PartSet_OperationSketchBase::FM_Deactivation) + activateFeature(theFeature, true);*/ } ModuleBase_Operation* PartSet_Module::createOperation(const std::string& theCmdId, @@ -366,19 +403,20 @@ ModuleBase_Operation* PartSet_Module::createOperation(const std::string& theCmdI ModuleBase_Operation* anOperation = 0; if (theCmdId == PartSet_OperationSketch::Type()) { anOperation = new PartSet_OperationSketch(theCmdId.c_str(), this); - } - else { + } else { ModuleBase_Operation* aCurOperation = myWorkshop->operationMgr()->currentOperation(); FeaturePtr aSketch; PartSet_OperationSketchBase* aPrevOp = dynamic_cast(aCurOperation); - if (aPrevOp) + if (aPrevOp) { aSketch = aPrevOp->sketch(); - if (PartSet_OperationFeatureCreate::canProcessKind(theCmdId)) + } + if (PartSet_OperationFeatureCreate::canProcessKind(theCmdId)) { anOperation = new PartSet_OperationFeatureCreate(theCmdId.c_str(), this, aSketch); - else if (theCmdId == PartSet_OperationFeatureEditMulti::Type()) - anOperation = new PartSet_OperationFeatureEditMulti(theCmdId.c_str(), this, aSketch); - else if (theCmdId == PartSet_OperationFeatureEdit::Type()) + } else if (theCmdId == PartSet_OperationFeatureEditMulti::Type()) { + anOperation = new PartSet_OperationFeatureEditMulti(theCmdId.c_str(), this, aSketch); + } else if (theCmdId == PartSet_OperationFeatureEdit::Type()) { anOperation = new PartSet_OperationFeatureEdit(theCmdId.c_str(), this, aSketch); + } } if (!anOperation) { @@ -409,27 +447,25 @@ ModuleBase_Operation* PartSet_Module::createOperation(const std::string& theCmdI // connect the operation PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(anOperation); if (aPreviewOp) { - connect(aPreviewOp, SIGNAL(featureConstructed(FeaturePtr, int)), - this, SLOT(onFeatureConstructed(FeaturePtr, int))); - connect(aPreviewOp, SIGNAL(launchOperation(std::string, FeaturePtr)), - this, SLOT(onLaunchOperation(std::string, FeaturePtr))); - connect(aPreviewOp, SIGNAL(multiSelectionEnabled(bool)), - this, SLOT(onMultiSelectionEnabled(bool))); + connect(aPreviewOp, SIGNAL(featureConstructed(ObjectPtr, int)), this, + SLOT(onFeatureConstructed(ObjectPtr, int))); + connect(aPreviewOp, SIGNAL(restartRequired(std::string, ObjectPtr)), this, + SLOT(onRestartOperation(std::string, ObjectPtr))); + connect(aPreviewOp, SIGNAL(multiSelectionEnabled(bool)), this, + SLOT(onMultiSelectionEnabled(bool))); - connect(aPreviewOp, SIGNAL(stopSelection(const QFeatureList&, const bool)), - this, SLOT(onStopSelection(const QFeatureList&, const bool))); - connect(aPreviewOp, SIGNAL(setSelection(const QFeatureList&)), - this, SLOT(onSetSelection(const QFeatureList&))); + connect(aPreviewOp, SIGNAL(stopSelection(const QList&, const bool)), this, + SLOT(onStopSelection(const QList&, const bool))); + connect(aPreviewOp, SIGNAL(setSelection(const QList&)), this, + SLOT(onSetSelection(const QList&))); - connect(aPreviewOp, SIGNAL(closeLocalContext()), - this, SLOT(onCloseLocalContext())); + connect(aPreviewOp, SIGNAL(closeLocalContext()), this, SLOT(onCloseLocalContext())); PartSet_OperationSketch* aSketchOp = dynamic_cast(aPreviewOp); if (aSketchOp) { - connect(aSketchOp, SIGNAL(planeSelected(double, double, double)), - this, SLOT(onPlaneSelected(double, double, double))); - connect(aSketchOp, SIGNAL(fitAllView()), - this, SLOT(onFitAllView())); + connect(aSketchOp, SIGNAL(planeSelected(double, double, double)), this, + SLOT(onPlaneSelected(double, double, double))); + connect(aSketchOp, SIGNAL(fitAllView()), this, SLOT(onFitAllView())); } } @@ -439,49 +475,56 @@ ModuleBase_Operation* PartSet_Module::createOperation(const std::string& theCmdI void PartSet_Module::sendOperation(ModuleBase_Operation* theOperation) { static Events_ID aModuleEvent = Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED); - Config_PointerMessage aMessage(aModuleEvent, this); - aMessage.setPointer(theOperation); + boost::shared_ptr aMessage = + boost::shared_ptr(new Config_PointerMessage(aModuleEvent, this)); + aMessage->setPointer(theOperation); Events_Loop::loop()->send(aMessage); } -void PartSet_Module::visualizePreview(FeaturePtr theFeature, bool isDisplay, - const bool isUpdateViewer) -{ - ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation(); - if (!anOperation) - return; - - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(anOperation); - if (!aPreviewOp) - return; - - ResultPtr aResult = theFeature->firstResult(); - XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - if (isDisplay) { - boost::shared_ptr aSPFeature = - boost::dynamic_pointer_cast(theFeature); - if (aSPFeature) { - //boost::shared_ptr anAIS = - // aSPFeature->getAISObject(aDisplayer->getAISObject(aResult)); - aDisplayer->display(aSPFeature, false); - //aDisplayer->redisplay(aResult, anAIS, false); - } - } - else - aDisplayer->erase(aResult, false); - - if (isUpdateViewer) - aDisplayer->updateViewer(); -} - -void PartSet_Module::activateFeature(FeaturePtr theFeature, const bool isUpdateViewer) +/*void PartSet_Module::visualizePreview(FeaturePtr theFeature, bool isDisplay, + const bool isUpdateViewer) + { + ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation(); + if (!anOperation) + return; + + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(anOperation); + if (!aPreviewOp) + return; + + ResultPtr aResult = theFeature->firstResult(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + if (isDisplay) { + boost::shared_ptr aSPFeature = + boost::dynamic_pointer_cast(theFeature); + if (aSPFeature) { + PartSet_OperationSketch* aSketchOp = dynamic_cast(aPreviewOp); + if (aSketchOp && !aSketchOp->hasSketchPlane()) + showPlanes(); + } + } + else + aDisplayer->erase(aResult, false); + + if (isUpdateViewer) + aDisplayer->updateViewer(); + }*/ + +void PartSet_Module::activateFeature(ObjectPtr theFeature, const bool isUpdateViewer) { ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation(); PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(anOperation); if (aPreviewOp) { XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - aDisplayer->activateInLocalContext(theFeature->firstResult(), aPreviewOp->getSelectionModes(theFeature), - isUpdateViewer); + std::list aModes = aPreviewOp->getSelectionModes(theFeature); + aDisplayer->activateInLocalContext(theFeature, aModes, isUpdateViewer); + + // If this is a Sketcher then activate objects (planar faces) outside of context + PartSet_OperationSketch* aSketchOp = dynamic_cast(aPreviewOp); + if (aSketchOp) { + Handle(StdSelect_FaceFilter) aFilter = new StdSelect_FaceFilter(StdSelect_Plane); + aDisplayer->activateObjectsOutOfContext(aModes, aFilter); + } } } @@ -499,19 +542,30 @@ void PartSet_Module::updateCurrentPreview(const std::string& theCmdId) if (!aFeature || aFeature->getKind() != theCmdId) return; - std::list aList = aPreviewOp->subFeatures(); XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + // Hide result of sketch + std::list aResults = aFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.cbegin(); aIt != aResults.cend(); ++aIt) + aDisplayer->erase(*aIt, false); + + std::list aList = aPreviewOp->subFeatures(); std::list aModes = aPreviewOp->getSelectionModes(aPreviewOp->feature()); - std::list::const_iterator anIt = aList.begin(), - aLast = aList.end(); + std::list::const_iterator anIt = aList.begin(), aLast = aList.end(); for (; anIt != aLast; anIt++) { - boost::shared_ptr aSPFeature = - boost::dynamic_pointer_cast(*anIt); + boost::shared_ptr aSPFeature = boost::dynamic_pointer_cast< + SketchPlugin_Feature>(*anIt); if (!aSPFeature) continue; - visualizePreview((*anIt), true, false); - aDisplayer->activateInLocalContext((*anIt)->firstResult(), aModes, false); + std::list aResults = aSPFeature->results(); + std::list::const_iterator aRIt; + for (aRIt = aResults.cbegin(); aRIt != aResults.cend(); ++aRIt) { + aDisplayer->display((*aRIt), false); + aDisplayer->activateInLocalContext((*aRIt), aModes, false); + } + aDisplayer->display(aSPFeature, false); + aDisplayer->activateInLocalContext(aSPFeature, aModes, false); } aDisplayer->updateViewer(); } @@ -522,58 +576,61 @@ void PartSet_Module::editFeature(FeaturePtr theFeature) return; // if (theFeature->getKind() == SKETCH_KIND) { - //FeaturePtr aFeature = theFeature; - //if (XGUI_Tools::isModelObject(aFeature)) { - // ObjectPtr aObject = boost::dynamic_pointer_cast(aFeature); - // aFeature = aObject->featureRef(); - //} - - //if (aFeature) { - onLaunchOperation(theFeature->getKind(), theFeature); - updateCurrentPreview(theFeature->getKind()); - //} + //FeaturePtr aFeature = theFeature; + //if (XGUI_Tools::isModelObject(aFeature)) { + // ObjectPtr aObject = boost::dynamic_pointer_cast(aFeature); + // aFeature = aObject->featureRef(); + //} + + //if (aFeature) { + onRestartOperation(theFeature->getKind(), theFeature); + updateCurrentPreview(theFeature->getKind()); + //} // } } -void PartSet_Module::onStorePoint2D(FeaturePtr theFeature, const std::string& theAttribute) +void PartSet_Module::onStorePoint2D(ObjectPtr theFeature, const std::string& theAttribute) { - PartSet_OperationSketchBase* aPreviewOp = dynamic_cast( - myWorkshop->operationMgr()->currentOperation()); + FeaturePtr aFeature = boost::dynamic_pointer_cast(theFeature); + + PartSet_OperationSketchBase* aPreviewOp = dynamic_cast(myWorkshop + ->operationMgr()->currentOperation()); if (!aPreviewOp) return; - boost::shared_ptr aPoint = - boost::dynamic_pointer_cast(theFeature->data()->attribute(theAttribute)); + boost::shared_ptr aPoint = boost::dynamic_pointer_cast( + aFeature->data()->attribute(theAttribute)); - PartSet_Tools::setConstraints(aPreviewOp->sketch(), theFeature, theAttribute, - aPoint->x(), aPoint->y()); + PartSet_Tools::setConstraints(aPreviewOp->sketch(), aFeature, theAttribute, aPoint->x(), + aPoint->y()); } /*bool PartSet_Module::isFeatureEnabled(const QString& theCmdId) const -{ - XGUI_OperationMgr* aOpMgr = myWorkshop->operationMgr(); - XGUI_ActionsMgr* aActMgr = myWorkshop->actionsMgr(); - - ModuleBase_Operation* aOperation = aOpMgr->currentOperation(); - if (!aOperation) - return !aActMgr->isNested(theCmdId); - - PartSet_OperationFeatureEdit* aSketchEdtOp = dynamic_cast(aOperation); - if (aSketchEdtOp) { - QStringList aConstraintList; - aConstraintList<<"SketchConstraintDistance"<<"SketchConstraintLength" - <<"SketchConstraintRadius"<<"SketchConstraintParallel"<<"SketchConstraintPerpendicular"; - return aConstraintList.contains(theCmdId); - } - QStringList aList = aActMgr->nestedCommands(aOperation->id()); - return aList.contains(theCmdId); -}*/ - -QWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* theParent, - Config_WidgetAPI* theWidgetApi, QList& theModelWidgets) + { + XGUI_OperationMgr* aOpMgr = myWorkshop->operationMgr(); + XGUI_ActionsMgr* aActMgr = myWorkshop->actionsMgr(); + + ModuleBase_Operation* aOperation = aOpMgr->currentOperation(); + if (!aOperation) + return !aActMgr->isNested(theCmdId); + + PartSet_OperationFeatureEdit* aSketchEdtOp = dynamic_cast(aOperation); + if (aSketchEdtOp) { + QStringList aConstraintList; + aConstraintList<<"SketchConstraintDistance"<<"SketchConstraintLength" + <<"SketchConstraintRadius"<<"SketchConstraintParallel"<<"SketchConstraintPerpendicular"; + return aConstraintList.contains(theCmdId); + } + QStringList aList = aActMgr->nestedCommands(aOperation->id()); + return aList.contains(theCmdId); + }*/ + +QWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* theParent, + Config_WidgetAPI* theWidgetApi, + QList& theModelWidgets) { if (theType == "sketch-start-label") { - PartSet_WidgetSketchLabel* aWgt = new PartSet_WidgetSketchLabel(theParent, theWidgetApi); + PartSet_WidgetSketchLabel* aWgt = new PartSet_WidgetSketchLabel(theParent, theWidgetApi, ""); aWgt->setOperationsMgr(myWorkshop->operationMgr()); theModelWidgets.append(aWgt); return aWgt->getControl();