From: Florian BRUNET Date: Mon, 11 Aug 2014 09:54:38 +0000 (+0200) Subject: Update of the implementation of an option to create portion of cylinders in the cylin... X-Git-Tag: V7_5_0a1~30^2~1 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=b9cd395cc3b809c23349b26b31940dcaccc93a21;p=modules%2Fgeom.git Update of the implementation of an option to create portion of cylinders in the cylinder primitive --- diff --git a/doc/salome/examples/primitives_ex02.py b/doc/salome/examples/primitives_ex02.py index d55d6510f..a0e73ff5f 100644 --- a/doc/salome/examples/primitives_ex02.py +++ b/doc/salome/examples/primitives_ex02.py @@ -6,6 +6,7 @@ import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) +import math gg = salome.ImportComponentGUI("GEOM") # create a vertex and a vector @@ -18,16 +19,28 @@ height = 40 radius1 = 15 cylinder1 = geompy.MakeCylinder(p1, v, radius1, height) +angle1 = 45.*math.pi / 180. +cylinder1a = geompy.MakeCylinderA(p1, v, radius1, height, angle1) +geompy.TranslateDXDYDZ(cylinder1a,80.,0.,0.) radius2 = 30 cylinder2 = geompy.MakeCylinderRH(radius2, height) +angle2 = 210.*math.pi / 180. +cylinder2a = geompy.MakeCylinderRHA(radius2, height, angle2) +geompy.TranslateDXDYDZ(cylinder2a,80.,0.,0.) # add objects in the study id_cylinder1 = geompy.addToStudy(cylinder1,"Cylinder1") id_cylinder2 = geompy.addToStudy(cylinder2,"Cylinder2") +id_cylinder1a = geompy.addToStudy(cylinder1a,"Cylinder1a") +id_cylinder2a = geompy.addToStudy(cylinder2a,"Cylinder2a") # display the cylinders gg.createAndDisplayGO(id_cylinder1) gg.setDisplayMode(id_cylinder1,1) gg.createAndDisplayGO(id_cylinder2) gg.setDisplayMode(id_cylinder2,1) +gg.createAndDisplayGO(id_cylinder1a) +gg.setDisplayMode(id_cylinder1a,1) +gg.createAndDisplayGO(id_cylinder2a) +gg.setDisplayMode(id_cylinder2a,1) diff --git a/doc/salome/gui/GEOM/images/cylinder1.png b/doc/salome/gui/GEOM/images/cylinder1.png index 696ea4234..6dc21ce51 100755 Binary files a/doc/salome/gui/GEOM/images/cylinder1.png and b/doc/salome/gui/GEOM/images/cylinder1.png differ diff --git a/doc/salome/gui/GEOM/images/cylinder2.png b/doc/salome/gui/GEOM/images/cylinder2.png index 7522b2751..b9ed9cd82 100755 Binary files a/doc/salome/gui/GEOM/images/cylinder2.png and b/doc/salome/gui/GEOM/images/cylinder2.png differ diff --git a/doc/salome/gui/GEOM/images/cylinders.png b/doc/salome/gui/GEOM/images/cylinders.png index 3a58b30f6..b9a2608a7 100755 Binary files a/doc/salome/gui/GEOM/images/cylinders.png and b/doc/salome/gui/GEOM/images/cylinders.png differ diff --git a/doc/salome/gui/GEOM/input/creating_cylinder.doc b/doc/salome/gui/GEOM/input/creating_cylinder.doc index 74434e49b..49f19bf64 100644 --- a/doc/salome/gui/GEOM/input/creating_cylinder.doc +++ b/doc/salome/gui/GEOM/input/creating_cylinder.doc @@ -11,8 +11,12 @@ Entity - > Primitives - > Cylinder \n Firstly, you can define a \b Cylinder by the Base Point (the central point of the cylinder base), the \b Vector (the axis of the cylinder), and its dimensions: the Radius and the Height. -\n Angle checkbox and field allow defining an angle to build a portion of cylinder. -\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height, Angle=2*pi) +\n TUI Command: geompy.MakeCylinder(Point, Axis, Radius, Height) +\n Arguments: Name + 1 vertex + 1 vector + 2 values +(Dimensions: radius and height). + +\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder. +\n TUI Command: geompy.MakeCylinderA(Point, Axis, Radius, Height, Angle) \n Arguments: Name + 1 vertex + 1 vector + 3 values (Dimensions: radius, height and angle). @@ -21,9 +25,14 @@ and its dimensions: the Radius and the Height. \n Secondly, you can define a \b Cylinder by the given radius and the height at the origin of coordinate system. The axis of the cylinder will be collinear to the OZ axis of the coordinate system. -Angle checkbox and field allow defining an angle to build a portion of cylinder. -\n TUI Command: geompy.MakeCylinderRH(Radius, Height, Angle=2*pi) -\n Arguments: Name + 2 values (Dimensions at origin: radius, height, angle). +\n TUI Command: geompy.MakeCylinderRH(Radius, Height) +\n Arguments: Name + 2 values (Dimensions at origin: radius and +height). + +\n \b Angle checkbox and field allow defining an angle to create a portion of cylinder at the origin of coordinate system. +\n TUI Command: geompy.MakeCylinderRHA(Radius, Height, Angle) +\n Arguments: Name + 3 values +(Dimensions at origin : radius, height and angle). \image html cylinder2.png diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 94fbc0acd..c1e4b2c5c 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -1471,7 +1471,18 @@ module GEOM GEOM_Object MakeDiskR (in double theR, in short theOrientation); /*! - * \brief Create a cylinder with given radius, height and angle (portion of cylinder) at + * \brief Create a cylinder with given radius and height at + * the origin of coordinate system. + * + * Axis of the cylinder will be collinear to the OZ axis of the coordinate system. + * \param theR Cylinder radius. + * \param theH Cylinder height. + * \return New GEOM_Object, containing the created cylinder. + */ + GEOM_Object MakeCylinderRH (in double theR, in double theH); + + /*! + * \brief Create a portion of cylinder with given radius, height and angle at * the origin of coordinate system. * * Axis of the cylinder will be collinear to the OZ axis of the coordinate system. @@ -1480,18 +1491,30 @@ module GEOM * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ - GEOM_Object MakeCylinderRH (in double theR, in double theH, in double theA); + GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA); /*! - * \brief Create a cylinder with given base point, axis, radius, height and angle (portion of cylinder). + * \brief Create a cylinder with given base point, axis, radius, height and angle. * \param thePnt Central point of cylinder base. * \param theAxis Cylinder axis. * \param theR Cylinder radius. * \param theH Cylinder height. - * \param theA Cylinder angle. * \return New GEOM_Object, containing the created cylinder. */ GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, + in GEOM_Object theAxis, + in double theR, + in double theH); + /*! + * \brief Create a portion of cylinder with given base point, axis, radius, height and angle. + * \param thePnt Central point of cylinder base. + * \param theAxis Cylinder axis. + * \param theR Cylinder radius. + * \param theH Cylinder height. + * \param theA Cylinder angle. + * \return New GEOM_Object, containing the created cylinder. + */ + GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theR, in double theH, diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index c56f0ca57..3c5972437 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -158,9 +158,15 @@ module GEOM GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt, in GEOM_Object theAxis, in double theRadius, - in double theHeight, - in double theAngle) ; + in double theHeight) ; GEOM_Object MakeCylinderRH (in double theR, + in double theH) ; + GEOM_Object MakeCylinderPntVecRHA (in GEOM_Object thePnt, + in GEOM_Object theAxis, + in double theRadius, + in double theHeight, + in double theAngle) ; + GEOM_Object MakeCylinderRHA (in double theR, in double theH, in double theA) ; GEOM_Object MakeSphere (in double theX, diff --git a/resources/GEOMCatalog.xml.in b/resources/GEOMCatalog.xml.in index 43438b5bd..db3ec4288 100644 --- a/resources/GEOMCatalog.xml.in +++ b/resources/GEOMCatalog.xml.in @@ -1314,6 +1314,70 @@ unknown 0 + + + thePnt + GEOM_Object + unknown + + + theAxis + GEOM_Object + unknown + + + theRadius + double + unknown + + + theHeight + double + unknown + + + + + return + GEOM_Object + unknown + + + + + + MakeCylinderRH + + + unknown + 0 + + + theR + double + unknown + + + theH + double + unknown + + + + + return + GEOM_Object + unknown + + + + + + MakeCylinderPntVecRHA + + + unknown + 0 thePnt @@ -1339,7 +1403,7 @@ theAngle double unknown - + @@ -1351,7 +1415,7 @@ - MakeCylinderRH + MakeCylinderRHA unknown @@ -1368,7 +1432,7 @@ unknown - theAngle + theA double unknown diff --git a/src/DlgRef/CMakeLists.txt b/src/DlgRef/CMakeLists.txt index 632b2a328..61e6a2dfa 100755 --- a/src/DlgRef/CMakeLists.txt +++ b/src/DlgRef/CMakeLists.txt @@ -75,9 +75,9 @@ SET(_uic_files DlgRef_2Sel2Spin2Push_QTD.ui DlgRef_2Sel2Spin3Check_QTD.ui DlgRef_2Sel2Spin_QTD.ui - DlgRef_2Sel3Spin1Check_QTD.ui DlgRef_2Sel3Spin2Rb_QTD.ui DlgRef_2Sel3Spin_QTD.ui + DlgRef_2Sel3Spin1Check_QTD.ui DlgRef_2SelExt_QTD.ui DlgRef_2Sel_QTD.ui DlgRef_2Spin_QTD.ui diff --git a/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui new file mode 100644 index 000000000..d652b9a90 --- /dev/null +++ b/src/DlgRef/DlgRef_2Sel3Spin1Check_QTD.ui @@ -0,0 +1,186 @@ + + + DlgRef_2Sel3Spin1Check_QTD + + + + 0 + 0 + 323 + 223 + + + + + + + + 0 + + + 6 + + + + + + + + + 9 + + + 6 + + + + + + 0 + 0 + + + + TL4 + + + false + + + + + + + + 0 + 0 + + + + TL3 + + + false + + + + + + + + 0 + 0 + + + + TL1 + + + false + + + + + + + + + + + 0 + 0 + + + + TL2 + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + TL5 + + + false + + + + + + + CB + + + + + + + + + + qPixmapFromMimeSource + + + SalomeApp_DoubleSpinBox + QDoubleSpinBox +
SalomeApp_DoubleSpinBox.h
+
+
+ + PushButton1 + LineEdit1 + PushButton2 + LineEdit2 + SpinBox_DX + + + +
diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx index 521d03678..42dd86b7c 100644 --- a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx @@ -75,14 +75,12 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const gp_Pnt aP; gp_Vec aV; - - TopoDS_Shape aShape; - if (aType == CYLINDER_R_H) { + if (aType == CYLINDER_R_H || aType == CYLINDER_R_H_A) { aP = gp::Origin(); aV = gp::DZ(); } - else if (aType == CYLINDER_PNT_VEC_R_H) { + else if (aType == CYLINDER_PNT_VEC_R_H || aType == CYLINDER_PNT_VEC_R_H_A) { Handle(GEOM_Function) aRefPoint = aCI.GetPoint(); Handle(GEOM_Function) aRefVector = aCI.GetVector(); TopoDS_Shape aShapePnt = aRefPoint->GetValue(); @@ -111,21 +109,41 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const if (aCI.GetH() < 0.0) aV.Reverse(); gp_Ax2 anAxes (aP, aV); - aShape = BRepPrimAPI_MakeCylinder(anAxes, aCI.GetR(), Abs(aCI.GetH())).Shape(); - if(aCI.GetA() < 360. && aCI.GetA()> 0.){ - BRepPrimAPI_MakeCylinder MC(anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()*M_PI/180.); + bool switchAngleVar; + if(aType == CYLINDER_R_H || aType == CYLINDER_PNT_VEC_R_H) switchAngleVar = false; + else if(aType == CYLINDER_R_H_A || aType == CYLINDER_PNT_VEC_R_H_A) switchAngleVar = true; + else return 0; + TopoDS_Shape aShape; + + switch (switchAngleVar) { + case false: + { + BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH())); MC.Build(); if (!MC.IsDone()) { StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters"); } - aShape = MC.Shape(); - } + aShape = MC.Shape(); + break; + } + case true: + { + BRepPrimAPI_MakeCylinder MCA (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()); + MCA.Build(); + if (!MCA.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure."); + return 0; + } + aShape = MCA.Shape(); + break; + } + default: + return 0; + } if (aShape.IsNull()) return 0; - aFunction->SetValue(aShape); log.SetTouched(Label()); - return 1; } diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index f4139be06..f3f33f969 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -488,7 +488,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDiskR (double theR, int theO * MakeCylinderRH */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH, double theA) +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, double theH) { SetErrorCode(KO); @@ -506,7 +506,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou aCI.SetR(theR); aCI.SetH(theH); - aCI.SetA(theA); //Compute the Cylinder value try { @@ -526,12 +525,60 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //Make a Python command GEOM::TPythonDump(aFunction) << aCylinder - << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ", " << theA << ")"; + << " = geompy.MakeCylinderRH(" << theR << ", " << theH << ")"; SetErrorCode(OK); return aCylinder; } +//============================================================================= +/*! + * MakeCylinderRHA + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRHA (double theR, double theH, double theA) +{ + SetErrorCode(KO); + + //Add a new Cylinder object + Handle(GEOM_Object) aCylinder = GetEngine()->AddObject(GetDocID(), GEOM_CYLINDER); + + //Add a new Cylinder function with R and H parameters + Handle(GEOM_Function) aFunction = aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_R_H_A); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_CylinderDriver::GetID()) return NULL; + + GEOMImpl_ICylinder aCI (aFunction); + + aCI.SetR(theR); + aCI.SetH(theH); + aCI.SetA(theA); + + //Compute the Cylinder value + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Cylinder 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) << aCylinder + << " = geompy.MakeCylinderRHA(" << theR << ", " << theH << ", " << theA*180./M_PI << "*math.pi/180.)"; + + SetErrorCode(OK); + return aCylinder; +} //============================================================================= /*! @@ -540,7 +587,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderRH (double theR, dou //============================================================================= Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theR, double theH, double theA) + double theR, double theH) { SetErrorCode(KO); @@ -568,7 +615,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO aCI.SetVector(aRefVec); aCI.SetR(theR); aCI.SetH(theH); - aCI.SetA(theA); //Compute the Cylinder value try { @@ -588,7 +634,68 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO //Make a Python command GEOM::TPythonDump(aFunction) << aCylinder << " = geompy.MakeCylinder(" - << thePnt << ", " << theVec << ", " << theR << ", " << theH << ", " << theA << ")"; + << thePnt << ", " << theVec << ", " << theR << ", " << theH << ")"; + + SetErrorCode(OK); + return aCylinder; +} + +//============================================================================= +/*! + * MakeCylinderPntVecRHA + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, double theH, double theA) +{ + SetErrorCode(KO); + + if (thePnt.IsNull() || theVec.IsNull()) return NULL; + + //Add a new Cylinder object + Handle(GEOM_Object) aCylinder = GetEngine()->AddObject(GetDocID(), GEOM_CYLINDER); + + //Add a new Cylinder function for creation a cylinder relatively to point and vector + Handle(GEOM_Function) aFunction = + aCylinder->AddFunction(GEOMImpl_CylinderDriver::GetID(), CYLINDER_PNT_VEC_R_H_A); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_CylinderDriver::GetID()) return NULL; + + GEOMImpl_ICylinder aCI (aFunction); + + Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); + Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + + if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL; + + aCI.SetPoint(aRefPnt); + aCI.SetVector(aRefVec); + aCI.SetR(theR); + aCI.SetH(theH); + aCI.SetA(theA); + + //Compute the Cylinder value + try { +#if OCC_VERSION_LARGE > 0x06010000 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Cylinder 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) << aCylinder << " = geompy.MakeCylinderA(" + << thePnt << ", " << theVec << ", " << theR << ", " << theH << ", " << theA*180./M_PI << "*math.pi/180.)"; SetErrorCode(OK); return aCylinder; diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx index d0ae75588..84a643afc 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx @@ -48,10 +48,14 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { 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, double theA); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderRH (double theR, double theH); Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRH (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theR, double theH, double theA); + double theR, double theH); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderRHA (double theR, double theH, double theA); + Standard_EXPORT Handle(GEOM_Object) MakeCylinderPntVecRHA (Handle(GEOM_Object) thePnt, + Handle(GEOM_Object) theVec, + double theR, double theH, double theA); Standard_EXPORT Handle(GEOM_Object) MakeConeR1R2H (double theR1, double theR2, double theH); Standard_EXPORT Handle(GEOM_Object) MakeConePntVecR1R2H (Handle(GEOM_Object) thePnt, diff --git a/src/GEOMImpl/GEOMImpl_ICylinder.hxx b/src/GEOMImpl/GEOMImpl_ICylinder.hxx index 0955df29c..c092c950e 100644 --- a/src/GEOMImpl/GEOMImpl_ICylinder.hxx +++ b/src/GEOMImpl/GEOMImpl_ICylinder.hxx @@ -24,14 +24,12 @@ // #include "GEOM_Function.hxx" -#define CYL_ARG_PNT 1 -#define CYL_ARG_VEC 2 -#define CYL_ARG_R 3 -#define CYL_ARG_H 4 +#define CYL_ARG_R 1 +#define CYL_ARG_H 2 +#define CYL_ARG_PNT 3 +#define CYL_ARG_VEC 4 #define CYL_ARG_A 5 - - class GEOMImpl_ICylinder { public: @@ -45,10 +43,6 @@ class GEOMImpl_ICylinder void SetH(double theH) { _func->SetReal(CYL_ARG_H, theH); } double GetH() { return _func->GetReal(CYL_ARG_H); } - - void SetA(double theA) { _func->SetReal(CYL_ARG_A, theA); } - - double GetA() { return _func->GetReal(CYL_ARG_A); } void SetPoint(Handle(GEOM_Function) theRefPoint) { _func->SetReference(CYL_ARG_PNT, theRefPoint); } @@ -57,6 +51,10 @@ class GEOMImpl_ICylinder void SetVector(Handle(GEOM_Function) theRefVector) { _func->SetReference(CYL_ARG_VEC, theRefVector); } Handle(GEOM_Function) GetVector() { return _func->GetReference(CYL_ARG_VEC); } + + void SetA(double theA) { _func->SetReal(CYL_ARG_A, theA); } + + double GetA() { return _func->GetReal(CYL_ARG_A); } private: diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index 57093b4e6..b57080a9c 100755 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -206,7 +206,9 @@ #define DISK_R 3 #define CYLINDER_R_H 1 -#define CYLINDER_PNT_VEC_R_H 2 +#define CYLINDER_PNT_VEC_R_H 2 +#define CYLINDER_R_H_A 3 +#define CYLINDER_PNT_VEC_R_H_A 4 #define CONE_R1_R2_H 1 #define CONE_PNT_VEC_R1_R2_H 2 diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 68dc79279..5f01b7c91 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -246,6 +246,27 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR, */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR, + CORBA::Double theH) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Create the Cylinder + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeCylinderRHA + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR, CORBA::Double theH, CORBA::Double theA) { @@ -255,7 +276,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th GetOperations()->SetNotDone(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH, theA); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRHA(theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -268,6 +289,34 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH + (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, CORBA::Double theH) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt); + Handle(GEOM_Object) aVec = GetObjectImpl(theVec); + + if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + + //Create the Cylinder + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeCylinderPntVecRHA + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, CORBA::Double theR, CORBA::Double theH, CORBA::Double theA) { @@ -283,7 +332,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); //Create the Cylinder - Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH, theA); + Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRHA(aPnt, aVec, theR, theH, theA); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh index 63d5fa4be..f78e1c089 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh @@ -69,15 +69,23 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Short theOrientation); GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, + CORBA::Double theH); + + GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theVec, + CORBA::Double theR, + CORBA::Double theH); + + GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, CORBA::Double theH, CORBA::Double theA); - - GEOM::GEOM_Object_ptr MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, + + GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, CORBA::Double theR, CORBA::Double theH, - CORBA::Double theA); - + CORBA::Double theA); + GEOM::GEOM_Object_ptr MakeConeR1R2H (CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH); diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index d70656378..801ea5e70 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1049,13 +1049,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeDiskR (CORBA::Double theR, GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, - CORBA::Double theHeight, - CORBA::Double theAngle) + CORBA::Double theHeight) { beginService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight, theAngle); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight); endService( " GEOM_Superv_i::MakeCylinderPntVecRH" ); return anObj; } @@ -1064,17 +1063,48 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr // MakeCylinderRH: //============================================================================= GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRH (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA) + CORBA::Double theH) { beginService( " GEOM_Superv_i::MakeCylinderRH" ); MESSAGE("GEOM_Superv_i::MakeCylinderRH"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH, theA); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH); endService( " GEOM_Superv_i::MakeCylinderRH" ); return anObj; } +//============================================================================= +// MakeCylinderPntVecRHA: +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theRadius, + CORBA::Double theHeight, + CORBA::Double theAngle) +{ + beginService( " GEOM_Superv_i::MakeCylinderPntVecRHA" ); + MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRHA"); + get3DPrimOp(); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRHA(thePnt, theAxis, theRadius, theHeight, theAngle); + endService( " GEOM_Superv_i::MakeCylinderPntVecRHA" ); + return anObj; +} + +//============================================================================= +// MakeCylinderRHA: +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRHA (CORBA::Double theR, + CORBA::Double theH, + CORBA::Double theA) +{ + beginService( " GEOM_Superv_i::MakeCylinderRHA" ); + MESSAGE("GEOM_Superv_i::MakeCylinderRHA"); + get3DPrimOp(); + GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRHA(theR, theH, theA); + endService( " GEOM_Superv_i::MakeCylinderRHA" ); + return anObj; +} + //============================================================================= // MakeSphere: //============================================================================= diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index 627be4797..4d827589e 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -241,13 +241,19 @@ public: 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, + CORBA::Double theHeight); + GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, + CORBA::Double theH); + GEOM::GEOM_Object_ptr MakeCylinderPntVecRHA (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theAxis, CORBA::Double theRadius, CORBA::Double theHeight, CORBA::Double theAngle); - GEOM::GEOM_Object_ptr MakeCylinderRH (CORBA::Double theR, + GEOM::GEOM_Object_ptr MakeCylinderRHA (CORBA::Double theR, CORBA::Double theH, - CORBA::Double theA); + CORBA::Double theA); GEOM::GEOM_Object_ptr MakeSphere (CORBA::Double theX, CORBA::Double theY, CORBA::Double theZ, diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 28635865c..62eec35c8 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -147,18 +147,20 @@ def TestAll (geompy, math): tan_on_face = geompy.MakeTangentPlaneOnFace(tan_extrusion, 0.7, 0.5, 150) #Create base geometry 3D - Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object - Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object - Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object - Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object - Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object - Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object - Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object - Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object - Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object - Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object - Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object + Box = geompy.MakeBoxTwoPnt(p0, p200) #(2 GEOM_Object)->GEOM_Object + Box1 = geompy.MakeBoxDXDYDZ(10, 20, 30) #(3 Doubles)->GEOM_Object + Box2 = geompy.MakeBox(10,20,30, 15,25,35) #(6 Doubles)->GEOM_Object + Cylinder = geompy.MakeCylinder(p0, vz, radius1, height) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Cyl1 = geompy.MakeCylinderRH(radius2, height) #(2 Doubles)->GEOM_Object + Cylinder1= geompy.MakeCylinderA(p0, vz, radius1, height,angle1) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Cyl2 = geompy.MakeCylinderRHA(radius2, height,angle2) #(2 Doubles)->GEOM_Object + Sphere = geompy.MakeSpherePntR(p0, radius1) #(GEOM_Object, Double)->GEOM_Object + Sphere1 = geompy.MakeSphereR(radius) #(Double)->GEOM_Object + Sphere2 = geompy.MakeSphere(50, 70, 30, radius) #(4 Doubles)->GEOM_Object + Cone = geompy.MakeCone(p0, vz, radius2, radius, height) #(2 GEOM_Object, 3 Doubles)->GEOM_Object + Cone1 = geompy.MakeConeR1R2H(radius1, radius, height) #(3 Doubles)->GEOM_Object + Torus = geompy.MakeTorus(p0, vz, radius2, radius) #(2 GEOM_Object, 2 Doubles)->GEOM_Object + Torus1 = geompy.MakeTorusRR(radius2, radius1) #(2 Doubles)->GEOM_Object #Boolean (Common, Cut, Fuse, Section) Common = geompy.MakeBoolean(Box, Sphere, 1) #(2 GEOM_Object, Short)->GEOM_Object @@ -372,6 +374,8 @@ def TestAll (geompy, math): id_Box2 = geompy.addToStudy(Box2, "Box (10,20,30)-(15,25,35)") id_Cylinder = geompy.addToStudy(Cylinder, "Cylinder") id_Cyl1 = geompy.addToStudy(Cyl1, "Cylinder RH") + id_Cylinder1= geompy.addToStudy(Cylinder1,"CylinderA") + id_Cyl2 = geompy.addToStudy(Cyl2, "Cylinder RHA") id_Sphere = geompy.addToStudy(Sphere, "Sphere Pnt R") id_Sphere1 = geompy.addToStudy(Sphere1, "Sphere R") id_Sphere2 = geompy.addToStudy(Sphere2, "Sphere") diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 3f6c012d8..c64bd6f40 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -2969,12 +2969,11 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "disk") return anObj - ## Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). + ## Create a cylinder with given base point, axis, radius and height. # @param thePnt Central point of cylinder base. # @param theAxis Cylinder axis. # @param theR Cylinder radius. # @param theH Cylinder height. - # @param theA Cylinder angle in radian. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -2983,16 +2982,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinder(self, thePnt, theAxis, theR, theH, theA=2*math.pi, theName=None): + def MakeCylinder(self, thePnt, theAxis, theR, theH, theName=None): """ - Create a cylinder with given base point, axis, radius, height and angle (for a portion of cylinder). + Create a cylinder with given base point, axis, radius and height. Parameters: thePnt Central point of cylinder base. theAxis Cylinder axis. theR Cylinder radius. theH Cylinder height. - theA Cylinder angle in radian. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -3001,20 +2999,62 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py - theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) - anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH, theA) - + theR,theH,Parameters = ParseParameters(theR, theH) + anObj = self.PrimOp.MakeCylinderPntVecRH(thePnt, theAxis, theR, theH) RaiseIfFailed("MakeCylinderPntVecRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") return anObj + + ## Create a portion of cylinder with given base point, axis, radius, height and angle. + # @param thePnt Central point of cylinder base. + # @param theAxis Cylinder axis. + # @param theR Cylinder radius. + # @param theH Cylinder height. + # @param theA Cylinder angle in radians. + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. + # + # @return New GEOM.GEOM_Object, containing the created cylinder. + # + # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") + def MakeCylinderA(self, thePnt, theAxis, theR, theH, theA, theName=None): + """ + Create a a portion of cylinder with given base point, axis, radius, height and angle. + + Parameters: + thePnt Central point of cylinder base. + theAxis Cylinder axis. + theR Cylinder radius. + theH Cylinder height. + theA Cylinder angle in radians. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. - ## Create a cylinder with given radius, height and angle (for a portion of cylinder) at + Returns: + New GEOM.GEOM_Object, containing the created cylinder. + """ + # Example: see GEOM_TestAll.py + flag = False + if isinstance(theA,str): + flag = True + theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) + if flag: + theA = theA*math.pi/180. + anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA) + RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp) + anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "cylinder") + return anObj + + ## Create a cylinder with given radius and height at # the origin of coordinate system. Axis of the cylinder # will be collinear to the OZ axis of the coordinate system. # @param theR Cylinder radius. # @param theH Cylinder height. - # @param theA Cylinder angle in radian. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -3023,16 +3063,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_creation_cylinder "Example" @ManageTransactions("PrimOp") - def MakeCylinderRH(self, theR, theH, theA=2*math.pi, theName=None): + def MakeCylinderRH(self, theR, theH, theName=None): """ - Create a cylinder with given radius, height and angle (for a portion of cylinder)at + Create a cylinder with given radius and height at the origin of coordinate system. Axis of the cylinder will be collinear to the OZ axis of the coordinate system. Parameters: theR Cylinder radius. theH Cylinder height. - theA Cylinder angle in radian. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -3041,13 +3080,56 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created cylinder. """ # Example: see GEOM_TestAll.py - theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) - anObj = self.PrimOp.MakeCylinderRH(theR, theH, theA) - + theR,theH,Parameters = ParseParameters(theR, theH) + anObj = self.PrimOp.MakeCylinderRH(theR, theH) RaiseIfFailed("MakeCylinderRH", self.PrimOp) anObj.SetParameters(Parameters) self._autoPublish(anObj, theName, "cylinder") return anObj + + ## Create a portion of cylinder with given radius, height and angle at + # the origin of coordinate system. Axis of the cylinder + # will be collinear to the OZ axis of the coordinate system. + # @param theR Cylinder radius. + # @param theH Cylinder height. + # @param theA Cylinder angle in radians. + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. + # + # @return New GEOM.GEOM_Object, containing the created cylinder. + # + # @ref tui_creation_cylinder "Example" + @ManageTransactions("PrimOp") + def MakeCylinderRHA(self, theR, theH, theA, theName=None): + """ + Create a portion of cylinder with given radius, height and angle at + the origin of coordinate system. Axis of the cylinder + will be collinear to the OZ axis of the coordinate system. + + Parameters: + theR Cylinder radius. + theH Cylinder height. + theA Cylinder angle in radians. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM.GEOM_Object, containing the created cylinder. + """ + # Example: see GEOM_TestAll.py + flag = False + if isinstance(theA,str): + flag = True + theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) + if flag: + theA = theA*math.pi/180. + anObj = self.PrimOp.MakeCylinderRHA(theR, theH, theA) + RaiseIfFailed("MakeCylinderRHA", self.PrimOp) + anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "cylinder") + return anObj ## Create a sphere with given center and radius. # @param thePnt Sphere center. @@ -7831,7 +7913,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Rotate the given object around the given axis - # on the given angle, creating its copy before the rotatation. + # on the given angle, creating its copy before the rotation. # @param theObject The object to be rotated. # @param theAxis Rotation axis. # @param theAngle Rotation angle in radians. diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index e12b35a35..9f9ad7a6c 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -89,7 +89,7 @@ PrimitiveGUI_CylinderDlg::PrimitiveGUI_CylinderDlg (GeometryGUI* theGeometryGUI, GroupDimensions->TextLabel3->setText(tr("GEOM_ANGLE")); GroupDimensions->checkBox->setText(tr("")); GroupDimensions->SpinBox_DZ->setDisabled(true); - + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); layout->setMargin(0); layout->setSpacing(6); layout->addWidget(GroupPoints); @@ -121,13 +121,14 @@ void PrimitiveGUI_CylinderDlg::Init() double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100); // min, max, step and decimals for spin boxes & initial values + double SpecificStep = 5; initSpinBox(GroupPoints->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupPoints->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); + initSpinBox(GroupPoints->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); + initSpinBox(GroupDimensions->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" ); initSpinBox(GroupDimensions->SpinBox_DY, 0.00001, COORD_MAX, step, "length_precision" ); - initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 360., step, "length_precision" ); - + initSpinBox(GroupDimensions->SpinBox_DZ, 0.00001, 359.99999, SpecificStep, "angle_precision" ); // init variables myEditCurrentArgument = GroupPoints->LineEdit1; @@ -139,7 +140,7 @@ void PrimitiveGUI_CylinderDlg::Init() myPoint.nullify(); myDir.nullify(); - double aRadius(100.0), aHeight(300.0), aAngle(360.); + double aRadius(100.0), aHeight(300.0), aAngle(270.); GroupPoints->SpinBox_DX->setValue(aRadius); GroupPoints->SpinBox_DY->setValue(aHeight); GroupPoints->SpinBox_DZ->setValue(aAngle); @@ -167,7 +168,7 @@ void PrimitiveGUI_CylinderDlg::Init() connect(GroupPoints->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); connect(GroupDimensions->checkBox, SIGNAL(toggled(bool)), this, SLOT(ActivateAngle())); - + initName(tr("GEOM_CYLINDER")); setConstructorId(1); // simplest constructor @@ -182,10 +183,8 @@ void PrimitiveGUI_CylinderDlg::SetDoubleSpinBoxStep (double step) { GroupPoints->SpinBox_DX->setSingleStep(step); GroupPoints->SpinBox_DY->setSingleStep(step); - GroupPoints->SpinBox_DZ->setSingleStep(step); GroupDimensions->SpinBox_DX->setSingleStep(step); GroupDimensions->SpinBox_DY->setSingleStep(step); - GroupDimensions->SpinBox_DZ->setSingleStep(step); } //================================================================================= @@ -418,6 +417,7 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) { bool res = false; bool BAngle = false; + GEOM::GEOM_Object_var anObj; GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); @@ -426,32 +426,56 @@ bool PrimitiveGUI_CylinderDlg::execute (ObjectList& objects) case 0: BAngle = GroupPoints->checkBox->isChecked(); if ( myPoint && myDir ) { - if(!BAngle) anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), 360.); - else anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupPoints->SpinBox_DX->text(); - aParameters << GroupPoints->SpinBox_DY->text(); - aParameters << GroupPoints->SpinBox_DZ->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + if(!BAngle){ + anObj = anOper->MakeCylinderPntVecRH(myPoint.get(), myDir.get(), getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox_DX->text(); + aParameters << GroupPoints->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } + else if(BAngle){ + anObj = anOper->MakeCylinderPntVecRHA(myPoint.get(), myDir.get(), getRadius(), getHeight(), getAngle()*M_PI/180.); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox_DX->text(); + aParameters << GroupPoints->SpinBox_DY->text(); + aParameters << GroupPoints->SpinBox_DZ->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; } - res = true; } break; case 1: BAngle = GroupDimensions->checkBox->isChecked(); - if(!BAngle)anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), 360.); - else anObj = anOper->MakeCylinderRH(getRadius(), getHeight(), getAngle()); - if (!anObj->_is_nil() && !IsPreview()) - { - QStringList aParameters; - aParameters << GroupDimensions->SpinBox_DX->text(); - aParameters << GroupDimensions->SpinBox_DY->text(); - aParameters << GroupDimensions->SpinBox_DZ->text(); - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + if(!BAngle){ + anObj = anOper->MakeCylinderRH(getRadius(), getHeight()); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupDimensions->SpinBox_DX->text(); + aParameters << GroupDimensions->SpinBox_DY->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; + } + else if(BAngle){ + anObj = anOper->MakeCylinderRHA(getRadius(), getHeight(), getAngle()*M_PI/180.); + if (!anObj->_is_nil() && !IsPreview()) + { + QStringList aParameters; + aParameters << GroupDimensions->SpinBox_DX->text(); + aParameters << GroupDimensions->SpinBox_DY->text(); + aParameters << GroupDimensions->SpinBox_DZ->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } + res = true; } - res = true; break; } @@ -530,4 +554,4 @@ void PrimitiveGUI_CylinderDlg::ActivateAngle() GroupDimensions->SpinBox_DZ->setEnabled( GroupDimensions->checkBox->isChecked() ); processPreview(); } -} \ No newline at end of file +}