Back to index

salome-geom  6.5.0
GEOMAlgo_PassKeyShape.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_PassKeyShape.cxx
00024 // Created:
00025 // Author:      Peter KURNEV
00026 //              <pkv@irinox>
00027 //
00028 #include <GEOMAlgo_PassKeyShape.hxx>
00029 
00030 #include <TopTools_ListOfShape.hxx>
00031 #include <TopTools_ListIteratorOfListOfShape.hxx>
00032 
00033 
00034 static
00035   Standard_Integer NormalizedId(const Standard_Integer aId,
00036                                 const Standard_Integer aDiv);
00037 //=======================================================================
00038 //function :
00039 //purpose  :
00040 //=======================================================================
00041   GEOMAlgo_PassKeyShape::GEOMAlgo_PassKeyShape()
00042 {
00043   myUpper=432123;
00044 }
00045 //=======================================================================
00046 //function :
00047 //purpose  :
00048 //=======================================================================
00049   GEOMAlgo_PassKeyShape::GEOMAlgo_PassKeyShape(const GEOMAlgo_PassKeyShape& aOther)
00050 {
00051   myUpper=432123;
00052   myNbIds=aOther.myNbIds;
00053   mySum=aOther.mySum;
00054   myMap=aOther.myMap;
00055 }
00056 //=======================================================================
00057 //function :~
00058 //purpose  :
00059 //=======================================================================
00060   GEOMAlgo_PassKeyShape::~GEOMAlgo_PassKeyShape()
00061 {
00062 }
00063 //=======================================================================
00064 //function :Assign
00065 //purpose  :
00066 //=======================================================================
00067   GEOMAlgo_PassKeyShape& GEOMAlgo_PassKeyShape::Assign(const GEOMAlgo_PassKeyShape& aOther)
00068 {
00069   myUpper=432123;
00070   myNbIds=aOther.myNbIds;
00071   mySum=aOther.mySum;
00072   myMap=aOther.myMap;
00073   return *this;
00074 }
00075 //=======================================================================
00076 //function :Clear
00077 //purpose  :
00078 //=======================================================================
00079   void GEOMAlgo_PassKeyShape::Clear()
00080 {
00081   myNbIds=0;
00082   mySum=0;
00083   myMap.Clear();
00084 }
00085 //=======================================================================
00086 //function :SetShapes
00087 //purpose  :
00088 //=======================================================================
00089   void GEOMAlgo_PassKeyShape::SetShapes(const TopoDS_Shape& aS1)
00090 
00091 {
00092   Standard_Integer aHC;
00093   //
00094   Clear();
00095   myNbIds=1;
00096   myMap.Add(aS1);
00097   aHC=aS1.HashCode(myUpper);
00098   mySum=NormalizedId(aHC, myNbIds);
00099 }
00100 //=======================================================================
00101 //function :SetShapes
00102 //purpose  :
00103 //=======================================================================
00104   void GEOMAlgo_PassKeyShape::SetShapes(const TopoDS_Shape& aS1,
00105                                         const TopoDS_Shape& aS2)
00106 {
00107   TopTools_ListOfShape aLS;
00108   //
00109   aLS.Append(aS1);
00110   aLS.Append(aS2);
00111   SetShapes(aLS);
00112 }
00113 //=======================================================================
00114 //function :SetShapes
00115 //purpose  :
00116 //=======================================================================
00117   void GEOMAlgo_PassKeyShape::SetShapes(const TopoDS_Shape& aS1,
00118                                         const TopoDS_Shape& aS2,
00119                                         const TopoDS_Shape& aS3)
00120 {
00121   TopTools_ListOfShape aLS;
00122   //
00123   aLS.Append(aS1);
00124   aLS.Append(aS2);
00125   aLS.Append(aS3);
00126   SetShapes(aLS);
00127 }
00128 //=======================================================================
00129 //function :SetShapes
00130 //purpose  :
00131 //=======================================================================
00132   void GEOMAlgo_PassKeyShape::SetShapes(const TopoDS_Shape& aS1,
00133                                         const TopoDS_Shape& aS2,
00134                                         const TopoDS_Shape& aS3,
00135                                         const TopoDS_Shape& aS4)
00136 {
00137   TopTools_ListOfShape aLS;
00138   //
00139   aLS.Append(aS1);
00140   aLS.Append(aS2);
00141   aLS.Append(aS3);
00142   aLS.Append(aS4);
00143   SetShapes(aLS);
00144 }
00145 //=======================================================================
00146 //function :SetShapes
00147 //purpose  :
00148 //=======================================================================
00149   void GEOMAlgo_PassKeyShape::SetShapes(const TopTools_ListOfShape& aLS)
00150 {
00151   Standard_Integer i, aId, aIdN;
00152   TopTools_ListIteratorOfListOfShape aIt;
00153   //
00154   Clear();
00155   aIt.Initialize(aLS);
00156   for (; aIt.More(); aIt.Next()) {
00157     const TopoDS_Shape& aS=aIt.Value();
00158     myMap.Add(aS);
00159   }
00160   myNbIds=myMap.Extent();
00161   for(i=1; i<=myNbIds; ++i) {
00162     const TopoDS_Shape& aS=myMap(i);
00163     aId=aS.HashCode(myUpper);
00164     aIdN=NormalizedId(aId, myNbIds);
00165     mySum+=aIdN;
00166   }
00167 }
00168 //=======================================================================
00169 //function :NbIds
00170 //purpose  :
00171 //=======================================================================
00172   Standard_Integer GEOMAlgo_PassKeyShape::NbIds()const
00173 {
00174   return myNbIds;
00175 }
00176 //=======================================================================
00177 //function :IsEqual
00178 //purpose  :
00179 //=======================================================================
00180   Standard_Boolean GEOMAlgo_PassKeyShape::IsEqual(const GEOMAlgo_PassKeyShape& aOther) const
00181 {
00182   Standard_Boolean bRet;
00183   Standard_Integer i;
00184   //
00185   bRet=Standard_False;
00186   //
00187   if (myNbIds!=aOther.myNbIds) {
00188     return bRet;
00189   }
00190   for (i=1; i<=myNbIds; ++i) {
00191     const TopoDS_Shape& aS=myMap(i);
00192     if (!aOther.myMap.Contains(aS)) {
00193       return bRet;
00194     }
00195   }
00196   return !bRet;
00197 }
00198 //=======================================================================
00199 //function : HashCode
00200 //purpose  :
00201 //=======================================================================
00202   Standard_Integer GEOMAlgo_PassKeyShape::HashCode(const Standard_Integer aUpper) const
00203 {
00204   return ::HashCode(mySum, aUpper);
00205 }
00206 //=======================================================================
00207 //function : Dump
00208 //purpose  :
00209 //=======================================================================
00210   void GEOMAlgo_PassKeyShape::Dump(const Standard_Integer)const
00211 {
00212 }
00213 //=======================================================================
00214 // function: NormalizedId
00215 // purpose :
00216 //=======================================================================
00217 Standard_Integer NormalizedId(const Standard_Integer aId,
00218                               const Standard_Integer aDiv)
00219 {
00220   Standard_Integer aMax, aTresh, aIdRet;
00221   //
00222   aIdRet=aId;
00223   aMax=::IntegerLast();
00224   aTresh=aMax/aDiv;
00225   if (aId>aTresh) {
00226     aIdRet=aId%aTresh;
00227   }
00228   return aIdRet;
00229 }