42 namespace NekMeshUtils
51 for (
int i = 0; i < m_boundingloops.size(); i++)
53 numSeg += m_boundingloops[i].size();
55 numPoints = numSeg + m_stienerpoints.size();
58 ss <<
"3 points required for triangulation, " << numPoints <<
" provided";
62 dt.in.numberofpoints = numPoints;
63 dt.in.numberofpointattributes = 0;
64 dt.in.pointlist =
new double[dt.in.numberofpoints * 2];
68 for (
int i = 0; i < m_boundingloops.size(); i++)
70 for (
int j = 0; j < m_boundingloops[i].size(); j++, pointc++)
72 nodemap[pointc] = m_boundingloops[i][j];
75 m_boundingloops[i][j]->GetCADSurfInfo(sid);
76 dt.in.pointlist[pointc * 2 + 0] = uv[0] * m_str;
77 dt.in.pointlist[pointc * 2 + 1] = uv[1];
81 for (
int i = 0; i < m_stienerpoints.size(); i++, pointc++)
83 nodemap[pointc] = m_stienerpoints[i];
86 dt.in.pointlist[pointc * 2 + 0] = uv[0] * m_str;
87 dt.in.pointlist[pointc * 2 + 1] = uv[1];
90 dt.in.numberofsegments = numSeg;
91 dt.in.segmentlist =
new int[dt.in.numberofsegments * 2];
93 for (
int i = 0; i < m_boundingloops.size(); i++, pointc++)
96 for (
int j = 0; j < m_boundingloops[i].size() - 1; j++, pointc++)
98 dt.in.segmentlist[pointc * 2 + 0] = pointc;
99 dt.in.segmentlist[pointc * 2 + 1] = pointc + 1;
101 dt.in.segmentlist[pointc * 2 + 0] = pointc;
102 dt.in.segmentlist[pointc * 2 + 1] = first;
105 dt.in.numberofregions = 0;
106 dt.in.numberofholes = m_centers.size() - 1;
107 dt.in.holelist =
new double[dt.in.numberofholes * 2];
109 for (
int i = 1; i < m_centers.size(); i++)
111 dt.in.holelist[(i - 1) * 2 + 0] = m_centers[i][0] * m_str;
112 dt.in.holelist[(i - 1) * 2 + 1] = m_centers[i][1];
124 char *cstr =
new char[cmd.length() + 1];
125 strcpy(cstr, cmd.c_str());
130 void TriangleInterface::SetUp()
132 dt.in.pointlist = (
double *)NULL;
133 dt.in.pointattributelist = (
double *)NULL;
134 dt.in.pointmarkerlist = (
int *)NULL;
135 dt.in.numberofpoints = 0;
136 dt.in.numberofpointattributes = 0;
138 dt.in.trianglelist = (
int *)NULL;
139 dt.in.triangleattributelist = (
double *)NULL;
140 dt.in.trianglearealist = (
double *)NULL;
141 dt.in.neighborlist = (
int *)NULL;
142 dt.in.numberoftriangles = 0;
143 dt.in.numberofcorners = 0;
144 dt.in.numberoftriangleattributes = 0;
146 dt.in.segmentlist = (
int *)NULL;
147 dt.in.segmentmarkerlist = (
int *)NULL;
148 dt.in.numberofsegments = 0;
150 dt.in.holelist = (
double *)NULL;
151 dt.in.numberofholes = 0;
153 dt.in.regionlist = (
double *)NULL;
154 dt.in.numberofregions = 0;
156 dt.in.edgelist = (
int *)NULL;
157 dt.in.edgemarkerlist = (
int *)NULL;
158 dt.in.normlist = (
double *)NULL;
159 dt.in.numberofedges = 0;
161 dt.out.pointlist = (
double *)NULL;
162 dt.out.pointattributelist = (
double *)NULL;
163 dt.out.pointmarkerlist = (
int *)NULL;
164 dt.out.numberofpoints = 0;
165 dt.out.numberofpointattributes = 0;
167 dt.out.trianglelist = (
int *)NULL;
168 dt.out.triangleattributelist = (
double *)NULL;
169 dt.out.trianglearealist = (
double *)NULL;
170 dt.out.neighborlist = (
int *)NULL;
171 dt.out.numberoftriangles = 0;
172 dt.out.numberofcorners = 0;
173 dt.out.numberoftriangleattributes = 0;
175 dt.out.segmentlist = (
int *)NULL;
176 dt.out.segmentmarkerlist = (
int *)NULL;
177 dt.out.numberofsegments = 0;
179 dt.out.holelist = (
double *)NULL;
180 dt.out.numberofholes = 0;
182 dt.out.regionlist = (
double *)NULL;
183 dt.out.numberofregions = 0;
185 dt.out.edgelist = (
int *)NULL;
186 dt.out.edgemarkerlist = (
int *)NULL;
187 dt.out.normlist = (
double *)NULL;
188 dt.out.numberofedges = 0;
191 void TriangleInterface::Extract(
192 std::vector<std::vector<NodeSharedPtr> > &Connec)
195 for (
int i = 0; i < dt.out.numberoftriangles; i++)
197 map<int, NodeSharedPtr>::iterator n1, n2, n3;
198 n1 = nodemap.find(dt.out.trianglelist[i * 3 + 0]);
199 n2 = nodemap.find(dt.out.trianglelist[i * 3 + 1]);
200 n3 = nodemap.find(dt.out.trianglelist[i * 3 + 2]);
202 ASSERTL0(n1 != nodemap.end() && n2 != nodemap.end() &&
206 vector<NodeSharedPtr> tri(3);
210 Connec.push_back(tri);
#define ASSERTL0(condition, msg)