]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
EDF 2281: Added the possibility to choose the orientation of the divided disk
authorrnc <rnc@opencascade.com>
Mon, 9 Jul 2012 14:28:50 +0000 (14:28 +0000)
committerrnc <rnc@opencascade.com>
Mon, 9 Jul 2012 14:28:50 +0000 (14:28 +0000)
13 files changed:
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.cxx
src/AdvancedGUI/AdvancedGUI_DividedDiskDlg.h
src/GEOMImpl/GEOMImpl_DividedDiskDriver.cxx
src/GEOMImpl/GEOMImpl_DividedDiskDriver.hxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.cxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.hxx
src/GEOMImpl/GEOMImpl_IDividedDisk.hxx
src/GEOM_I/GEOM_IAdvancedOperations_i.cc
src/GEOM_I/GEOM_IAdvancedOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh

index d61328dea8fc418df52060a6b46e2499cdfbcde2..cf3d1bc680c52ba7a0ec476a9841535fefc5ca09 100644 (file)
@@ -3765,7 +3765,7 @@ module GEOM
      *  \param theRatio Relative size of the central square diagonal against the disk diameter
      *  \return New GEOM_Object, containing the created shape.
      */
-    GEOM_Object MakeDividedDisk (in double theR, in double theRatio);
+    GEOM_Object MakeDividedDisk (in double theR, in double theRatio, in short theOrientation);
 
     /*@@ insert new functions before this line @@ do not remove this line @@*/
   };
index e7c538402633c6054b8078d75c4a09be2a6c5f4f..5f1295a4d87484bf271da423bd6d3477182eb6ee 100644 (file)
@@ -617,7 +617,7 @@ module GEOM
                           in double theRF, in boolean theHexMesh,
                           in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
 
-    GEOM_Object MakeDividedDisk (in double theR, in double theRatio);
+    GEOM_Object MakeDividedDisk (in double theR, in double theRatio, in short theOrientation);
 
     /*@@ insert new functions before this line @@ do not remove this line @@*/
  };
