Building NURBS surface with multidimensional(>=4) control points


Hi Everyone,

I am trying to build additional dimension into control points for Isogeometric Analysis. This additional dimension maybe the value for temperature, stress, etc.

And I have made a successful test on 3D nurbs surface only, but I am not sure how to make it work for 4D then. And is there a good way to check this 4D control points from this object?

I have attached a test case for you to check.


test.txt (555 Bytes) (16.5 KB)


(Dale Fugier) #2

Use Rhino.Geometry.NurbsSurface.IsRational.

If the function returns true, then the NURBS surface is rational.

The control points have an associated number called a weight. With a few exceptions, weights are positive numbers. When a curve’s control points all have the same weight (usually 1), the curve is called non-rational, otherwise the curve is called rational. The R in NURBS stands for rational and indicates that a NURBS curve has the possibility of being rational. In practice, most NURBS curves are non-rational. A few NURBS curves, circles and ellipses being notable examples, are always rational.


Hi Dale,

Thanks for your reply. But maybe the definition of this control point is different between us.

For rational B-splines, if we have a general 3D control points, it will be P(x, y, z, w), where x, y, z are 3D coordinates, and w is its relative weight. When we calculate in function, we will use Pw(x/w, y/w, z/w). If it’s irrational, w is 1, and we will have P(x, y, z), which is generally used in function.

However, if I have additional dimension, like stress s11, we will have new control point P0(w, y, z, s11, w). Similarly, for irrational case, we will have a new control point like P0(x, y, z, s11). This is what I mean, a 4D control point.

It’s just put additional dimension for control point when we calculate interpolation point. Each Lagrangian interpolated point will have its 3D coordinate value and an additional dimension value, like stress, or even more dimensions.

Hope this would be clear for you.



(Dale Fugier) #4

Thanks for the clarification.

Rhino’s NURBS definition does not support 4-D points as you have defined. Our NURBS objects are purely geometric primitives.

It is possible, though, to add custom data to any object. We call this “user data.” You could, for example, add stress data to a NURBS surface. But our evaluation function will not take this extra data into account. You’d have interpret this data yourself and modify the underlying NURBS data based on it.


Hi Dale,

Now I understand. I will try to build a Nurbs surface function myself. I thought it will work because I saw “Rhino.Geometry.NurbsSurface.Create(numberOfDimensions, isRational, order0, order1, cu_count, cv_count)”, if I change the numberOfDimensions. Maybe it only works for 3D case with weight function as 4th dimension.

By the way, could C++ opennurbs or visual C# rhinocommon libraries deal with this case? Or they have just similar function to generate Nurbs Surface.



(Dale Fugier) #6

I didn’t notice the NurbsSurface.Create override that allows you to pass in the dimension of the surface. So, yes, possible to create a 4-D NURBS surface, for example. I don’t think RhinoCommon has enough tools to let you get at the additional data. But the C++ version of openNURBS would.

@dalelear, might be able to add value to this conversation.


Hi Dale,

I have found a good toolbox in Matlab and I have already get the visualization done. The only processes for me now is now translating the function into C# now. But still thanks a lot!