X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_CylinderDriver.cxx;h=79ee42148e64556b72547c39c6ca6cc75db917bf;hb=7a3c2d25cc85b5c75acf2c8df92e4373af480d42;hp=50e69d22deb8ecf5a8c74a843825d6dff7195d59;hpb=e2dcf4323c7d7c36e8e1a4fda4dd6cf86c99be81;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx index 50e69d22d..79ee42148 100644 --- a/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CylinderDriver.cxx @@ -1,3 +1,24 @@ +// Copyright (C) 2007-2016 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 +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include @@ -44,7 +65,7 @@ GEOMImpl_CylinderDriver::GEOMImpl_CylinderDriver() //function : Execute //purpose : //======================================================================= -Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const +Standard_Integer GEOMImpl_CylinderDriver::Execute(LOGBOOK& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); @@ -55,11 +76,11 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const gp_Pnt aP; gp_Vec aV; - 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(); @@ -89,61 +110,92 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const if (aCI.GetH() < 0.0) aV.Reverse(); gp_Ax2 anAxes (aP, aV); - 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"); + TopoDS_Shape aShape; + + switch (aType) { + case CYLINDER_R_H: + case CYLINDER_PNT_VEC_R_H: + { + 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(); + break; + } + case CYLINDER_R_H_A: + case CYLINDER_PNT_VEC_R_H_A: + { + BRepPrimAPI_MakeCylinder MC (anAxes, aCI.GetR(), Abs(aCI.GetH()), aCI.GetA()); + MC.Build(); + if (!MC.IsDone()) { + StdFail_NotDone::Raise("Cylinder can't be computed from the given parameters. Failure."); + } + aShape = MC.Shape(); + break; + } + default: + break; } - - TopoDS_Shape aShape = MC.Shape(); + if (aShape.IsNull()) return 0; - aFunction->SetValue(aShape); +#if OCC_VERSION_MAJOR < 7 log.SetTouched(Label()); - +#else + log->SetTouched(Label()); +#endif return 1; } +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ -//======================================================================= -//function : GEOMImpl_CylinderDriver_Type_ -//purpose : -//======================================================================= -Standard_EXPORT Handle_Standard_Type& GEOMImpl_CylinderDriver_Type_() +bool GEOMImpl_CylinderDriver:: +GetCreationInformation(std::string& theOperationName, + std::vector& theParams) { - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_CylinderDriver", - sizeof(GEOMImpl_CylinderDriver), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - -//======================================================================= -//function : DownCast -//purpose : -//======================================================================= -const Handle(GEOMImpl_CylinderDriver) Handle(GEOMImpl_CylinderDriver)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOMImpl_CylinderDriver) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_CylinderDriver))) { - _anOtherObject = Handle(GEOMImpl_CylinderDriver)((Handle(GEOMImpl_CylinderDriver)&)AnObject); - } + if (Label().IsNull()) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); + + GEOMImpl_ICylinder aCI( function ); + Standard_Integer aType = function->GetType(); + + theOperationName = "CYLINDER"; + + switch ( aType ) { + case CYLINDER_R_H: + AddParam( theParams, "Radius", aCI.GetR() ); + AddParam( theParams, "Height", aCI.GetH() ); + break; + case CYLINDER_R_H_A: + AddParam( theParams, "Radius", aCI.GetR() ); + AddParam( theParams, "Height", aCI.GetH() ); + AddParam( theParams, "Angle", aCI.GetA() ); + break; + case CYLINDER_PNT_VEC_R_H: + AddParam( theParams, "Base Point", aCI.GetPoint() ); + AddParam( theParams, "Vector", aCI.GetVector() ); + AddParam( theParams, "Radius", aCI.GetR() ); + AddParam( theParams, "Height", aCI.GetH() ); + break; + case CYLINDER_PNT_VEC_R_H_A: + AddParam( theParams, "Base Point", aCI.GetPoint() ); + AddParam( theParams, "Vector", aCI.GetVector() ); + AddParam( theParams, "Radius", aCI.GetR() ); + AddParam( theParams, "Height", aCI.GetH() ); + AddParam( theParams, "Angle", aCI.GetA() ); + break; + default: + return false; } - return _anOtherObject ; + return true; } + +OCCT_IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_CylinderDriver,GEOM_BaseDriver);