/* This file is part of the source code for 3D-XplorMath-J, Version 1.0 (January 2008).
* Copyright (c) 2008 The 3D-XplorMath Consortium (http://3d-xplormath.org).
* This source code is released under a BSD License, which allows redistribution
* in source and binary form, with or without modification, provided copyright
* and license information are included, and with no warranty or guarantee of
* any kind. For details, see http://3d-xplormath.org/j/source/BSDLicense.txt
*/
package vmm3d.spacecurve;
import org.freehep.graphics2d.VectorGraphics;
import vmm3d.core.View;
import vmm3d.core3D.Exhibit3D;
import vmm3d.core3D.Transform3D;
import vmm3d.core3D.Vector3D;
import vmm3d.core3D.View3D;
/**
* Represents a curve, or set of curve segments, in three-space. The curve is defined by an array of 3D points.
*/
abstract public class SpaceCurve extends Exhibit3D {
/**
* The array of 3D points that define the curve. This array must be computed in the {@link #makePoints()}.
* method. The curve is formed by connecting the points in the array with line segments. Null values
* are allowed in the array. A null value effectively breaks the curve into two segments.
*/
protected Vector3D[] points;
/**
* Subclasses must override this method to compute the array of points that define the curve.
* The array must be assigned to the protected variable {@link #points}.
*/
abstract protected void makePoints();
/**
* Returns a {@link SpaceCurveView} with antialiasing turned on.
*/
public View getDefaultView() {
View v = new SpaceCurveView();
v.setAntialiased(true);
return v;
}
/**
* Get the size of the array of points that define this curve. If the array has not yet been
* computed, because the curve has not yet been drawn, then the return value will be 0.
*/
public int getPointCount() {
return (points == null? 0 : points.length);
}
/**
* Get one of the points from the array that defines the curve.
* @param i The index of the point in the array. This must be in the range 0 to getPointCount()-1,
* or an error will occur.
* @return The i-th point from the array. This can be null, indicating a break in the curve.
*/
public Vector3D getPoint(int i) {
return points[i];
}
/**
* Computes the array of points. This is not meant to be called directlly.
*/
protected void computeDrawData3D(View3D view, boolean exhibitNeedsRedraw, Transform3D previousTransform, Transform3D newTransform) {
if (exhibitNeedsRedraw)
makePoints();
}
/**
* Draws the curve. This is not meant to be called directly.
*/
protected void doDraw3D(org.freehep.graphics2d.VectorGraphics g, View3D view, Transform3D transform) {
boolean useReverseCollar = false;
if (view instanceof SpaceCurveView)
useReverseCollar = ((SpaceCurveView)view).getUseReverseCollar();
view.drawCollaredCurve(points,useReverseCollar);
}
}
Ads help maintain this website.