]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Implementation of polyline dialog (not complete)
authorskv <skv@opencascade.com>
Tue, 30 Sep 2014 15:47:11 +0000 (19:47 +0400)
committerskv <skv@opencascade.com>
Tue, 30 Sep 2014 15:47:11 +0000 (19:47 +0400)
src/CurveCreator/CurveCreator_Widget.cxx
src/CurveCreator/CurveCreator_Widget.h
src/EntityGUI/EntityGUI_PolylineDlg.cxx
src/EntityGUI/EntityGUI_PolylineDlg.h

index eeb5f799b8d3041ed613ba7f2f356909d05522e5..b90e1fe19edf2c2df8f442be814e20fb7eca0621 100644 (file)
@@ -604,14 +604,22 @@ void CurveCreator_Widget::onModifySection()
   if( myCurve->getSectionName(mySection) != aName.toStdString() )
     myCurve->setSectionName( mySection , aName.toStdString() );
 
-  if( myCurve->getSectionType(mySection) != aSectType )
+  bool isGeomModified = false;
+
+  if( myCurve->getSectionType(mySection) != aSectType ) {
     myCurve->setSectionType( mySection, aSectType );
+    isGeomModified = true;
+  }
 
-  if( myCurve->isClosed(mySection) != isClosed )
+  if( myCurve->isClosed(mySection) != isClosed ) {
     myCurve->setClosed( mySection, isClosed );
+    isGeomModified = true;
+  }
   mySectionView->sectionChanged(mySection);
   updateUndoRedo();
   onCancelSection();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onJoin()
@@ -645,6 +653,8 @@ void CurveCreator_Widget::onJoin()
   if( aNewSectSize != aMainSectSize )
     mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );*/
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onRemove()
@@ -673,6 +683,8 @@ void CurveCreator_Widget::onClearAll()
   mySectionView->reset();
   updateActionsStates();
   updateUndoRedo();
