0025154: Collections in BRepMesh package are named in non-conformant manner
[occt.git] / src / BRepMesh / BRepMesh_VertexTool.cxx
1 // Created on: 2011-06-02
2 // Created by: Oleg AGASHIN
3 // Copyright (c) 2011-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <BRepMesh_VertexTool.hxx>
17 #include <gp_XY.hxx>
18 #include <gp_XYZ.hxx>
19 #include <Precision.hxx>
20 #include <BRepMesh_Vertex.hxx>
21 #include <BRepMesh_VertexInspector.hxx>
22
23 //=======================================================================
24 //function : Inspect
25 //purpose  : 
26 //=======================================================================
27 NCollection_CellFilter_Action BRepMesh_VertexInspector::Inspect(
28   const Standard_Integer theTarget)
29 {
30   const BRepMesh_Vertex& aVertex = myVertices(theTarget - 1);
31   if(aVertex.Movability() == BRepMesh_Deleted)
32   {
33     myDelNodes.Append(theTarget);
34     return CellFilter_Purge;
35   }
36   
37   gp_XY aVec = (myPoint - aVertex.Coord());
38   Standard_Boolean inTol;
39   if (Abs(myTolerance[1]) < Precision::Confusion())
40   {
41     inTol = aVec.SquareModulus() < myTolerance[0];
42   }
43   else
44   {
45     inTol = ((aVec.X() * aVec.X()) < myTolerance[0]) && 
46             ((aVec.Y() * aVec.Y()) < myTolerance[1]);
47   }
48   if (inTol)
49     myResIndices.Append(theTarget);
50
51   return CellFilter_Keep;
52 }
53
54 //=======================================================================
55 //function : BRepMesh_VertexTool
56 //purpose  : 
57 //=======================================================================
58 BRepMesh_VertexTool::BRepMesh_VertexTool(
59   const Standard_Integer                  theReservedSize,
60   const Handle(NCollection_IncAllocator)& theAllocator)
61   : myAllocator (theAllocator),
62     myCellFilter(0., myAllocator),
63     mySelector  (Max(theReservedSize, 64),myAllocator)
64 {
65   const Standard_Real aTol = Precision::Confusion();
66   SetCellSize ( aTol + 0.05 * aTol );
67   SetTolerance( aTol, aTol );
68 }
69
70 //=======================================================================
71 //function : Add
72 //purpose  : 
73 //=======================================================================
74 Standard_Integer BRepMesh_VertexTool::Add(const BRepMesh_Vertex& theVertex)
75 {
76   Standard_Integer aIndex = FindIndex(theVertex);
77   if (aIndex == 0)
78   {
79     BRepMesh::ListOfInteger aParams(myAllocator);
80     aIndex = Add(theVertex, aParams);
81   }
82   return aIndex;
83 }
84
85 //=======================================================================
86 //function : Add
87 //purpose  : 
88 //=======================================================================
89 Standard_Integer BRepMesh_VertexTool::Add(
90   const BRepMesh_Vertex&         theVertex,
91   const BRepMesh::ListOfInteger& theParams)
92 {
93   Standard_Integer aIndex = mySelector.Add(theVertex);
94   myLinksMap.Bind(aIndex, theParams);
95
96   gp_XY aMinPnt, aMaxPnt;
97   expandPoint(theVertex.Coord(), aMinPnt, aMaxPnt);
98   myCellFilter.Add(aIndex, aMinPnt, aMaxPnt);
99
100   return aIndex;
101 }
102
103 //=======================================================================
104 //function : Delete
105 //purpose  : 
106 //=======================================================================
107 void BRepMesh_VertexTool::Delete(const Standard_Integer theIndex)
108 {
109   BRepMesh_Vertex& aV = mySelector.GetVertex(theIndex);
110
111   gp_XY aMinPnt, aMaxPnt;
112   expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
113
114   myCellFilter.Remove(theIndex, aMinPnt, aMaxPnt);
115   mySelector.Delete(theIndex);
116 }
117
118 //=======================================================================
119 //function : Substitute
120 //purpose  : 
121 //=======================================================================
122 void BRepMesh_VertexTool::Substitute(
123   const Standard_Integer         theIndex,
124   const BRepMesh_Vertex&         theVertex,
125   const BRepMesh::ListOfInteger& theData)
126 {
127   BRepMesh_Vertex& aV = mySelector.GetVertex(theIndex);
128
129   gp_XY aMinPnt, aMaxPnt;
130   expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
131
132   myCellFilter.Remove(theIndex, aMinPnt, aMaxPnt);
133
134   aV = theVertex;
135   expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
136   myCellFilter.Add(theIndex, aMinPnt, aMaxPnt);
137   FindFromIndex(theIndex) = theData;
138 }
139
140 //=======================================================================
141 //function : Statistics
142 //purpose  : 
143 //=======================================================================
144 void BRepMesh_VertexTool::Statistics(Standard_OStream& theStream) const
145 {
146   theStream << "\nStructure Statistics\n---------------\n\n";
147   theStream << "This structure has " << mySelector.NbVertices() << " Nodes\n\n";
148 }