From ed25fab026dbb34e7bb7f5198bf54c9c20135f3f Mon Sep 17 00:00:00 2001 From: mtn Date: Wed, 21 Aug 2013 06:48:32 +0000 Subject: [PATCH] Create/edit polyline operation was updated --- src/HYDROGUI/HYDROGUI_InputPanel.cxx | 6 ++ src/HYDROGUI/HYDROGUI_InputPanel.h | 2 + src/HYDROGUI/HYDROGUI_PolylineDlg.cxx | 37 ++++++++--- src/HYDROGUI/HYDROGUI_PolylineDlg.h | 12 ++++ src/HYDROGUI/HYDROGUI_PolylineOp.cxx | 68 ++++++++++++++++++--- src/HYDROGUI/HYDROGUI_PolylineOp.h | 3 + src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx | 2 +- src/HYDROGUI/resources/HYDROGUI_msg_en.ts | 7 +++ 8 files changed, 121 insertions(+), 16 deletions(-) diff --git a/src/HYDROGUI/HYDROGUI_InputPanel.cxx b/src/HYDROGUI/HYDROGUI_InputPanel.cxx index 78b42ede..5857decf 100644 --- a/src/HYDROGUI/HYDROGUI_InputPanel.cxx +++ b/src/HYDROGUI/HYDROGUI_InputPanel.cxx @@ -97,6 +97,12 @@ void HYDROGUI_InputPanel::addWidget( QWidget* theWidget ) aMainLayout->addWidget( theWidget ); } +void HYDROGUI_InputPanel::addLayout( QLayout* theLayout ) +{ + QBoxLayout* aMainLayout = dynamic_cast( myMainFrame->layout() ); + aMainLayout->addLayout( theLayout ); +} + void HYDROGUI_InputPanel::addStretch() { QBoxLayout* aMainLayout = dynamic_cast( myMainFrame->layout() ); diff --git a/src/HYDROGUI/HYDROGUI_InputPanel.h b/src/HYDROGUI/HYDROGUI_InputPanel.h index 6799c247..847dfc72 100644 --- a/src/HYDROGUI/HYDROGUI_InputPanel.h +++ b/src/HYDROGUI/HYDROGUI_InputPanel.h @@ -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; diff --git a/src/HYDROGUI/HYDROGUI_PolylineDlg.cxx b/src/HYDROGUI/HYDROGUI_PolylineDlg.cxx index 384a0cee..4cd9b8d6 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_PolylineDlg.cxx @@ -24,19 +24,25 @@ #include #include +#include +#include +#include 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 ); +} diff --git a/src/HYDROGUI/HYDROGUI_PolylineDlg.h b/src/HYDROGUI/HYDROGUI_PolylineDlg.h index 2204c684..ef78c719 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineDlg.h +++ b/src/HYDROGUI/HYDROGUI_PolylineDlg.h @@ -26,6 +26,10 @@ #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 diff --git a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx index b8a69826..3e9d21a6 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx +++ b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx @@ -26,13 +26,15 @@ #include #include +#include +#include #include #include 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 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 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; +} diff --git a/src/HYDROGUI/HYDROGUI_PolylineOp.h b/src/HYDROGUI/HYDROGUI_PolylineOp.h index c56ec0a4..6ff93f05 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineOp.h +++ b/src/HYDROGUI/HYDROGUI_PolylineOp.h @@ -27,6 +27,8 @@ #include +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 diff --git a/src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx b/src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx index da1481e8..54a75540 100644 --- a/src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx +++ b/src/HYDROGUI/HYDROGUI_PrsPolylineDriver.cxx @@ -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(); diff --git a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts index 685ee64f..4b39d55b 100644 --- a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts +++ b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts @@ -400,4 +400,11 @@ Fuse + + HYDROGUI_PolylineDlg + + CURVE_NAME_TLT + Name + + -- 2.39.2