+ static Events_ID aModuleEvent = Events_Loop::eventByName("PartSetModuleEvent");
+ Config_PointerMessage aMessage(aModuleEvent, this);
+ aMessage.setPointer(aPartSetOp);
+ Events_Loop::loop()->send(aMessage);
+}
+
+void PartSet_Module::onOperationStarted()
+{
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (aPreviewOp) {
+ visualizePreview(true);
+ connect(aPreviewOp, SIGNAL(viewerProjectionChange(double, double, double)),
+ this, SLOT(onViewerProjectionChange(double, double, double)));
+ }
+}
+
+void PartSet_Module::onOperationStopped(ModuleBase_Operation* theOperation)
+{
+ ModuleBase_PropPanelOperation* anOperation = dynamic_cast<ModuleBase_PropPanelOperation*>(theOperation);
+ if (!anOperation)
+ return;
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (aPreviewOp)
+ visualizePreview(false);
+}
+
+void PartSet_Module::onViewSelectionChanged()
+{
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (aPreviewOp) {
+ XGUI_SelectionMgr* aSelector = myWorkshop->selector();
+ if (aSelector) {
+ NCollection_List<TopoDS_Shape> aList;
+ aSelector->selectedShapes(aList);
+ aPreviewOp->setSelectedShapes(aList);
+ }
+ }
+}
+
+void PartSet_Module::onViewerProjectionChange(double theX, double theY, double theZ)
+{
+ XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
+ if (aViewer) {
+ aViewer->setViewProjection(theX, theY, theZ);
+ }
+}
+
+void PartSet_Module::visualizePreview(bool isDisplay)
+{
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+ if (!anOperation)
+ return;
+
+ PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+ if (!aPreviewOp)
+ return;
+
+ if (isDisplay) {
+ boost::shared_ptr<GeomAPI_Shape> aPreview = aPreviewOp->preview();
+ if (aPreview)
+ myWorkshop->displayer()->LocalSelection(anOperation->feature(),
+ aPreview->impl<TopoDS_Shape>(), aPreviewOp->getSelectionMode());
+ }
+ else {
+ myWorkshop->displayer()->GlobalSelection(false);
+ myWorkshop->displayer()->Erase(anOperation->feature());
+ }