Salome HOME
Mantis issue 0021772: EDF 2336 GEOM: Non valid face created from two circles
[modules/geom.git] / src / EntityGUI / EntityGUI_3DSketcherDlg.h
index af81a199d13259968db0b15291c38b5670ee635c..893bbe83ed7e62c8053e3c137106a8790ce3575e 100755 (executable)
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 // GEOM GEOMGUI : GUI for Geometry component
 // File   : EntityGUI_3DSketcherDlg.h
 // Author : DMV, OCN
-//
+
 #ifndef ENTITYGUI_3DSKETCHERDLG_H
 #define ENTITYGUI_3DSKETCHERDLG_H
 
 class QButtonGroup;
 class QDoubleSpinBox;
 class EntityGUI_3Spin;
+class EntityGUI_Type;
 class EntityGUI_Angles;
 class EntityGUI_Controls;
-class DlgRef_3Radio;
 class SOCC_Prs;
+class gp_Dir;
 
 #include <AIS_ListOfInteractive.hxx>
+#include <AIS_AngleDimension.hxx>
+#include <AIS_LengthDimension.hxx>
 
 #ifndef COORD_MIN
 #  define COORD_MIN -1e+15
@@ -53,14 +55,24 @@ class EntityGUI_3DSketcherDlg : public GEOMBase_Skeleton
 
   struct XYZ
   {
-    XYZ() { x = y = z = 0.0; xt = yt = zt = "0.0"; }
-    double  x,  y,  z;
-    QString xt, yt, zt;
+    XYZ() { x = y = z = 0.0; command = params = ""; L=A=0; }
+    double  x,  y,  z; // for preview only
+    int L, A;          // for preview only
+    QString command;
+    QString params;
+  };
+  
+  struct prsType
+  {
+    prsType(){L=A=0;}
+    int L;
+    int A;
   };
+  
   typedef QList<XYZ> XYZList;
 
 public:
-  EntityGUI_3DSketcherDlg( GeometryGUI*, QWidget* = 0, bool = false, Qt::WindowFlags = 0, const double = 2. );
+  EntityGUI_3DSketcherDlg (GeometryGUI*, QWidget* = 0, bool = false, Qt::WindowFlags = 0, const double = 2.);
   ~EntityGUI_3DSketcherDlg();
 
 protected:
@@ -82,10 +94,30 @@ private:
                                                      const int  = -1,
                                                      const int  = -1);
   
+  Handle(AIS_LengthDimension)        createAISLengthDimension(double theLength, 
+                                                              gp_Pnt P1, 
+                                                              gp_Pnt P2,
+                                                              gp_Dir theNormal);  
+  
+  Handle(AIS_AngleDimension)         createAISAngleDimension(double theAngle, 
+                                                             gp_Pnt P0, 
+                                                             gp_Pnt P1,
+                                                             gp_Pnt P2);
+  
+  void                               displayAngle(double theAngle, 
+                                                  gp_Pnt P0, 
+                                                  gp_Pnt P1,
+                                                  gp_Pnt P2, 
+                                                  bool store = false);
+  
+  void                               displayLength(gp_Pnt P1,
+                                                   gp_Pnt P2,
+                                                   gp_Dir theNormal,
+                                                   bool store = false);
+  
   void                               displayTrihedron( int );
   
-  void                               displayAngle( double, double, double, int, bool store = false );
-  void                               displayLength( double theLength = -1.0, bool store = false );
+  void                               displayDimensions(bool store = false);
 
   bool                               createShapes( GEOM::GEOM_Object_ptr,
                                                    TopoDS_Shape&,
@@ -95,27 +127,29 @@ private:
   XYZ                                getPenultimatePoint() const;
   XYZ                                getCurrentPoint() const;
   
+  gp_Dir                             getPresentationPlane() const;
+  
   std::string                        doubleToString( double );
   
-  void                               removeLastIOFromPrs( int );
-  void                               restoreLastIOToPrs( int );
+  void                               removeLastIOFromPrs();
+  void                               restoreLastIOToPrs();
 
 private:
   XYZList                            myPointsList;
   XYZList                            myRedoList;
   AIS_ListOfInteractive              myLengthIORedoList;
   AIS_ListOfInteractive              myAngleIORedoList;
-  int                                myPrsType;
-  std::list<int>                     myPrsTypeList;
-  std::list<int>                     myPrsTypeRedoList;
+  prsType                            myPrsType;
 
   EntityGUI_3Spin*                   Group3Spin;
   EntityGUI_Angles*                  GroupAngles;
   EntityGUI_Controls*                GroupControls;
-  DlgRef_3Radio*                     GroupType;
-  QButtonGroup*                      myTypeGroup;
+  EntityGUI_Type*                    GroupType;
+  QButtonGroup*                      myTypeGroup1;
+  QButtonGroup*                      myTypeGroup2;
 
   int                                myMode;
+  int                                myCoordType;
   int                                myOrientation;
   bool                               myOK;
   bool                               isLengthVisible;
@@ -132,6 +166,7 @@ private slots:
   bool                               ClickOnApply();
   //  bool                               isSameAsPrevious();
   void                               UpdateButtonsState();
+  void                               UpdatePointCoordinates();
 
   void                               ClickOnUndo();
   void                               ClickOnRedo();