本文整理汇总了C++中treeBoundBox::intersects方法的典型用法代码示例。如果您正苦于以下问题:C++ treeBoundBox::intersects方法的具体用法?C++ treeBoundBox::intersects怎么用?C++ treeBoundBox::intersects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类treeBoundBox
的用法示例。
在下文中一共展示了treeBoundBox::intersects方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: space
const treeLeaf<Type>* treeNode<Type>::findLeafLineOctant
(
const int level,
const Type& shapes,
const label octant,
const vector& direction,
point& start,
const point& end
) const
{
static const char* functionName =
"treeNode<Type>::findLeafLineOctant"
"(const int, const Type&, const label, const vector&,"
" point&, const point&)";
if (debug & 2)
{
space(Pout, 2*level);
Pout<< "findLeafLineOctant : bb:" << this->bb()
<< " start:" << start
<< " end:" << end
<< " mid:" << mid()
<< " Searching octant:" << octant
<< endl;
}
if (subNodes()[octant])
{
if (isNode(octant))
{
// Node: recurse into subnodes
const treeNode<Type>* subNodePtr = getNodePtr(octant);
if (subNodePtr->bb().contains(direction, start))
{
// Search on lower level
const treeLeaf<Type>* subLeafPtr =
subNodePtr->findLeafLine
(
level + 1,
shapes,
start,
end
);
if (debug & 2)
{
space(Pout, 2*level);
Pout<< "findLeafLineOctant : bb:" << this->bb()
<< " returning from sub treeNode"
<< " with start:" << start << " subLeaf:"
<< long(subLeafPtr) << endl;
}
return subLeafPtr;
}
else
{
FatalErrorIn(functionName)
<< "Sub node " << subNodePtr->bb()
<< " at octant " << octant
<< " does not contain start " << start
<< abort(FatalError);
}
}
else
{
// Leaf
const treeLeaf<Type>* subLeafPtr = getLeafPtr(octant);
if (subLeafPtr->bb().contains(direction, start))
{
// Step to end of subleaf bb
point tmp;
if
(
!subLeafPtr->bb().intersects
(
end,
start,
tmp
)
)
{
FatalErrorIn(functionName)
<< "Sub leaf contains start " << start
<< " but line does not intersect its bb "
<< subLeafPtr->bb()
<< abort(FatalError);
}
start = tmp;
if (debug & 2)
{
space(Pout, 2*level);
Pout<< "findLeafLineOctant : returning from intersecting"
<< " treeLeaf " << subLeafPtr->bb()
<< " with start:" << start << " subLeaf:"
<< long(subLeafPtr) << endl;
}
//.........这里部分代码省略.........
开发者ID:Unofficial-Extend-Project-Mirror,项目名称:openfoam-extend-Core-OpenFOAM-1.5-dev,代码行数:101,代码来源:treeNode.C
示例2: origin
// Intersect triangle with bounding box. Return true if
// any of the faces of bb intersect triangle.
// Note: so returns false if triangle inside bb.
bool Foam::triangleFuncs::intersectBb
(
const point& p0,
const point& p1,
const point& p2,
const treeBoundBox& cubeBb
)
{
const vector p10 = p1 - p0;
const vector p20 = p2 - p0;
// cubeBb points; counted as if cell with vertex0 at cubeBb.min().
const point& min = cubeBb.min();
const point& max = cubeBb.max();
const point& cube0 = min;
const point cube1(min.x(), min.y(), max.z());
const point cube2(max.x(), min.y(), max.z());
const point cube3(max.x(), min.y(), min.z());
const point cube4(min.x(), max.y(), min.z());
const point cube5(min.x(), max.y(), max.z());
const point cube7(max.x(), max.y(), min.z());
//
// Intersect all 12 edges of cube with triangle
//
point pInter;
pointField origin(4);
// edges in x direction
origin[0] = cube0;
origin[1] = cube1;
origin[2] = cube5;
origin[3] = cube4;
scalar maxSx = max.x() - min.x();
if (intersectAxesBundle(p0, p10, p20, 0, origin, maxSx, pInter))
{
return true;
}
// edges in y direction
origin[0] = cube0;
origin[1] = cube1;
origin[2] = cube2;
origin[3] = cube3;
scalar maxSy = max.y() - min.y();
if (intersectAxesBundle(p0, p10, p20, 1, origin, maxSy, pInter))
{
return true;
}
// edges in z direction
origin[0] = cube0;
origin[1] = cube3;
origin[2] = cube7;
origin[3] = cube4;
scalar maxSz = max.z() - min.z();
if (intersectAxesBundle(p0, p10, p20, 2, origin, maxSz, pInter))
{
return true;
}
// Intersect triangle edges with bounding box
if (cubeBb.intersects(p0, p1, pInter))
{
return true;
}
if (cubeBb.intersects(p1, p2, pInter))
{
return true;
}
if (cubeBb.intersects(p2, p0, pInter))
{
return true;
}
return false;
}