/******************************************************************************
* Renders the modifier's visual representation and computes its bounding box.
******************************************************************************/
Box3 SliceModifier::renderVisual(TimePoint time, ObjectNode* contextNode, SceneRenderer* renderer)
{
	TimeInterval interval;

	Box3 bb = contextNode->localBoundingBox(time);
	if(bb.isEmpty())
		return Box3();

	Plane3 plane = slicingPlane(time, interval);

	FloatType sliceWidth = 0;
	if(_widthCtrl) sliceWidth = _widthCtrl->getFloatValue(time, interval);

	ColorA color(0.8f, 0.3f, 0.3f);
	if(sliceWidth <= 0) {
		return renderPlane(renderer, plane, bb, color);
	}
	else {
		plane.dist += sliceWidth / 2;
		Box3 box = renderPlane(renderer, plane, bb, color);
		plane.dist -= sliceWidth;
		box.addBox(renderPlane(renderer, plane, bb, color));
		return box;
	}
}
Example #2
0
        /*
        void extendBy(const XfBox3<Type> &bb)
        {

        }

        bool intersect(const Vec3<Type> &pt) const
        {
        Vec3<Type> p;
        m_invertedMatrix.multVecMatrix(pt, p);
        return Box3<Type>::intersect(p);
        }

        bool intersect(const Box3<Type> &bb) const
        {
        return false;
        }

        bool intersect (const XfBox3<Type> &bb) const
        {
        return false;	
        }
        */
        Box3<Type> project () const
        {
            Box3<Type> box =  (Box3<Type>)*this;

            if (!box.isEmpty()) box.transform(m_matrix);

            return box;
        }
Example #3
0
        void extendBy(const Box3<Type> &bb) 
        {
            if (bb.isEmpty()) return;

            if (Box3<Type>::isEmpty()) {
                *this = bb;
                m_matrix.makeIdentity();
                m_invertedMatrix.makeIdentity();
                return;
            }

        }
/******************************************************************************
* Returns the world space point around which the viewport camera orbits.
******************************************************************************/
Point3 ViewportConfiguration::orbitCenter()
{
	// Update orbiting center.
	if(orbitCenterMode() == ORBIT_SELECTION_CENTER) {
		Box3 selectionBoundingBox;
		for(SceneNode* node : dataset()->selection()->nodes()) {
			selectionBoundingBox.addBox(node->worldBoundingBox(dataset()->animationSettings()->time()));
		}
		if(!selectionBoundingBox.isEmpty())
			return selectionBoundingBox.center();
		else {
			Box3 sceneBoundingBox = dataset()->sceneRoot()->worldBoundingBox(dataset()->animationSettings()->time());
			if(!sceneBoundingBox.isEmpty())
				return sceneBoundingBox.center();
		}
	}
	else if(orbitCenterMode() == ORBIT_USER_DEFINED) {
		return _userOrbitCenter;
	}
	return Point3::Origin();
}