Construct simple grid from geometry via library call to Triangle mesh generator.
81 if (strchr(flags,
'z')==
nullptr)
83 throw std::runtime_error(
"numcxx: triangulate: Missing 'z' flag");
90 out.pointattributelist=0;
91 out.pointmarkerlist=0;
93 out.numberofpointattributes=0;
95 out.triangleattributelist=0;
96 out.trianglearealist=0;
98 out.numberoftriangles=0;
99 out.numberofcorners=0;
100 out.numberoftriangleattributes=0;
102 out.segmentmarkerlist=0;
103 out.numberofsegments=0;
107 out.numberofregions=0;
109 out.edgemarkerlist=0;
114 in.pointattributelist=0;
115 in.pointmarkerlist=0;
117 in.numberofpointattributes=0;
119 in.triangleattributelist=0;
120 in.trianglearealist=0;
122 in.numberoftriangles=0;
123 in.numberofcorners=0;
124 in.numberoftriangleattributes=0;
126 in.segmentmarkerlist=0;
127 in.numberofsegments=0;
131 in.numberofregions=0;
141 in.pointlist=geometry.points->data();
142 in.numberofpoints=geometry.points->shape(0);
143 in.numberofpointattributes=0;
147 throw std::runtime_error(
"numcxx: triangulate: Missing point list");
152 if (!geometry.bfaceregions)
153 throw std::runtime_error(
"numcxx: triangulate: Missing bfaceregions");
155 in.segmentlist=geometry.bfaces->data();
156 in.segmentmarkerlist=geometry.bfaceregions->data();
157 in.numberofsegments=geometry.bfaces->shape(0);
161 throw std::runtime_error(
"numcxx: triangulate: Missing bface list");
166 if (geometry.regionpoints)
168 int nregs,nholes,ireg,ihole;
171 if (!geometry.regionnumbers)
173 throw std::runtime_error(
"numcxx: triangulate: Missing region numbers");
175 if (!geometry.regionvolumes)
177 throw std::runtime_error(
"numcxx: triangulate: Missing region volumes");
179 for (i=0;i<geometry.regionnumbers->shape(0);i++)
181 if ((*geometry.regionnumbers)(i)>=0)
186 in.numberofholes=nholes;
187 in.numberofregions=nregs;
189 in.holelist=(
double*)malloc(2*nholes*
sizeof(
double));
190 in.regionlist=(
double*)malloc(4*nregs*
sizeof(
double));
193 for (i=0;i<geometry.regionnumbers->shape(0);i++)
194 if ((*geometry.regionnumbers)(i)>=0)
196 in.regionlist[ireg+0]=(*geometry.regionpoints)(i,0);
197 in.regionlist[ireg+1]=(*geometry.regionpoints)(i,1);
198 in.regionlist[ireg+2]=(*geometry.regionnumbers)(i);
199 in.regionlist[ireg+3]=(*geometry.regionvolumes)(i);
204 in.holelist[ihole+0]=(*geometry.regionpoints)(i,0);
205 in.holelist[ihole+1]=(*geometry.regionpoints)(i,1);
224 printf(
"out (flags=%s):\n",flags);
234 points=std::make_shared<numcxx::TArray2<double>>(out.numberofpoints,2,out.pointlist,[](
double*p){
triangle::trifree(p);});
235 cells=std::make_shared<numcxx::TArray2<int>>(out.numberoftriangles,3,out.trianglelist,[](
int*p){
triangle::trifree(p);});
244 cellregions=std::make_shared<numcxx::TArray1<int>>(out.numberoftriangles);
245 if (out.triangleattributelist)
246 for (i=0;i<out.numberoftriangles;i++)
247 (*
cellregions)(i)=(
int)out.triangleattributelist[i];
249 for (i=0;i<out.numberoftriangles;i++)
258 bfaces=std::make_shared<numcxx::TArray2<int>>(out.numberofsegments,2,out.segmentlist,[](
int*p){
triangle::trifree(p);});
263 throw std::runtime_error(
"numcxx: triangulate: Missing segment list");
std::shared_ptr< TArray1< int > > bfaceregions
std::shared_ptr< TArray1< int > > cellregions
void print_triangulateio(triangle::triangulateio *in)
std::shared_ptr< TArray2< int > > cells
void trifree(VOID *memptr)
std::shared_ptr< TArray2< int > > bfaces
void triangulate(char *, struct triangulateio *, struct triangulateio *, struct triangulateio *)
std::shared_ptr< TArray2< double > > points