]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Create/edit polyline operation was updated
authormtn <mtn@opencascade.com>
Wed, 21 Aug 2013 06:48:32 +0000 (06:48 +0000)
committermtn <mtn@opencascade.com>
Wed, 21 Aug 2013 06:48:32 +0000 (06:48 +0000)
src/HYDROGUI/HYDROGUI_InputPanel.cxx
src/HYDROGUI/HYDROGUI_InputPanel.h
src/HYDROGUI/HYDROGUI_PolylineDlg.cxx
src/HYDROGUI/HYDROGUI_PolylineDlg.h
src/HYDROGUI/HYDROGUI_PolylineOp.cxx
src/HYDROGUI/HYDROGUI_PolylineOp.h
src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 78b42edef35c5004797f2c05f61b1244e41b48e7..5857decfd8efd5b27317b8119518f25620e92d9a 100644 (file)
@@ -97,6 +97,12 @@ void HYDROGUI_InputPanel::addWidget( QWidget* theWidget )
   aMainLayout->addWidget( theWidget );
 }
 
+void HYDROGUI_InputPanel::addLayout( QLayout* theLayout )
+{
+  QBoxLayout* aMainLayout = dynamic_cast<QBoxLayout*>( myMainFrame->layout() );
+  aMainLayout->addLayout( theLayout );
+}
+
 void HYDROGUI_InputPanel::addStretch()
 {
   QBoxLayout* aMainLayout = dynamic_cast<QBoxLayout*>( myMainFrame->layout() );
index 6799c2478b44008f01ab41e05b5351461f2434fe..847dfc7282f949755e52f316a365e3d00c7618bd 100644 (file)
@@ -27,6 +27,7 @@
 
 class QFrame;
 class QPushButton;
+class QLayout;
 
 class HYDROGUI_Module;
 
@@ -42,6 +43,7 @@ public:
   virtual ~HYDROGUI_InputPanel();
 
   void addWidget( QWidget* theWidget );
+  void addLayout( QLayout* theLayout );
   void addStretch();
 
   HYDROGUI_Module* module() const;
index 384a0ceecd3ed406331ff8b0b0a32deabc33002b..4cd9b8d624e0989c6d548de3eaeba9267c67582f 100755 (executable)
 #include <CurveCreator_Widget.h>
 #include <CurveCreator_Curve.hxx>
 
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
 
 HYDROGUI_PolylineDlg::HYDROGUI_PolylineDlg( HYDROGUI_Module* theModule, const QString& theTitle )
-: HYDROGUI_InputPanel( theModule, theTitle )
+: HYDROGUI_InputPanel( theModule, theTitle ), myName(NULL)
 {
-  CurveCreator_Curve *aStaticCurve = NULL;
+  QHBoxLayout* aNameLayout = new QHBoxLayout();
+  QLabel* aNameLabel = new QLabel(tr("CURVE_NAME_TLT"), this);
+  aNameLayout->addWidget(aNameLabel);
+  myName = new QLineEdit(this);
+  aNameLayout->addWidget(myName);
 
-  aStaticCurve = new CurveCreator_Curve(CurveCreator::Dim3d);
+  addLayout(aNameLayout);
 
-  CurveCreator_Widget *aWidget =
-    new CurveCreator_Widget( this, aStaticCurve);
+  myEditorWidget =
+    new CurveCreator_Widget( this, NULL);
 
-  addWidget( aWidget );
-  addStretch();
+  addWidget( myEditorWidget );
 }
 
 HYDROGUI_PolylineDlg::~HYDROGUI_PolylineDlg()
@@ -45,4 +51,19 @@ HYDROGUI_PolylineDlg::~HYDROGUI_PolylineDlg()
 
 void HYDROGUI_PolylineDlg::reset()
 {
-}
\ No newline at end of file
+}
+
+void HYDROGUI_PolylineDlg::setPolylineName( const QString& theName )
+{
+  myName->setText(theName);
+}
+
+QString HYDROGUI_PolylineDlg::getPolylineName() const
+{
+  return myName->text();
+}
+
+void HYDROGUI_PolylineDlg::setCurve( CurveCreator_Curve* theCurve )
+{
+  myEditorWidget->setCurve( theCurve );
+}
index 2204c68448a081d955bd976621381e2c66799ed5..ef78c7197a5ef905c9ad83419c91224fdf060118 100755 (executable)
 #include "HYDROGUI_InputPanel.h"
 
 