index 13d45c6cf483b5c0b5cee80c0aa3a9ef34bb7256..6e34b8e4a424c294aad868166cf0afb3128fb844 100644 (file)
@@ -58,12 +58,21 @@ AdvancedGUI_DividedDiskDlg::AdvancedGUI_DividedDiskDlg (GeometryGUI* theGeometry
   mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
   mainFrame()->RadioButton3->close();
 
-  GroupParams = new DlgRef_1Spin(centralWidget());
+  GroupParams      = new DlgRef_1Spin(centralWidget());
+  GroupParams->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  GroupParams->TextLabel1->setText(tr("GEOM_RADIUS"));
+  
+  GroupOrientation = new DlgRef_3Radio(centralWidget());
+  GroupOrientation->GroupBox1->setTitle(tr("GEOM_ORIENTATION"));
+  GroupOrientation->RadioButton1->setText(tr("GEOM_WPLANE_OXY"));
+  GroupOrientation->RadioButton2->setText(tr("GEOM_WPLANE_OYZ"));
+  GroupOrientation->RadioButton3->setText(tr("GEOM_WPLANE_OZX"));
   //@@ setup dialog box layout here @@//
 
   QVBoxLayout* layout = new QVBoxLayout(centralWidget());
   layout->setMargin(0); layout->setSpacing(6);
   layout->addWidget(GroupParams);
+  layout->addWidget(GroupOrientation);
   /***************************************************************/
 
   setHelpFileName("create_divideddisk_page.html");
@@ -92,6 +101,9 @@ void AdvancedGUI_DividedDiskDlg::Init()
   // min, max, step and decimals for spin boxes & initial values
   initSpinBox(GroupParams->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" );
   GroupParams->SpinBox_DX->setValue(100);
+  
+  GroupOrientation->RadioButton1->setChecked(true);
+  myOrientation = 1;
 
   // Signal/slot connections
   connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
@@ -100,6 +112,10 @@ void AdvancedGUI_DividedDiskDlg::Init()
           this,          SLOT(SetDoubleSpinBoxStep(double)));
 
   connect(GroupParams->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
+  
+  connect(GroupOrientation->RadioButton1, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
+  connect(GroupOrientation->RadioButton2, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
+  connect(GroupOrientation->RadioButton3, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
 
   initName(tr("GEOM_DIVIDEDDISK"));
   
@@ -160,6 +176,34 @@ void AdvancedGUI_DividedDiskDlg::enterEvent (QEvent*)
     ActivateThisDialog();
 }
 
+//=================================================================================
+// function : RadioBittonClicked()
+// purpose  : Radio button management
+//=================================================================================
+void AdvancedGUI_DividedDiskDlg::RadioButtonClicked()
+{ 
+  if (GroupOrientation->RadioButton1->isChecked())
+    myOrientation = 1;
+  else if (GroupOrientation->RadioButton2->isChecked())
+    myOrientation = 2;
+  else if (GroupOrientation->RadioButton3->isChecked())
+    myOrientation = 3;
+   
+//   gp_Pnt theOrigin = gp::Origin();
+//   gp_Dir DirZ = gp::DZ();
+//   gp_Dir DirX = gp::DX();
+//   gp_Dir DirY = gp::DY();
+//   
+//   if (GroupOrientation->RadioButton1->isChecked())
+//     myWPlane = gp_Ax3(theOrigin, DirZ, DirX);
+//   else if (GroupOrientation->RadioButton2->isChecked())
+//     myWPlane = gp_Ax3(theOrigin, DirX, DirY);
+//   else if (GroupOrientation->RadioButton3->isChecked())
+//     myWPlane = gp_Ax3(theOrigin, DirY, DirZ);
+  
+  displayPreview(true);
+}
+
 //=================================================================================
 // function : ValueChangedInSpinBox()
 // purpose  :
@@ -209,7 +253,7 @@ bool AdvancedGUI_DividedDiskDlg::execute (ObjectList& objects)
   CORBA::Double theRatio = 50; //@@ init parameter value from dialog box @@;
 
   // call engine function
-  anObj = anOper->MakeDividedDisk(theR, theRatio);
+  anObj = anOper->MakeDividedDisk(theR, theRatio, myOrientation);
   res = !anObj->_is_nil();
   if (res && !IsPreview())
   {
index 00da289daa40f5ef710f3a59c10995f58f905b87..5d3ff0a02adf3dc75dadf3bf6c26dac868d17151 100644 (file)
@@ -25,6 +25,7 @@
 #include <GEOMBase_Skeleton.h>
 
 class DlgRef_1Spin;
+class DlgRef_3Radio;
 
 //=================================================================================
 // class    : AdvancedGUI_DividedDiskDlg
@@ -50,12 +51,15 @@ private:
 
 private:
   DlgRef_1Spin*                      GroupParams;
+  DlgRef_3Radio*                     GroupOrientation;
+  int                                myOrientation;
 
 private slots:
   void                               ClickOnOk();
   bool                               ClickOnApply();
   void                               ActivateThisDialog();
   void                               ValueChangedInSpinBox();
+  void                               RadioButtonClicked();
   void                               SetDoubleSpinBoxStep( double );
 };
 
index c4869a941d50d642c93f2025229fa76987b36ae5..40872d27bed21f3d86c94e15793c073efa4b7563 100644 (file)
@@ -89,8 +89,9 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con
   if (aType == DIVIDEDDISK_R_RATIO) {
     
     // Getting data
-    double R = aData.GetR();
-    double Ratio = aData.GetRatio();
+    double R           = aData.GetR();
+    double Ratio       = aData.GetRatio();
+    int theOrientation = aData.GetOrientation();
     
     // Geometry
     gp_Dir ZDir(0,0,1);
@@ -218,8 +219,7 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con
       aBuilder.Add(S, F1);
       aBuilder.Add(S, F2);
       aBuilder.Add(S, F3);
-      
-      
+           
       // rotation
       V1=V1_60;
       V2=V2_60;
@@ -238,7 +238,7 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con
       E8=E9;         
     }
     
-    aShape = S;
+    aShape = TransformShape(S, theOrientation);   
   }
   else {
     // other construction modes here
@@ -253,6 +253,47 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con
   return 1;
 }
 
+//=======================================================================
+//function :  TrasformShape(int theOrientation)
+//purpose  :  Perform shape transformation accordingly with specified
+//            orientation
+//=======================================================================
+TopoDS_Shape GEOMImpl_DividedDiskDriver::TransformShape(TopoDS_Shape aShape, int theOrientation) const
+{
+  gp_Dir N, Vx;
+  gp_Pnt theOrigin = gp::Origin();
+  
+  switch(theOrientation)
+  {
+    case 1:
+    {
+      N = gp::DZ();
+      Vx = gp::DX();
+      break;
+    }
+    case 2:
+    {
+      N = gp::DX();
+      Vx = gp::DY();
+      break;
+    }
+    case 3:
+    {
+      N = gp::DY();
+      Vx = gp::DZ();
+      break;
+    }
+  }
+    
+  gp_Ax3 aWPlane = gp_Ax3(theOrigin, N, Vx);
+  
+  gp_Trsf aTrans;
+  aTrans.SetTransformation(aWPlane);
+  aTrans.Invert();
+  BRepBuilderAPI_Transform aTransformation (aShape, aTrans, Standard_False);
+  return aTransformation.Shape();
+}
+
 //=======================================================================
 //function :  GEOMImpl_DividedDiskDriver_Type_
 //purpose  :
index 9ce52f7ed4b96acc3bf3cdc3e851034bedebe4cc..b094969f6fcff306a119d04a7aa951fef0a33049 100644 (file)
@@ -26,6 +26,7 @@
 
 class Handle_Standard_Type;
 class GEOMImpl_DividedDiskDriver;
+class TopoDS_Shape;
 
 Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOMImpl_DividedDiskDriver);
 
@@ -116,6 +117,9 @@ public:
   {
     return (STANDARD_TYPE(GEOMImpl_DividedDiskDriver) == AType || TFunction_Driver::IsKind(AType));
   } 
+  
+private:
+  TopoDS_Shape TransformShape(TopoDS_Shape aShape, int theOrientation) const;
 };
 
 #endif // _GEOMImpl_DividedDiskDriver_HXX
index 4f388aac2763e7df557c2bcd1451562f5ed5e97d..97b56f1c46ddc16e1f56ff26947b51e011e92456 100644 (file)
@@ -2244,7 +2244,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
  *  \return New GEOM_Object, containing the created shape.
  */
 //=============================================================================
-Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR, double theRatio)
+Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR, double theRatio, int theOrientation)
 {
   SetErrorCode(KO);
 
@@ -2262,6 +2262,7 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR,
 
   aData.SetR(theR);
   aData.SetRatio(theRatio);
+  aData.SetOrientation(theOrientation);
 
   //Compute the resulting value
   try {
@@ -2280,7 +2281,7 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR,
   }
 
   //Make a Python command
-  GEOM::TPythonDump(aFunction) << aShape << " = geompy.MakeDividedDisk(" << theR << ", " << theRatio << ")";
+  GEOM::TPythonDump(aFunction) << aShape << " = geompy.MakeDividedDisk(" << theR << ", " << theOrientation << ")";
 
   SetErrorCode(OK);
 
index 627c2bef46faaf850395cf2f96f13c4941200bf0..488301b4e7a3846196caca4702c05022ebbab62c 100644 (file)
@@ -109,7 +109,7 @@ public:
                                                    Handle(GEOM_Object) P1 = 0,
                                                    Handle(GEOM_Object) P2 = 0,
                                                    Handle(GEOM_Object) P3 = 0);
