Class TControlPointsCurve

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TControlPointsCurve = class(TCurve)

Description

A basic abstract class for curves determined my some set of ControlPoints. Note: it is not defined in this class any correspondence between values of T (argument for Point function) and ControlPoints.

Hierarchy

Overview

Fields

Public ControlPoints: TVector3SingleList;

Methods

Protected function CreateConvexHullPoints: TVector3SingleList; virtual;
Protected procedure DestroyConvexHullPoints(Points: TVector3SingleList); virtual;
Public procedure RenderControlPoints;
Public function BoundingBox: TBox3D; override;
Public procedure UpdateControlPoints; virtual;
Public class function NiceClassName: string; virtual; abstract;
Public procedure RenderConvexHull;
Public constructor Create(const ATBegin, ATEnd: Float); virtual;
Public constructor CreateDivideCasScriptCurve(CasScriptCurve: TCasScriptCurve; ControlPointsCount: Cardinal);
Public destructor Destroy; override;

Description

Fields

Public ControlPoints: TVector3SingleList;
 

Methods

Protected function CreateConvexHullPoints: TVector3SingleList; virtual;

Using these function you can control how Convex Hull (for RenderConvexHull) is calculated: CreateConvexHullPoints should return points that must be in convex hull (we will run ConvexHull function on those points), DestroyConvexHullPoints should finalize them.

This way you can create new object in CreateConvexHullPoints and free it in DestroyConvexHullPoints, but you can also give in CreateConvexHullPoints reference to some already existing object and do nothing in DestroyConvexHullPoints. (we will not modify object given as CreateConvexHullPoints in any way)

Default implementation in this class returns ControlPoints as CreateConvexHullPoints. (and does nothing in DestroyConvexHullPoints)

Protected procedure DestroyConvexHullPoints(Points: TVector3SingleList); virtual;
 
Public procedure RenderControlPoints;

glBegin(GL_POINTS) + glVertex fo each ControlPoints[i] + glEnd.

Public function BoundingBox: TBox3D; override;

This class provides implementation for BoundingBox: it is simply a BoundingBox of ControlPoints. Subclasses may (but don't have to) override this to calculate better (more accurate) BoundingBox.

Public procedure UpdateControlPoints; virtual;

Always after changing ControlPoints and before calling Point, BoundingBox (and anything that calls them, e.g. Render calls Point) call this method. It recalculates necessary things. ControlPoints.Count must be >= 2.

When overriding: always call inherited first.

Public class function NiceClassName: string; virtual; abstract;

Nice class name, with spaces, starts with a capital letter. Much better than ClassName. Especially under FPC 1.0.x where ClassName is always uppercased.

Public procedure RenderConvexHull;

do glBegin(GL_POLYGON), glVertex(v)..., glEnd, where glVertex are points of Convex Hull of ControlPoints (ignoring Z-coord of ControlPoints).

Public constructor Create(const ATBegin, ATEnd: Float); virtual;

Constructor. This is virtual because it's called by CreateDivideCasScriptCurve. It's also useful in many places in curves.lpr.

Public constructor CreateDivideCasScriptCurve(CasScriptCurve: TCasScriptCurve; ControlPointsCount: Cardinal);

Calculates ControlPoints taking Point(i, ControlPointsCount-1) for i in [0 .. ControlPointsCount-1] from CasScriptCurve. TBegin and TEnd are copied from CasScriptCurve.

Public destructor Destroy; override;
 

Generated by PasDoc 0.13.0 on 2014-08-30 12:10:33