]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0016757: EDF 546 GEOM : Add Face and Disc in geom primitives
authordmv <dmv@opencascade.com>
Thu, 7 Aug 2008 06:55:53 +0000 (06:55 +0000)
committerdmv <dmv@opencascade.com>
Thu, 7 Aug 2008 06:55:53 +0000 (06:55 +0000)
24 files changed:
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
resources/Makefile.am
resources/disk_r.png [new file with mode: 0644]
resources/face_planehw.png [deleted file]
resources/face_vechw.png [new file with mode: 0644]
src/GEOMGUI/GEOM_images.ts
src/GEOMImpl/GEOMImpl_DiskDriver.cxx
src/GEOMImpl/GEOMImpl_FaceDriver.cxx
src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx
src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx
src/GEOMImpl/GEOMImpl_IDisk.hxx
src/GEOMImpl/GEOMImpl_IFace.hxx
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOM_I/GEOM_I3DPrimOperations_i.cc
src/GEOM_I/GEOM_I3DPrimOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh
src/GEOM_SWIG/GEOM_TestAll.py
src/GEOM_SWIG/geompyDC.py
src/PrimitiveGUI/PrimitiveGUI_DiskDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_DiskDlg.h
src/PrimitiveGUI/PrimitiveGUI_FaceDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_FaceDlg.h

index 6f48f8d5a7e896532e63317bdd068143c8268e02..06cf8084a693611397dcdeacf1af1071f1ecbdae 100644 (file)
@@ -825,20 +825,21 @@ module GEOM
      *  Create a face specified dimensions along OX-OY coordinate axes,
      *  with edges parallel to the coordinate axes.
      *  Center of the face will be at point (0, 0, 0).
-     *  \param theH length of Face edge, parallel to OX axis.
-     *  \param theW lenght of Face edge, patallel to OY axis.
+     *  \param theH Height of the Face.
+     *  \param theW Width of the Face.
+     *  \param theOrientation Orientation belong axis OXY OYZ OZX
      *  \return New GEOM_Object, containing the created face.
      */
-    GEOM_Object MakeFaceHW (in double theH, in double theW);
+    GEOM_Object MakeFaceHW (in double theH, in double theW, in short theOrientation);
     /*!
-     *  Create a face by another plane and two specified sizes,
+     *  Create a face by normale vector or edge and two specified sizes,
      *  vertical (H) and horisontal (W).
-     *  \param theFace defines plane.
+     *  \param theVec defines plane.
      *  \param theH vertical size (height).
      *  \param theW horisontal size (width). 
      *  \return New GEOM_Object, containing the created face.
      */
-    GEOM_Object MakeFacePlaneHW (in GEOM_Object theFace, in double theH, in double theW);
+    GEOM_Object MakeFaceVecHW (in GEOM_Object theVec, in double theH, in double theW);
     /*!
      *  Create a Disk (circular face) with given center, normal vector and radius.
      *  \param thePnt disk center.
@@ -857,6 +858,16 @@ module GEOM
     GEOM_Object MakeDiskThreePnt (in GEOM_Object thePnt1,
                                  in GEOM_Object thePnt2,
                                  in GEOM_Object thePnt3);
+                                 
+    /*!
+     *  Create a disk specified dimensions along OX-OY coordinate axes,
+     *  Center of the disk at point (0, 0, 0).
+     *  \param theR of the Disk.
+     *  \param theOrientation Orientation belong axis OXY OYZ OZX
+     *  \return New GEOM_Object, containing the created disk.
+     */
+    GEOM_Object MakeDiskR (in double theR, in short theOrientation);
+    
     /*!
      *  Create a cylinder with given radius and height at
      *  the origin of coordinate system. Axis of the cylinder
index 2b9cde49fb73ac24a1f645a298fbf85b6b4f02a2..1b01d8dc7a9692db9b5e18d75398b4ee5b387921 100644 (file)
@@ -127,16 +127,19 @@ module GEOM
     GEOM_Object MakeBoxTwoPnt (in GEOM_Object thePnt1, 
                               in GEOM_Object thePnt2) ;
     GEOM_Object MakeFaceHW (in double theH, 
-                           in double theW) ;
-    GEOM_Object MakeFacePlaneHW (in GEOM_Object theFace, 
-                                in double      theH,
-                                in double      theW) ;
+                           in double theW,
+                           in short  theOrientation) ;
+    GEOM_Object MakeFaceVecHW (in GEOM_Object theVec, 
+                              in double      theH,
+                              in double      theW) ;
     GEOM_Object MakeDiskPntVecR (in GEOM_Object thePnt,
                                 in GEOM_Object theVec,
                                 in double      theR) ;
     GEOM_Object MakeDiskThreePnt (in GEOM_Object thePnt1,
                                  in GEOM_Object thePnt2,
                                  in GEOM_Object thePnt3) ;
+    GEOM_Object MakeDiskR (in double theR, 
+                          in short  theOrientation) ;
     GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt,
                                      in GEOM_Object theAxis,
                                      in double      theRadius,
index 18259d1747e0e357dde6495d62ff0d63c2cd8621..de56c79c35f3bf75d9f52c6062c080704453b586 100644 (file)
@@ -75,13 +75,14 @@ delete.png \
 disk.png \
 disk3points.png \
 disk_pntvecr.png \
+disk_r.png \
 display.png \
 displayonly.png \
 displayall.png \
 erase.png \
 eraseall.png \
 face_hw.png \
-face_planehw.png \
+face_vechw.png \
 fillet.png \
 filletall.png \
 filletedge.png \
diff --git a/resources/disk_r.png b/resources/disk_r.png
new file mode 100644 (file)
index 0000000..3d52a2d
Binary files /dev/null and b/resources/disk_r.png differ
diff --git a/resources/face_planehw.png b/resources/face_planehw.png
deleted file mode 100644 (file)
index 86cefba..0000000
Binary files a/resources/face_planehw.png and /dev/null differ
diff --git a/resources/face_vechw.png b/resources/face_vechw.png
new file mode 100644 (file)
index 0000000..d674d17
Binary files /dev/null and b/resources/face_vechw.png differ
index dc0c623349d470cc819d09ba2247b74ae194cc9f..3442ba16025770bd4158daf3de9ba0cc81b86181 100644 (file)
             <source>ICON_DLG_DISK_THREE_POINTS</source>
             <translation>disk3points.png</translation>
         </message>
+       <message>
+            <source>ICON_DLG_DISK_R</source>
+            <translation>disk_r.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_BUILD_EDGE</source>
             <translation>build_edge.png</translation>
@@ -87,8 +91,8 @@
             <translation>face_hw.png</translation>
         </message>
        <message>
-            <source>ICON_DLG_FACE_PLANE_HW</source>
-            <translation>face_planehw.png</translation>
+            <source>ICON_DLG_FACE_VEC_HW</source>
+            <translation>face_vechw.png</translation>
         </message>
         <message>
             <source>ICON_DLG_BUILD_SHELL</source>
index da1ac16c59559ea303b5cc69114dc7645dcd88bb..ce1c45b1b23016fc5b419ae8059a84ffdda15008 100755 (executable)
@@ -128,6 +128,25 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const
       BRepBuilderAPI_MakeFace MF (MW, Standard_False);
       aShape = MF.Shape();
     }  
+  }
+  else if (aType == DISK_R) {
+    int anOrient = aCI.GetOrientation();
+    gp_Pnt aP = gp::Origin();
+    gp_Vec aV;
+    if (anOrient == 1)
+      aV = gp::DZ();
+    else if (anOrient == 2)
+      aV = gp::DX();
+    else if (anOrient == 3)
+      aV = gp::DY();
+
+    gp_Ax2 anAxes (aP, aV);
+    gp_Circ aCirc (anAxes, aCI.GetRadius());
+    TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge();
+    BRepBuilderAPI_MakeWire MW;
+    MW.Add(TopoDS::Edge(aCircle));
+    BRepBuilderAPI_MakeFace MF (MW, Standard_False);
+    aShape = MF.Shape();
   }
    else {
   }
index f4af15da237cff6f0f79270aaec792b2e2e7b544..9d8deefef8bf9fd0f3d7f7b0c3786ccadb96671c 100755 (executable)
@@ -74,21 +74,35 @@ Standard_Integer GEOMImpl_FaceDriver::Execute(TFunction_Logbook& log) const
 
   TopoDS_Shape aShape;
 
-  if (aType == FACE_PLANE_H_W) {
-    Handle(GEOM_Function) aRefPlane = aFI.GetRef1();
-    TopoDS_Shape aShapePlane = aRefPlane->GetValue();
-    double aH = aFI.GetH() / 2.0;
-    double aW = aFI.GetW() / 2.0;
-    gp_Ax3 anAx = GEOMImpl_IMeasureOperations::GetPosition(aShapePlane);
-    gp_Pln aPln (anAx);
-    aShape = BRepBuilderAPI_MakeFace(aPln, -aH, +aH, -aW, +aW).Shape();
+  if (aType == FACE_VEC_H_W) {
+    Handle(GEOM_Function) aRefVec = aFI.GetRef1();
+    TopoDS_Shape aShapeVec = aRefVec->GetValue();
+    if (aShapeVec.ShapeType() == TopAbs_EDGE) {
+      TopoDS_Edge anEdge = TopoDS::Edge(aShapeVec);
+      double aH = aFI.GetH() / 2.0;
+      double aW = aFI.GetW() / 2.0;
+      TopoDS_Vertex V1, V2;
+      TopExp::Vertices(anEdge, V1, V2, Standard_True);
+      gp_Pnt aP (BRep_Tool::Pnt(V1));
+      gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
+      gp_Pln aPlane (aP, aV);
+      aShape = BRepBuilderAPI_MakeFace(aPlane, -aH, +aH, -aW, +aW).Shape();
+    }
   }
   else if (aType == FACE_H_W) {
     double aH = aFI.GetH() / 2.0;
     double aW = aFI.GetW() / 2.0;
     TopoDS_Vertex V1, V2;
+    int anOrient = aFI.GetOrientation();
     gp_Pnt aP = gp::Origin();
-    gp_Vec aV = gp::DZ();
+    gp_Vec aV;
+    if (anOrient == 1)
+      aV = gp::DZ();
+    else if (anOrient == 2)
+      aV = gp::DX();
+    else if (anOrient == 3)
+      aV = gp::DY();
+
     gp_Pln aPlane (aP, aV);
     aShape = BRepBuilderAPI_MakeFace(aPlane, -aH, +aH, -aW, +aW).Shape();
   }
index 8b8e2bf4e364aee09f570a8fc558199381e4b62b..37fafba5c8b176ff26faf52307bc614957ea5950 100644 (file)
@@ -201,7 +201,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeBoxTwoPnt (Handle(GEOM_Objec
  *  MakeFaceHW
  */
 //=============================================================================
-Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double theW)
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double theW, int theOrientation)
 {
   SetErrorCode(KO);
 
@@ -221,6 +221,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double
 
   aFI.SetH(theH);
   aFI.SetW(theW);
+  aFI.SetOrientation(theOrientation);
 
   //Compute the Face
   try {
@@ -240,7 +241,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double
 
   //Make a Python command
   GEOM::TPythonDump(aFunction) << aFace << " = geompy.MakeFaceHW("
-    << theH << ", " << theW << ")";
+    << theH << ", " << theW << ", " << theOrientation << ")";
 
   SetErrorCode(OK);
   return aFace;
@@ -248,21 +249,21 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceHW (double theH, double
 
 //=============================================================================
 /*!
- *  MakeFacePlaneHW
+ *  MakeFaceVecHW
  */
 //=============================================================================
-Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFacePlaneHW (Handle(GEOM_Object) theFace,
-                                                                double theH, double theW)
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFaceVecHW (Handle(GEOM_Object) theVec,
+                                                              double theH, double theW)
 {
   SetErrorCode(KO);
 
-  if (theFace.IsNull()) return NULL;
+  if (theVec.IsNull()) return NULL;
 
   //Add a new Face object
   Handle(GEOM_Object) aFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE);
 
   //Add a new Box function for creation a box relatively to two points
-  Handle(GEOM_Function) aFunction = aFace->AddFunction(GEOMImpl_FaceDriver::GetID(), FACE_PLANE_H_W);
+  Handle(GEOM_Function) aFunction = aFace->AddFunction(GEOMImpl_FaceDriver::GetID(), FACE_VEC_H_W);
   if (aFunction.IsNull()) return NULL;
 
   //Check if the function is set correctly
@@ -270,7 +271,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFacePlaneHW (Handle(GEOM_Obj
 
   GEOMImpl_IFace aFI (aFunction);
 
-  Handle(GEOM_Function) aRefFunction1 = theFace->GetLastFunction();
+  Handle(GEOM_Function) aRefFunction1 = theVec->GetLastFunction();
 
   if (aRefFunction1.IsNull())
     return aFace;
@@ -296,8 +297,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFacePlaneHW (Handle(GEOM_Obj
   }
 
   //Make a Python command
-  GEOM::TPythonDump(aFunction) << aFace << " = geompy.MakeFacePlaneHW("
-    << theFace << ", " << theH << ", " << theW << ")";
+  GEOM::TPythonDump(aFunction) << aFace << " = geompy.MakeFaceVecHW("
+    << theVec << ", " << theH << ", " << theW << ")";
 
   SetErrorCode(OK);
   return aFace;
@@ -421,6 +422,56 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskThreePnt (Handle(GEOM_Ob
   return aDisk;
 }
 
+//=============================================================================
+/*!
+ *  MakeDiskR
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskR (double theR, int theOrientation)
+{
+  SetErrorCode(KO);
+
+  if (theR == 0 ) return NULL;
+
+  //Add a new Disk object
+  Handle(GEOM_Object) aDisk = GetEngine()->AddObject(GetDocID(), GEOM_FACE);
+
+  //Add a new Box function for creation a box relatively to two points
+  Handle(GEOM_Function) aFunction = aDisk->AddFunction(GEOMImpl_DiskDriver::GetID(), DISK_R);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_DiskDriver::GetID()) return aDisk;
+
+  GEOMImpl_IDisk aDI (aFunction);
+
+  aDI.SetRadius(theR);
+  aDI.SetOrientation(theOrientation);
+
+  //Compute the Disk
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Disk driver failed");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  //Make a Python command
+  GEOM::TPythonDump(aFunction) << aDisk << " = geompy.MakeDiskR("
+    << theR << ", " << theOrientation << ")";
+
+  SetErrorCode(OK);
+  return aDisk;
+}
+
 //=============================================================================
 /*!
  *  MakeCylinderRH
index 522fd9b87ad831e06db5a00c994e7903051c32af..ba2a0fbda2422a1e229933d40d74d597c8b19f7a 100644 (file)
@@ -36,15 +36,16 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakeBoxDXDYDZ (double theDX, double theDY, double theDZ);
   Standard_EXPORT Handle(GEOM_Object) MakeBoxTwoPnt (Handle(GEOM_Object) thePnt1,
                                                     Handle(GEOM_Object) thePnt2);
-  Standard_EXPORT Handle(GEOM_Object) MakeFaceHW (double theH, double theW);
-  Standard_EXPORT Handle(GEOM_Object) MakeFacePlaneHW (Handle(GEOM_Object) theFace,
-                                                      double theH, double theW);
+  Standard_EXPORT Handle(GEOM_Object) MakeFaceHW (double theH, double theW, int theOrientation);
+  Standard_EXPORT Handle(GEOM_Object) MakeFaceVecHW (Handle(GEOM_Object) theVec,
+                                                    double theH, double theW);
   Standard_EXPORT Handle(GEOM_Object) MakeDiskThreePnt (Handle(GEOM_Object) thePnt1,
                                                        Handle(GEOM_Object) thePnt2,
                                                        Handle(GEOM_Object) thePnt3);
   Standard_EXPORT Handle(GEOM_Object) MakeDiskPntVecR (Handle(GEOM_Object) thePnt1,
                                                       Handle(GEOM_Object) theVec,
                                                       double theR);
+  Standard_EXPORT Handle(GEOM_Object) MakeDiskR (double theR, int theOrientation);
   Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH       (double theR, double theH);
   Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt,
                                             Handle(GEOM_Object) theVec,
index 79651b5931b7c09a30ddf420d5b879bab6866810..423e99e1ec0ee4c029aa2feca3de13bf92e8266e 100755 (executable)
 
 #include "GEOM_Function.hxx"
 
-#define DISK_ARG_P1  1
-#define DISK_ARG_P2  2
-#define DISK_ARG_P3  3
+#define DISK_ARG_P1      1
+#define DISK_ARG_P2      2
+#define DISK_ARG_P3      3
 
-#define DISK_ARG_CC  4
-#define DISK_ARG_VV  5
-#define DISK_ARG_RR  6
+#define DISK_ARG_CC      4
+#define DISK_ARG_VV      5
+#define DISK_ARG_RR      6
+
+#define DISK_ARG_ORIENT  7
 
 class GEOMImpl_IDisk
 {
@@ -44,6 +46,7 @@ class GEOMImpl_IDisk
   void SetVector(Handle(GEOM_Function) theV) { _func->SetReference(DISK_ARG_VV, theV); }
 
   void SetRadius(double theR) { _func->SetReal(DISK_ARG_RR, theR); }
+  void SetOrientation(double theO) { _func->SetReal(DISK_ARG_ORIENT, theO); }
 
   Handle(GEOM_Function) GetPoint1() { return _func->GetReference(DISK_ARG_P1); }
   Handle(GEOM_Function) GetPoint2() { return _func->GetReference(DISK_ARG_P2); }
@@ -53,6 +56,7 @@ class GEOMImpl_IDisk
   Handle(GEOM_Function) GetVector() { return _func->GetReference(DISK_ARG_VV); }
 
   double GetRadius() { return _func->GetReal(DISK_ARG_RR); }
+  double GetOrientation() { return _func->GetReal(DISK_ARG_ORIENT); }
 
  private:
 
index 55fe2eec940148aced01ef1d23df9fa6ade4d420..dd6e869db34384ed0c1050ac35e1348ee3e3bbf9 100755 (executable)
 
 #include "GEOM_Function.hxx"
 
-#define FACE_ARG_REF1  1
-#define FACE_ARG_REF2  2
-#define FACE_ARG_REF3  3
+#define FACE_ARG_REF1    1
+#define FACE_ARG_ORIENT  2
 
-#define FACE_ARG_PLANE 4
-#define FACE_ARG_H     5
-#define FACE_ARG_W     6
+#define FACE_ARG_PLANE   4
+#define FACE_ARG_H       5
+#define FACE_ARG_W       6
 
 class GEOMImpl_IFace
 {
@@ -39,11 +38,8 @@ class GEOMImpl_IFace
   void SetRef1(Handle(GEOM_Function) theRefPoint1) { _func->SetReference(FACE_ARG_REF1, theRefPoint1); }
   Handle(GEOM_Function) GetRef1() { return _func->GetReference(FACE_ARG_REF1); }
 
-  void SetRef2(Handle(GEOM_Function) theRefPoint2) { _func->SetReference(FACE_ARG_REF2, theRefPoint2); }
-  Handle(GEOM_Function) GetRef2() { return _func->GetReference(FACE_ARG_REF2); }
-
-  void SetRef3(Handle(GEOM_Function) theRefVec) { _func->SetReference(FACE_ARG_REF3, theRefVec); }
-  Handle(GEOM_Function) GetRef3() { return _func->GetReference(FACE_ARG_REF3); }
+  void SetOrientation(int theOrientation) { _func->SetReal(FACE_ARG_ORIENT, theOrientation); }
+  int  GetOrientation() { return _func->GetReal(FACE_ARG_ORIENT); }
 
   void SetH(double theH) { _func->SetReal(FACE_ARG_H, theH); }
   void SetW(double theW) { _func->SetReal(FACE_ARG_W, theW); }
index 2747a1e3445a1451da09ab1f03ac5fb932607b5e..b2f3c58d110ee4db066127a49355e79ac5b666b7 100755 (executable)
 #define BOX_DX_DY_DZ  1
 #define BOX_TWO_PNT   2
 
-#define FACE_PLANE_H_W  1
+#define FACE_VEC_H_W  1
 #define FACE_H_W        2
 
 #define DISK_PNT_VEC_R    1
 #define DISK_THREE_PNT    2
+#define DISK_R            3
 
 #define CYLINDER_R_H         1
 #define CYLINDER_PNT_VEC_R_H 2
index fbf4829f70bdb5ee136a39f44968d40782e3ab00..7bd3eaa69f9aa35984ca7600de5ae05f5d98b97b 100644 (file)
@@ -109,7 +109,8 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
  */
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
-                                                           CORBA::Double theW)
+                                                           CORBA::Double theW,
+                                                           CORBA::Short  theOrientation)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -120,7 +121,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
     return aGEOMObject._retn();
 
   //Create the Face
-  Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW);
+  Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
@@ -129,11 +130,11 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
 
 //=============================================================================
 /*!
- *  MakeFacePlaneHW
+ *  MakeFaceVecHW
  */
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFacePlaneHW
-                                               (GEOM::GEOM_Object_ptr theFace,
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceVecHW
+                                               (GEOM::GEOM_Object_ptr theVec,
                                                CORBA::Double theH,
                                                CORBA::Double theW)
 {
@@ -142,18 +143,18 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFacePlaneHW
   //Set a not done flag
   GetOperations()->SetNotDone();
 
-  if (theFace == NULL || theH == 0 || theW == 0)
+  if (theVec == NULL || theH == 0 || theW == 0)
     return aGEOMObject._retn();
 
   //Get the reference points
   Handle(GEOM_Object) aFace = GetOperations()->GetEngine()->GetObject
-    (theFace->GetStudyID(), theFace->GetEntry());
+    (theVec->GetStudyID(), theVec->GetEntry());
 
   if (aFace.IsNull())
     return aGEOMObject._retn();
 
   //Create the Face
-  Handle(GEOM_Object) anObject = GetOperations()->MakeFacePlaneHW(aFace, theH, theW);
+  Handle(GEOM_Object) anObject = GetOperations()->MakeFaceVecHW(aFace, theH, theW);
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
@@ -228,6 +229,30 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskThreePnt
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeDiskR
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
+                                                          CORBA::Short  theOrientation)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theR == 0)
+    return aGEOMObject._retn();
+
+  //Create the Face
+  Handle(GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeCylinderRH
index e4edeb0cff9220f5e48d6f66526e1b539da1482b..737c61305586373058d9643768cc8bdee68ce82f 100644 (file)
@@ -48,9 +48,10 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
                                       GEOM::GEOM_Object_ptr thePnt2);
                                    
   GEOM::GEOM_Object_ptr MakeFaceHW (CORBA::Double theH,
-                                   CORBA::Double theW);
+                                   CORBA::Double theW,
+                                   CORBA::Short  theOrientation);
 
-  GEOM::GEOM_Object_ptr MakeFacePlaneHW (GEOM::GEOM_Object_ptr theFace,
+  GEOM::GEOM_Object_ptr MakeFaceVecHW (GEOM::GEOM_Object_ptr theFace,
                                         CORBA::Double theH,
                                         CORBA::Double theW);
 
@@ -62,6 +63,9 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
                                          GEOM::GEOM_Object_ptr thePnt2,
                                          GEOM::GEOM_Object_ptr thePnt3);
 
+  GEOM::GEOM_Object_ptr MakeDiskR (CORBA::Double theR,
+                                  CORBA::Short  theOrientation);
+
   GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR,
                                        CORBA::Double theH);
 
index 3a37d31026946348592a9ab6ec89bea1aeb2cb11..6f46ba2eaff8b58931d335a4528dbd8aeef8462e 100644 (file)
@@ -775,28 +775,29 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoxTwoPnt (GEOM::GEOM_Object_ptr thePnt
 //  MakeFaceHW:
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFaceHW (CORBA::Double theH,
-                                                CORBA::Double theW)
+                                                CORBA::Double theW,
+                                                CORBA::Short  theOrientation)
 {
   beginService( " GEOM_Superv_i::MakeFaceHW" );
   MESSAGE("GEOM_Superv_i::MakeFaceHW");
   get3DPrimOp();
-  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeFaceHW(theH, theW);
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeFaceHW(theH, theW, theOrientation);
   endService( " GEOM_Superv_i::MakeFaceHW" );
   return anObj;
 }
 
 //=============================================================================
-//  MakeFaceTwoPlaneHW:
+//  MakeFaceVecHW:
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFacePlaneHW (GEOM::GEOM_Object_ptr theFace
-                                                     CORBA::Double theH,
-                                                     CORBA::Double theW)
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFaceVecHW (GEOM::GEOM_Object_ptr theVec
+                                                   CORBA::Double theH,
+                                                   CORBA::Double theW)
 {
-  beginService( " GEOM_Superv_i::MakeFacePlaneHW" );
-  MESSAGE("GEOM_Superv_i::MakeFacePlaneHW");
+  beginService( " GEOM_Superv_i::MakeFaceVecHW" );
+  MESSAGE("GEOM_Superv_i::MakeFaceVecHW");
   get3DPrimOp();
-  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeFacePlaneHW(theFace, theH, theW);
-  endService( " GEOM_Superv_i::MakeFacePlaneHW" );
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeFaceVecHW(theVec, theH, theW);
+  endService( " GEOM_Superv_i::MakeFaceVecHW" );
   return anObj;
 }
 
@@ -830,6 +831,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDiskThreePnt (GEOM::GEOM_Object_ptr the
   return anObj;
 }
 
+//=============================================================================
+//  MakeDiskR:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDiskR (CORBA::Double theR,
+                                               CORBA::Short  theOrientation)
+{
+  beginService( " GEOM_Superv_i::MakeDiskR" );
+  MESSAGE("GEOM_Superv_i::MakeDiskR");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeDiskR(theR, theOrientation);
+  endService( " GEOM_Superv_i::MakeDiskR" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakeCylinderPntVecRH:
 //=============================================================================
index deea12244866079df5b167ee60bff9c5116714e7..39051115e1b92c9fb9b4b55581751b0f15905f35 100644 (file)
@@ -188,16 +188,19 @@ public:
   GEOM::GEOM_Object_ptr MakeBoxTwoPnt (GEOM::GEOM_Object_ptr thePnt1, 
                                       GEOM::GEOM_Object_ptr thePnt2);
   GEOM::GEOM_Object_ptr MakeFaceHW (CORBA::Double theH,
-                                   CORBA::Double theW);
-  GEOM::GEOM_Object_ptr MakeFacePlaneHW (GEOM::GEOM_Object_ptr theFace, 
-                                        CORBA::Double theH,
-                                        CORBA::Double theW);
+                                   CORBA::Double theW,
+                                   CORBA::Short  theOrientation);
+  GEOM::GEOM_Object_ptr MakeFaceVecHW (GEOM::GEOM_Object_ptr theFace, 
+                                      CORBA::Double theH,
+                                      CORBA::Double theW);
   GEOM::GEOM_Object_ptr MakeDiskPntVecR (GEOM::GEOM_Object_ptr theCenter,
                                         GEOM::GEOM_Object_ptr theVector,
                                         CORBA::Double theR);
   GEOM::GEOM_Object_ptr MakeDiskThreePnt (GEOM::GEOM_Object_ptr thePnt1,
                                          GEOM::GEOM_Object_ptr thePnt2,
                                          GEOM::GEOM_Object_ptr thePnt3);
+  GEOM::GEOM_Object_ptr MakeDiskR (CORBA::Double theR,
+                                  CORBA::Short  theOrientation);
   GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt,
                                              GEOM::GEOM_Object_ptr theAxis,
                                              CORBA::Double theRadius,
index 9760f4ffff7cc29ad39bf5ad8c9058a69edfbc42..49427ae289fc989c6df7adcc69dcac4037c3fb50 100644 (file)
@@ -138,10 +138,11 @@ def TestAll (geompy, math):
   Face1    = geompy.MakeFaceWires([Wire, Sketcher],
                                   WantPlanarFace)    #(List of GEOM_Object_ptr, Boolean)->GEOM_Object_ptr
   Face2    = geompy.MakeFace(Sketcher, WantPlanarFace)
-  Face3    = geompy.MakeFaceHW (100., 200.)          #(2 Doubles)->GEOM_Object_ptr
-  Face4    = geompy.MakeFacePlaneHW (Face, 200., 200.)#(1 GEOM_Object_ptr, 2 Doubles)->GEOM_Object_ptr
+  Face3    = geompy.MakeFaceHW (100., 200., 1)       #(2 Doubles, 1 Int)->GEOM_Object_ptr
+  Face4    = geompy.MakeFaceVecHW (vz, 200., 100.)   #(1 GEOM_Object_ptr, 2 Doubles)->GEOM_Object_ptr
   Disk     = geompy.MakeDiskPntVecR (p0, vz, radius) #(2 GEOM_Object_ptr, 1 Double)->GEOM_Object_ptr
   Disk2    = geompy.MakeDiskThreePnt(p0, p200, pz)   #(3 GEOM_Object_ptr)->GEOM_Object_ptr
+  Disk3    = geompy.MakeDiskR(100., 1)               #(1 Doubles, 1 Int)->GEOM_Object_ptr
   Shell    = geompy.MakeShell([Face, Face1])         #(List of GEOM_Object_ptr)->GEOM_Object_ptr
 
   Prism1   = geompy.MakePrism(Face2, p0, pxyz)       #(3 GEOM_Object_ptr)->GEOM_Object_ptr
@@ -332,6 +333,7 @@ def TestAll (geompy, math):
   id_Face4    = geompy.addToStudy(Face4,    "Face Plane_HW")
   id_Disk     = geompy.addToStudy(Disk,     "Disk PntVecR")
   id_Disk2    = geompy.addToStudy(Disk2,    "Disk Three Points")
+  id_Disk3    = geompy.addToStudy(Disk3,    "Disk OXY Radius")
   id_Shell    = geompy.addToStudy(Shell,    "Shell")
 
   id_p_on_face = geompy.addToStudy(p_on_face, "Vertex on Face (0.1, 0.8)")
index 8b1db20efc29c46434c0f489c7abe17d9496d3a6..907a0ee23e3112d0ac10cd00f89d480076cad968 100644 (file)
@@ -682,29 +682,30 @@ class geompyDC(GEOM._objref_GEOM_Gen):
            
         ## Create a face with specified dimensions along OX-OY coordinate axes,
         #  with edges, parallel to this coordinate axes.
-        #  @param theH length of Face edge, parallel to OX axis.
-        #  @param theW length of Face edge, parallel to OY axis.
+        #  @param theH height of Face.
+        #  @param theW width of Face.
+       #  @param theOrientation orientation belong axis OXY OYZ OZX 
         #  @return New GEOM_Object, containing the created face.
         #
         #  @ref tui_creation_face "Example"
-        def MakeFaceHW(self,theH, theW):
+        def MakeFaceHW(self,theH, theW, theOrientation):
             # Example: see GEOM_TestAll.py
-            anObj = self.PrimOp.MakeFaceHW(theH, theW)
+            anObj = self.PrimOp.MakeFaceHW(theH, theW, theOrientation)
             RaiseIfFailed("MakeFaceHW", self.PrimOp)
             return anObj
 
         ## Create a face from another plane and two sizes,
         #  vertical size and horisontal size.
-        #  @param thePlane Plane in that axis will be create new face.
+        #  @param theVec   Normale vector to the creating face.
         #  @param theH     Height (vertical size).
         #  @param theW     Width (horisontal size).
         #  @return New GEOM_Object, containing the created face.
         #
         #  @ref tui_creation_face "Example"
-        def MakeFacePlaneHW(self, theFace, theH, theW):
+        def MakeFaceVecHW(self, theVec, theH, theW):
             # Example: see GEOM_TestAll.py
-            anObj = self.PrimOp.MakeFacePlaneHW(theFace, theH, theW)
-            RaiseIfFailed("MakeFacePlaneHW", self.PrimOp)
+            anObj = self.PrimOp.MakeFaceVecHW(theVec, theH, theW)
+            RaiseIfFailed("MakeFaceVecHW", self.PrimOp)
             return anObj
 
         ## Create a disk with given center, normal vector and radius.
@@ -731,6 +732,18 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             RaiseIfFailed("MakeDiskThreePnt", self.PrimOp)
             return anObj
 
+        ## Create a disk with specified dimensions along OX-OY coordinate axes.
+        #  @param theR Radius of Face.
+       #  @param theOrientation set the orientation belong axis OXY or OYZ or OZX 
+        #  @return New GEOM_Object, containing the created disk.
+        #
+        #  @ref tui_creation_face "Example"
+        def MakeDiskR(self,theR, theOrientation):
+            # Example: see GEOM_TestAll.py
+            anObj = self.PrimOp.MakeDiskR(theR, theOrientation)
+            RaiseIfFailed("MakeDiskR", self.PrimOp)
+            return anObj
+
         ## Create a cylinder with given base point, axis, radius and height.
         #  @param thePnt Central point of cylinder base.
         #  @param theAxis Cylinder axis.
index 72463078f6fabcf5b03be0bb7f75a39d47240d59..daf7b78e768a336f042cd87f25490e9fed08d8fc 100755 (executable)
@@ -56,6 +56,7 @@ PrimitiveGUI_DiskDlg::PrimitiveGUI_DiskDlg( GeometryGUI* theGeometryGUI, QWidget
   QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_DISK_PNT_VEC_R" ) ) );
   QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
   QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_DISK_THREE_POINTS" ) ) );
+  QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_DISK_R" ) ) );
 
   setWindowTitle( tr( "GEOM_DISK_TITLE" ) );
 
@@ -63,39 +64,46 @@ PrimitiveGUI_DiskDlg::PrimitiveGUI_DiskDlg( GeometryGUI* theGeometryGUI, QWidget
   mainFrame()->GroupConstructors->setTitle( tr( "GEOM_DISK" ) );
   mainFrame()->RadioButton1->setIcon( image0 );
   mainFrame()->RadioButton2->setIcon( image2 );
-  mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
-  mainFrame()->RadioButton3->close();
+  mainFrame()->RadioButton3->setIcon( image3 );
 
   GroupPntVecR = new DlgRef_2Sel1Spin( centralWidget() );
-
   GroupPntVecR->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
   GroupPntVecR->TextLabel1->setText( tr( "GEOM_CENTER_POINT" ) );
   GroupPntVecR->TextLabel2->setText( tr( "GEOM_VECTOR" ) );
   GroupPntVecR->TextLabel3->setText( tr( "GEOM_RADIUS" ) );
   GroupPntVecR->PushButton1->setIcon( image1 );
   GroupPntVecR->PushButton2->setIcon( image1 );
-
   GroupPntVecR->LineEdit1->setReadOnly( true );
   GroupPntVecR->LineEdit2->setReadOnly( true );
 
   Group3Pnts = new DlgRef_3Sel( centralWidget() );
-
-  Group3Pnts->GroupBox1->setTitle( tr( "GEOM_3_POINTS" ) );
+  Group3Pnts->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
   Group3Pnts->TextLabel1->setText( tr( "GEOM_POINT1" ) );
   Group3Pnts->TextLabel2->setText( tr( "GEOM_POINT2" ) );
   Group3Pnts->TextLabel3->setText( tr( "GEOM_POINT3" ) );
   Group3Pnts->PushButton1->setIcon( image1 );
   Group3Pnts->PushButton2->setIcon( image1 );
   Group3Pnts->PushButton3->setIcon( image1 );
-
   Group3Pnts->LineEdit1->setReadOnly( true );
   Group3Pnts->LineEdit2->setReadOnly( true );
   Group3Pnts->LineEdit3->setReadOnly( true );
 
+  GroupDimensions = new DlgRef_1Spin( centralWidget() );
+  GroupDimensions->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
+  GroupDimensions->TextLabel1->setText( tr( "GEOM_RADIUS" ) );
+
+  GroupOrientation = new DlgRef_3Check( 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" ) );
+
   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
   layout->setMargin( 0 ); layout->setSpacing( 6 );
   layout->addWidget( GroupPntVecR );
   layout->addWidget( Group3Pnts );
+  layout->addWidget( GroupDimensions );
+  layout->addWidget( GroupOrientation );
   /***************************************************************/
 
   setHelpFileName( "create_disk_page.html" );
@@ -121,6 +129,7 @@ void PrimitiveGUI_DiskDlg::Init()
 {
   /* init variables */
   myEditCurrentArgument = GroupPntVecR->LineEdit1;
+  myOrientationType = 1;
 
   myPoint = myDir = myPoint1 = myPoint2 = myPoint3 = GEOM::GEOM_Object::_nil();
 
@@ -131,6 +140,8 @@ void PrimitiveGUI_DiskDlg::Init()
   /* min, max, step and decimals for spin boxes & initial values */
   initSpinBox( GroupPntVecR->SpinBox_DX, 0.001, COORD_MAX, aStep, 3 ); // VSR:TODO : DBL_DIGITS_DISPLAY
   GroupPntVecR->SpinBox_DX->setValue( 100 );
+  initSpinBox( GroupDimensions->SpinBox_DX, 0.001, COORD_MAX, aStep, 3 ); // VSR:TODO : DBL_DIGITS_DISPLAY
+  GroupDimensions->SpinBox_DX->setValue( 100 );
 
   /* signals and slots connections */
   connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
@@ -156,6 +167,11 @@ void PrimitiveGUI_DiskDlg::Init()
   connect( GroupPntVecR->SpinBox_DX, SIGNAL( valueChanged( double ) ), this, SLOT(ValueChangedInSpinBox() ) );
   connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
 
+  connect( GroupDimensions->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() ) );
+
   connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
            this, SLOT( SelectionIntoArgument() ) );
 
@@ -173,6 +189,21 @@ void PrimitiveGUI_DiskDlg::SetDoubleSpinBoxStep( double step )
   GroupPntVecR->SpinBox_DX->setSingleStep(step);
 }
 
+//=================================================================================
+// function : RadioBittonClicked()
+// purpose  : Radio button management
+//=================================================================================
+void PrimitiveGUI_DiskDlg::RadioButtonClicked()
+{
+  if ( GroupOrientation->RadioButton1->isChecked() )
+    myOrientationType = 1;
+  else if ( GroupOrientation->RadioButton2->isChecked() )
+    myOrientationType = 2;
+  else if ( GroupOrientation->RadioButton3->isChecked() )
+    myOrientationType = 3;
+  displayPreview();
+}
+
 //=================================================================================
 // function : ConstructorsClicked()
 // purpose  : Radio button management
@@ -188,7 +219,8 @@ void PrimitiveGUI_DiskDlg::ConstructorsClicked( int constructorId )
     {
       Group3Pnts->hide();
       GroupPntVecR->show();
-      
+      GroupDimensions->hide();
+      GroupOrientation->hide();
       myEditCurrentArgument = GroupPntVecR->LineEdit1;
       GroupPntVecR->LineEdit1->setText( "" );
       GroupPntVecR->LineEdit2->setText( "" );
@@ -198,13 +230,23 @@ void PrimitiveGUI_DiskDlg::ConstructorsClicked( int constructorId )
     {
       GroupPntVecR->hide();
       Group3Pnts->show();
-      
+      GroupDimensions->hide();
+      GroupOrientation->hide();
       myEditCurrentArgument = Group3Pnts->LineEdit1;
       Group3Pnts->LineEdit1->setText( "" );
       Group3Pnts->LineEdit2->setText( "" );
       Group3Pnts->LineEdit3->setText( "" );
       break;
     }
+  case 2:
+    {
+      GroupPntVecR->hide();
+      Group3Pnts->hide();
+      GroupDimensions->show();
+      GroupOrientation->show();
+      GroupOrientation->RadioButton1->setChecked( true );
+      myOrientationType = 1;
+    }
   }
   
   qApp->processEvents();
@@ -217,6 +259,7 @@ void PrimitiveGUI_DiskDlg::ConstructorsClicked( int constructorId )
 
   connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged() ),
           this, SLOT( SelectionIntoArgument() ) );
+  displayPreview();
 }
 
 //=================================================================================
