0026106: BRepMesh - revision of data model
[occt.git] / src / BRepMesh / BRepMesh_SelectorOfDataStructureOfDelaun.cxx
1 // Created on: 1993-06-01
2 // Created by: Didier PIFFAULT
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #include <BRepMesh_SelectorOfDataStructureOfDelaun.hxx>
18 #include <BRepMesh_PairOfIndex.hxx>
19 #include <BRepMesh_Edge.hxx>
20
21 //=======================================================================
22 //function : Default constructor
23 //purpose  : 
24 //=======================================================================
25 BRepMesh_SelectorOfDataStructureOfDelaun::BRepMesh_SelectorOfDataStructureOfDelaun()
26 {
27 }
28
29 //=======================================================================
30 //function : Constructor
31 //purpose  : 
32 //=======================================================================
33 BRepMesh_SelectorOfDataStructureOfDelaun::BRepMesh_SelectorOfDataStructureOfDelaun(
34   const Handle(BRepMesh_DataStructureOfDelaun)& theMesh)
35   : myMesh(theMesh)
36 {
37 }
38
39 //=======================================================================
40 //function : Initialize
41 //purpose  : 
42 //=======================================================================
43 void BRepMesh_SelectorOfDataStructureOfDelaun::Initialize(
44   const Handle(BRepMesh_DataStructureOfDelaun)& theMesh)
45 {
46   myMesh = theMesh;
47   myNodes.Clear();
48   myLinks.Clear();
49   myElements.Clear();
50   myFrontier.Clear();
51 }
52
53 //=======================================================================
54 //function : NeighboursOf(Node)
55 //purpose  : 
56 //=======================================================================
57 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOf(
58   const BRepMesh_Vertex& theNode)
59 {
60   NeighboursOfNode(myMesh->IndexOf(theNode));
61 }
62
63 //=======================================================================
64 //function : NeighboursOfNode(NodeIndex)
65 //purpose  : 
66 //=======================================================================
67 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOfNode(
68   const Standard_Integer theNodeIndex)
69 {
70   IMeshData::ListOfInteger::Iterator aLinkIt(
71     myMesh->LinksConnectedTo(theNodeIndex));
72
73   for (; aLinkIt.More(); aLinkIt.Next())
74     elementsOfLink(aLinkIt.Value());
75 }
76
77 //=======================================================================
78 //function : NeighboursOf(Link)
79 //purpose  : 
80 //=======================================================================
81 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOf(
82   const BRepMesh_Edge& theLink)
83 {
84   NeighboursOfNode(theLink.FirstNode());
85   NeighboursOfNode(theLink.LastNode());
86 }
87
88 //=======================================================================
89 //function : NeighboursOfLink(LinkIndex)
90 //purpose  : 
91 //=======================================================================
92 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOfLink(
93   const Standard_Integer theLinkIndex)
94 {
95   NeighboursOf(myMesh->GetLink(theLinkIndex));
96 }
97
98 //=======================================================================
99 //function : NeighboursOf(Element)
100 //purpose  :
101 //=======================================================================
102 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOf(
103   const BRepMesh_Triangle& theElement)
104 {
105   Standard_Integer v[3];
106   myMesh->ElementNodes(theElement, v);
107
108   for (Standard_Integer i = 0; i < 3; ++i)
109     NeighboursOfNode(v[i]);
110 }
111
112 //=======================================================================
113 //function : NeighboursOfElement(ElementIndex)
114 //purpose  :
115 //=======================================================================
116 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursOfElement(
117   const Standard_Integer theElementIndex)
118 {
119   NeighboursOf(myMesh->GetElement(theElementIndex));
120 }
121
122 //=======================================================================
123 //function : NeighboursByEdgeOf(Element)
124 //purpose  : 
125 //=======================================================================
126 void BRepMesh_SelectorOfDataStructureOfDelaun::NeighboursByEdgeOf(
127   const BRepMesh_Triangle& theElement)
128 {
129   const Standard_Integer(&e)[3] = theElement.myEdges;
130   for (Standard_Integer i = 0; i < 3; ++i)
131     elementsOfLink(e[i]);
132 }
133
134 //=======================================================================
135 //function : elementsOfLink
136 //purpose  : 
137 //=======================================================================
138 void BRepMesh_SelectorOfDataStructureOfDelaun::elementsOfLink(
139   const Standard_Integer theIndex)
140 {
141   const BRepMesh_PairOfIndex& aPair = myMesh->ElementsConnectedTo(theIndex);
142   for(Standard_Integer j = 1, jn = aPair.Extent(); j <= jn; ++j)
143     myElements.Add(aPair.Index(j));
144 }