-  Standard_EXPORT Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio);
+  Standard_EXPORT Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio, int theOrientation);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 };
 #endif
index 96eb5eec7cac1490d1a43c2e9d9d3fd178d98484..0f6b0205ae3ff94623620581f65875b04106f2b4 100644 (file)
@@ -24,8 +24,9 @@
 
 #include "GEOM_Function.hxx"
 
-#define DIVIDEDDISK_ARG_R   1
-#define DIVIDEDDISK_ARG_RATIO   2
+#define DIVIDEDDISK_ARG_R      1
+#define DIVIDEDDISK_ARG_RATIO  2
+#define DIVIDEDDISK_ARG_ORIENT 3
 
 class GEOMImpl_IDividedDisk
 {
@@ -37,6 +38,9 @@ public:
 
   void SetRatio(double theRatio) { _func->SetReal(DIVIDEDDISK_ARG_RATIO, theRatio); }
   double GetRatio() { return _func->GetReal(DIVIDEDDISK_ARG_RATIO); }
+  
+  void SetOrientation(int theOrientation) { _func->SetInteger(DIVIDEDDISK_ARG_ORIENT, theOrientation); }
+  double GetOrientation() { return _func->GetInteger(DIVIDEDDISK_ARG_ORIENT); }
 
 private:
   Handle(GEOM_Function) _func;
index 4f932f1574b67a42c1f7d5cc9ba04d03a32d2902..1bd4fc05aa94a61868d7f1cecd36f8593d15a098 100644 (file)
@@ -330,7 +330,7 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFilletWithPosition (CO
  *  \return New GEOM_Object, containing the created shape.
  */
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio)
+GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio, CORBA::Short theOrientation)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -338,7 +338,7 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double
   GetOperations()->SetNotDone();
 
   //Create the DividedDisk