@@ -249,6 +292,11 @@ bool PrimitiveGUI_DiskDlg::ClickOnApply()
 //=================================================================================
 void PrimitiveGUI_DiskDlg::SelectionIntoArgument()
 {
+  if (getConstructorId() == 2) {
+    displayPreview();
+    return;
+  }
+
   myEditCurrentArgument->setText( "" );
   
   LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
@@ -420,6 +468,8 @@ double PrimitiveGUI_DiskDlg::getRadius() const
   switch ( getConstructorId() ) {
   case 0:
     r = GroupPntVecR->SpinBox_DX->value(); break;
+  case 2:
+    r = GroupDimensions->SpinBox_DX->value(); break;
   }
   return r;
 }
@@ -454,6 +504,8 @@ bool PrimitiveGUI_DiskDlg::isValid( QString& msg )
   else if ( id == 1 )
     return !myPoint1->_is_nil() && !myPoint2->_is_nil() && !myPoint3->_is_nil() &&
       !isEqual( myPoint1, myPoint2 ) && !isEqual( myPoint1, myPoint3 ) && !isEqual( myPoint2, myPoint3 );
+  else if ( id == 2 )
+    return true;
   return false;
 }
 
@@ -476,6 +528,10 @@ bool PrimitiveGUI_DiskDlg::execute( ObjectList& objects )
     anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeDiskThreePnt( myPoint1, myPoint2, myPoint3 );
     res = true;
     break;
