42 Foam::scalar Foam::octreeDataTriSurface::tol(1
E-6);
51 void Foam::octreeDataTriSurface::nearestCoords
68 const scalar
d = E0 & D;
69 const scalar
e = E1 & D;
72 const scalar
det = a*c - b*
b;
88 s = (d >= 0 ? 0 : (-d >= a ? 1 : -d/a));
94 t = (e >= 0 ? 0 : (-e >= c ? 1 : -e/c));
101 t = (e >= 0 ? 0 : (-e >= c ? 1 : -e/c));
108 s = (d >= 0 ? 0 : (-d >= a ? 1 : -d/a));
113 const scalar invDet = 1/
det;
123 const scalar tmp0 = b +
d;
124 const scalar tmp1 = c +
e;
128 const scalar numer = tmp1 - tmp0;
129 const scalar denom = a-2*b+c;
130 s = (numer >= denom ? 1 : numer/denom);
137 t = (tmp1 <= 0 ? 1 : (e >= 0 ? 0 : - e/c));
143 const scalar tmp0 = b +
d;
144 const scalar tmp1 = c +
e;
148 const scalar numer = tmp1 - tmp0;
149 const scalar denom = a-2*b+c;
150 s = (numer >= denom ? 1 : numer/denom);
157 s = (tmp1 <= 0 ? 1 : (d >= 0 ? 0 : - d/a));
163 const scalar numer = c+e-(b+
d);
170 const scalar denom = a-2*b+c;
171 s = (numer >= denom ? 1 : numer/denom);
189 Foam::point Foam::octreeDataTriSurface::nearestPoint
211 return base_[index] + s*E0_[index] + t*E1_[index];
218 const triSurface& surf
224 const pointField& localPts = surf.localPoints();
228 const labelList& myFaces = pointFcs[pointI];
229 const point& vertCoord = localPts[pointI];
234 label faceI = myFaces[myFaceI];
236 treeBoundBox& bb = allBb[faceI];
238 bb.min() =
min(bb.min(), vertCoord);
239 bb.max() =
max(bb.max(), vertCoord);
253 allBb_(calcBb(surface_)),
254 base_(surface_.size()),
255 E0_(surface_.size()),
256 E1_(surface_.size()),
269 base_[faceI] = points[f[1]];
270 E0_[faceI] = points[f[0]] - points[f[1]];
271 E1_[faceI] = points[f[2]] - points[f[1]];
273 a_[faceI] = E0_[faceI] & E0_[faceI];
274 b_[faceI] = E0_[faceI] & E1_[faceI];
275 c_[faceI] = E1_[faceI] & E1_[faceI];
289 base_(surface_.size()),
290 E0_(surface_.size()),
291 E1_(surface_.size()),
303 base_[faceI] = points[f[1]];
304 E0_[faceI] = points[f[0]] - points[f[1]];
305 E1_[faceI] = points[f[2]] - points[f[1]];
307 a_[faceI] = E0_[faceI] & E0_[faceI];
308 b_[faceI] = E0_[faceI] & E1_[faceI];
309 c_[faceI] = E1_[faceI] & E1_[faceI];
327 label faceI = oc.
findNearest(sample, tightest, tightestDist);
331 Pout<<
"getSampleType : sample:" << sample
332 <<
" nearest face:" << faceI;
339 "octreeDataTriSurface::getSampleType"
340 "(octree<octreeDataTriSurface>&, const point&)"
341 ) <<
"Could not find " << sample <<
" in octree."
353 ).nearestPoint(sample);
384 if (!cubeBb.
overlaps(allBb_[index]))
392 const point& p0 = points[f[0]];
393 const point& p1 = points[f[1]];
394 const point& p2 = points[f[2]];
418 "octreeDataTriSurface::contains(const label, const point&)"
430 point& intersectionPoint
433 if (
mag(surface_.faceNormals()[index]) < VSMALL)
442 triPointRef tri(points[f[0]], points[f[1]], points[f[2]]);
444 const vector dir(end - start);
458 intersectionPoint = inter.
hitPoint();
479 allBb_[index].calcExtremities(sample, myNear, myFar);
482 scalar myFarDist =
mag(dist);
484 point tightestNear, tightestFar;
487 scalar tightestFarDist =
mag(tightestFar - sample);
489 if (tightestFarDist < myFarDist)
497 const point dist2(fabs(dist.
x()), fabs(dist.
y()), fabs(dist.
z()));
499 tightest.
min() = sample - dist2;
500 tightest.
max() = sample + dist2;
515 n = surface_.faceNormals()[index];
520 vector vec = sample - surface_.points()[tri[0]];
522 vec /=
mag(vec) + VSMALL;
536 return mag(nearestPoint(index, sample) - sample);
551 "octreeDataTriSurface::calcNearest"
552 "(const label, const linePointRef&, point& linePt, point&)"