+class QLineEdit;
+class CurveCreator_Widget;
+class CurveCreator_Curve;
+
 class HYDROGUI_PolylineDlg : public HYDROGUI_InputPanel
 {
   Q_OBJECT
@@ -33,6 +37,11 @@ class HYDROGUI_PolylineDlg : public HYDROGUI_InputPanel
 public:
   HYDROGUI_PolylineDlg( HYDROGUI_Module* theModule, const QString& theTitle );
   virtual ~HYDROGUI_PolylineDlg();
+  
+  void  setPolylineName( const QString& theName );
+  QString getPolylineName() const;
+       
+  void  setCurve( CurveCreator_Curve* theCurve );
 
   void  reset();
 protected slots:
@@ -40,6 +49,9 @@ protected slots:
 signals:
   void                       createPreview( QString );
 
+private:
+  QLineEdit*            myName;
+  CurveCreator_Widget*  myEditorWidget;
 };
 
 #endif
index b8a6982628d80714c7d5ea23b00324176c507847..3e9d21a69e74db413b28bcc0a2b0dae200541f9b 100755 (executable)
 
 #include <HYDROData_Document.h>
 #include <HYDROData_Polyline.h>
+#include <CurveCreator_Curve.hxx>
+#include <CurveCreator_CurveEditor.hxx>
 
 #include <LightApp_Application.h>
 #include <LightApp_UpdateFlags.h>
 
 
 HYDROGUI_PolylineOp::HYDROGUI_PolylineOp( HYDROGUI_Module* theModule, bool theIsEdit )
-: HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit)
+: HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit), myCurve(NULL)
 {
   setName( theIsEdit ? tr( "EDIT_POLYLINE" ) : tr( "CREATE_POLYLINE" ) );
 }
@@ -68,19 +70,38 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags,
   if( aPolylineObj.IsNull() )
     return false;
 