+  case 2 :
+    anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeDiskR( getRadius(), myOrientationType );
+    res = true;
+    break;
   }
   
   if ( !anObj->_is_nil() )
index 34752589e24e560e321386efb5323dfd92754ff2..fb9413ebf31b968274c2eb58c1a7f458afb3f691 100755 (executable)
@@ -30,6 +30,8 @@
 
 class DlgRef_3Sel;
 class DlgRef_2Sel1Spin;
+class DlgRef_1Spin;
+class DlgRef_3Check;
 
 //=================================================================================
 // class    : PrimitiveGUI_DiskDlg
@@ -55,12 +57,15 @@ private:
   void                               Init();
   void                               enterEvent( QEvent* );
   double                             getRadius() const;
+  int                                myOrientationType;
 
 private:
   GEOM::GEOM_Object_var              myPoint, myDir, myPoint1, myPoint2, myPoint3;
 
   DlgRef_2Sel1Spin*                  GroupPntVecR;
   DlgRef_3Sel*                       Group3Pnts;
+  DlgRef_1Spin*                      GroupDimensions;
+  DlgRef_3Check*                     GroupOrientation;
 
 private slots:
   void                               ClickOnOk();
@@ -76,6 +81,7 @@ private slots:
   void                               SetEditCurrentArgument();
   void                               ValueChangedInSpinBox();
   void                               SetDoubleSpinBoxStep( double );
