Class BezierVertex

java.lang.Object
org.bzdev.geom.BezierVertex
All Implemented Interfaces:
Shape3D

public class BezierVertex extends Object implements Shape3D
A 3D shape consisting of a 'center' point connecting to a path using a sequence of Bezier vertices. The path will typically be a boundary of some other shape. The shape of this object is determined by the center point, a vector defining a direction more or less perpendicular to the boundary, and a height relative to the center point and the direction of the vector.

This class can be used to create cones and similar shapes.

  • Constructor Details

    • BezierVertex

      public BezierVertex(Path3D path, Point3D vertex)
      Constructor.
      Parameters:
      path - a path
      vertex - the vertex
    • BezierVertex

      public BezierVertex(Path3D path, double height)
      Constructor given a vertex height.
      Parameters:
      path - a path
      height - the height of the vertex
    • BezierVertex

      public BezierVertex(Path3D path, Point3D center, double height)
      Constructor given a vertex height and path center point.
      Parameters:
      path - a path
      center - the center point
      height - the height of the vertex
    • BezierVertex

      public BezierVertex(Path3D path, double vx, double vy, double vz)
      Constructor given explicit vertex coordinates.
      Parameters:
      path - a path
      vx - the X coordinate of the vertex
      vy - the Y coordinate of the vertex
      vz - the Z coordinate of the vertex
  • Method Details

    • setTag

      public void setTag(Object tag)
      Set this object's tag.
      Parameters:
      tag - the tag
    • getTag

      public Object getTag()
      Get this object's tag.
      Returns:
      the tag
    • reverseOrientation

      public void reverseOrientation(boolean reverse)
      Change the orientation of the Bézier triangles associated with this object. This method affects the orientation of triangles provided by iterators. It does not change the values returned by calling methods such as .
      Parameters:
      reverse - true if the orientation is the reverse of the one that was initially defined; false if the orientation is the same as the one that was initially defined.
    • flip

      public void flip()
      Reverse the orientation of this object.
    • isReversed

      public boolean isReversed()
      Determine if the orientation for this grid is reversed.
      Returns:
      true if the orientation is reversed; false if not
    • setColor

      public void setColor(Color c)
      Set the default color for this shape.
      Parameters:
      c - the color
    • setColor

      public void setColor(int i, Color c)
      Set the color for a Bézier triangle specified by an index
      Parameters:
      i - the index
      c - the color
    • getColor

      public Color getColor()
      Get the default color for this shape. This is the color for the shape, excluding Bézier triangles for which an explicit color has been specified.
      Returns:
      the color
    • getColor

      public Color getColor(int i)
      Get the color for this shape given an index. This is the color for the shape, excluding Bézier triangles for which an explicit color has been specified. When a color for a specific index has been provided, that color is returned; otherwise the default color (if any) is returned.
      Parameters:
      i - the index of a Bézier triangle contained in this Bézier vertex
      Returns:
      the color
    • print

      public void print() throws IOException
      Print this object's control points.
      Throws:
      IOException - an IO error occurred
    • print

      public void print(Appendable out) throws IOException
      Print this object's control points, specifying an output.
      Parameters:
      out - the output
      Throws:
      IOException - an IO error occurred
    • print

      public void print(String prefix) throws IOException
      Print this object's control points, specifying a prefix. Each line will start with the prefix (typically some number of spaces).
      Parameters:
      prefix - the prefix
      Throws:
      IOException - an IO error occurred
    • print

      public void print(String prefix, Appendable out) throws IOException
      Print this object's control points, specifying a prefix and output. Each line will start with the prefix (typically some number of spaces).
      Parameters:
      prefix - the prefix
      out - the output
      Throws:
      IOException - an IO error occurred
    • getSurfaceIterator

      public SurfaceIterator getSurfaceIterator(Transform3D tform)
      Description copied from interface: Shape3D
      Get a surface iterator for this Shape3D. The surface iterator will represent the shape as a sequence of Bézier patches and Bézier triangles, with the order of the sequence arbitrary.

      Unless the transform is an affine transform, the transformation is not exact. In this case, the patches and triangles that constitute the surface should be small enough that the transform can be approximated by an affine transform over the region containing the control points.

      Specified by:
      getSurfaceIterator in interface Shape3D
      Parameters:
      tform - a transform to apply to each control point; null for the identity transform
      Returns:
      a surface iterator
    • getSurfaceIterator

      public final SurfaceIterator getSurfaceIterator(Transform3D tform, int level)
      Description copied from interface: Shape3D
      Get a surface iterator for this Shape3D, subdividing the surface. The surface iterator will represent the shape as a sequence of Bézier patches and Bézier triangles, with the order of the sequence arbitrary.

      Unless the transform is an affine transform, the transformation is not exact. In this case, the patches and triangles that constitute the surface after each is subdivided should be small enough that the transform can be approximated by an affine transform over the region containing the control points.

      Specified by:
      getSurfaceIterator in interface Shape3D
      Parameters:
      tform - a transform to apply to each control point; null for the identity transform
      level - the number of levels of partitioning (each additional level splits the previous level into quarters)
      Returns:
      a surface iterator
    • getBoundary

      public Path3D getBoundary()
      Description copied from interface: Shape3D
      Get the boundary for this Shape3D. For a closed surface, the boundary will be an empty path.

      Typically, a boundary will consist of a series of distinct closed subpaths. Subpaths are separated by segments whose type is {link PathIterator3D#SEG_MOVETO}. For a closed manifold, the boundary will be an empty path.

      Specified by:
      getBoundary in interface Shape3D
      Returns:
      the boundary of this surface; null if a boundary cannot be computed
      See Also:
    • isWellFormed

      public boolean isWellFormed()
      Determine if this BezierVertex is well formed.
      Returns:
      true if the grid is well formed; false otherwise
    • isWellFormed

      public boolean isWellFormed(Appendable out)
      Determine if this BezierVertex is well formed, logging error messages to an Appendable.
      Parameters:
      out - an Appendable for logging error messages
      Returns:
      true if the grid is well formed; false otherwise
    • getComponent

      public Shape3D getComponent(int i) throws IllegalArgumentException
      Description copied from interface: Shape3D
      Get a component of this shape. Components are connected shapes - surfaces for which every point can connect to any other point. The components are referenced by an index, specified as an integer in the range [0,n), where n is the number of manifold components. If n is zero, no index is valid.
      Specified by:
      getComponent in interface Shape3D
      Parameters:
      i - the component's index
      Returns:
      a model containing the specified component
      Throws:
      IllegalArgumentException - the argument is out of range
      See Also:
    • getBounds

      public Rectangle3D getBounds()
      Description copied from interface: Shape3D
      Get a bounding rectangular cuboid for a 3D shape. The edges will be aligned with the X, Y and Z axes. The cuboid created may not be the smallest one possible (for example, shapes defined by Bézier surfaces may just use the control points to determine the cuboid as the convex hull for the control points includes all of the surface for parameters in the normal range [0,1]).
      Specified by:
      getBounds in interface Shape3D
      Returns:
      a bounding rectangular cuboid for this Shape3D; null if the shape does not contain any points
    • isClosedManifold

      public boolean isClosedManifold()
      Description copied from interface: Shape3D
      Determine if this Shape3D is a closed two-dimensional manifold.
      Specified by:
      isClosedManifold in interface Shape3D
      Returns:
      true if the surface is a closed two-dimensional manifold; false otherwise
    • isOriented

      public boolean isOriented()
      Description copied from interface: Shape3D
      Determine if a surface is oriented.
      Specified by:
      isOriented in interface Shape3D
      Returns:
      true if the surface has an orientation; false if it does not
    • numberOfComponents

      public int numberOfComponents()
      Description copied from interface: Shape3D
      Get the number of components for this shape. Components are connected shapes - surfaces for which every point can connect to any other point.
      Specified by:
      numberOfComponents in interface Shape3D
      Returns:
      the number of components for this shape