Back to index

salome-geom  6.5.0
GEOMAlgo_ClsfSolid.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // This library is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU Lesser General Public
00005 // License as published by the Free Software Foundation; either
00006 // version 2.1 of the License.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // Lesser General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU Lesser General Public
00014 // License along with this library; if not, write to the Free Software
00015 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00016 //
00017 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00018 //
00019 
00020 // File:        GEOMAlgo_ClsfSolid.cxx
00021 // Created:     Mon Jan 29 10:35:46 2007
00022 // Author:      Peter KURNEV
00023 //              <pkv@irinox>
00024 //
00025 #include <GEOMAlgo_ClsfSolid.hxx>
00026 
00027 #include <TopAbs_ShapeEnum.hxx>
00028 #include <TopoDS.hxx>
00029 #include <TopoDS_Solid.hxx>
00030 #include <BRep_Builder.hxx>
00031 #include <BRepClass3d_SolidClassifier.hxx>
00032 
00033 IMPLEMENT_STANDARD_HANDLE(GEOMAlgo_ClsfSolid, GEOMAlgo_Clsf)
00034 IMPLEMENT_STANDARD_RTTIEXT(GEOMAlgo_ClsfSolid, GEOMAlgo_Clsf)
00035 
00036 //=======================================================================
00037 //function :
00038 //purpose  :
00039 //=======================================================================
00040   GEOMAlgo_ClsfSolid::GEOMAlgo_ClsfSolid()
00041 :
00042   GEOMAlgo_Clsf()
00043 {
00044   myPClsf=NULL;
00045 }
00046 //=======================================================================
00047 //function : ~
00048 //purpose  :
00049 //=======================================================================
00050   GEOMAlgo_ClsfSolid::~GEOMAlgo_ClsfSolid()
00051 {
00052   if (myPClsf) {
00053     BRepClass3d_SolidClassifier* pSC;
00054     //
00055     pSC=(BRepClass3d_SolidClassifier*)myPClsf;
00056     delete pSC;
00057   }
00058 }
00059 //=======================================================================
00060 //function : SetShape
00061 //purpose  :
00062 //=======================================================================
00063   void GEOMAlgo_ClsfSolid::SetShape(const TopoDS_Shape& aS)
00064 {
00065   myShape=aS;
00066 }
00067 //=======================================================================
00068 //function : Shape
00069 //purpose  :
00070 //=======================================================================
00071   const TopoDS_Shape& GEOMAlgo_ClsfSolid::Shape()const
00072 {
00073   return myShape;
00074 }
00075 //=======================================================================
00076 //function : CheckData
00077 //purpose  :
00078 //=======================================================================
00079   void GEOMAlgo_ClsfSolid::CheckData()
00080 {
00081   myErrorStatus=0;
00082   //
00083   BRepClass3d_SolidClassifier* pSC;
00084   TopAbs_ShapeEnum aType;
00085   BRep_Builder aBB;
00086   TopoDS_Solid aS;
00087   //
00088   if (myShape.IsNull()) {
00089     myErrorStatus=10; // mySolid=NULL
00090     return;
00091   }
00092   //
00093   aType=myShape.ShapeType();
00094   if (!(aType==TopAbs_SOLID || aType==TopAbs_SHELL)) {
00095     myErrorStatus=12;
00096     return;
00097   }
00098   //
00099   //===
00100   if (aType==TopAbs_SOLID) {
00101     aS=TopoDS::Solid(myShape);
00102   }
00103   else {
00104     aBB.MakeSolid(aS);
00105     aBB.Add(aS, myShape);
00106   }
00107   //
00108   if (myPClsf) {
00109     pSC=(BRepClass3d_SolidClassifier*)myPClsf;
00110     delete pSC;
00111   }
00112   //
00113   pSC=new BRepClass3d_SolidClassifier(aS);
00114   myPClsf=pSC;
00115 }
00116 //=======================================================================
00117 //function : Perform
00118 //purpose  :
00119 //=======================================================================
00120   void GEOMAlgo_ClsfSolid::Perform()
00121 {
00122   myErrorStatus=0;
00123   //
00124   if (!myPClsf) {
00125     myErrorStatus=11;
00126     return;
00127   }
00128   //
00129   BRepClass3d_SolidClassifier* pSC;
00130   //
00131   pSC=(BRepClass3d_SolidClassifier*)myPClsf;
00132   pSC->Perform(myPnt, myTolerance);
00133   myState=pSC->State();
00134 }
00135 //
00136 // myErrorStatus :
00137 //
00138 // 10 - mySolid=NULL
00139 // 11 - myPClsf=NULL
00140 // 12 - unallowed type of myShape
00141