]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #369: support of local CS
authorasl <asl@opencascade.com>
Mon, 11 Aug 2014 07:37:52 +0000 (07:37 +0000)
committerasl <asl@opencascade.com>
Mon, 11 Aug 2014 07:37:52 +0000 (07:37 +0000)
src/HYDROData/HYDROData_Document.cxx
src/HYDROData/HYDROData_Document.h
src/HYDROGUI/CMakeLists.txt
src/HYDROGUI/HYDROGUI_Module.cxx
src/HYDROGUI/HYDROGUI_Operations.cxx
src/HYDROGUI/HYDROGUI_Operations.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index eea22c6d30248c4d0de805a4093d64225e449ac2..788b5527167bc581efa2e746066d583b81e867d8 100644 (file)
@@ -5,9 +5,13 @@
 #include <HYDROData_Tool.h>
 
 #include <TDataStd_Integer.hxx>
+#include <TDataXtd_Position.hxx>
 
 #include <TDF_Delta.hxx>
 
+#include <gp_Pnt2d.hxx>
+#include <gp_Pnt.hxx>
+
 #include <QFile>
 #include <QStringList>
 #include <QTextStream>
@@ -23,6 +27,8 @@ static const int TAG_PROPS = 1; // general properties tag
 static const int TAG_PROPS_NEW_ID = 1; // general properties: tag for storage of the new object ID
 static const int TAG_OBJECTS = 2; // tag of the objects sub-tree
 static const int TAG_HISTORY = 3; // tag of the history sub-tree (Root for History)
+static const int TAG_LOCAL_CS = 4; // tag of local coordinate system information
+static const gp_Pnt2d DEFAULT_LOCAL_CS( 0, 0 );
 
 using namespace std;
 
@@ -661,3 +667,34 @@ TDF_Label HYDROData_Document::LabelOfObjects()
 {
   return myDoc->Main().FindChild(TAG_OBJECTS);
 }
+
+TDF_Label HYDROData_Document::LabelOfLocalCS() const
+{
+  return myDoc->Main().FindChild(TAG_LOCAL_CS);
+}
+
+gp_Pnt2d HYDROData_Document::GetLocalCS() const
+{
+  TDF_Label aLocalCSLab = LabelOfLocalCS();
+
+  Handle( TDataXtd_Position ) aLocalCS;
+  if( aLocalCSLab.FindAttribute( TDataXtd_Position::GetID(), aLocalCS ) )
+  {
+    gp_Pnt aLocalCS3d = aLocalCS->GetPosition();
+    return gp_Pnt2d( aLocalCS3d.X(), aLocalCS3d.Y() );
+  }
+  else
+    return DEFAULT_LOCAL_CS;
+}
+
+void HYDROData_Document::SetLocalCS( const gp_Pnt2d& theLocalCS )
+{
+  TDF_Label aLocalCSLab = LabelOfLocalCS();
+
+  Handle( TDataXtd_Position ) aLocalCS;
+  if( !aLocalCSLab.FindAttribute( TDataXtd_Position::GetID(), aLocalCS ) )
+    aLocalCS = TDataXtd_Position::Set( aLocalCSLab );
+
+  gp_Pnt aLocalCS3d( theLocalCS.X(), theLocalCS.Y(), 0 );
+  aLocalCS->SetPosition( aLocalCS3d );
+}
index ffdaf981451ad7b33a5fd50d030a3f3c1a8e2346..2ed1acd7b94a4b9020d0d3e3149981e61c5aed98 100644 (file)
@@ -7,6 +7,7 @@
 #include <TDocStd_Document.hxx>
 
 class QFile;
