| 115 | } |
| 116 | |
| 117 | int |
| 118 | TriangleMeshGenerator::mesh(double size, bool pointOnBoundary) |
| 119 | { |
| 120 | // reset |
| 121 | this->reset(); |
| 122 | |
| 123 | // get size |
| 124 | in.numberofpoints = pointlist.size()/2; |
| 125 | in.numberofsegments = segmentlist.size()/2; |
| 126 | |
| 127 | // quick return |
| 128 | if(in.numberofsegments < 1) return 0; |
| 129 | if(in.numberofpoints < 1) return 0; |
| 130 | |
| 131 | // set pointers |
| 132 | in.pointlist = &pointlist[0]; |
| 133 | in.segmentlist = &segmentlist[0]; |
| 134 | in.segmentmarkerlist = &segmentmarkerlist[0]; |
| 135 | |
| 136 | // meshing |
| 137 | char s[128]; |
| 138 | if (pointOnBoundary) { |
| 139 | sprintf(s, "DnQzqpa%.20f", size); |
| 140 | } else { |
| 141 | sprintf(s, "DnYYQzqpa%.20f", size); |
| 142 | } |
| 143 | triangulate(s, &in, &out, &vout); |
| 144 | |
| 145 | // reset pointers |
| 146 | in.pointlist = NULL; |
| 147 | in.segmentlist = NULL; |
| 148 | in.segmentmarkerlist = NULL; |
| 149 | |
| 150 | // clear input data |
| 151 | pointlist.clear(); |
| 152 | pointmarkerlist.clear(); |
| 153 | segmentlist.clear(); |
| 154 | segmentmarkerlist.clear(); |
| 155 | trianglelist.clear(); |
| 156 | neighborlist.clear(); |
| 157 | |
| 158 | // copy output data |
| 159 | numberofcorners = out.numberofcorners; |
| 160 | pointlist.assign(out.pointlist, |
| 161 | out.pointlist+out.numberofpoints*2); |
| 162 | pointmarkerlist.assign(out.pointmarkerlist, |
| 163 | out.pointmarkerlist+out.numberofpoints); |
| 164 | trianglelist.assign(out.trianglelist, |
| 165 | out.trianglelist+out.numberoftriangles*numberofcorners); |
| 166 | neighborlist.assign(out.neighborlist, |
| 167 | out.neighborlist+out.numberoftriangles*3); |
| 168 | |
| 169 | |
| 170 | // clear memory |
| 171 | this->reset(); |
| 172 | |
| 173 | return 0; |
| 174 | } |