Class BasicNurbsSurface

    • Method Detail

      • newInstance

        public static BasicNurbsSurface newInstance​(ControlPoint[][] cps,
                                                    int p,
                                                    int q,
                                                    double[] sK,
                                                    double[] tK)
        Create a NURBS surface from the given control points, knots and degree.
        Parameters:
        cps - Matrix of control points: cps[u][v]. May not be null.
        p - s-degree of the NURBS curve
        q - t-degree of the NURBS curve
        sK - Knot values in s-direction. May not be null.
        tK - Knot values in t-direction. May not be null.
        Returns:
        A new BasicNurbsSurface from the given control points, knots and degree.
        Throws:
        java.lang.IllegalArgumentException - if the knot vectors are not valid.
      • newInstance

        public static BasicNurbsSurface newInstance​(ControlPointNet cpNet,
                                                    KnotVector sKnots,
                                                    KnotVector tKnots)
        Generate a NURBS surface from the given control points and the given knot vectors.
        Parameters:
        cpNet - Matrix of control points. May not be null.
        sKnots - Knot vector in the s-direction for the surface. May not be null.
        tKnots - Knot vector in the t-direction for the surface. May not be null.
        Returns:
        A new BasicNurbsSurface from the given control points and the given knot vectors.
        Throws:
        java.lang.IllegalArgumentException - if the knot vector is not consistent with the number of control points.
      • size

        public int size()
        Returns the number of child-elements that make up this geometry element. This implementation returns the number of control points in this NURBS surface.
        Specified by:
        size in interface GeomElement<NurbsSurface>
        Returns:
        The number of child-elements that make up this geometry element.
      • getNumberOfRows

        public int getNumberOfRows()
        Return the control point matrix size in the s-direction (down a column of control points).
        Specified by:
        getNumberOfRows in class NurbsSurface
        Returns:
        The control point matrix size in the s-direction.
      • getNumberOfColumns

        public int getNumberOfColumns()
        Return the control point matrix size in the t-direction (across the columns of control points).
        Specified by:
        getNumberOfColumns in class NurbsSurface
        Returns:
        The control point matrix size in the t-direction.
      • getSDegree

        public int getSDegree()
        Return the degree of the NURBS surface in the s-direction.
        Specified by:
        getSDegree in class NurbsSurface
        Returns:
        degree of surface in s-direction
      • getTDegree

        public int getTDegree()
        Return the degree of the NURBS surface in the t-direction.
        Specified by:
        getTDegree in class NurbsSurface
        Returns:
        degree of surface in t-direction
      • getRealPoint

        public Point getRealPoint​(double s,
                                  double t)
        Calculate a point on the surface for the given parametric position on the surface.
        Specified by:
        getRealPoint in interface Surface<NurbsSurface>
        Parameters:
        s - 1st parametric dimension distance to calculate a point for (0.0 to 1.0 inclusive).
        t - 2nd parametric dimension distance to calculate a point for (0.0 to 1.0 inclusive).
        Returns:
        The calculated point on the surface at the specified parameter values.
        Throws:
        java.lang.IllegalArgumentException - if there is any problem with the parameter values.
      • getSDerivatives

        public java.util.List<Vector<javax.measure.quantity.Length>> getSDerivatives​(double s,
                                                                                     double t,
                                                                                     int grade,
                                                                                     boolean scaled)
        Calculate all the derivatives from 0 to grade with respect to parametric s-position on the surface for the given parametric position on the surface, d^{grade}p(s,t)/d^{grade}s.

        Example:
        1st derivative (grade = 1), this returns [p(s,t), dp(s,t)/ds];
        2nd derivative (grade = 2), this returns [p(s,t), dp(s,t)/ds, d^2p(s,t)/d^2s]; etc.

        Specified by:
        getSDerivatives in class AbstractSurface<NurbsSurface>
        Parameters:
        s - 1st parametric dimension distance to calculate derivative for (0.0 to 1.0 inclusive).
        t - 2nd parametric dimension distance to calculate derivative for (0.0 to 1.0 inclusive).
        grade - The maximum grade to calculate the u-derivatives for (1=1st derivative, 2=2nd derivative, etc)
        scaled - Pass true for properly scaled derivatives or false if the magnitude of the derivative vector is not required -- this sometimes results in faster calculation times.
        Returns:
        A list of s-derivatives up to the specified grade of the surface at the specified parametric position.
        Throws:
        java.lang.IllegalArgumentException - if the grade is < 0 or the parameter values are invalid.
      • getTDerivatives

        public java.util.List<Vector<javax.measure.quantity.Length>> getTDerivatives​(double s,
                                                                                     double t,
                                                                                     int grade,
                                                                                     boolean scaled)
        Calculate all the derivatives from 0 to grade with respect to parametric t-position on the surface for the given parametric position on the surface, d^{grade}p(s,t)/d^{grade}t.

        Example:
        1st derivative (grade = 1), this returns [p(s,t), dp(s,t)/dt];
        2nd derivative (grade = 2), this returns [p(s,t), dp(s,t)/dt, d^2p(s,t)/d^2t]; etc.

        Specified by:
        getTDerivatives in class AbstractSurface<NurbsSurface>
        Parameters:
        s - 1st parametric dimension distance to calculate derivative for (0.0 to 1.0 inclusive).
        t - 2nd parametric dimension distance to calculate derivative for (0.0 to 1.0 inclusive).
        grade - The maximum grade to calculate the v-derivatives for (1=1st derivative, 2=2nd derivative, etc)
        scaled - Pass true for properly scaled derivatives or false if the magnitude of the derivative vector is not required -- this sometimes results in faster calculation times.
        Returns:
        A list of t-derivatives up to the specified grade of the surface at the specified parametric position.
        Throws:
        java.lang.IllegalArgumentException - if the grade is < 0 or the parameter values are invalid.
      • getTwistVector

        public Vector<javax.measure.quantity.Length> getTwistVector​(double s,
                                                                    double t)
        Calculate the twist vector (d^2P/(ds*dt) = d(dP/ds)/dt) for this surface at the specified position on this surface.
        Specified by:
        getTwistVector in interface Surface<NurbsSurface>
        Parameters:
        s - 1st parametric dimension distance to calculate twist vector for (0.0 to 1.0 inclusive).
        t - 2nd parametric dimension distance to calculate twist vector for (0.0 to 1.0 inclusive).
        Returns:
        The twist vector of this surface at the specified parametric position.
        Throws:
        java.lang.IllegalArgumentException - if the parameter values are invalid.
      • getBoundsMin

        public Point getBoundsMin()
        Return the coordinate point representing the minimum bounding box corner of this geometry element (e.g.: min X, min Y, min Z).
        Specified by:
        getBoundsMin in interface GeomElement<NurbsSurface>
        Returns:
        The minimum bounding box coordinate for this geometry element.
        Throws:
        java.lang.IndexOutOfBoundsException - if this list contains no geometry.
      • getBoundsMax

        public Point getBoundsMax()
        Return the coordinate point representing the maximum bounding box corner (e.g.: max X, max Y, max Z).
        Specified by:
        getBoundsMax in interface GeomElement<NurbsSurface>
        Returns:
        The maximum bounding box coordinate for this geometry element.
        Throws:
        java.lang.IndexOutOfBoundsException - if this list contains no elements.
      • getUnit

        public javax.measure.unit.Unit<javax.measure.quantity.Length> getUnit()
        Returns the unit in which the control points in this surface are stated.
        Specified by:
        getUnit in interface GeomElement<NurbsSurface>
        Returns:
        The unit in which the control points in this surface are stated.
      • to

        public BasicNurbsSurface to​(javax.measure.unit.Unit<javax.measure.quantity.Length> unit)
                             throws javax.measure.converter.ConversionException
        Returns the equivalent to this surface but stated in the specified unit.
        Specified by:
        to in interface GeomElement<NurbsSurface>
        Specified by:
        to in interface ParametricGeometry<NurbsSurface>
        Specified by:
        to in interface Surface<NurbsSurface>
        Parameters:
        unit - The length unit of the surface to be returned. May not be null.
        Returns:
        An equivalent to this surface but stated in the specified unit.
        Throws:
        javax.measure.converter.ConversionException - if the the input unit is not a length unit.
      • toDimension

        public BasicNurbsSurface toDimension​(int newDim)
        Return the equivalent of this surface converted to the specified number of physical dimensions. If the number of dimensions is greater than this element, then zeros are added to the additional dimensions. If the number of dimensions is less than this element, then the extra dimensions are simply dropped (truncated). If the new dimensions are the same as the dimension of this element, then this element is simply returned.
        Specified by:
        toDimension in interface GeomElement<NurbsSurface>
        Specified by:
        toDimension in interface ParametricGeometry<NurbsSurface>
        Specified by:
        toDimension in interface Surface<NurbsSurface>
        Parameters:
        newDim - The dimension of the surface to return.
        Returns:
        The equivalent of this surface converted to the new dimensions.
      • equals

        public boolean equals​(java.lang.Object obj)
        Compares this BasicNurbsSurface against the specified object for strict equality (same values and same units).
        Overrides:
        equals in class AbstractGeomElement<NurbsSurface>
        Parameters:
        obj - the object to compare with.
        Returns:
        true if this object is identical to that object; false otherwise.
      • recycle

        public static void recycle​(BasicNurbsSurface instance)
        Recycles a BasicNurbsSurface instance immediately (on the stack when executing in a StackContext).
        Parameters:
        instance - The instance to be recycled.