+class gp_Pnt2d;
 
 /**
  * Errors that could appear on document open/save actions.
@@ -123,6 +124,8 @@ public:
   //! Removes the order of objects presentation.
   HYDRODATA_EXPORT void RemoveObjectsLayerOrder();
 
+  HYDRODATA_EXPORT gp_Pnt2d GetLocalCS() const;
+  HYDRODATA_EXPORT void SetLocalCS( const gp_Pnt2d& );
 
 public:
 
@@ -194,6 +197,8 @@ protected:
   //! Returns the label where the objects are located (used by Iterator)
   HYDRODATA_EXPORT TDF_Label LabelOfObjects();
 
+  HYDRODATA_EXPORT TDF_Label LabelOfLocalCS() const;
+
 private:
   
   // Dump header Python part in to file \c theFile
index 212a5153eb76f2e3bf9595bc5da4966291dd575e..26bb74a6e3d5de995f6938181e18882d6ab016a3 100644 (file)
@@ -30,6 +30,8 @@ set(PROJECT_HEADERS
     HYDROGUI_ImportImageDlg.h
     HYDROGUI_ImportImageOp.h
     HYDROGUI_InputPanel.h
+    HYDROGUI_LocalCSDlg.h
+    HYDROGUI_LocalCSOp.h
     HYDROGUI_Module.h
     HYDROGUI_NameValidator.h
     HYDROGUI_ObjSelector.h
@@ -125,6 +127,8 @@ set(PROJECT_SOURCES
     HYDROGUI_ImportImageDlg.cxx
     HYDROGUI_ImportImageOp.cxx
     HYDROGUI_InputPanel.cxx
+    HYDROGUI_LocalCSDlg.cxx
+    HYDROGUI_LocalCSOp.cxx
     HYDROGUI_Module.cxx
     HYDROGUI_NameValidator.cxx
     HYDROGUI_ObjSelector.cxx
index 5e03c1293bc9f618117c01a2533da0bd0b0c711c..aaa13984df975394f8ae313783a7e85f909aae67 100644 (file)
@@ -332,6 +332,18 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
   bool anIsDummyObject3D = false;
   bool anIsGroup = false;
   bool anIsObjectCanBeColored = false;
+  bool isRoot = false;
+
+  SUIT_SelectionMgr* aSelectionMgr = getApp()->selectionMgr();
+  SUIT_DataOwnerPtrList anOwners;
+  aSelectionMgr->selected( anOwners );
+  if( anIsObjectBrowser && anOwners.size()==1 )
+  {
+    QString anEntry = anOwners[0]->keyString();
+    LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( getApp()->activeStudy() );
+    if( aStudy )
+      isRoot = aStudy->isComponent( anEntry );
+  }
 
   // Check the selected GEOM objects (take into account the Object Browser only)
   if ( anIsObjectBrowser ) {
@@ -668,6 +680,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     theMenu->addSeparator();
     theMenu->addAction( action( CopyViewerPositionId ) );
   }
+
+  if( isRoot )
+    theMenu->addAction( action( EditLocalCSId ) );
 }
 
 void HYDROGUI_Module::update( const int flags )
index a2d1f3f6111657421bb743793bbb90963e2c1818..8c0eb523701762af6cc5f2f476235e6d82be97c7 100644 (file)
@@ -56,6 +56,7 @@
 #include "HYDROGUI_BathymetryBoundsOp.h"
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_ZLevelsOp.h"
+#include "HYDROGUI_LocalCSOp.h"
 
 #include <HYDROData_Document.h>
 #include <HYDROData_Obstacle.h>
@@ -172,6 +173,7 @@ void HYDROGUI_Module::createActions()
 
   createAction( SetColorId, "COLOR" );
   createAction( SetZLevelId, "ZLEVEL" );
+  createAction( EditLocalCSId, "EDIT_LOCAL_CS" );
 
   createAction( ShowId, "SHOW" );
   createAction( ShowOnlyId, "SHOW_ONLY" );
@@ -200,6 +202,7 @@ void HYDROGUI_Module::createMenus()
   createMenu( ImportBathymetryId, aHydroId, -1, -1 );
   createMenu( CreatePolylineId, aHydroId, -1, -1 );
   createMenu( CreatePolyline3DId, aHydroId, -1, -1 );
+  createMenu( EditLocalCSId, aHydroId, -1, -1 );
 
   int aNewProfileId = createMenu( tr( "MEN_DESK_PROFILE" ), aHydroId, -1 );
   createMenu( CreateProfileId, aNewProfileId, -1, -1 );
@@ -499,6 +502,9 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
   case SetZLevelId:
     anOp = new HYDROGUI_ZLevelsOp( aModule );
     break;
+  case EditLocalCSId:
+    anOp = new HYDROGUI_LocalCSOp( aModule );
+    break;
   case ShowId:
   case ShowOnlyId:
   case ShowAllId:
index a03a34d8748ae41347c6afa34ecae364eaf99756..d307d7a79aa485d9a51a980eb8cfdf6a6dd969a1 100644 (file)
@@ -105,6 +105,7 @@ enum OperationId
 
   SetColorId,
   SetZLevelId,
+  EditLocalCSId,
 
 };
 
index 4dbe13fbc5298a279bffa351e91dae13d44d2c45..781e984bd1a7b65408c51c165a1187a6451ead2f 100644 (file)
@@ -830,6 +830,10 @@ Would you like to remove all references from the image?</translation>
       <source>DSK_ZLEVEL</source>
       <translation>Change layer order</translation>
     </message>
+    <message>
+      <source>DSK_EDIT_LOCAL_CS</source>
+      <translation>Change local CS</translation>
+    </message>
     <message>
       <source>MEN_CREATE_CALCULATION</source>
       <translation>Create calculation case</translation>
@@ -1078,6 +1082,10 @@ Would you like to remove all references from the image?</translation>
       <source>MEN_ZLEVEL</source>
       <translation>Change layer order</translation>
     </message>
+    <message>
+      <source>MEN_EDIT_LOCAL_CS</source>
+      <translation>Change local CS</translation>
+    </message>
     <message>
       <source>STB_CREATE_CALCULATION</source>
       <translation>Create calculation case</translation>
@@ -1298,6 +1306,10 @@ Would you like to remove all references from the image?</translation>
       <source>STB_ZLEVEL</source>
       <translation>Change layer order</translation>
     </message>
+    <message>
+      <source>STB_EDIT_LOCAL_CS</source>
+      <translation>Change local CS</translation>
+    </message>
   </context>
   
   <context>
@@ -1620,6 +1632,14 @@ Would you like to remove all references from the image?</translation>
     </message>
   </context>
 
+  <context>
+    <name>HYDROGUI_LocalCSOp</name>
+    <message>
+      <source>EDIT_LOCAL_CS</source>
+      <translation>Local CS transformation</translation>
+    </message>
+  </context>
+
   <context>
     <name>HYDROGUI_ImportGeomObjectOp</name>
     <message>