+  void                               RadioButtonClicked();
 };
 
 #endif // BASICGUI_DISKDLG_H
index a3f2b0c6050130107e2871c7c6f361b7603b4630..93a5036aa7965d57dcc6f144da3d5fbba36ec19d 100755 (executable)
@@ -53,7 +53,7 @@ PrimitiveGUI_FaceDlg::PrimitiveGUI_FaceDlg( GeometryGUI* theGeometryGUI, QWidget
                                    bool modal, Qt::WindowFlags fl )
   : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl )
 {
-  QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_FACE_PLANE_HW" ) ) );
+  QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_FACE_VEC_HW" ) ) );
   QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
   QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_FACE_HW" ) ) );
 
@@ -67,8 +67,8 @@ PrimitiveGUI_FaceDlg::PrimitiveGUI_FaceDlg( GeometryGUI* theGeometryGUI, QWidget
   mainFrame()->RadioButton3->close();
 
   GroupPlane = new DlgRef_1Sel2Spin( centralWidget() );
-  GroupPlane->GroupBox1->setTitle( tr( "GEOM_FACES" ) );
-  GroupPlane->TextLabel1->setText( tr( "GEOM_FACE" ) );
+  GroupPlane->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
+  GroupPlane->TextLabel1->setText( tr( "GEOM_EDGE" ) );
   GroupPlane->TextLabel2->setText( tr( "GEOM_HEIGHT" ) );
   GroupPlane->TextLabel3->setText( tr( "GEOM_WIDTH" ) );
   GroupPlane->PushButton1->setIcon( image1 );
@@ -79,10 +79,18 @@ PrimitiveGUI_FaceDlg::PrimitiveGUI_FaceDlg( GeometryGUI* theGeometryGUI, QWidget
   GroupDimensions->TextLabel1->setText( tr( "GEOM_HEIGHT" ) );
   GroupDimensions->TextLabel2->setText( tr( "GEOM_WIDTH" ) );
 
+  GroupOrientation = new DlgRef_3Check( 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" ) );
+
   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
   layout->setMargin( 0 ); layout->setSpacing( 6 );
   layout->addWidget( GroupPlane );
   layout->addWidget( GroupDimensions );
+  layout->addWidget( GroupOrientation );
 
   /***************************************************************/
 
@@ -109,9 +117,11 @@ void PrimitiveGUI_FaceDlg::Init()
 {
   /* init variables */
   myEditCurrentArgument = GroupPlane->LineEdit1;
-  myFace = GEOM::GEOM_Object::_nil();
+  myEdge = GEOM::GEOM_Object::_nil();
   globalSelection(); // close local contexts, if any
-  localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
+  localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
+
+  myOrientationType = 1;
 
   /* Get setting of step value from file configuration */
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
@@ -148,6 +158,10 @@ void PrimitiveGUI_FaceDlg::Init()
   connect( GroupDimensions->SpinBox_DX, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
   connect( GroupDimensions->SpinBox_DY, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
 
+  connect( GroupOrientation->RadioButton1, SIGNAL( clicked() ), this, SLOT( RadioButtonClicked() ) );
+  connect( GroupOrientation->RadioButton2, SIGNAL( clicked() ), this, SLOT( RadioButtonClicked() ) );
+  connect( GroupOrientation->RadioButton3, SIGNAL( clicked() ), this, SLOT( RadioButtonClicked() ) );
+
   connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
           this, SLOT( SelectionIntoArgument() ) );
   
@@ -175,6 +189,21 @@ void PrimitiveGUI_FaceDlg::ValueChangedInSpinBox( double newValue )
   displayPreview();
 }
 
+//=================================================================================
+// function : RadioBittonClicked()
+// purpose  : Radio button management
+//=================================================================================
+void PrimitiveGUI_FaceDlg::RadioButtonClicked()
+{
+  if ( GroupOrientation->RadioButton1->isChecked() )
+    myOrientationType = 1;
+  else if ( GroupOrientation->RadioButton2->isChecked() )
+    myOrientationType = 2;
+  else if ( GroupOrientation->RadioButton3->isChecked() )
+    myOrientationType = 3;
+  displayPreview();
+}
+
 //=================================================================================
 // function : ClickOnOk()
 // purpose  :
@@ -212,12 +241,13 @@ void PrimitiveGUI_FaceDlg::ConstructorsClicked( int constructorId )
   case 0:
     {
       globalSelection(); // close local contexts, if any
-      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
 
       myEditCurrentArgument = GroupPlane->LineEdit1;
       myEditCurrentArgument->setText("");
-      myFace = GEOM::GEOM_Object::_nil();
+      myEdge = GEOM::GEOM_Object::_nil();
       GroupDimensions->hide();
+      GroupOrientation->hide();
       GroupPlane->show();
       break;
     }
@@ -226,6 +256,9 @@ void PrimitiveGUI_FaceDlg::ConstructorsClicked( int constructorId )
       globalSelection(); // close local contexts, if any
       GroupPlane->hide();
       GroupDimensions->show();
+      GroupOrientation->show();
+      GroupOrientation->RadioButton1->setChecked( true );
+      myOrientationType = 1;
       break;
     }
   }
@@ -234,6 +267,7 @@ void PrimitiveGUI_FaceDlg::ConstructorsClicked( int constructorId )
   updateGeometry();
   resize( minimumSize() );
   SelectionIntoArgument();
+  displayPreview();
 }
 
 //=================================================================================
@@ -250,7 +284,7 @@ void PrimitiveGUI_FaceDlg::SelectionIntoArgument()
   myEditCurrentArgument->setText( "" );
 
   if ( IObjectCount() != 1 ) {
-    if ( myEditCurrentArgument == GroupPlane->LineEdit1 )  myFace = GEOM::GEOM_Object::_nil();
+    if ( myEditCurrentArgument == GroupPlane->LineEdit1 )  myEdge = GEOM::GEOM_Object::_nil();
     return;
   }
 
@@ -267,7 +301,7 @@ void PrimitiveGUI_FaceDlg::SelectionIntoArgument()
       aSelMgr->GetIndexes( firstIObject(), aMap );
       if ( aMap.Extent() == 1 ) { // Local Selection
        int anIndex = aMap( 1 );
-       aName += QString( ":face_%1" ).arg( anIndex );
+       aName += QString( ":edge_%1" ).arg( anIndex );
 
        //Find SubShape Object in Father
        GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
@@ -280,7 +314,7 @@ void PrimitiveGUI_FaceDlg::SelectionIntoArgument()
          aSelectedObject = aFindedObject; // get Object from study
       }
       else { // Global Selection
-        if ( aShape.ShapeType() != TopAbs_FACE ) {
+        if ( aShape.ShapeType() != TopAbs_EDGE ) {
           aSelectedObject = GEOM::GEOM_Object::_nil();
           aName = "";
         }
@@ -288,7 +322,7 @@ void PrimitiveGUI_FaceDlg::SelectionIntoArgument()
     }
 
     myEditCurrentArgument->setText( aName );
-    if ( myEditCurrentArgument == GroupPlane->LineEdit1 )  myFace = aSelectedObject;
+    if ( myEditCurrentArgument == GroupPlane->LineEdit1 )  myEdge = aSelectedObject;
   }
   displayPreview();
 }
@@ -305,7 +339,7 @@ void PrimitiveGUI_FaceDlg::SetEditCurrentArgument()
   globalSelection(); // close previous local contexts
   if ( send == GroupPlane->PushButton1 ) {
     myEditCurrentArgument = GroupPlane->LineEdit1;
-    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
+    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
   }
 
   myEditCurrentArgument->setFocus();
@@ -375,7 +409,7 @@ bool PrimitiveGUI_FaceDlg::isValid( QString& msg )
 {
   const int id = getConstructorId();
   if ( id == 0 )
-    return !myFace->_is_nil();
+    return !myEdge->_is_nil();
   else if ( id == 1 )
     return true;
   return false;
@@ -391,11 +425,11 @@ bool PrimitiveGUI_FaceDlg::execute( ObjectList& objects )
   GEOM::GEOM_Object_var anObj;
   switch ( getConstructorId() ) {
   case 0 :
-    anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeFacePlaneHW( myFace, GroupPlane->SpinBox_DX->value(), GroupPlane->SpinBox_DY->value() );
+    anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeFaceVecHW( myEdge, GroupPlane->SpinBox_DX->value(), GroupPlane->SpinBox_DY->value() );
     res = true;
     break;
   case 1 :
-    anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeFaceHW( GroupDimensions->SpinBox_DX->value(), GroupDimensions->SpinBox_DY->value() );
+    anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )->MakeFaceHW( GroupDimensions->SpinBox_DX->value(), GroupDimensions->SpinBox_DY->value(), myOrientationType );
     res = true;
     break;
   }
@@ -415,7 +449,7 @@ void PrimitiveGUI_FaceDlg::addSubshapesToStudy()
   QMap<QString, GEOM::GEOM_Object_var> objMap;
   switch ( getConstructorId() ) {
   case 0 :
-    objMap[GroupPlane->LineEdit1->text()] = myFace;
+    objMap[GroupPlane->LineEdit1->text()] = myEdge;
     break;
   }
   addSubshapesToFather( objMap );
index 741afd22eb986cee5549aab2f34e558e512ed422..79676748d8d160614532c07802072420a92b5359 100755 (executable)
@@ -30,6 +30,7 @@
 
 class DlgRef_2Spin;
 class DlgRef_1Sel2Spin;
+class DlgRef_3Check;
 
 //=================================================================================
 // class    : PrimitiveGUI_FaceDlg
@@ -58,10 +59,13 @@ private:
   GEOM::GEOM_Object_var              myPoint1;   
   GEOM::GEOM_Object_var              myPoint2;
   GEOM::GEOM_Object_var              myVector;
-  GEOM::GEOM_Object_var              myFace;
+  GEOM::GEOM_Object_var              myEdge;
+
+  int                                myOrientationType;
   
   DlgRef_2Spin*                      GroupDimensions;
   DlgRef_1Sel2Spin*                  GroupPlane;
+  DlgRef_3Check*                     GroupOrientation;
     
 private slots:
   void                               ClickOnOk();
@@ -76,6 +80,7 @@ private slots:
   void                               SetEditCurrentArgument();
   void                               ValueChangedInSpinBox( double );
   void                               SetDoubleSpinBoxStep( double );
+  void                               RadioButtonClicked();
 };
 
 #endif // BASICGUI_FACEDLG_H