public final class CurveUtils extends java.lang.Object
Modified by: Joseph A. Huwaldt
Constructor and Description |
---|
CurveUtils() |
Modifier and Type | Method and Description |
---|---|
static double[][] |
allocate2DArray(int rows,
int cols)
Allocate a recyclable 2D array of double values using factory methods.
|
static BasicNurbsCurve |
arcLengthParameterize(NurbsCurve crv,
Parameter<Length> tol)
Return a NurbsCurve, with the same degree as the input curve, which is an
approximate arc-length re-parameterization of the input NurbsCurve.
|
static KnotVector |
bezierKnotVector(int degree)
Return a knot vector that can be used to create a Bezier curve segment of the
specified degree using the BasicNurbsCurve class.
|
static BasicNurbsCurve |
connectCurves(java.util.List<NurbsCurve> curves)
Connect together or "concatenate" a list of curves end-to-start.
|
static BasicNurbsCurve |
connectCurves(NurbsCurve... curves)
Connect together or "concatenate" a list of curves end-to-start.
|
static BasicNurbsCurve |
createBlend(Curve crv1,
Curve crv2,
Parameter<Length> eps,
double sEnd1,
double sEnd2,
int degree)
Return a blending curve between two curve ends.
|
static BasicNurbsCurve |
createFillet(Curve crv1,
Curve crv2,
Parameter<Length> eps,
double sEnd1,
double sFil1,
double sEnd2,
double sFil2,
int itype,
int degree)
Return a fillet curve between two curves.
|
static BasicNurbsCurve |
createFillet(GeomPoint p1,
GeomPoint p2,
GeomPoint p3,
GeomPoint p4,
Parameter<Length> radius,
Parameter<Length> eps)
Return a circular fillet curve between two planar non-parallel lines.
|
static GeomList<BasicNurbsCurve> |
decomposeToBezier(NurbsCurve curve)
Decompose a NURBS curve into a list of Bezier segments.
|
static NurbsCurve |
degreeElevate(NurbsCurve curve,
int t)
Elevate the degree of a curve by the specified number of times.
|
static NurbsCurve |
elevateToDegree(NurbsCurve curve,
int degree)
Elevate the degree of a curve to the specified degree.
|
static <any> |
getBezierStartParameters(NurbsCurve crv)
Returns a list containing the parameters at the start (and end) of each Bezier
segment of the specified NURBS curve.
|
static boolean |
isBezierEndPointNearest(GeomPoint point,
java.util.List<ControlPoint> P)
Returns
true if an end point is the closest point in the specified
Bezier curve segment to the target point. |
static boolean |
isSimpleConvexPolygon(java.util.List<ControlPoint> P)
Return true if the supplied control point polygon is simple and convex.
|
static Float64Vector |
knotVectorUnion(Float64Vector Ua,
Float64Vector Ub)
Return the union between two knot vectors.
|
static void |
recycle2DArray(double[][] arr)
Recycle any 2D array of doubles that was created by allocate2DArray().
|
static BasicNurbsCurve |
thinKnotsToTolerance(BasicNurbsCurve original,
Parameter<Length> tol)
Attempt to minimize the number of knots in the specified NURBS curve while
maintaining the same shape (to within tolerance) of the original curve.
|
public CurveUtils()
public static NurbsCurve elevateToDegree(NurbsCurve curve, int degree)
curve
- The curve to have the degree elevated. May not be null.degree
- The desired degree for the curve to be elevated to.public static NurbsCurve degreeElevate(NurbsCurve curve, int t)
curve
- The curve to have the degree elevated. May not be null.t
- The number of times to elevate the degree.public static GeomList<BasicNurbsCurve> decomposeToBezier(NurbsCurve curve)
curve
- The curve to be decomposed into Bezier segments. May not be null.public static <any> getBezierStartParameters(NurbsCurve crv)
crv
- The NURBS curve to return the Bezier segment start parameters for. May
not be null.public static KnotVector bezierKnotVector(int degree)
degree
- The degree of the knot vector to return.public static BasicNurbsCurve connectCurves(java.util.List<NurbsCurve> curves) throws java.lang.IllegalArgumentException
curves
- The list of curves to be connected together. May not be null.BasicNurbsCurve
made up of the input curves connected
together end-to-start.java.lang.IllegalArgumentException
- if there are less than 2 curves.public static BasicNurbsCurve connectCurves(NurbsCurve... curves) throws java.lang.IllegalArgumentException
curves
- The list of curves to be connected together. May not be null.BasicNurbsCurve
made up of the input curves connected
together end-to-start.java.lang.IllegalArgumentException
- if there are less than 2 curves.public static BasicNurbsCurve createFillet(Curve crv1, Curve crv2, Parameter<Length> eps, double sEnd1, double sFil1, double sEnd2, double sFil2, int itype, int degree)
crv1
- The 1st input curve. May not be null.crv2
- The 2nd input curve. May not be null.eps
- The geometry tolerance to use when determining if this a planar
curve. If null is passed, then the curve would have be be exactly
planar to be a circular or conic segment.sEnd1
- Parameter value on the first curve telling that the part of the curve
lying on this side of sFil1 shall not be replaced by the fillet.sFil1
- Parameter value of the starting point of the fillet on the first
curve.sEnd2
- Parameter value on the second curve telling that the part of the
curve lying on this side of sFil2 shall not be replaced by the
fillet.sFil2
- Parameter value of the starting point of the fillet on the second
curve.itype
- Indicator of type of fillet. = 1 - Circle, interpolating point and
tangent on first curve and the point on the 2nd curve, but not the
tangent on curve 2. = 2 - Planar conic if possible else - A generic
polynomial segment.degree
- Degree of fillet curve to return.BasicNurbsCurve
fillet curve.public static BasicNurbsCurve createFillet(GeomPoint p1, GeomPoint p2, GeomPoint p3, GeomPoint p4, Parameter<Length> radius, Parameter<Length> eps)
p1
- The 1st end of the 1st input line. May not be null.p2
- The 2nd end of the 1st input line. May not be null.p3
- The 1st end of the 2nd input line. May not be null.p4
- The 2nd end of the 2nd input line. May not be null.radius
- The radius of the circular fillet. May not be null.eps
- The geometry tolerance to use in determining if the input line
segments are co-planar. If null is passed, the input lines must be
exactly co-planar.BasicNurbsCurve
circular arc fillet curve.public static BasicNurbsCurve createBlend(Curve crv1, Curve crv2, Parameter<Length> eps, double sEnd1, double sEnd2, int degree)
crv1
- The 1st input curve. May not be null.crv2
- The 2nd input curve. May not be null.eps
- The geometry tolerance to use when determining if the output is a
planar curve. If null is passed, then the curve would have be be
exactly planar to be a circular or conic segment.sEnd1
- Parameter value on crv1 indicating which end of curve 1 should start
the blend.sEnd2
- Parameter value on crv2 indicating which end of curve 2 should end
the blend.degree
- Degree of blend curve to return.BasicNurbsCurve
blending curve between the input curves.public static BasicNurbsCurve arcLengthParameterize(NurbsCurve crv, Parameter<Length> tol)
crv
- The NurbsCurve to be approximately re-parameterized. May not be null.tol
- The geometric tolerance to use when re-parameterizing the input curve.
May not be null or zero.public static BasicNurbsCurve thinKnotsToTolerance(BasicNurbsCurve original, Parameter<Length> tol)
original
- The original curve to have the knots thinned to tolerance. May not be null.tol
- The allowable tolerance between the original curve and the curve
with the knots thinned. May not be null.public static boolean isSimpleConvexPolygon(java.util.List<ControlPoint> P)
P
- The list of control points to evaluate. May not be null.public static boolean isBezierEndPointNearest(GeomPoint point, java.util.List<ControlPoint> P)
true
if an end point is the closest point in the specified
Bezier curve segment to the target point. Returns false
if the closest
point may be interior to the curve segment.point
- The point to find the closest/farthest point on this curve to/from.
May not be null.P
- The control point polygon for the Bezier curve. May not be null.true
if an end point of the specified segment is closest to
the target point.public static Float64Vector knotVectorUnion(Float64Vector Ua, Float64Vector Ub)
Ua
- The 1st knot vector to merge. May not be null.Ub
- The 2nd knot vector to merge. May not be null.public static double[][] allocate2DArray(int rows, int cols)
WARNING: The array returned may not be zeroed and may be larger than the requested number of rows & columns! The array returned by this method can be recycled by recycle2DArray().
rows
- The minimum number of rows (1st index) for the returned array.cols
- The minimum number of columns (2nd index) for the returned array.recycle2DArray(double[][])
public static void recycle2DArray(double[][] arr)
arr
- The array to be recycled. The array must have been created by this the
allocate2DArray() method! May not be null.allocate2DArray(int, int)