Back to index

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