Back to index

salome-geom  6.5.0
NMTTools_PaveFiller.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 // File:        NMTTools_PaveFiller.cxx
00024 // Created:     Fri Dec  5 14:58:54 2003
00025 // Author:      Peter KURNEV
00026 //              <pkv@irinox>
00027 //
00028 #include <NMTTools_PaveFiller.hxx>
00029 //
00030 #include <BOPTColStd_Failure.hxx>
00031 #include <IntTools_Context.hxx>
00032 #include <NMTDS_ShapesDataStructure.hxx>
00033 #include <NMTTools_DEProcessor.hxx>
00034 #include <NMTDS_Iterator.hxx>
00035 #include <NMTDS_InterfPool.hxx>
00036 
00037 //=======================================================================
00038 // function: NMTTools_PaveFiller::NMTTools_PaveFiller
00039 // purpose:
00040 //=======================================================================
00041   NMTTools_PaveFiller::NMTTools_PaveFiller()
00042 {
00043   myDS=NULL;
00044   myDSIt=NULL;
00045   myIsDone=Standard_False;
00046   myNbSources=0;
00047   myNbEdges=0;
00048   myIP=NULL;
00049 }
00050 //=======================================================================
00051 // function: ~
00052 // purpose:
00053 //=======================================================================
00054   NMTTools_PaveFiller::~NMTTools_PaveFiller()
00055 {
00056   Clear();
00057 }
00058 //=======================================================================
00059 // function: Clear
00060 // purpose:
00061 //=======================================================================
00062   void NMTTools_PaveFiller::Clear()
00063 {
00064   if (myDSIt) {
00065     delete myDSIt;
00066   }
00067   if (myDS) {
00068     delete myDS;
00069   }
00070   myDSIt=NULL;
00071   myDS=NULL;
00072 
00073   if (myIP) {
00074     delete myIP;
00075   }
00076   myIP=NULL;
00077 }
00078 //=======================================================================
00079 // function: SetCompositeShape
00080 // purpose:
00081 //=======================================================================
00082   void NMTTools_PaveFiller::SetCompositeShape(const TopoDS_Shape& aS)
00083 {
00084   myCompositeShape=aS;
00085 }
00086 //=======================================================================
00087 // function: CompositeShape
00088 // purpose:
00089 //=======================================================================
00090   const TopoDS_Shape& NMTTools_PaveFiller::CompositeShape()const
00091 {
00092   return myCompositeShape;
00093 }
00094 //=======================================================================
00095 // function:  DS
00096 // purpose:
00097 //=======================================================================
00098   NMTDS_PShapesDataStructure NMTTools_PaveFiller::DS()
00099 {
00100   return myDS;
00101 }
00102 //=======================================================================
00103 // function: DSIt
00104 // purpose:
00105 //=======================================================================
00106   NMTDS_PIterator NMTTools_PaveFiller::DSIt()
00107 {
00108   return myDSIt;
00109 }
00110 //=======================================================================
00111 // function:  IP
00112 // purpose:
00113 //=======================================================================
00114   NMTDS_PInterfPool NMTTools_PaveFiller::IP()
00115 {
00116   return myIP;
00117 }
00118 //=======================================================================
00119 // function:IsDone
00120 // purpose:
00121 //=======================================================================
00122   Standard_Boolean NMTTools_PaveFiller::IsDone() const
00123 {
00124   return myIsDone;
00125 }
00126 //=======================================================================
00127 // function: Context
00128 // purpose:
00129 //=======================================================================
00130   const Handle(IntTools_Context)& NMTTools_PaveFiller::Context() const
00131 {
00132   return myContext;
00133 }
00134 //=======================================================================
00135 // function: PavePool
00136 // purpose:
00137 //=======================================================================
00138   const BOPTools_PavePool& NMTTools_PaveFiller::PavePool() const
00139 {
00140   return myPavePool;
00141 }
00142 //=======================================================================
00143 // function: ChangePavePool
00144 // purpose:
00145 //=======================================================================
00146   BOPTools_PavePool& NMTTools_PaveFiller::ChangePavePool()
00147 {
00148   return myPavePool;
00149 }
00150 //=======================================================================
00151 // function: ChangePavePoolNew
00152 // purpose:
00153 //=======================================================================
00154   BOPTools_PavePool& NMTTools_PaveFiller::ChangePavePoolNew()
00155 {
00156   return myPavePoolNew;
00157 }
00158 //=======================================================================
00159 // function:  CommonBlockPool
00160 // purpose:
00161 //=======================================================================
00162   const NMTTools_CommonBlockPool& NMTTools_PaveFiller::CommonBlockPool() const
00163 {
00164   return myCommonBlockPool;
00165 }
00166 //=======================================================================
00167 // function:  ChangeCommonBlockPool
00168 // purpose:
00169 //=======================================================================
00170   NMTTools_CommonBlockPool& NMTTools_PaveFiller::ChangeCommonBlockPool()
00171 {
00172   return myCommonBlockPool;
00173 }
00174 //=======================================================================
00175 // function:  SplitShapesPool
00176 // purpose:
00177 //=======================================================================
00178   const BOPTools_SplitShapesPool& NMTTools_PaveFiller::SplitShapesPool() const
00179 {
00180   return mySplitShapesPool;
00181 }
00182 //=======================================================================
00183 // function:  ChangeSplitShapesPool
00184 // purpose:
00185 //=======================================================================
00186   BOPTools_SplitShapesPool& NMTTools_PaveFiller::ChangeSplitShapesPool()
00187 {
00188   return mySplitShapesPool;
00189 }
00190 //=======================================================================
00191 // function: Init
00192 // purpose:
00193 //=======================================================================
00194   void NMTTools_PaveFiller::Init()
00195 {
00196   myIsDone=Standard_False;
00197   if (myCompositeShape.IsNull()) {
00198     return;
00199   }
00200   //
00201   Clear();
00202   // 1.
00203   myDS=new NMTDS_ShapesDataStructure;
00204   myDS->SetCompositeShape(myCompositeShape);
00205   myDS->Init();
00206   //
00207   // 2.
00208   myDSIt=new NMTDS_Iterator;
00209   myDSIt->SetDS(myDS);
00210   myDSIt->Prepare();
00211   //
00212   // 3.
00213   myNbSources=myDS->NumberOfShapesOfTheObject()+
00214               myDS->NumberOfShapesOfTheTool();
00215   myNbEdges=myDS->NbEdges();
00216   //
00217   // 4
00218   myIP=new NMTDS_InterfPool;
00219   //
00220   // 5
00221   myContext=new IntTools_Context;
00222 }
00223 
00224 //=======================================================================
00225 // function: Perform
00226 // purpose:
00227 //=======================================================================
00228   void NMTTools_PaveFiller::Perform()
00229 {
00230   myIsDone=Standard_False;
00231   //
00232   //----------------
00233   try {
00234     // 0.
00235     Init();
00236     //1.VV
00237     //
00238     PerformVV();
00239     //
00240     // 2.VE
00241     myPavePool.Resize (myNbEdges);
00242 
00243     PrepareEdges();
00244 
00245     PerformVE();
00246     //
00247     // 3.VF
00248     PerformVF();
00249     //
00250     // 4.EE
00251     myCommonBlockPool.Resize (myNbEdges);
00252     mySplitShapesPool.Resize (myNbEdges);
00253     myPavePoolNew    .Resize (myNbEdges);
00254 
00255     PreparePaveBlocks(TopAbs_VERTEX, TopAbs_EDGE);
00256     PreparePaveBlocks(TopAbs_EDGE, TopAbs_EDGE);
00257     //
00258     PerformEE();
00259     //
00260     RefinePavePool ();
00261     //
00262     myPavePoolNew.Destroy();
00263     myPavePoolNew.Resize (myNbEdges);
00264     //
00265     //modified by NIZNHY-PKV Mon Dec 12 09:13:53 2011f
00266     UpdateCommonBlocks(0);
00267     //modified by NIZNHY-PKV Mon Dec 12 09:13:56 2011t
00268     //
00269     // 5.EF
00270     PreparePaveBlocks(TopAbs_EDGE, TopAbs_FACE);
00271     PerformEF();
00272     //
00273     RefinePavePool();
00274     //
00275     myPavePoolNew.Destroy();
00276 
00277     MakeSplitEdges();
00278 
00279     UpdateCommonBlocks();
00280     //
00281     // 6. FF
00282     PerformFF ();
00283     //
00284     MakeBlocks();
00285     //
00286     MakePCurves();
00287     //
00288     // 7.Postprocessing
00289     UpdatePaveBlocks();
00290     //
00291     NMTTools_DEProcessor aDEP(*this);
00292     aDEP.Do();
00293     //
00294     MakeAloneVertices();
00295     //
00296     //modified by NIZNHY-PKV Mon Dec 12 09:14:23 2011f
00297     myIP->Purge();
00298     //modified by NIZNHY-PKV Mon Dec 12 09:14:27 2011t
00299     myIsDone=Standard_True;
00300   }
00301   catch (BOPTColStd_Failure& ) {
00302   }
00303 }