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

Segment skeletal primitive. More...

#include <blobtree.h>

Inheritance diagram for TreeEdge:
TreeNormal Axis TreeElement TreeNode

Public Member Functions

 TreeEdge (const Vector &, const Vector &, BlendCompact *)
 Create a segment element. More...
 
 TreeEdge (const Segment &, BlendCompact *)
 Create a segment element. More...
 
virtual ~TreeEdge ()
 Destroy an edge element.
 
double Intensity (const Vector &) const
 Directly compute the intensity at a given point in space. More...
 
double R (const Vector &) const
 Compute the squared distance to the skeleton. More...
 
virtual TreeNodeCopy () const
 Creates a deep copy of the node.
 
int Memory () const
 Compute the size of a node.
 
TreeNodeTranslate (const Vector &)
 Translates a vertex node in the BlobTree. More...
 
TreeNodeRotate (const Matrix &)
 Rotates an edge node in the BlobTree. More...
 
TreeNodeScale (const Vector &)
 Scales an edge skeletal element by a scaling vector. More...
 
double K (const Ray &) const
 Returns a local Lipschitz constant along a ray. More...
 
double K (const Segment &) const
 Compute the Lipschitz constant on a segment. More...
 
double K (const RayStep &) const
 Compute the Lipschitz constant on a segment. More...
 
- Public Member Functions inherited from TreeNormal
 TreeNormal (BlendCompact *=nullptr)
 Creates a skeletal element given a blending function.
 
virtual ~TreeNormal ()
 Destroys a skeletal element.
 
virtual Vector Gradient (const Vector &) const
 Compute the gradient at a given point. More...
 
virtual void IntensityGradient (const Vector &, double &, Vector &) const
 Compute the field value and the gradient of the field function at a given point in space. More...
 
virtual double K (const Sphere &) const
 Compute the Lipschitz constant inside a sphere. More...
 
- Public Member Functions inherited from TreeElement
 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...
 
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 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...
 
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

Segment skeletal primitive.

Example of how to code a segment primitive:

TreeNode *edge=new TreeEdge(Vector(-1,-1,-1),Vector(1,1,1),new BlendCubic(2.0,1.0));
Normalized blending functions (1-r2)3.
Definition: blend.h:114
TreeEdge(const Vector &, const Vector &, BlendCompact *)
Create a segment element.
Definition: treeedge.cpp:22
The generic nodes with some pure virtual functions.
Definition: blobtree.h:27

Constructor & Destructor Documentation

◆ TreeEdge() [1/2]

TreeEdge::TreeEdge ( const Vector a,
const Vector b,
BlendCompact blend 
)

Create a segment element.

Parameters
a,bEnd vertices of edge.
blendFalloff function.

◆ TreeEdge() [2/2]

TreeEdge::TreeEdge ( const Segment s,
BlendCompact blend 
)

Create a segment element.

Parameters
sSegment.
blendFalloff function.

Member Function Documentation

◆ Intensity()

double TreeEdge::Intensity ( const Vector p) const
virtual

Directly compute the intensity at a given point in space.

This function uses an optimized implementation that outperforms the standard computation of the normal vector between a vertex in space and its projection onto the skeleton.

Parameters
pPoint.

Reimplemented from TreeNormal.

◆ K() [1/3]

double TreeEdge::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.

Check the intersection with the box, then with the capsule.

Reimplemented from TreeElement.

◆ K() [2/3]

double TreeEdge::K ( const RayStep raystep) const
virtual

Compute the Lipschitz constant on a segment.

Parameters
raystepSegment.

Reimplemented from TreeNormal.

◆ K() [3/3]

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

Compute the Lipschitz constant on a segment.

Parameters
sSegment.

Reimplemented from TreeNormal.

◆ R()

double TreeEdge::R ( const Vector p) const
virtual

Compute the squared distance to the skeleton.

Parameters
pPoint.

Reimplemented from TreeNormal.

◆ Rotate()

TreeNode * TreeEdge::Rotate ( const Matrix r)
virtual

Rotates an edge node in the BlobTree.

Instead of inserting a rotation node in the tree, simply updates the vertices of the edge.

Parameters
rRotation matrix.

Reimplemented from TreeNode.

◆ Scale()

TreeNode * TreeEdge::Scale ( const Vector s)
virtual

Scales an edge skeletal element by a scaling vector.

The algorithm performs as follows. If the scaling is the same in all directions, then directly scale he skeleton and the blending function. Otherwise, insert a scaling node.

Parameters
sScaling vector.

Reimplemented from TreeNode.

◆ Translate()

TreeNode * TreeEdge::Translate ( const Vector t)
virtual

Translates a vertex node in the BlobTree.

Instead of inserting a translation node in the tree, simply updates the vertices of the edge.

Parameters
tTranslation vector.

Reimplemented from TreeNode.