Blob 1.0
Public Member Functions | List of all members
TreeElement Class Reference

Generic primitives. More...

#include <blobtree.h>

Inheritance diagram for TreeElement:
TreeNode TreeNoiseSphere TreeNormal TreeBox TreeCircle TreeCircleArc TreeCircleArcSwept TreeCone TreeConeSphere TreeConic TreeCubic TreeCubicCurve TreeCylinder TreeCylinderBox TreeDisc TreeEdge TreeHemisphere TreeHemisphereDisc TreeHollowBox TreeOctahedron TreePoly TreePyramid TreeQuadric TreeQuadricCurve TreeRectangle TreeRectangleDisc TreeSphere TreeTetra TreeTorus TreeTriangle TreeTubular TreeVertex

Public Member Functions

 TreeElement (BlendCompact *=nullptr)
 Creates a new element given a blending function.
 
virtual ~TreeElement ()
 Destroys an element. More...
 
double K () const
 Returns the Lipschitz constant of the element. More...
 
double K (const Box &) const
 Returns a local Lipschitz constant within a box domain. More...
 
double K (const Segment &) const
 Returns a local Lipschitz constant along a segment. More...
 
double K (const Sphere &) const
 Returns a local Lipschitz constant in a sphere. More...
 
double K (const Ray &) const
 Returns a local Lipschitz constant along a ray. More...
 
TreeNodeCut (const Box &) const
 Cuts the node to simplify its structure inside a box. More...
 
- Public Member Functions inherited from TreeNode
 TreeNode ()
 Create a virtual node of the Blob-Tree structure.
 
virtual ~TreeNode ()
 Destroys a node.
 
virtual double Intensity (const Vector &) const =0
 Compute the field function value at a given point in space.
 
virtual void IntensityGradient (const Vector &, double &, Vector &) const
 Computes the field value and the gradient at a given point in space. More...
 
virtual Vector Gradient (const Vector &) const
 Computes the gradient of the field function at a given point in space. More...
 
virtual TreeNodeBlend (TreeNode *)
 Insert a blending node that blends the old and the new sub-tree together. More...
 
virtual TreeNodeUnion (TreeNode *)
 Insert a union node that unions the old and the new sub-tree together. More...
 
virtual TreeNodeDifference (TreeNode *)
 Insert a difference node. More...
 
virtual TreeNodeTranslate (const Vector &)
 Insert a translation node. More...
 
virtual TreeNodeRotate (const Matrix &)
 Insert a rotation node. More...
 
virtual TreeNodeScale (const Vector &)
 Insert a scaling node. More...
 
virtual TreeNodeCopy () const =0
 Creates a deep copy of the node, recursively traversing the whole structure.
 
virtual double K (const RayStep &) const
 Compute the Lipschitz constant along an optimized ray-stepping segment. More...
 
Box GetBox () const
 Return the bounding box of the node.
 
virtual void SetThreshold (const double &)
 Set the threshold value. More...
 
virtual Color GetMaterial (const Vector &, const Vector &=Vector::Null) const
 Gets the color of a node at a point. More...
 
virtual int Nodes () const
 Compute the number of nodes of the sub-tree.
 
virtual int Depth () const
 Compute the dpeth of the sub-tree.
 
virtual Vector Dichotomy (Vector, Vector, double, double, double, const double &=1.0e-4)
 Compute the intersection between the implicit surface and a segment. More...
 

Additional Inherited Members

- Protected Attributes inherited from TreeNode
Box box = Box::Null
 Bounding box of the node.
 
double T = 0.5
 Threshold value.
 
- Static Protected Attributes inherited from TreeNode
static const double Epsilon = 1e-6
 Epsilon value for gradient computation.
 

Detailed Description

Generic primitives.

This class serves as a top level model for all primitives that are created using a potential function.

For elements with a symmetry axis, some optimization for computing the field function could be considered: first preprocess the primitive using:

// Box
if (!box.Intersect(ray))
{
type = 0;
return 0;
}
Vector pa = c - ray.Origin();
double dx = ray.Direction()*axis;
double pax = pa * axis;
double dpa = ray.Direction()*pa;
er = Quadric(ray.Direction()*ray.Direction() - dx * dx, 2.0*(dx*pax - dpa), pa*pa - pax * pax);
ea = Linear(-dx, pax);
int Intersect(const Ray &) const
Box box
Bounding box of the node.
Definition: blobtree.h:29

This code preprocesses the primitive and computes quadric distance to the axis er.

Constructor & Destructor Documentation

◆ ~TreeElement()

TreeElement::~TreeElement ( )
virtual

Destroys an element.

This function takes care of deleting the blending function.

Member Function Documentation

◆ Cut()

TreeNode * TreeElement::Cut ( const Box box) const
virtual

Cuts the node to simplify its structure inside a box.

Parameters
boxThe box.

Implements TreeNode.

◆ K() [1/5]

double TreeElement::K ( ) const
virtual

Returns the Lipschitz constant of the element.

Basically returns the Lipschitz constant of the potential function.

Implements TreeNode.

Reimplemented in TreeNoiseSphere.

◆ K() [2/5]

double TreeElement::K ( const Box b) const
virtual

Returns a local Lipschitz constant within a box domain.

Returns the Lipschitz constant of the element if argument bounding box intersects the element's bounding box.

Parameters
bBox.

Implements TreeNode.

Reimplemented in TreeBox.

◆ K() [3/5]

double TreeElement::K ( const Ray ray) const
virtual

Returns a local Lipschitz constant along a ray.

Returns the Lipschitz constant of the element if argument ray intersects the element's bounding box.

Parameters
rayThe ray.

Implements TreeNode.

Reimplemented in TreeNoiseSphere, TreeVertex, TreeSphere, TreeEdge, TreeCylinder, TreeCircle, and TreeDisc.

◆ K() [4/5]

double TreeElement::K ( const Segment s) const
virtual

Returns a local Lipschitz constant along a segment.

Returns the Lipschitz constant of the element if segment intersects the element's bounding box.

Parameters
sSegment.

Reimplemented from TreeNode.

Reimplemented in TreeNormal, TreeNoiseSphere, TreeVertex, TreeSphere, TreeEdge, and TreeBox.

◆ K() [5/5]

double TreeElement::K ( const Sphere sphere) const
virtual

Returns a local Lipschitz constant in a sphere.

Parameters
sphereSphere.

Reimplemented from TreeNode.

Reimplemented in TreeNormal.