0026593: Coding rules - revert compatibility of NCollection_CellFilter constructor...
[occt.git] / src / BRepMesh / BRepMesh_VertexTool.cxx
CommitLineData
b311480e 1// Created on: 2011-06-02
2// Created by: Oleg AGASHIN
973c2be1 3// Copyright (c) 2011-2014 OPEN CASCADE SAS
b311480e 4//
973c2be1 5// This file is part of Open CASCADE Technology software library.
b311480e 6//
d5f74e42 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
973c2be1 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.
b311480e 12//
973c2be1 13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
51c3cc5f 15
fc9b36d6 16#include <BRepMesh_VertexTool.hxx>
51c3cc5f 17#include <gp_XY.hxx>
fc9b36d6 18#include <gp_XYZ.hxx>
51c3cc5f
O
19#include <Precision.hxx>
20#include <BRepMesh_Vertex.hxx>
21#include <BRepMesh_VertexInspector.hxx>
51c3cc5f
O
22
23//=======================================================================
fc9b36d6 24//function : Inspect
51c3cc5f
O
25//purpose :
26//=======================================================================
fc9b36d6 27NCollection_CellFilter_Action BRepMesh_VertexInspector::Inspect(
28 const Standard_Integer theTarget)
51c3cc5f 29{
2caff0b3 30 const BRepMesh_Vertex& aVertex = myVertices->Value(theTarget - 1);
fc9b36d6 31 if(aVertex.Movability() == BRepMesh_Deleted)
32 {
33 myDelNodes.Append(theTarget);
34 return CellFilter_Purge;
35 }
51c3cc5f 36
fc9b36d6 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);
51c3cc5f 50
fc9b36d6 51 return CellFilter_Keep;
51c3cc5f
O
52}
53
54//=======================================================================
fc9b36d6 55//function : BRepMesh_VertexTool
51c3cc5f
O
56//purpose :
57//=======================================================================
fc9b36d6 58BRepMesh_VertexTool::BRepMesh_VertexTool(
848fa7e3 59 const Standard_Integer theReservedSize,
60 const Handle(NCollection_IncAllocator)& theAllocator)
fc9b36d6 61 : myAllocator (theAllocator),
a7653f4f 62 myCellFilter(0., myAllocator),
fc9b36d6 63 mySelector (Max(theReservedSize, 64),myAllocator)
51c3cc5f 64{
fc9b36d6 65 const Standard_Real aTol = Precision::Confusion();
66 SetCellSize ( aTol + 0.05 * aTol );
67 SetTolerance( aTol, aTol );
51c3cc5f
O
68}
69
70//=======================================================================
71//function : Add
72//purpose :
73//=======================================================================
2caff0b3 74Standard_Integer BRepMesh_VertexTool::Add(
75 const BRepMesh_Vertex& theVertex,
76 const Standard_Boolean isForceAdd)
51c3cc5f 77{
2caff0b3 78 Standard_Integer aIndex = isForceAdd ? 0 : FindIndex(theVertex);
fc9b36d6 79 if (aIndex == 0)
51c3cc5f 80 {
2caff0b3 81 aIndex = mySelector.Add(theVertex);
51c3cc5f 82
2caff0b3 83 gp_XY aMinPnt, aMaxPnt;
84 expandPoint(theVertex.Coord(), aMinPnt, aMaxPnt);
85 myCellFilter.Add(aIndex, aMinPnt, aMaxPnt);
86 }
fc9b36d6 87 return aIndex;
51c3cc5f
O
88}
89
90//=======================================================================
fc9b36d6 91//function : Delete
51c3cc5f
O
92//purpose :
93//=======================================================================
fc9b36d6 94void BRepMesh_VertexTool::Delete(const Standard_Integer theIndex)
51c3cc5f 95{
fc9b36d6 96 BRepMesh_Vertex& aV = mySelector.GetVertex(theIndex);
51c3cc5f 97
fc9b36d6 98 gp_XY aMinPnt, aMaxPnt;
99 expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
51c3cc5f 100
fc9b36d6 101 myCellFilter.Remove(theIndex, aMinPnt, aMaxPnt);
102 mySelector.Delete(theIndex);
51c3cc5f
O
103}
104
105//=======================================================================
106//function : Substitute
107//purpose :
108//=======================================================================
fc9b36d6 109void BRepMesh_VertexTool::Substitute(
2caff0b3 110 const Standard_Integer theIndex,
111 const BRepMesh_Vertex& theVertex)
51c3cc5f 112{
fc9b36d6 113 BRepMesh_Vertex& aV = mySelector.GetVertex(theIndex);
51c3cc5f 114
fc9b36d6 115 gp_XY aMinPnt, aMaxPnt;
116 expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
51c3cc5f 117
fc9b36d6 118 myCellFilter.Remove(theIndex, aMinPnt, aMaxPnt);
51c3cc5f 119
fc9b36d6 120 aV = theVertex;
121 expandPoint(aV.Coord(), aMinPnt, aMaxPnt);
122 myCellFilter.Add(theIndex, aMinPnt, aMaxPnt);
51c3cc5f
O
123}
124
125//=======================================================================
126//function : Statistics
127//purpose :
128//=======================================================================
fc9b36d6 129void BRepMesh_VertexTool::Statistics(Standard_OStream& theStream) const
51c3cc5f 130{
fc9b36d6 131 theStream << "\nStructure Statistics\n---------------\n\n";
132 theStream << "This structure has " << mySelector.NbVertices() << " Nodes\n\n";
51c3cc5f 133}