-  Handle(GEOM_Object) anObject = GetOperations()->MakeDividedDisk(theR, theRatio);
+  Handle(GEOM_Object) anObject = GetOperations()->MakeDividedDisk(theR, theRatio, theOrientation);
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
index 52197095f9dafc4cc344e7a5aad00ad5f4a02357..acf0e205fd2d0901221f40de93a9e5535814cc91 100644 (file)
@@ -63,7 +63,7 @@ class GEOM_I_EXPORT GEOM_IAdvancedOperations_i :
                                                    CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, 
                                                    CORBA::Double theRF, CORBA::Boolean theHexMesh,
                                                    GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
-  GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio);
+  GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio, CORBA::Short theOrientation);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 
   ::GEOMImpl_IAdvancedOperations* GetOperations()
index cac250787b0da71c9678bfe55f1c091feadab70d..817b79ded00e08fa9a8229315f83a3dd99ea98d4 100644 (file)
@@ -3405,12 +3405,12 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::MakePipeTShapeFilletWithPosition
 //=============================================================================
 //  MakeDividedDisk
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio)
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio, CORBA::Short theOrientation)
 {
   beginService( " GEOM_Superv_i::MakeDividedDisk" );
   MESSAGE("GEOM_Superv_i::MakeDividedDisk");
   getAdvancedOp();
-  GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeDividedDisk(theR, theRatio);
+  GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeDividedDisk(theR, theRatio, theOrientation);
   endService( " GEOM_Superv_i::MakeDividedDisk" );
   return anObj;
 }
index 3f968b9611e897412455b7b0faffe07ff56a4cff..0278160a66773991abed2e6de64c677421aad5d4 100644 (file)
@@ -706,7 +706,7 @@ public:
                                                         CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
                                                         CORBA::Double theRF, CORBA::Boolean theHexMesh,
                                                         GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
-  GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio);
+  GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio,CORBA::Short theOrientation );
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 
 private: