vtkEdgeSubdivisionCriterion Class Reference

#include <vtkEdgeSubdivisionCriterion.h>

Inheritance diagram for vtkEdgeSubdivisionCriterion:

Inheritance graph
[legend]
Collaboration diagram for vtkEdgeSubdivisionCriterion:

Collaboration graph
[legend]

List of all members.


Detailed Description

how to decide whether a linear approximation to nonlinear geometry or field should be subdivided

Date
2007-06-01 03:00:31
Revision
1.1

Descendants of this abstract class are used to decide whether a piecewise linear approximation (triangles, lines, ... ) to some nonlinear geometry should be subdivided. This decision may be based on an absolute error metric (chord error) or on some view-dependent metric (chord error compared to device resolution) or on some abstract metric (color error). Or anything else, really. Just so long as you implement the EvaluateEdge member, all will be well.

See also:
vtkDataSetSubdivisionAlgorithm vtkStreamingTessellator
Tests:
vtkEdgeSubdivisionCriterion (Tests)

Definition at line 46 of file vtkEdgeSubdivisionCriterion.h.


Public Types

typedef vtkObject Superclass

Public Member Functions

virtual const char * GetClassName ()
virtual int IsA (const char *type)
virtual void PrintSelf (ostream &os, vtkIndent indent)
virtual bool EvaluateEdge (const double *p0, double *p1, const double *p2, int field_start)=0
virtual int PassField (int sourceId, int sourceSize, vtkStreamingTessellator *t)
virtual void ResetFieldList ()
virtual bool DontPassField (int sourceId, vtkStreamingTessellator *t)
const int * GetFieldIds () const
const int * GetFieldOffsets () const
int GetOutputField (int fieldId) const
int GetNumberOfFields () const

Static Public Member Functions

static int IsTypeOf (const char *type)
static
vtkEdgeSubdivisionCriterion
SafeDownCast (vtkObject *o)

Protected Member Functions

 vtkEdgeSubdivisionCriterion ()
virtual ~vtkEdgeSubdivisionCriterion ()
bool ViewDependentEval (const double *p0, double *p1, double *p1_actual, const double *p2, int field_start, vtkMatrix4x4 *viewtrans, const double *pixelSize, double allowableChordErr) const
bool FixedFieldErrorEval (const double *p0, double *p1, double *p1_actual, const double *p2, int field_start, int field_criteria, double *allowableFieldErr) const

Protected Attributes

int * FieldIds
int * FieldOffsets
int NumberOfFields

Member Typedef Documentation

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

Definition at line 49 of file vtkEdgeSubdivisionCriterion.h.


Constructor & Destructor Documentation

vtkEdgeSubdivisionCriterion::vtkEdgeSubdivisionCriterion (  )  [protected]

virtual vtkEdgeSubdivisionCriterion::~vtkEdgeSubdivisionCriterion (  )  [protected, virtual]


Member Function Documentation

virtual const char* vtkEdgeSubdivisionCriterion::GetClassName (  )  [virtual]

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

static int vtkEdgeSubdivisionCriterion::IsTypeOf ( const char *  name  )  [static]

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

virtual int vtkEdgeSubdivisionCriterion::IsA ( const char *  name  )  [virtual]

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

static vtkEdgeSubdivisionCriterion* vtkEdgeSubdivisionCriterion::SafeDownCast ( vtkObject o  )  [static]

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

virtual void vtkEdgeSubdivisionCriterion::PrintSelf ( ostream &  os,
vtkIndent  indent 
) [virtual]

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkObject.

Reimplemented in vtkDataSetEdgeSubdivisionCriterion.

virtual bool vtkEdgeSubdivisionCriterion::EvaluateEdge ( const double *  p0,
double *  p1,
const double *  p2,
int  field_start 
) [pure virtual]

You must implement this member function in a subclass. It will be called by vtkStreamingTessellator for each edge in each primitive that vtkStreamingTessellator generates.

Implemented in vtkDataSetEdgeSubdivisionCriterion.

virtual int vtkEdgeSubdivisionCriterion::PassField ( int  sourceId,
int  sourceSize,
vtkStreamingTessellator t 
) [virtual]

This is a helper routine called by PassFields() which you may also call directly; it adds sourceSize to the size of the output vertex field values. The offset of the sourceId field in the output vertex array is returned. -1 is returned if sourceSize would force the output to have more than vtkStreamingTessellator::MaxFieldSize field values per vertex.

virtual void vtkEdgeSubdivisionCriterion::ResetFieldList (  )  [virtual]

Don't pass any field values in the vertex pointer. This is used to reset the list of fields to pass after a successful run of vtkStreamingTessellator.

virtual bool vtkEdgeSubdivisionCriterion::DontPassField ( int  sourceId,
vtkStreamingTessellator t 
) [virtual]

This does the opposite of PassField(); it removes a field from the output (assuming the field was set to be passed). Returns true if any action was taken, false otherwise.

const int * vtkEdgeSubdivisionCriterion::GetFieldIds (  )  const [inline]

Return the map from output field id to input field ids. That is, field i of any output vertex from vtkStreamingTessellator will be associated with GetFieldIds()[i] on the input mesh.

Definition at line 156 of file vtkEdgeSubdivisionCriterion.h.

const int * vtkEdgeSubdivisionCriterion::GetFieldOffsets (  )  const [inline]

Return the offset into an output vertex array of all fields. That is, field i of any output vertex, p, from vtkStreamingTessellator will have its first entry at p[GetFieldOffsets()[i] ] .

Definition at line 157 of file vtkEdgeSubdivisionCriterion.h.

int vtkEdgeSubdivisionCriterion::GetOutputField ( int  fieldId  )  const

Return the output ID of an input field. Returns -1 if fieldId is not set to be passed to the output.

int vtkEdgeSubdivisionCriterion::GetNumberOfFields (  )  const [inline]

Return the number of fields being evaluated at each output vertex. This is the length of the arrays returned by GetFieldIds() and GetFieldOffsets().

Definition at line 158 of file vtkEdgeSubdivisionCriterion.h.

bool vtkEdgeSubdivisionCriterion::ViewDependentEval ( const double *  p0,
double *  p1,
double *  p1_actual,
const double *  p2,
int  field_start,
vtkMatrix4x4 viewtrans,
const double *  pixelSize,
double  allowableChordErr 
) const [protected]

Perform the core logic for a view-dependent subdivision. Returns true if subdivision should occur, false otherwise. This is to be used by subclasses once the mesh-specific evaluation routines have been called to get the actual (as opposed to linearly interpolated) midpoint coordinates. Currently, this handles only geometry, but could conceivably test scalar fields as well.

Parameters:
p0 is the first endpoint of the edge
p1 is the linearly interpolated midpoint of the edge
p1_actual is the actual midpoint of the edge
p2 is the second endpoint of the edge
field_start is the offset into the above arrays indicating where the scalar field values start (when isosurfacing, the embedding dimension may be smaller than the number of parametric coordinates).
viewtrans is the viewing transform (from model to screen coordinates). Applying this transform to p0, p1, etc., should yield screen-space coordinates.
pixelSize is the width and height of a pixel in screen space coordinates.
allowableChordErr is the maximum allowable distance between p1 and p1_actual, in multiples of pixelSize, before subdivision will occur.

bool vtkEdgeSubdivisionCriterion::FixedFieldErrorEval ( const double *  p0,
double *  p1,
double *  p1_actual,
const double *  p2,
int  field_start,
int  field_criteria,
double *  allowableFieldErr 
) const [protected]

Perform the core logic for a fixed multi-criterion, scalar-field based subdivision. Returns true if subdivision should occur, false otherwise. This is to be used by subclasses once the mesh-specific evaluation routines have been called to get the actual (as opposed to linearly interpolated) midpoint geometry and field values. Only field values are tested (not geometry) because you can save yourself field evaluations if you check the geometry yourself and it fails the test.

Parameters:
p0 is the first endpoint of the edge
p1 is the linearly interpolated midpoint of the edge
p1_actual is the actual midpoint of the edge
p2 is the second endpoint of the edge
field_start is the offset into the above arrays indicating where the scalar field values start (when isosurfacing, the embedding dimension may be smaller than the number of parametric coordinates).
field_criteria is a bitfield specifying which fields (of the fields specified by PassField or PassFields) are to be considered for subdivision. Thus, you may pass fields to the output mesh without using them as subdivision criteria. In than case, the allowableFieldErr will have an empty entry for those fields.
allowableFieldErr is an array of tolerances, one for each field passed to the output. If the linearly interpolated and actual midpoint values for any field are greater than the value specified here, the member will return true.


Member Data Documentation

Definition at line 99 of file vtkEdgeSubdivisionCriterion.h.

Definition at line 100 of file vtkEdgeSubdivisionCriterion.h.

Definition at line 101 of file vtkEdgeSubdivisionCriterion.h.


The documentation for this class was generated from the following file:

Generated on Sat Dec 27 13:23:15 2008 for VTK by  doxygen 1.5.6