本文整理汇总了C++中SelectionIntersection类的典型用法代码示例。如果您正苦于以下问题:C++ SelectionIntersection类的具体用法?C++ SelectionIntersection怎么用?C++ SelectionIntersection使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SelectionIntersection类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testSelect
void FaceInstance::testSelect(Selector& selector, SelectionTest& test) {
SelectionIntersection best;
testSelect(test, best);
if (best.valid()) {
Selector_add(selector, m_selectable, best);
}
}
示例2: testSelect_centroid
void FaceInstance::testSelect_centroid(Selector& selector, SelectionTest& test) {
if (m_face->contributes()) {
SelectionIntersection best;
m_face->testSelect_centroid(test, best);
if (best.valid()) {
Selector_add(selector, m_selectable, best);
}
}
}
示例3: testSelect
void NullModel::testSelect(Selector& selector, SelectionTest& test, const Matrix4& localToWorld) {
test.BeginMesh(localToWorld);
SelectionIntersection best;
aabb_testselect(_aabbLocal, test, best);
if(best.valid()) {
selector.addIntersection(best);
}
}
示例4: testSelect
void MiscParticle::testSelect (Selector& selector, SelectionTest& test, const Matrix4& localToWorld)
{
test.BeginMesh(localToWorld);
SelectionIntersection best;
aabb_testselect(m_aabb_local, test, best);
if (best.valid()) {
selector.addIntersection(best);
}
}
示例5: BestPoint
void BestPoint(std::size_t count, Vector4 clipped[9], SelectionIntersection& best, clipcull_t cull) {
Vector3 normalised[9];
{
for(std::size_t i=0; i<count; ++i)
{
normalised[i][0] = clipped[i][0] / clipped[i][3];
normalised[i][1] = clipped[i][1] / clipped[i][3];
normalised[i][2] = clipped[i][2] / clipped[i][3];
}
}
if(cull != eClipCullNone && count > 2)
{
double signed_area = triangle_signed_area_XY(normalised[0], normalised[1], normalised[2]);
if((cull == eClipCullCW && signed_area > 0)
|| (cull == eClipCullCCW && signed_area < 0))
return;
}
if(count == 2)
{
Segment3D segment(normalised[0], normalised[1]);
Point3D point = segment_closest_point_to_point(segment, Vector3(0, 0, 0));
best.assignIfCloser(SelectionIntersection(point.z(), 0));
}
else if(count > 2 && !point_test_polygon_2d(Vector3(0, 0, 0), normalised, normalised + count))
{
point_iterator_t end = normalised + count;
for(point_iterator_t previous = end-1, current = normalised; current != end; previous = current, ++current)
{
Segment3D segment(*previous, *current);
Point3D point = segment_closest_point_to_point(segment, Vector3(0, 0, 0));
double depth = point.z();
point.z() = 0;
double distance = point.getLengthSquared();
best.assignIfCloser(SelectionIntersection(depth, distance));
}
}
else if(count > 2)
{
best.assignIfCloser(
SelectionIntersection(
static_cast<float>(
Ray(Vector3(0, 0, 0), Vector3(0, 0, 1)).getDistance(
Plane3(normalised[0], normalised[1], normalised[2])
)),
0
)
);
}
}
示例6: Face_getClosest
void Face_getClosest(Face& face, SelectionTest& test, SelectionIntersection& bestIntersection, Face*& closestFace)
{
SelectionIntersection intersection;
face.testSelect(test, intersection);
if(intersection.valid()
&& SelectionIntersection_closer(intersection, bestIntersection))
{
bestIntersection = intersection;
closestFace = &face;
}
}
示例7: testSelect
void BrushInstance::testSelect (Selector& selector, SelectionTest& test)
{
test.BeginMesh(localToWorld());
SelectionIntersection best;
for (FaceInstances::iterator i = m_faceInstances.begin(); i != m_faceInstances.end(); ++i) {
(*i).testSelect(test, best);
}
if (best.valid()) {
selector.addIntersection(best);
}
}
示例8: testSelect
void testSelect(Selector& selector, SelectionTest& test)
{
test.BeginMesh(localToWorld());
SelectionIntersection best;
m_contained.testSelect(selector, test, best);
if(best.valid())
{
Selector_add(selector, getSelectable(), best);
}
}
示例9: ASSERT_MESSAGE
void CurveEditInstance::testSelect(Selector& selector, SelectionTest& test)
{
ASSERT_MESSAGE(_controlPointsTransformed.size() == _selectables.size(), "curve instance mismatch");
ControlPoints::const_iterator p = _controlPointsTransformed.begin();
for(Selectables::iterator i = _selectables.begin(); i != _selectables.end(); ++i, ++p)
{
SelectionIntersection best;
test.TestPoint(*p, best);
if (best.valid())
{
Selector_add(selector, *i, best);
}
}
}
示例10: IndexPointer
// Selection test
void MD5Surface::testSelect(Selector& selector,
SelectionTest& test,
const Matrix4& localToWorld)
{
test.BeginMesh(localToWorld);
SelectionIntersection best;
test.TestTriangles(
vertexpointer_arbitrarymeshvertex(_vertices.data()),
IndexPointer(_indices.data(), IndexPointer::index_type(_indices.size())),
best
);
if(best.valid()) {
selector.addIntersection(best);
}
}
示例11: Instance_getBrush
bool ClosestTexturableFinder::pre (const scene::Path& path, scene::Instance& instance) const
{
// Check if the node is filtered
if (path.top().get().visible()) {
// Test the instance for a brush
BrushInstance* brush = Instance_getBrush(instance);
if (brush != NULL) {
// Construct the selectiontest
_selectionTest.BeginMesh(brush->localToWorld());
// Cycle through all the faces
for (Brush::const_iterator i = brush->getBrush().begin(); i != brush->getBrush().end(); i++) {
// Test the face for selection
SelectionIntersection intersection;
(*i)->testSelect(_selectionTest, intersection);
// Any intersection found / is it better than the previous one?
if (intersection.valid() && SelectionIntersection_closer(intersection, _bestIntersection)) {
// Yes, store this as new best intersection
_bestIntersection = intersection;
// Save the face and the parent brush
_texturable.face = (*i);
_texturable.brush = &brush->getBrush();
}
}
} else {
// No brush, test for a patch
SelectionTestable* selectionTestable = Instance_getSelectionTestable(instance);
if (selectionTestable != NULL) {
bool occluded;
OccludeSelector selector(_bestIntersection, occluded);
selectionTestable->testSelect(selector, _selectionTest);
if (occluded) {
_texturable = Texturable();
}
}
}
}
return true;
}
示例12: testSelect
// Perform selection test for this surface
void RenderablePicoSurface::testSelect(Selector& selector,
SelectionTest& test,
const Matrix4& localToWorld) const
{
if (!_vertices.empty() && !_indices.empty())
{
// Test for triangle selection
test.BeginMesh(localToWorld);
SelectionIntersection result;
test.TestTriangles(
VertexPointer(&_vertices[0].vertex, sizeof(ArbitraryMeshVertex)),
IndexPointer(&_indices[0],
IndexPointer::index_type(_indices.size())),
result
);
// Add the intersection to the selector if it is valid
if(result.valid()) {
selector.addIntersection(result);
}
}
}
示例13: manipulator_show_axis
void TranslateManipulator::testSelect (const View& view, const Matrix4& pivot2world)
{
m_pivot.update(pivot2world, view.GetModelview(), view.GetProjection(), view.GetViewport());
SelectionPool selector;
Vector3 x = m_pivot.m_worldSpace.x().getVector3().getNormalised();
bool show_x = manipulator_show_axis(m_pivot, x);
Vector3 y = m_pivot.m_worldSpace.y().getVector3().getNormalised();
bool show_y = manipulator_show_axis(m_pivot, y);
Vector3 z = m_pivot.m_worldSpace.z().getVector3().getNormalised();
bool show_z = manipulator_show_axis(m_pivot, z);
{
Matrix4 local2view(matrix4_multiplied_by_matrix4(view.GetViewMatrix(), m_pivot.m_viewpointSpace));
{
SelectionIntersection best;
Quad_BestPoint(local2view, eClipCullCW, m_quad_screen.m_quad, best);
if (best.valid()) {
best = SelectionIntersection(0, 0);
selector.addSelectable(best, &m_selectable_screen);
}
}
}
{
Matrix4 local2view(matrix4_multiplied_by_matrix4(view.GetViewMatrix(), m_pivot.m_worldSpace));
#if defined(DEBUG_SELECTION)
g_render_clipped.construct(view.GetViewMatrix());
#endif
if (show_x) {
SelectionIntersection best;
Line_BestPoint(local2view, m_arrow_x.m_line, best);
Triangles_BestPoint(local2view, eClipCullCW, m_arrow_head_x.m_vertices.begin(),
m_arrow_head_x.m_vertices.end(), best);
selector.addSelectable(best, &m_selectable_x);
}
if (show_y) {
SelectionIntersection best;
Line_BestPoint(local2view, m_arrow_y.m_line, best);
Triangles_BestPoint(local2view, eClipCullCW, m_arrow_head_y.m_vertices.begin(),
m_arrow_head_y.m_vertices.end(), best);
selector.addSelectable(best, &m_selectable_y);
}
if (show_z) {
SelectionIntersection best;
Line_BestPoint(local2view, m_arrow_z.m_line, best);
Triangles_BestPoint(local2view, eClipCullCW, m_arrow_head_z.m_vertices.begin(),
m_arrow_head_z.m_vertices.end(), best);
selector.addSelectable(best, &m_selectable_z);
}
}
if (!selector.failed()) {
(*selector.begin()).second->setSelected(true);
}
}
示例14: manipulator_show_axis
void TranslateManipulator::testSelect(const render::View& view, const Matrix4& pivot2world) {
_pivot.update(pivot2world, view.GetModelview(), view.GetProjection(), view.GetViewport());
SelectionPool selector;
Vector3 x = _pivot._worldSpace.x().getVector3().getNormalised();
bool show_x = manipulator_show_axis(_pivot, x);
Vector3 y = _pivot._worldSpace.y().getVector3().getNormalised();
bool show_y = manipulator_show_axis(_pivot, y);
Vector3 z = _pivot._worldSpace.z().getVector3().getNormalised();
bool show_z = manipulator_show_axis(_pivot, z);
{
Matrix4 local2view(view.GetViewMatrix().getMultipliedBy(_pivot._viewpointSpace));
{
SelectionIntersection best;
Quad_BestPoint(local2view, eClipCullCW, &_quadScreen.front(), best);
if(best.valid())
{
best = SelectionIntersection(0, 0);
selector.addSelectable(best, &_selectableScreen);
}
}
}
{
Matrix4 local2view(view.GetViewMatrix().getMultipliedBy(_pivot._worldSpace));
if(show_x)
{
SelectionIntersection best;
Line_BestPoint(local2view, &_arrowX.front(), best);
Triangles_BestPoint(local2view, eClipCullCW, &_arrowHeadX._vertices.front(), &*(_arrowHeadX._vertices.end()-1)+1, best);
selector.addSelectable(best, &_selectableX);
}
if(show_y)
{
SelectionIntersection best;
Line_BestPoint(local2view, &_arrowY.front(), best);
Triangles_BestPoint(local2view, eClipCullCW, &_arrowHeadY._vertices.front(), &*(_arrowHeadY._vertices.end()-1)+1, best);
selector.addSelectable(best, &_selectableY);
}
if(show_z)
{
SelectionIntersection best;
Line_BestPoint(local2view, &_arrowZ.front(), best);
Triangles_BestPoint(local2view, eClipCullCW, &_arrowHeadZ._vertices.front(), &*(_arrowHeadZ._vertices.end()-1)+1, best);
selector.addSelectable(best, &_selectableZ);
}
}
// greebo: If any of the above arrows could be selected, select the first in the SelectionPool
if(!selector.failed()) {
(*selector.begin()).second->setSelected(true);
} else {
Selectable* selectable = NULL;
if (registry::getValue<bool>(RKEY_TRANSLATE_CONSTRAINED)) {
// None of the shown arrows (or quad) has been selected, select an axis based on the precedence
Matrix4 local2view(view.GetViewMatrix().getMultipliedBy(_pivot._worldSpace));
// Get the (relative?) distance from the mouse pointer to the manipulator
Vector3 delta = local2view.t().getProjected();
// Get the precedence (which axis has the absolute largest value in it)
bool xGreaterY = (fabs(delta.x()) > fabs(delta.y()));
// The precedence has to be interpreted according to which axes are visible
if (show_z) {
// Either XZ or YZ
if (show_y) {
// YZ
selectable = (xGreaterY) ? &_selectableY : &_selectableZ;
}
else {
// XZ
selectable = (xGreaterY) ? &_selectableX : &_selectableZ;
}
}
else {
// XY
selectable = (xGreaterY) ? &_selectableX : &_selectableY;
}
}
else {
// Don't constrain to axis, choose the freemove translator
selectable = &_selectableScreen;
}
// If everything went ok, there is a selectable available, add it
if (selectable != NULL) {
selector.addSelectable(SelectionIntersection(0,0), selectable);
selectable->setSelected(true);
}
}
//.........这里部分代码省略.........