Back to index

salome-geom  6.5.0
NMTTools_CheckerSI.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:       NMTTools_CheckerSI.cxx
00021 //  Created:    Mon Feb 19 11:32:08 2007
00022 //  Author:     Peter KURNEV
00023 //
00024 #include <NMTTools_CheckerSI.hxx>
00025 
00026 #include <NMTDS_ShapesDataStructure.hxx>
00027 #include <NMTDS_IteratorCheckerSI.hxx>
00028 #include <NMTDS_InterfPool.hxx>
00029 #include <NMTTools_DEProcessor.hxx>
00030 #include <IntTools_Context.hxx>
00031 
00032 //=======================================================================
00033 //function :
00034 //purpose  :
00035 //=======================================================================
00036   NMTTools_CheckerSI::NMTTools_CheckerSI()
00037 :
00038   NMTTools_PaveFiller()
00039 {
00040   myStopStatus=0;
00041 }
00042 //=======================================================================
00043 //function : ~
00044 //purpose  :
00045 //=======================================================================
00046   NMTTools_CheckerSI::~NMTTools_CheckerSI()
00047 {
00048 }
00049 //=======================================================================
00050 //function : Clear
00051 //purpose  :
00052 //=======================================================================
00053   void NMTTools_CheckerSI::Clear()
00054 {
00055   NMTTools_PaveFiller::Clear();
00056 }
00057 //=======================================================================
00058 //function : StopStatus
00059 //purpose  :
00060 //=======================================================================
00061   Standard_Integer NMTTools_CheckerSI::StopStatus()const
00062 {
00063   return myStopStatus;
00064 }
00065 //=======================================================================
00066 //function : Init
00067 //purpose  :
00068 //=======================================================================
00069   void NMTTools_CheckerSI::Init()
00070 {
00071   myIsDone=Standard_False;
00072   if (myCompositeShape.IsNull()) {
00073     return;
00074   }
00075   //
00076   Clear();
00077   // 1.
00078   myDS=new NMTDS_ShapesDataStructure;
00079   myDS->SetCompositeShape(myCompositeShape);
00080   myDS->Init();
00081   //
00082   // 2.
00083   myDSIt=new NMTDS_IteratorCheckerSI;
00084   myDSIt->SetDS(myDS);
00085   myDSIt->Prepare();
00086   //
00087   // 3.
00088   myNbSources=myDS->NumberOfShapesOfTheObject()+
00089               myDS->NumberOfShapesOfTheTool();
00090   myNbEdges=myDS->NbEdges();
00091   // 4
00092   myIP=new NMTDS_InterfPool;
00093   //
00094   // 5
00095   myContext=new IntTools_Context;
00096 }
00097 //=======================================================================
00098 //function : Perform
00099 //purpose  :
00100 //=======================================================================
00101   void NMTTools_CheckerSI::Perform()
00102 {
00103   myIsDone=Standard_False;
00104   myStopStatus=0;
00105   //
00106   Init();
00107   //1.VV
00108   //
00109   PerformVV();
00110   //
00111   // 2.VE
00112   myPavePool.Resize (myNbEdges);
00113 
00114   PrepareEdges();
00115   //
00116   PerformVE();
00117   //
00118   // 3.VF
00119   PerformVF();
00120   //
00121   // 4.EE
00122   myCommonBlockPool.Resize (myNbEdges);
00123   mySplitShapesPool.Resize (myNbEdges);
00124   myPavePoolNew    .Resize (myNbEdges);
00125   //
00126   PreparePaveBlocks(TopAbs_VERTEX, TopAbs_EDGE);
00127   if (myStopStatus) {
00128     return;
00129   }
00130   PreparePaveBlocks(TopAbs_EDGE, TopAbs_EDGE);
00131   if (myStopStatus) {
00132     return;
00133   }
00134   //
00135   PerformEE();
00136   //
00137   RefinePavePool ();
00138   if (myStopStatus) {
00139     return;
00140   }
00141   //
00142   myPavePoolNew.Destroy();
00143   myPavePoolNew.Resize (myNbEdges);
00144   //
00145   // 5.EF
00146   PreparePaveBlocks(TopAbs_EDGE, TopAbs_FACE);
00147   if (myStopStatus) {
00148     return;
00149   }
00150   //
00151   PerformEF();
00152   //
00153   RefinePavePool();
00154   if (myStopStatus) {
00155     return;
00156   }
00157   //
00158   myPavePoolNew.Destroy();
00159   //
00160   MakeSplitEdges();
00161   //
00162   UpdateCommonBlocks();
00163   //
00164   // 6. FF
00165   PerformFF ();
00166   //
00167   MakeBlocks();
00168   //
00169   MakePCurves();
00170   //
00171   // 7. Postprocessing
00172   UpdatePaveBlocks();
00173   //
00174   NMTTools_DEProcessor aDEP(*this);
00175   aDEP.Do();
00176   //
00177   MakeAloneVertices();
00178   //
00179   myIsDone=Standard_True;
00180 }