MCPcopy Create free account
hub / github.com/Kitware/VTK / TriangleIntersectsNode

Method TriangleIntersectsNode

Filters/General/vtkOBBTree.cxx:1600–1751  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

1598
1599//------------------------------------------------------------------------------
1600int vtkOBBTree::TriangleIntersectsNode(
1601 vtkOBBNode* nodeA, double p0[3], double p1[3], double p2[3], vtkMatrix4x4* XformBtoA)
1602{
1603 vtkOBBNode* pA;
1604 double p0Xformed[3], p1Xformed[3], p2Xformed[3];
1605 double *pB[3], in[4], out[4], v0[3], v1[3], AtoB[3], xprod[3];
1606 double rangeAmin, rangeAmax, rangeBmin, rangeBmax, dotA, dotB;
1607 double eps;
1608 int ii, jj, kk;
1609
1610 eps = this->Tolerance;
1611 pA = nodeA;
1612 if (XformBtoA != nullptr)
1613 { // Here we assume that XformBtoA is an orthogonal matrix
1614 pB[0] = p0Xformed;
1615 pB[1] = p1Xformed;
1616 pB[2] = p2Xformed;
1617 for (ii = 0; ii < 3; ii++)
1618 {
1619 p0Xformed[ii] = p0[ii];
1620 p1Xformed[ii] = p1[ii];
1621 p2Xformed[ii] = p2[ii];
1622 }
1623 for (ii = 0; ii < 3; ii++)
1624 {
1625 in[0] = pB[ii][0];
1626 in[1] = pB[ii][1];
1627 in[2] = pB[ii][2];
1628 in[3] = 1.0;
1629 XformBtoA->MultiplyPoint(in, out);
1630 pB[ii][0] = out[0] / out[3];
1631 pB[ii][1] = out[1] / out[3];
1632 pB[ii][2] = out[2] / out[3];
1633 }
1634 }
1635 else
1636 {
1637 pB[0] = p0;
1638 pB[1] = p1;
1639 pB[2] = p2;
1640 }
1641
1642 // now check for a separation plane parallel to the triangle
1643 for (ii = 0; ii < 3; ii++)
1644 { // plane is normal to the triangle
1645 v0[ii] = pB[1][ii] - pB[0][ii];
1646 v1[ii] = pB[2][ii] - pB[0][ii];
1647 }
1648 vtkMath::Cross(v0, v1, xprod);
1649 // computing B range is easy...
1650 rangeBmin = rangeBmax = vtkMath::Dot(pB[0], xprod);
1651 // compute A range...
1652 rangeAmin = rangeAmax = vtkMath::Dot(pA->Corner, xprod);
1653 for (jj = 0; jj < 3; jj++)
1654 {
1655 dotA = vtkMath::Dot(xprod, pA->Axes[jj]);
1656 if (dotA > 0)
1657 {

Callers 1

Calls 3

CrossFunction · 0.50
DotFunction · 0.50
MultiplyPointMethod · 0.45

Tested by

no test coverage detected