+  
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onJoinAll()
@@ -690,6 +702,8 @@ void CurveCreator_Widget::onJoinAll()
   mySectionView->reset();
   updateActionsStates();
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onUndoSettings()
@@ -708,6 +722,8 @@ void CurveCreator_Widget::onSetSpline()
     mySectionView->sectionChanged(aSelSections[i]);
   }
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onSetPolyline()
@@ -721,6 +737,8 @@ void CurveCreator_Widget::onSetPolyline()
     mySectionView->sectionChanged( aSelSections[i] );
   }
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onCloseSections()
@@ -734,6 +752,8 @@ void CurveCreator_Widget::onCloseSections()
     mySectionView->sectionChanged(aSelSections[i]);
   }
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onUncloseSections()
@@ -747,29 +767,35 @@ void CurveCreator_Widget::onUncloseSections()
     mySectionView->sectionChanged(aSelSections[i]);
   }
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onUndo()
 {
-    if( !myCurve )
-      return;
+  if( !myCurve )
+    return;
+
+  CurveCreator_ICurve::SectionToPointList aPoints;
+  startCurveModification( aPoints, false );
+  myCurve->undo();
+  finishCurveModification();
+  mySectionView->reset();
 
-    CurveCreator_ICurve::SectionToPointList aPoints;
-    startCurveModification( aPoints, false );
-    myCurve->undo();
-    finishCurveModification();
-    mySectionView->reset();
+  emit curveModified();
 }
 
 void CurveCreator_Widget::onRedo()
 {
-    if( !myCurve )
-      return;
-    CurveCreator_ICurve::SectionToPointList aPoints;
-    startCurveModification( aPoints, false );
-    myCurve->redo();
-    finishCurveModification();
-    mySectionView->reset();
+  if( !myCurve )
+    return;
+  CurveCreator_ICurve::SectionToPointList aPoints;
+  startCurveModification( aPoints, false );
+  myCurve->redo();
+  finishCurveModification();
+  mySectionView->reset();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::updateUndoRedo()
@@ -1075,6 +1101,8 @@ void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEven
   // updates the input panel table to show the selected point coordinates
   updateLocalPointView();
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 /**
@@ -1142,6 +1170,8 @@ void CurveCreator_Widget::onCellChanged( int theRow, int theColumn )
   myCurve->setPoint( aCurrSect, aPntIndex, aChangedPos );
 
   finishCurveModification( aSelPoints );
+
+  emit curveModified();
 }
 
 /**
@@ -1159,6 +1189,8 @@ void CurveCreator_Widget::removeSection()
   }
   mySectionView->clearSelection();
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 /**
@@ -1176,6 +1208,8 @@ void CurveCreator_Widget::removePoint()
 
   myCurve->removeSeveralPoints( aPoints );
   finishCurveModification( CurveCreator_ICurve::SectionToPointList() );
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords)
@@ -1191,6 +1225,8 @@ void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords
   mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
   updateActionsStates();
   updateUndoRedo();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
@@ -1257,6 +1293,8 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
   finishCurveModification( aSelPoints );
 
   setSelectedPoints();
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::moveSelectedPoints( const int theXPosition,
@@ -1304,6 +1342,8 @@ void CurveCreator_Widget::moveSelectedPoints( const int theXPosition,
 
   myDragged = true;
   finishCurveModification( myDragPoints );
+
+  emit curveModified();
 }
 
 void CurveCreator_Widget::updateLocalPointView()
index 76c70541542ebb0cb878b25034c33a1b0e3f8849..2baf2f5900b5f8a4d07178e8d51c60653567ad80 100644 (file)
@@ -97,6 +97,7 @@ signals:
   void selectionChanged();
   void subOperationStarted( QWidget*, bool );
   void subOperationFinished( QWidget* );
+  void curveModified();
 
 public slots:
 
index 2205914b24a67ac92699a3897f6e939bdc99f717..ed748631d58ac728fe9dbc51e97ebbd449280691 100644 (file)
@@ -43,10 +43,12 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
         (GeometryGUI* theGeometryGUI, QWidget* parent, bool modal, Qt::WindowFlags fl)
   : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl )
 {
-  QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_VECTOR_2P" ) ) );
+  QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_CC_POLYLINE" ) ) );
+
+  setWindowTitle(tr("POLYLINE_DLG_TITLE"));
 
   /***************************************************************/
-  mainFrame()->GroupConstructors->setTitle(tr("GEOM_VECTOR"));
+  mainFrame()->GroupConstructors->setTitle(tr("POLYLINE_TITLE"));
   mainFrame()->RadioButton1->setIcon(image0);
   mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
   mainFrame()->RadioButton2->close();
@@ -55,7 +57,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
 
   myCurve = new CurveCreator_Curve( CurveCreator::Dim2d );
   myEditorWidget = new CurveCreator_Widget (centralWidget(), myCurve);
-  myAddElementBox = new QGroupBox (tr("ADD_ELEMENT"), centralWidget());
+  myAddElementBox = new QGroupBox (tr("POLYLINE_ADD_SECTION"), centralWidget());
 
   QBoxLayout* anAddElementLayout = new QVBoxLayout( myAddElementBox );
 
@@ -71,7 +73,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
 
   /***************************************************************/
 
-  setHelpFileName( "create_vector_page.html" );
+  setHelpFileName( "create_polyline_page.html" );
 
   /* Initialisations */
   Init();
@@ -92,6 +94,8 @@ EntityGUI_PolylineDlg::~EntityGUI_PolylineDlg()
 //=================================================================================
 void EntityGUI_PolylineDlg::Init()
 {
+  initName(tr("POLYLINE_NAME"));
+
   SalomeApp_Application *anApp        = myGeomGUI->getApp();
   OCCViewer_ViewManager *aViewManager = dynamic_cast<OCCViewer_ViewManager*>
     (anApp->getViewManager(OCCViewer_Viewer::Type(), true));
@@ -102,8 +106,74 @@ void EntityGUI_PolylineDlg::Init()
           this,           SLOT(processStartedSubOperation(QWidget*, bool)));
   connect(myEditorWidget, SIGNAL(subOperationFinished(QWidget*)),
           this,           SLOT(processFinishedSubOperation(QWidget*)));
+  connect(myEditorWidget, SIGNAL(curveModified()),
+          this,           SLOT(onUpdatePreview()));
+  connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
 
   myAddElementBox->hide();
+
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : Clear
+// purpose  :
+//=================================================================================
+void EntityGUI_PolylineDlg::Clear()
+{
+  delete myCurve;
+
+  myCurve = new CurveCreator_Curve( CurveCreator::Dim2d );
+  myEditorWidget->setCurve(myCurve);
+}
+
+//=================================================================================
+// function : createOperation
+// purpose  :
+//=================================================================================
+void EntityGUI_PolylineDlg::GetCurveParams(GEOM::ListOfListOfDouble &theCoords,
+                                           GEOM::string_array       &theNames,
+                                           GEOM::short_array        &theTypes,
+                                           GEOM::ListOfBool         &theCloseds)
+{
+  const int aNbSec = myCurve->getNbSections();
+  int       i;
+  int       j;
+
+  theCoords.length(aNbSec);
+  theNames.length(aNbSec);
+  theTypes.length(aNbSec);
+  theCloseds.length(aNbSec);
+
+  for (i = 0; i < aNbSec; ++i) {
+    // Set coordinates
+    CurveCreator::Coordinates aCoords   = myCurve->getPoints(i);
+    const int                 aNbPoints = aCoords.size();
+
+    theCoords[i].length(aNbPoints);
+
+    for (j = 0; j < aNbPoints; ++j) {
+      theCoords[i][j] = aCoords[j];
+    }
+
+    // Set section type
+    const CurveCreator::SectionType aType = myCurve->getSectionType(i);
+
+    switch (aType) {
+      case CurveCreator::Spline:
+        theTypes[i] = GEOM::Interpolation;
+        break;
+      case CurveCreator::Polyline:
+      default:
+        theTypes[i] = GEOM::Polyline;
+        break;
+    }
+
+    // Set section names and closed flags.
+    theNames[i]   = CORBA::string_dup(myCurve->getSectionName(i).c_str());
+    theCloseds[i] = myCurve->isClosed(i);
+  }
 }
 
 //=================================================================================
@@ -130,14 +200,69 @@ bool EntityGUI_PolylineDlg::isValid( QString& msg )
 //=================================================================================
 bool EntityGUI_PolylineDlg::execute( ObjectList& objects )
 {
+  GEOM::GEOM_ICurvesOperations_var anOper =
+    GEOM::GEOM_ICurvesOperations::_narrow(getOperation());
+
+  // Get the polyline creation parameters.
+  GEOM::ListOfListOfDouble aCoords;
+  GEOM::string_array       aNames;
+  GEOM::short_array        aTypes;
+  GEOM::ListOfBool         aCloseds;
+
+  GetCurveParams(aCoords, aNames, aTypes, aCloseds);
+
+  // Temporary code: get Working Plane.
+  GEOM::GEOM_IBasicOperations_var aBasicOp = getGeomEngine()->GetIBasicOperations( getStudyId() );
+  GEOM::GEOM_Object_var           aWPlane  = aBasicOp->MakeMarker( 0,0,0,
+                                                                   1,0,0,
+                                                                   0,1,0 );
+
+  // Perform operation
+  GEOM::GEOM_Object_var anObj = anOper->MakePolyline2DOnPlane
+    (aCoords, aNames, aTypes, aCloseds, aWPlane);
+
+  if (!anObj->_is_nil()) {
+    objects.push_back(anObj._retn());
+  }
+
   return true;
 }
 
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void EntityGUI_PolylineDlg::ClickOnOk()
+{
+  setIsApplyAndClose( true );
+
+  if (ClickOnApply())
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool EntityGUI_PolylineDlg::ClickOnApply()
+{
+  if (!onAccept())
+    return false;
+
+  initName();
+
+  return true;
+}
+
+//=================================================================================
+// function : processStartedSubOperation
+// purpose  :
+//=================================================================================
 void EntityGUI_PolylineDlg::processStartedSubOperation( QWidget* theWidget, bool theIsEdit )
 {
   myEditorWidget->setEnabled( false );
 
-  myAddElementBox->setTitle( theIsEdit ? tr( "EDIT_ELEMENT" ) : tr( "ADD_ELEMENT" ) );
+  myAddElementBox->setTitle( theIsEdit ? tr( "POLYLINE_EDIT_SECTION" ) : tr( "POLYLINE_ADD_SECTION" ) );
   QBoxLayout* anAddElementLayout = dynamic_cast<QBoxLayout*>( myAddElementBox->layout() );
   anAddElementLayout->addWidget( theWidget );
 
@@ -145,6 +270,11 @@ void EntityGUI_PolylineDlg::processStartedSubOperation( QWidget* theWidget, bool
   myAddElementBox->show();
 }
 
+
+//=================================================================================
+// function : processFinishedSubOperation
+// purpose  :
+//=================================================================================
 void EntityGUI_PolylineDlg::processFinishedSubOperation( QWidget* theWidget )
 {
   myEditorWidget->setEnabled( true );
@@ -156,18 +286,79 @@ void EntityGUI_PolylineDlg::processFinishedSubOperation( QWidget* theWidget )
   myAddElementBox->hide();
 }
 
-/**
- * Redirect the delete action to editor widget
- */
+//=================================================================================
+// function : execute
+// purpose  : Redirect the delete action to editor widget
+//=================================================================================
 void EntityGUI_PolylineDlg::deleteSelected()
 {
   myEditorWidget->removeSelected();
 }
 
-/**
- * Checks whether there are some to delete
- */
+//=================================================================================
+// function : deleteEnabled
+// purpose  : Checks whether there are some to delete
+//=================================================================================
 bool EntityGUI_PolylineDlg::deleteEnabled()
 {
   return myEditorWidget->removeEnabled();
 }
+
+//=================================================================================
+// function : SelectionIntoArgument
+// purpose  : Called when selection is changed
+//=================================================================================
+void EntityGUI_PolylineDlg::SelectionIntoArgument()
+{
+/*
+  GEOM::GeomObjPtr aSelectedObject = getSelected( TopAbs_SHAPE );
+  TopoDS_Shape aShape;
+
+  if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) {
+    if (aShape.ShapeType() == TopAbs_FACE) {
+      QString aName = GEOMBase::GetName( aSelectedObject.get() );
+      myGroup->LineEdit1->setText( aName );
+
+      // clear selection
+      disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+      myGeomGUI->getApp()->selectionMgr()->clearSelected();
+      connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+              this, SLOT(SelectionIntoArgument()));
+
+      myFace = aSelectedObject;
+    }
+  }
+
+  displayPreview(true);
+*/
+}
+
+//=================================================================================
+// function : ActivateThisDialog
+// purpose  :
+//=================================================================================
+void EntityGUI_PolylineDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+void EntityGUI_PolylineDlg::enterEvent (QEvent*)
+{
+  if (!mainFrame()->GroupConstructors->isEnabled())
+    ActivateThisDialog();
+}
+
+//=================================================================================
+// function : onUpdatePreview
+// purpose  : 
+//=================================================================================
+void EntityGUI_PolylineDlg::onUpdatePreview()
+{
+  displayPreview(true);
+}
index 9907be1cd7535b1f654a281eb5c5f2b2cacc7ed4..3de683d651366fffaac831851a8f2373da032b40 100644 (file)
@@ -59,12 +59,40 @@ protected:
        
 private:
 
-  void                               Init();
+  void Init();
+  void Clear();
+  void enterEvent(QEvent *);
+
+  /**
+   * This method converts the curve into curve parameters required to
+   * construct an object using the interface
+   * GEOM_ICurvesOperations::MakePolyline2DOnPlane.
+   *
+   * \param theCurve a curve object, that contains data.
+   *  \param theCoordsList the list of coordinates list. theCoordsList[0]
+   *         is the coordinates list of the first section. theCoordsList[1]
+   *         is for the second section etc. Output parameter.
+   *  \param theNamesList the list of names. The order corresponds to
+   *         theCoordsList. Output parameter.
+   *  \param theTypesList the list of curve types. The order corresponds to
+   *         theCoordsList. Output parameter.
+   *  \param theClosedList the list of Closed flags. The order corresponds to
+   *         theCoordsList. Output parameter.
+   */
+  void GetCurveParams(GEOM::ListOfListOfDouble &theCoords,
+                      GEOM::string_array       &theNames,
+                      GEOM::short_array        &theTypes,
+                      GEOM::ListOfBool         &theCloseds);
 
 protected slots:
 
+  void ClickOnOk();
+  bool ClickOnApply();
   void processStartedSubOperation( QWidget*, bool );
   void processFinishedSubOperation( QWidget* );
+  void SelectionIntoArgument();
+  void ActivateThisDialog();
+  void onUpdatePreview();
 
 private: