DeltaCad Macro Completed
All I can say it was a bit of a marathon getting the code working reliably. The issue is that the underlying processes (wire-framing) is not unique/deterministic. Asking the macro to sort out lazy chine offsets was a dead end.
Why migrate from the spreadsheet version previously presented? After all it works! The reason is that even simple designs take forever to code and it is just too hard for more complex projects. The new DeltaCad macro version handles simple hulls easily and the more complex designs are slow but doable.
The process consists of two macros/files:
The Excel file and macro allow you to enter the offset table and then to export the design to a CSV file for DeltaCad.
The DeltaCad macro imports the CSV, draws the design and unfolds (develops) the hull.
Note: DeltaCad can be purchased for US$40 from https://www.deltacad.com.
DeltaCad does not have a suitable table entry process which is why Excel is used. Below is the Excel offset table for the “Mini-Kayak”.
“Mini-Kayak” is an adaptation of work by Bruce C. Anderson (http://buckwheat-anderson.com/bcanderson/Boatz/OSKayak/OSKbuild.html). The actual design is too small to be of practical use as a Kayak (refer to Anderson’s webpage).
The above offset table has three additional features over an offset table:
- Chines have a colour for easy identification.
- Chines can be invisible (and ignored) if the colour is “0”.
- Chines can have a “break” or a sharp bend.
- The design is in millimetres.
- The stations are rounded to the nearest millimetre.
- Any duplicate stations are deleted.
- Stations within 5 mm of each other will have “breaks” automatically added.
- Colour 0 is not processed.
- If an interpolated value appears wrong or wildly off then you will need to add “breaks” to the chine stations near the problem area.
- No curvature checks are made, the design may not be developable (i.e. the plywood may break).
The offset table is exported to DeltaCad as a CSV file. The name of the CSV file is the same as the Excel WorkSheet name. To execute the macro just click the blue “Make CSV” arrow as shown above.
In DeltaCad the macro (“BoatOffsetTable.bas”) is run to import the CSV file and draw the design. For complex designs, the actual process is iterative (i.e. chine by chine). Below is the imported and unfolded “Mini-Kayak” showing the main drawing components.
Note: The unfolded panels are the cut-outs for the design and only one side is shown.
When you run the DeltaCad macro, it first presents a file manager window. It starts in the DeltaCad macro directory. You will need to navigate to your working directory (i.e. where the Excel file is located) and select and okay the CSV file. For the “Mini-Kayak” it is called “Mini-Kayak.CSV”, as shown below.
The macro then presents the “Hull Sections” options box. Set the number of frames to 7 and zero the remaining entries as shown below. This option adds additional frames to the hull model.
You should see the following design.
If the “Frames” entry is set to zero then the offset table as entered in Excel will be drawn as below.
The other option entries, create different sections (cross, long and plan) through the model. For example the following options, shown below, also draw a series of cross-sections, long sections and plan slices.
More Complex Designs
The program is capable of more complex designs but the offset table entry process is rather time consuming. Shown below is “Heart’s Desire II” a design by William Atkin.
Back to the Pontoon Design
Okay, I have generated the pontoon design file in DeltaCad, what next? No big deal, digitise "shapes" over the pieces I want (delete the all the segments when done) and lay them out. Only took about 30 minutes. Below is the cutout design on a single sheet of 4 mm marine plywood:
What is now remaining is to generate (i.e. write a macro to generate) a set of text offsets for marking out the shapes on the plywood (the black box in the image above).
The Pontoon Bridge/Spars
Not a big deal here. Just have to decide what I want it to look like before designing it.
I have uploaded the two files. If you have DeltaCad then have a play.
I have re-edited the cut-out design to align most points with 100 mm spacing. The reason for this is to minimise the measurements required to loft the design:
I have added two breasthooks (red) for the sheer chine join (i.e. "harpin").
Here is an image of the very first mini-canoe I built some 15 years ago. You can see that I use a harpin to keep it's shape. You can also see the copper wires that stitch the hull together before the seams are epoxied.
This image shows the epoxied seams (no fibre-glass tape reinforcement was used in this design) :
This canoe was too small (i.e. tippy) to be usuable.
Export Layout Offsets
Finished the export macro. It orders the points by column so that a column is marked at a time (i.e. without moving the measuring tape). With 456 points it is pretty important get the process of lofting efficient.
Here is the code:
Option Explicit Sub Main Dim ot As Long Dim Shape(6144) As Double Dim num As Long Dim color As Long Dim lt As Long Dim lw As Long Dim Layer As String Dim XP(10000) As Double Dim YP(10000) As Double Dim Clr(10000) As Long Dim I As Long Dim J As Long Dim K As Long Dim N As Long Dim Flag As Boolean Dim TX As Double Dim TY As Double Dim TC As Long ' Get Shape Data N = 0 ot = dcGetFirstObject("") While ot <> dcNone If ot = dcShape Then num = 3072 dcGetShapeData Shape(1), num, color, lt, lw, layer For I=1 to num N = N + 1 XP(N) = Int(Shape(I*2-1)+0.5) YP(N) = Int(Shape(I*2)+0.5) Clr(N) = color Next I End If ot = dcGetNextObject Wend ' Sort Data K = N While ( K > 1) K = Int(K / 3) + 1 For I = K + 1 to N TX = XP(I) TY = YP(I) TC = Clr(I) J = I Flag = True While (Flag) Flag = False If (J > K) Then If (XP(J - K) > TX) Then Flag = True If ((XP(J - K) = TX) And (YP(J - K) > TY)) Then Flag = True If ((XP(J - K) = TX) And (YP(J - K) = TY) And (Clr(J - K) > TC)) Then Flag = True If (Flag) Then XP(J) = XP(J - K) YP(J) = YP(J - K) Clr(J) = Clr(J - K) J = J - K End If End If Wend XP(J) = TX YP(J) = TY Clr(J) = TC Next I Wend ' Export Data Open "LayoutOffsets.CSV" For Output As #1 Print #1, "XP, YP, Clr" For I = 1 to N Print #1, XP(I);", ";YP(I);", ";Clr(I) Next I Close #1 End Sub