本文整理汇总了C++中Plane3::intersectionT方法的典型用法代码示例。如果您正苦于以下问题:C++ Plane3::intersectionT方法的具体用法?C++ Plane3::intersectionT怎么用?C++ Plane3::intersectionT使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plane3
的用法示例。
在下文中一共展示了Plane3::intersectionT方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onAlignViewToPlane
/******************************************************************************
* Aligns the current viewing direction to the slicing plane.
******************************************************************************/
void SliceModifierEditor::onAlignViewToPlane()
{
TimeInterval interval;
Viewport* vp = dataset()->viewportConfig()->activeViewport();
if(!vp) return;
// Get the object to world transformation for the currently selected object.
ObjectNode* node = dynamic_object_cast<ObjectNode>(dataset()->selection()->front());
if(!node) return;
const AffineTransformation& nodeTM = node->getWorldTransform(dataset()->animationSettings()->time(), interval);
// Transform the current slicing plane to the world coordinate system.
SliceModifier* mod = static_object_cast<SliceModifier>(editObject());
if(!mod) return;
Plane3 planeLocal = mod->slicingPlane(dataset()->animationSettings()->time(), interval);
Plane3 planeWorld = nodeTM * planeLocal;
// Calculate the intersection point of the current viewing direction with the current slicing plane.
Ray3 viewportRay(vp->cameraPosition(), vp->cameraDirection());
FloatType t = planeWorld.intersectionT(viewportRay);
Point3 intersectionPoint;
if(t != FLOATTYPE_MAX)
intersectionPoint = viewportRay.point(t);
else
intersectionPoint = Point3::Origin() + nodeTM.translation();
if(vp->isPerspectiveProjection()) {
FloatType distance = (vp->cameraPosition() - intersectionPoint).length();
vp->setViewType(Viewport::VIEW_PERSPECTIVE);
vp->setCameraDirection(-planeWorld.normal);
vp->setCameraPosition(intersectionPoint + planeWorld.normal * distance);
}
else {
vp->setViewType(Viewport::VIEW_ORTHO);
vp->setCameraDirection(-planeWorld.normal);
}
vp->zoomToSelectionExtents();
}
示例2: planeQuadIntersection
/******************************************************************************
* Computes the intersection lines of a plane and a quad.
******************************************************************************/
void SliceModifier::planeQuadIntersection(const Point3 corners[8], const std::array<int,4>& quadVerts, const Plane3& plane, QVector<Point3>& vertices) const
{
Point3 p1;
bool hasP1 = false;
for(int i = 0; i < 4; i++) {
Ray3 edge(corners[quadVerts[i]], corners[quadVerts[(i+1)%4]]);
FloatType t = plane.intersectionT(edge, FLOATTYPE_EPSILON);
if(t < 0 || t > 1) continue;
if(!hasP1) {
p1 = edge.point(t);
hasP1 = true;
}
else {
Point3 p2 = edge.point(t);
if(!p2.equals(p1)) {
vertices.push_back(p1);
vertices.push_back(p2);
return;
}
}
}
}