X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FGEOMImpl%2FGEOMImpl_MeasureDriver.cxx;h=b507640e69b786b903af35073721dbc454f55645;hb=2a460c5e9f4fc540bf18d1a9d469db66a91e9a0d;hp=54989d8e2c2cd65090120b1523bbc87e98f757e6;hpb=5b3622aa2363853841fd5b4205c78a715bfee4a4;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx index 54989d8e2..b507640e6 100644 --- a/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_MeasureDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 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 @@ -6,7 +6,7 @@ // 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. +// 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 @@ -105,7 +105,7 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const gp_Pnt aCenterMass = aPos.Location(); aShape = BRepBuilderAPI_MakeVertex(aCenterMass).Shape(); } - else if (aType == BND_BOX_MEASURE) + else if (aType == BND_BOX_MEASURE || aType == BND_BOX_MEASURE_PRECISE) { Handle(GEOM_Function) aRefBase = aCI.GetBase(); TopoDS_Shape aShapeBase = aRefBase->GetValue(); @@ -124,6 +124,12 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const Bnd_Box B; BRepBndLib::Add(aShapeBase, B); + if (aType == BND_BOX_MEASURE_PRECISE) { + if (!GEOMUtils::PreciseBoundingBox(aShapeBase, B)) { + Standard_NullObject::Raise("Bounding box cannot be precised"); + } + } + Standard_Real Xmin, Ymin, Zmin, Xmax, Ymax, Zmax; B.Get(Xmin, Ymin, Zmin, Xmax, Ymax, Zmax); @@ -316,45 +322,48 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const return 1; } +//================================================================================ +/*! + * \brief Returns a name of creation operation and names and values of creation parameters + */ +//================================================================================ -//======================================================================= -//function : GEOMImpl_MeasureDriver_Type_ -//purpose : -//======================================================================= -Standard_EXPORT Handle_Standard_Type& GEOMImpl_MeasureDriver_Type_() +bool GEOMImpl_MeasureDriver:: +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_MeasureDriver", - sizeof(GEOMImpl_MeasureDriver), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - -//======================================================================= -//function : DownCast -//purpose : -//======================================================================= -const Handle(GEOMImpl_MeasureDriver) Handle(GEOMImpl_MeasureDriver)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOMImpl_MeasureDriver) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_MeasureDriver))) { - _anOtherObject = Handle(GEOMImpl_MeasureDriver)((Handle(GEOMImpl_MeasureDriver)&)AnObject); - } + if (Label().IsNull()) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); + + GEOMImpl_IMeasure aCI( function ); + Standard_Integer aType = function->GetType(); + + switch ( aType ) { + case CDG_MEASURE: + theOperationName = "MASS_CENTER"; + AddParam( theParams, "Object", aCI.GetBase() ); + break; + case BND_BOX_MEASURE: + case BND_BOX_MEASURE_PRECISE: + theOperationName = "BND_BOX"; + AddParam( theParams, "Object", aCI.GetBase() ); + break; + case VERTEX_BY_INDEX: + theOperationName = "GetVertexByIndex"; + AddParam( theParams, "Object", aCI.GetBase() ); + AddParam( theParams, "Index", aCI.GetIndex() ); + break; + case VECTOR_FACE_NORMALE: + theOperationName = "NORMALE"; + AddParam( theParams, "Face", aCI.GetBase() ); + AddParam( theParams, "Point", aCI.GetPoint(), "face center" ); + break; + default: + return false; } - return _anOtherObject ; + return true; } +IMPLEMENT_STANDARD_HANDLE (GEOMImpl_MeasureDriver,GEOM_BaseDriver); + +IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_MeasureDriver,GEOM_BaseDriver);