#include <PartSet_Module.h>
#include <PartSet_OperationSketch.h>
+#include <PartSet_OperationSketchLine.h>
+#include <PartSet_Listener.h>
+#include <PartSet_Tools.h>
#include <ModuleBase_Operation.h>
#include <XGUI_Viewer.h>
#include <XGUI_Workshop.h>
#include <XGUI_OperationMgr.h>
+#include <XGUI_ViewWindow.h>
+#include <XGUI_SelectionMgr.h>
+#include <XGUI_ViewPort.h>
#include <Config_PointerMessage.h>
#include <Config_ModuleReader.h>
#include <Events_Loop.h>
#include <Events_Message.h>
+#include <GeomAPI_Shape.h>
+
#include <AIS_ListOfInteractive.hxx>
#include <QObject>
PartSet_Module::PartSet_Module(XGUI_Workshop* theWshop)
{
myWorkshop = theWshop;
+ myListener = new PartSet_Listener(this);
+
XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr();
connect(anOperationMgr, SIGNAL(operationStarted()), this, SLOT(onOperationStarted()));
connect(anOperationMgr, SIGNAL(operationStopped(ModuleBase_Operation*)),
this, SLOT(onOperationStopped(ModuleBase_Operation*)));
- connect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()),
- this, SLOT(onViewSelectionChanged()));
+ if (!myWorkshop->isSalomeMode()) {
+ connect(myWorkshop->mainWindow()->viewer(), SIGNAL(mouseReleased(QPoint)),
+ this, SLOT(onMouseReleased(QPoint)));
+ connect(myWorkshop->mainWindow()->viewer(), SIGNAL(mouseMoved(QPoint)),
+ this, SLOT(onMouseMoved(QPoint)));
+ }
}
PartSet_Module::~PartSet_Module()
theFeature->connectTo(this, SLOT(onFeatureTriggered()));
}
+QStringList PartSet_Module::nestedFeatures(QString)
+{
+ return QStringList();
+}
+
std::string PartSet_Module::featureFile(const std::string& theFeatureId)
{
return myFeaturesInFiles[theFeatureId];
void PartSet_Module::onFeatureTriggered()
{
XGUI_Command* aCmd = dynamic_cast<XGUI_Command*>(sender());
- QString aCmdId = aCmd->id();
- std::string aStdCmdId = aCmdId.toStdString();
+ //Do nothing on uncheck
+ if(aCmd->isCheckable() && !aCmd->isChecked())
+ return;
+ launchOperation(aCmd->id());
+}
+
+void PartSet_Module::launchOperation(const QString& theCmdId)
+{
+ std::string aStdCmdId = theCmdId.toStdString();
std::string aPluginFileName = featureFile(aStdCmdId);
Config_WidgetReader aWdgReader = Config_WidgetReader(aPluginFileName);
aWdgReader.readAll();
std::string aXmlCfg = aWdgReader.featureWidgetCfg(aStdCmdId);
std::string aDescription = aWdgReader.featureDescription(aStdCmdId);
ModuleBase_PropPanelOperation* aPartSetOp;
- if (aCmdId == "Sketch" ) {
- aPartSetOp = new PartSet_OperationSketch(aCmdId, this);
- } else {
- aPartSetOp = new ModuleBase_PropPanelOperation(aCmdId, this);
+ if (theCmdId == "Sketch" ) {
+ aPartSetOp = new PartSet_OperationSketch(theCmdId, this);
+ }
+ else if(theCmdId == "SketchLine") {
+ ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+ boost::shared_ptr<ModelAPI_Feature> aSketchFeature;
+ if (anOperation)
+ aSketchFeature = anOperation->feature();
+ aPartSetOp = new PartSet_OperationSketchLine(theCmdId, this, aSketchFeature);
+ }
+ else {
+ aPartSetOp = new ModuleBase_PropPanelOperation(theCmdId, this);
}
aPartSetOp->setXmlRepresentation(QString::fromStdString(aXmlCfg));
aPartSetOp->setDescription(QString::fromStdString(aDescription));
visualizePreview(false);
}
-void PartSet_Module::onViewSelectionChanged()
+void PartSet_Module::onMouseReleased(QPoint thePoint)
+{
+ 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);
+ XGUI_ViewWindow* aWindow = myWorkshop->mainWindow()->viewer()->activeViewWindow();
+ if (aWindow) {
+ Handle(V3d_View) aView3d = aWindow->viewPort()->getView();
+ if ( !aView3d.IsNull() ) {
+ gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(thePoint, aView3d);
+ aPreviewOp->setSelectedShapes(aList, aPoint);
+ }
+ }
+ }
+ }
+}
+
+void PartSet_Module::onMouseMoved(QPoint thePoint)
{
ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
if (aPreviewOp) {
XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
if (aViewer) {
- NCollection_List<TopoDS_Shape> aList;
- aViewer->getSelectedShapes(aList);
- aPreviewOp->setSelectedShapes(aList);
+ XGUI_ViewWindow* aWindow = aViewer->activeViewWindow();
+ if (aWindow) {
+ Handle(V3d_View) aView3d = aWindow->viewPort()->getView();
+ if ( !aView3d.IsNull() ) {
+ gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(thePoint, aView3d);
+ aPreviewOp->setMouseMovePoint(aPoint);
+ }
+ }
}
}
}
if (!aPreviewOp)
return;
+ XGUI_Displayer* aDisplayer = myWorkshop->displayer();
if (isDisplay) {
- myWorkshop->displayer()->LocalSelection(anOperation->feature(), aPreviewOp->preview(),
- aPreviewOp->getSelectionMode());
+ boost::shared_ptr<GeomAPI_Shape> aPreview = aPreviewOp->preview();
+ if (aPreview) {
+ aDisplayer->LocalSelection(anOperation->feature(),
+ aPreview->impl<TopoDS_Shape>(), aPreviewOp->getSelectionMode());
+ }
}
else {
- myWorkshop->displayer()->GlobalSelection(false);
- myWorkshop->displayer()->Erase(anOperation->feature());
+ aDisplayer->GlobalSelection(false);
+ aDisplayer->Erase(anOperation->feature());
}
}