Commit | Line | Data |
---|---|---|
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 | 27 | NCollection_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 | 58 | BRepMesh_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 | 74 | Standard_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 | 94 | void 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 | 109 | void 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 | 129 | void 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 | } |