63 |
|
using namespace OpenMD; |
64 |
|
using namespace std; |
65 |
|
|
66 |
< |
ConvexHull::ConvexHull() : Hull(), dim_(3), options_("qhull Qt Pp") { |
66 |
> |
ConvexHull::ConvexHull() : Hull(), dim_(3), options_("qhull FA Qt Pp") { |
67 |
|
} |
68 |
|
|
69 |
|
void ConvexHull::computeHull(vector<StuntDouble*> bodydoubles) { |
77 |
|
setT *vertices; |
78 |
|
int curlong, totlong; |
79 |
|
|
80 |
– |
Vector3d boxMax; |
81 |
– |
Vector3d boxMin; |
82 |
– |
|
80 |
|
vector<double> ptArray(numpoints*dim_); |
81 |
|
|
82 |
|
// Copy the positon vector into a points vector for qhull. |
83 |
|
vector<StuntDouble*>::iterator SD; |
84 |
|
int i = 0; |
85 |
< |
|
85 |
> |
|
86 |
|
for (SD =bodydoubles.begin(); SD != bodydoubles.end(); ++SD){ |
87 |
|
Vector3d pos = (*SD)->getPos(); |
88 |
|
ptArray[dim_ * i] = pos.x(); |
204 |
|
// commented out below, so comment out here also. |
205 |
|
// intPoint = qh interior_point; |
206 |
|
// RealType calcvol = 0.0; |
207 |
+ |
|
208 |
+ |
qh_triangulate (); |
209 |
+ |
|
210 |
|
FORALLfacets { |
211 |
|
Triangle face; |
212 |
|
//Qhull sets the unit normal in facet->normal |
283 |
|
qh_getarea(qh facet_list); |
284 |
|
volume_ = qh totvol; |
285 |
|
area_ = qh totarea; |
286 |
– |
|
287 |
– |
int index = 0; |
288 |
– |
FORALLvertices { |
289 |
– |
Vector3d point(vertex->point[0], vertex->point[1], vertex->point[2]); |
290 |
– |
if (index == 0) { |
291 |
– |
boxMax = point; |
292 |
– |
boxMin = point; |
293 |
– |
} else { |
294 |
– |
for (int i = 0; i < 3; i++) { |
295 |
– |
boxMax[i] = max(boxMax[i], point[i]); |
296 |
– |
boxMin[i] = min(boxMin[i], point[i]); |
297 |
– |
} |
298 |
– |
} |
299 |
– |
index++; |
300 |
– |
} |
301 |
– |
boundingBox_ = Mat3x3d(0.0); |
302 |
– |
boundingBox_(0,0) = boxMax[0] - boxMin[0]; |
303 |
– |
boundingBox_(1,1) = boxMax[1] - boxMin[1]; |
304 |
– |
boundingBox_(2,2) = boxMax[2] - boxMin[2]; |
286 |
|
|
287 |
|
qh_freeqhull(!qh_ALL); |
288 |
|
qh_memfreeshort(&curlong, &totlong); |