-  if( !myIsEdit ){
-    static int PolylineId = 0;
-    aPolylineObj->SetName( QString( "Polyline_%1" ).arg( QString::number( ++PolylineId ) ) );
+  QString aPolylineName = aPanel->getPolylineName();
+  aPolylineObj->SetName(aPolylineName);
+  int aDimInt = 3;
+  if( myCurve->getDimension() == CurveCreator::Dim2d )
+    aDimInt = 2;
+  aPolylineObj->setDimension(aDimInt);
+  QList<PolylineSection> aPolylineData;
+  for( int i=0 ; i < myCurve->getNbSections() ; i++ ){
+    PolylineSection aSect;
+    aSect.mySectionName = HYDROGUI_Tool::ToExtString( QString::fromLocal8Bit(myCurve->getSectionName(i).c_str()));
+    aSect.myIsClosed = myCurve->isClosed(i);
+    aSect.myType = PolylineSection::SECTION_POLYLINE;
+    if( myCurve->getType(i) == CurveCreator::BSpline ){
+      aSect.myType = PolylineSection::SECTION_SPLINE;
+    }
+    CurveCreator::Coordinates aCoords = myCurve->getPoints(i);
+    for( int j = 0 ; j < aCoords.size() ; j++ ){
+      aSect.myCoords << aCoords.at(j);
+    }
+    aPolylineData << aSect;
   }
+  aPolylineObj->setPolylineData(aPolylineData);
 
+  theUpdateFlags = UF_Model;
   aPolylineObj->SetVisibility( true );
-
-  theUpdateFlags = UF_Model | UF_Viewer;
   return true;
 }
 
 void HYDROGUI_PolylineOp::startOperation()
 {
+  CurveCreator_Curve* anOldCurve = myCurve;
+
   HYDROGUI_Operation::startOperation();
 
   HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel();
@@ -89,5 +110,38 @@ void HYDROGUI_PolylineOp::startOperation()
   myEditedObject = Handle(HYDROData_Polyline)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
   if( !myEditedObject.IsNull() )
   {
+    int anIntDim = myEditedObject->getDimension();
+    CurveCreator::Dimension aDim = CurveCreator::Dim3d;
+    if( anIntDim == 2 )
+      aDim = CurveCreator::Dim2d;
+    myCurve = new CurveCreator_Curve(aDim);
+    QList<PolylineSection> aPolylineData = myEditedObject->getPolylineData();
+
+    CurveCreator_CurveEditor* anEdit = new CurveCreator_CurveEditor(myCurve);
+    for( int i = 0 ; i < aPolylineData.size() ; i++ ){
+      std::string aName = HYDROGUI_Tool::ToQString(aPolylineData[i].mySectionName).toStdString();
+      bool isClosed = aPolylineData[i].myIsClosed;
+      CurveCreator::Type aType = CurveCreator::Polyline;
+      if( aPolylineData[i].myType == PolylineSection::SECTION_SPLINE ){
+        aType = CurveCreator::BSpline;
+      }
+      CurveCreator::Coordinates aCoords;
+      for( int j = 0 ; j < aPolylineData[i].myCoords.size() ; j++ ){
+        aCoords.push_back(aPolylineData[i].myCoords[j]);
+      }
+      anEdit->addSection( aName, aType, isClosed, aCoords );
+    }
+    delete anEdit;
+    aPanel->setPolylineName( myEditedObject->GetName() );
+
   }
-}
\ No newline at end of file
+  else{
+    myCurve = new CurveCreator_Curve(CurveCreator::Dim3d);
+    aPanel->setCurve(myCurve);
+    QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), tr("POLYLINE_PREFIX") );
+    aPanel->setPolylineName(aNewName);
+  }
+  aPanel->setCurve(myCurve);
+  if( anOldCurve )
+    delete anOldCurve;
+}
index c56ec0a4937c8e5085b68422a32033f3156089b7..6ff93f05139866a7678a0bdde73329aef9263f3d 100755 (executable)
@@ -27,6 +27,8 @@
 
 #include <HYDROData_Polyline.h>
 
+class CurveCreator_Curve;
+
 class HYDROGUI_PolylineOp : public HYDROGUI_Operation
 {
   Q_OBJECT
@@ -45,6 +47,7 @@ protected:
 private:
   bool                       myIsEdit;
   Handle(HYDROData_Polyline) myEditedObject;
+  CurveCreator_Curve*        myCurve;
 };
 
 #endif
index da1481e816970dd4ace8dd14b31969c4d4a98725..54a75540eb9eee6d2205f6843e4faf85ceb29c46 100644 (file)
@@ -53,7 +53,7 @@ bool HYDROGUI_PrsPolylineDriver::Update( const Handle(HYDROData_Object)& theObj,
   HYDROGUI_PrsPolyline* aPrsPolyline = (HYDROGUI_PrsPolyline*)thePrs;
 
   aPrsPolyline->setName( aPolyline->GetName() );
-  aPrsPolyline->setPath( aPolyline->painterPathLinear() );
+  aPrsPolyline->setPath( aPolyline->painterPath() );
 
   aPrsPolyline->compute();
 
index 685ee64f129a91fb6b5792ba270cc546d3ff6dfb..4b39d55bf5d5cb00ebbc99f5a5e6da1f6a5f6614 100644 (file)
       <translation>Fuse</translation>
     </message>
   </context>
+  <context>
+    <name>HYDROGUI_PolylineDlg</name>
+    <message>
+      <source>CURVE_NAME_TLT</source>
+      <translation>Name</translation>
+    </message>
+  </context>
 </TS>