21 #if !defined(_HAVE_TRIANGLE_)
22 _error_(
"triangle has not been installed");
32 int *segmentmarkerlist = NULL;
35 int counter,counter2,backcounter;
39 struct triangulateio in,out;
44 for (i=0;i<domain->
Size();i++){
46 in.numberofpoints+=contour->
nods-1;
48 for (i=0;i<rifts->
Size();i++){
50 in.numberofpoints+=contour->
nods;
54 in.numberofpointattributes=1;
57 in.pointlist = xNew<REAL>(in.numberofpoints*2);
60 for (i=0;i<domain->
Size();i++){
62 for (j=0;j<contour->
nods-1;j++){
63 in.pointlist[2*counter+0]=contour->
x[j];
64 in.pointlist[2*counter+1]=contour->
y[j];
68 for (i=0;i<rifts->
Size();i++){
70 for (j=0;j<contour->
nods;j++){
71 in.pointlist[2*counter+0]=contour->
x[j];
72 in.pointlist[2*counter+1]=contour->
y[j];
78 in.pointattributelist = xNew<REAL>(in.numberofpoints*in.numberofpointattributes);
79 for (i=0;i<in.numberofpoints;i++) in.pointattributelist[i] = 0.0;
82 in.pointmarkerlist = xNew<int>(in.numberofpoints);
83 for(i=0;i<in.numberofpoints;i++) in.pointmarkerlist[i] = 0;
86 in.numberofsegments=0;
87 for (i=0;i<domain->
Size();i++){
89 in.numberofsegments+=contour->
nods-1;
91 for(i=0;i<rifts->
Size();i++){
94 in.numberofsegments+=contour->
nods-1;
97 in.segmentlist = xNew<int>(in.numberofsegments*2);
98 in.segmentmarkerlist = xNewZeroInit<int>(in.numberofsegments);
101 for (i=0;i<domain->
Size();i++){
103 for (j=0;j<contour->
nods-2;j++){
104 in.segmentlist[2*counter+0]=counter;
105 in.segmentlist[2*counter+1]=counter+1;
106 in.segmentmarkerlist[counter]=0;
110 in.segmentlist[2*counter+0]=counter;
111 in.segmentlist[2*counter+1]=backcounter;
112 in.segmentmarkerlist[counter]=0;
117 for (i=0;i<rifts->
Size();i++){
119 for (j=0;j<(contour->
nods-1);j++){
120 in.segmentlist[2*counter2+0]=counter;
121 in.segmentlist[2*counter2+1]=counter+1;
122 in.segmentmarkerlist[counter2]=2+i;
130 in.numberofregions = 0;
133 in.numberofholes = domain->
Size()-1;
134 if(in.numberofholes){
135 in.holelist = xNew<REAL>(in.numberofholes*2);
136 for (i=0;i<domain->
Size()-1;i++){
143 out.pointlist = (REAL*)NULL;
144 out.pointattributelist = (REAL*)NULL;
145 out.pointmarkerlist = (
int *)NULL;
146 out.trianglelist = (
int *)NULL;
147 out.triangleattributelist = (REAL*)NULL;
148 out.neighborlist = (
int *)NULL;
149 out.segmentlist = (
int *)NULL;
150 out.segmentmarkerlist = (
int *)NULL;
151 out.edgelist = (
int *)NULL;
152 out.edgemarkerlist = (
int *)NULL;
159 sprintf(options,
"%s%lf",
"pQzDq30ia",area);
160 triangulate(options, &in, &out, NULL);
164 index=xNew<int>(3*out.numberoftriangles);
165 x=xNew<double>(out.numberofpoints);
166 y=xNew<double>(out.numberofpoints);
167 segments=xNew<int>(3*out.numberofsegments);
168 segmentmarkerlist=xNew<int>(out.numberofsegments);
170 for (i = 0; i< out.numberoftriangles; i++) {
171 for (j = 0; j < out.numberofcorners; j++) {
172 index[3*i+j]=(int)out.trianglelist[i*out.numberofcorners+j]+1;
175 for (i = 0; i< out.numberofpoints; i++){
176 x[i]=(double)out.pointlist[i*2+0];
177 y[i]=(
double)out.pointlist[i*2+1];
179 for (i = 0; i<out.numberofsegments;i++){
180 segments[3*i+0]=(int)out.segmentlist[i*2+0]+1;
181 segments[3*i+1]=(
int)out.segmentlist[i*2+1]+1;
182 segmentmarkerlist[i]=(int)out.segmentmarkerlist[i];
189 OrderSegments(&segments,out.numberofsegments, index,out.numberoftriangles);
196 *psegmentmarkerlist=segmentmarkerlist;
197 *pnels=out.numberoftriangles;
198 *pnods=out.numberofpoints;
199 *pnsegs=out.numberofsegments;