Input from a table of offsets, is that possible?


I have a drawing of a wooden rowing boat with offset tables. I would like to take the values in the offset tables into orca to get the shape of the boat. Is this possible?

Eva from Sweden

First, there is the question of getting the offset points from the source (drawing, text file, spreadsheet, AutoCAD, etc.) into Rhino. Second, there is the process of creating a surface that matches those points (to some degree).

As far as getting the points into Rhino, there are a number of ways to do it:

  • If the offsets are already in the form of curves, for example in AutoCAD, Rhino should be able to read the file. It imports DWG, DXF, and many other formats.

  • If the offsets are in Excel, you simply need to format them in x,y,z format, save it as a csv, and use Rhino’s Import command to read them.

  • The same thing can be done for a text file; just format it as x,y,z and import them. I have copied the entry on the Import command from Rhino’s Help file at the end of this message.

  • If the offsets are on paper in a table, I would type them into Excel, and then use Excel to format them into x,y,z.

  • If you have a lines drawing, you can scan it and place it in Rhino as a background bitmap, scale it as necessary to take out any distortions from scanning, and then trace over the curves.

  • Once you import points, the next step is to use them to create curves (stations, buttocks, etc.). Another option is to write a simple command script that creates the curves from the points, using the CurveThroughPt command. If you already have the points in x,y,z format, this script would be easy to write in Excel or a text editor.

Now onto the second part of the question; once the offset points are in Rhino, how do I create a surface to match them? The first question to ask yourself is, “What do I mean by ‘match’?” What tolerance are you willing to accept? Are you willing to sacrifice fairness in order to exactly match the offsets (which will almost certainly be necessary, unless the offsets have been fully faired)? There is usually a constant tension between fairness and closeness of the match to the offsets that you have to balance.

There are three fundamental approaches to creating a surface from a set of points:

  1. Using Rhino’s Patch command or one of many 3rd party plug-ins to directly create a surface from a point cloud. This is very rarely successful in the context of hull forms.

  2. Direct editing of the surface’s control net, until sections cut through the surface match the target offsets. This will yield the most fair surface and “cleanest” control net, useful for future changes to the hull form. Orca3D’s hull assistants can be very helpful in getting started, and its real-time sections and OrcaMove features streamline the process.

  3. Using Rhino’s Loft command to create a surface from curves. This will probably yield the closest match to the offsets, but may not be as fair as approach #2. The attached 16-page document gives a good description of the process; note that the first 11 pages are focused on conditioning the curves, before the surface is even created.

With any of these approaches, you can use the PointDeviation command to see how far your surface is from your offset points.

The approach that you take may depend on what you plan to do with the model when you’re finished. If you need an orderly NURBS surface that you can continue to modify and ultimately fair for construction, approach #2 is probably the best one. It may take you longer, but the end product will support your needs. If you’re trying to come up with something that you can use for a hydrostatics or seakeeping analysis, fairness and ability to work with the control net aren’t as important, and perhaps approach #3 would be quicker. If you just want something that you can use for a rendering and neither fairness nor an exact match are important, by all means use #3, and don’t spend much time conditioning the curves. If you need to mesh the surface for CFD, #3 may work, but #2 will give you a better starting point.

From the Rhino Help file:

Points File (.asc, .csv, .txt, .xyz, .cgo) Import

Imports points from text files.

To open, import, insert, and attach a file as a worksession

From the File menu, click Open or Import .

In the Open dialog box, select the supported file type.

If the import can be configured, click the Options button to specify import settings.

Click the Open button. or press the Enter key.

Note : When Rhino opens a non-3dm model, the title bar reflects the name of the model that was opened. When the model is saved for the first time, this model name is entered as the file name.

Note: Point files must be in the form: x,y,z with no additional heading information at the top. The characters can be separated with a variety of characters and can be surrounded by quotation marks.

Points Import Options



Reads commas as delimiters.


Reads semicolons as delimiters.


Reads spaces as delimiters.


Reads tab characters as delimiters.


Reads characters you specify as delimiters.


Create point cloud

Joins the imported points into a point cloud.

I use an Excel spreadsheet in which I enter the table of offsets. The output of the spreadsheet is a .cvs file which is imported into Rhino. The result is a set of points in Rhino which can them be used to generate a model of the hull surface. The details of generating the model depend on the shape of the hull. Orca3D does not have a method for going directly from offsets to a hull surface.

The spreadsheet I use is for offsets in feet - inches - eighth inches which is standard in the US and elsewhere, and I can send it to you. I could also modify the spreadsheet for offsets in decimal numbers.


Wow, thank you for your help!

This is my story:

I just built a Whitehall rowing boat (wood) and now I am in the process of starting up my next boat project. This time I want to get the drawing into Rhino so that I can alter it a bit to my liking but also to be able to print templates (in paper) of the planking that I can use when building the boat. I will build it in clink (lapstrake).

So, I have a drawing with offsets in inches. I am happy if you send me the spreadsheet, maybe I can make something out of that.

I have just started to look into Rhino, I downloaded a trial version, I don’t really know how to use I yet.

My plan whit the model is to be able to print templates of the planking and the stationmoldes for me to use when I am building the boat. It sound like there is no easy way to get the shape of the hull without knowing a lot about Rhino. I just started to learn…

Usually the CurveThroughPt option of Knots=Chord should be used. Also, if any curves have kinks, for instance where they cross a chine, create separate curves for each segment between kinks.

After creating the curves I look for large, obvious errors in the point locations, correct those and generate corrected curves. These errors frequently are due to mistakes in recording or transcribing the offsets; for example 7 instead of 1, or in a series of point such as 1-8-4 1-5-2 1-1-7 1-9-7 when the last offset should be 0-9-7. I do not spend a lot of time trying to reconcile and fair the curves.

I use Patch as an integral part of the process of going from a set of offsets to a hull surface and I find my method is efficient in creating a fair surface with the desired degree of match to the offsets. The resulting surface can have a control point structure which is very good for fairing or modification of the shape. I’ll describe my method below.

A simplistic, direct application of Patch usually does not result in a satisfactory result.

Based on my experience this can be a good method to create a hull model which “looks like” a set of lines but can be very tedious of a close match to the offsets is desired. The method I developed results in a better solution with less manual work when starting with offsets (or points from a scan), and can have exactly the same control point structure.

In general I’ve had mixed luck creating a hull surface using only Loft. I usually have better luck using Sweep2 with suitable rails such as sheer and rabbet curves.

Definitely no simple process of inserting the control point coordinates, “turning the crank”, and a completed hull surface pops out.

Hi David, Thanks very much for this feedback. Since Orca3D is mainly focused on designing new hulls, I’m sure there are many users like you have a lot more experience with this process in Rhino than I do. Generous sharing of this kind of knowledge and experience is one of the great things about the Rhino community!

Below is a brief description of the method I use for creating a hull surface from offsets using Rhino.

  1. Import the offsets into Rhino as coordinate triplets to create a set of points.

  2. Create curves the points using CurveThroughPts with Knots=Chord. If any curves have kinks, for instance where they cross a chine, create separate curves for each segment between kinks.

  3. Look for large, obvious errors in the point locations, correct those and generate corrected curves. I do not spend a lot of time trying to reconcile and fair the curves at this stage.

  4. Look at the curves and decide how many individual surfaces to use to model the hull. Natural divides are kinks such as chines. Four sided, untrimmed surfaces are preferred but not always possible. Trimmed edges should be not be adjacent to other surfaces if possible. Edges need to be defined by curves from the offsets.

  5. Fair the curves which define the edges.

  6. For each surface create an untrimmed “starting” surface with edges which coincide with edge curves. If the surface will be trimmed then extend edge curves to create a set of curves which define the perimeter of the corresponding untrimmed curve. The starting surface can be created using EdgeSrf. Additional curves may be used as stations and the starting surface created using Sweep2 if each end of the additional curves is directly on a faired edge curve. Occasionally I will use NetworkSrf with a more complex set of curves but usually a starting surface created with EdgeSrf or Sweep2 is preferred.

  7. Rebuild and simplify the starting surface if possible with acceptable deviation from the edge curves. Commands I use for this step include Rebuild, RebuildUV and RemoveKnot. The goal is as simple an arrangement of control points as possible while being close enough to the edge curves.

  8. Start the Patch command and select the offset points as the input points and the appropriate starting surface. Select the Preserve edges option.

  9. Check the results against the offset points with PointDeviation.

  10. If there are areas where the match with the offset points is not close enough consider using InsertKnot to increase the number of control points in those areas. Also investigate where it may be possible to simplify the surface using RemoveKnot without deviating too much from the edge curves.

  11. Repeat steps 8, 9 and 10 using revised surface as the starting surface.

  12. Repeat steps above until a satisfactory surface is obtained.

  13. Refine the surface by moving control points as desired.

I’ll try to find time to provide a step-by-step example of the method in a new thread.

The big question is what format you have to start with.
Most of the tables of offsets work with are in

Feet-Inches-Eights(+for 1/16)

format. I put these in Excel spreadsheets. I have VBA functions to convert those values to inches and functions to create sheets with the values in decimal format.

I can then export those as CSV files that Rhino can convert to points.