Back to index

salome-geom  6.5.0
GEOMAlgo_ShapeSet.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:        GEOMAlgo_ShapeSet.cxx
00024 // Created:
00025 // Author:      Peter KURNEV
00026 //
00027 #include <GEOMAlgo_ShapeSet.hxx>
00028 
00029 #include <TopExp_Explorer.hxx>
00030 
00031 #include <TopTools_ListIteratorOfListOfShape.hxx>
00032 #include <TopTools_MapIteratorOfMapOfOrientedShape.hxx>
00033 
00034 //=======================================================================
00035 //function :
00036 //purpose  :
00037 //=======================================================================
00038   GEOMAlgo_ShapeSet::GEOMAlgo_ShapeSet()
00039 {
00040 }
00041 //=======================================================================
00042 //function : Clear
00043 //purpose  :
00044 //=======================================================================
00045   void GEOMAlgo_ShapeSet::Clear()
00046 {
00047   myMap.Clear();
00048   myList.Clear();
00049 }
00050 //=======================================================================
00051 //function : Add
00052 //purpose  :
00053 //=======================================================================
00054   void GEOMAlgo_ShapeSet::Add(const TopoDS_Shape& theShape)
00055 {
00056   if (myMap.Add(theShape)) {
00057     myList.Append(theShape);
00058   }
00059 }
00060 //=======================================================================
00061 //function : Add
00062 //purpose  :
00063 //=======================================================================
00064   void GEOMAlgo_ShapeSet::Add(const TopoDS_Shape& theShape,
00065                               const TopAbs_ShapeEnum theType)
00066 {
00067   TopExp_Explorer aExp;
00068   //
00069   aExp.Init(theShape, theType);
00070   for (; aExp.More(); aExp.Next()) {
00071     const TopoDS_Shape& aS=aExp.Current();
00072     if (myMap.Add(aS)) {
00073       myList.Append(aS);
00074     }
00075   }
00076 }
00077 //=======================================================================
00078 //function : Add
00079 //purpose  :
00080 //=======================================================================
00081   void GEOMAlgo_ShapeSet::Add(const TopTools_ListOfShape& theLS)
00082 {
00083   TopTools_ListIteratorOfListOfShape aIt;
00084   //
00085   aIt.Initialize(theLS);
00086   for (; aIt.More(); aIt.Next()) {
00087     const TopoDS_Shape& aS=aIt.Value();
00088     if (myMap.Add(aS)) {
00089       myList.Append(aS);
00090     }
00091   }
00092 }
00093 //=======================================================================
00094 //function :GetSet
00095 //purpose  :
00096 //=======================================================================
00097   const TopTools_ListOfShape& GEOMAlgo_ShapeSet::GetSet()const
00098 {
00099   return myList;
00100 }
00101 //=======================================================================
00102 //function : Contains
00103 //purpose  :
00104 //=======================================================================
00105   Standard_Boolean GEOMAlgo_ShapeSet::Contains(const GEOMAlgo_ShapeSet& theOther)const
00106 {
00107   Standard_Boolean bRet;
00108   TopAbs_Orientation aOr;
00109   TopTools_ListIteratorOfListOfShape aIt;
00110   //
00111   bRet=Standard_True;
00112   const TopTools_ListOfShape& aLS=theOther.GetSet();
00113   aIt.Initialize(aLS);
00114   for (; aIt.More(); aIt.Next()) {
00115     const TopoDS_Shape& aF=aIt.Value();
00116     aOr=aF.Orientation();
00117     if (aOr==TopAbs_FORWARD || aOr==TopAbs_REVERSED) {
00118       bRet=myMap.Contains(aF);
00119       if (!bRet) {
00120         break;
00121       }
00122     }
00123   }
00124   return bRet;
00125 }
00126 //=======================================================================
00127 //function : Subtract
00128 //purpose  :
00129 //=======================================================================
00130   void GEOMAlgo_ShapeSet::Subtract(const GEOMAlgo_ShapeSet& theOther)
00131 {
00132   TopTools_ListIteratorOfListOfShape aIt;
00133   TopTools_ListOfShape aLS;
00134   //
00135   myMap.Clear();
00136   aIt.Initialize(myList);
00137   for (; aIt.More(); aIt.Next()) {
00138     const TopoDS_Shape& aS=aIt.Value();
00139     if (!theOther.myMap.Contains(aS)) {
00140       if(myMap.Add(aS)){
00141         aLS.Append(aS);
00142       }
00143     }
00144   }
00145   //
00146   myList=aLS;
00147 }
00148 //modified by NIZNHY-PKV Wed Oct 28 13:51:36 2010f
00149 //=======================================================================
00150 //function : IsEqual
00151 //purpose  :
00152 //=======================================================================
00153   Standard_Boolean GEOMAlgo_ShapeSet::IsEqual(const GEOMAlgo_ShapeSet& theOther)const
00154 {
00155   Standard_Boolean bRet;
00156   Standard_Integer aNb1, aNb2;
00157   TopTools_ListIteratorOfListOfShape aIt;
00158   //
00159   bRet=Standard_True;
00160   aNb1=myList.Extent();
00161   const TopTools_ListOfShape& aLS2=theOther.GetSet();
00162   aNb2=aLS2.Extent();
00163   if (aNb1!=aNb2) {
00164     return !bRet;
00165   }
00166   //
00167   aIt.Initialize(myList);
00168   for (; aIt.More(); aIt.Next()) {
00169     const TopoDS_Shape& aS=aIt.Value();
00170     if(!theOther.myMap.Contains(aS)) {
00171       bRet=!bRet;
00172       break;
00173     }
00174   }
00175   return bRet;
00176 }
00177 //modified by NIZNHY-PKV Wed Oct 28 13:51:38 2010t