discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Remodelling ship hull in FreeCAD OpenScad by using hull operation from given lines plan.

N
najihah
Wed, Dec 19, 2018 11:37 PM

Hello.

i have a lines plan of a ship hull. then i would like to re-modelling the
ship hull in FreeCAD OpenSCAD by using hull operation. since there is no
manual to modelling ship hull in FreeCAD from given lines plan.

i would to ask an opinion and suggestion or any guidelines or any past
experienced in using FreeCAD OpenSCAD using hull operation?

--
Sent from: http://forum.openscad.org/

Hello. i have a lines plan of a ship hull. then i would like to re-modelling the ship hull in FreeCAD OpenSCAD by using hull operation. since there is no manual to modelling ship hull in FreeCAD from given lines plan. i would to ask an opinion and suggestion or any guidelines or any past experienced in using FreeCAD OpenSCAD using hull operation? -- Sent from: http://forum.openscad.org/
FV
Frank van der Hulst
Thu, Dec 20, 2018 1:03 AM

If you define each of hull crosssections as a polygon in 3D (e.g draw each
as a polygon in 2D in XY, then translate to right Z position), you could
then do a hull() operation. But that would result in straight lines from
one profile to the next.

On Thu, 20 Dec 2018, 12:37 PM najihah <ummusaiyidah95@gmail.com wrote:

Hello.

i have a lines plan of a ship hull. then i would like to re-modelling the
ship hull in FreeCAD OpenSCAD by using hull operation. since there is no
manual to modelling ship hull in FreeCAD from given lines plan.

i would to ask an opinion and suggestion or any guidelines or any past
experienced in using FreeCAD OpenSCAD using hull operation?

--
Sent from: http://forum.openscad.org/


OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

If you define each of hull crosssections as a polygon in 3D (e.g draw each as a polygon in 2D in XY, then translate to right Z position), you could then do a hull() operation. But that would result in straight lines from one profile to the next. On Thu, 20 Dec 2018, 12:37 PM najihah <ummusaiyidah95@gmail.com wrote: > Hello. > > i have a lines plan of a ship hull. then i would like to re-modelling the > ship hull in FreeCAD OpenSCAD by using hull operation. since there is no > manual to modelling ship hull in FreeCAD from given lines plan. > > i would to ask an opinion and suggestion or any guidelines or any past > experienced in using FreeCAD OpenSCAD using hull operation? > > > > > -- > Sent from: http://forum.openscad.org/ > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
S
stonysmith
Thu, Dec 20, 2018 2:07 AM

I found that the tricky part is that that the different slices have different
numbers of vertexes, so you end up with odd faceting in the final product.
The only choice would be to raise the number of vertexes on each slice.

Using hull() is also a bit tricky because you need to do it across each pair
of slices, not across the entire set of slices.

--
Sent from: http://forum.openscad.org/

I found that the tricky part is that that the different slices have different numbers of vertexes, so you end up with odd faceting in the final product. The only choice would be to raise the number of vertexes on each slice. Using hull() is also a bit tricky because you need to do it across each pair of slices, not across the entire set of slices. -- Sent from: http://forum.openscad.org/
N
najihah
Thu, Dec 20, 2018 4:23 AM

Hi Frankv.

Thank you for your respond. i have done this method before in AutoCAD
software. but at the end of operation i had a difficulties in lofting the
ship surface. After done the lofting process, when i want to import in
OpenFOAM or ANSYS software for simulation, it say that it not in one solid
body.

Here is the figures of the ship hull that i have been done in AutoCAD.

http://forum.openscad.org/file/t2430/ship_hull.jpg
http://forum.openscad.org/file/t2430/MTC092_ship_hull.jpg

--
Sent from: http://forum.openscad.org/

Hi Frankv. Thank you for your respond. i have done this method before in AutoCAD software. but at the end of operation i had a difficulties in lofting the ship surface. After done the lofting process, when i want to import in OpenFOAM or ANSYS software for simulation, it say that it not in one solid body. Here is the figures of the ship hull that i have been done in AutoCAD. <http://forum.openscad.org/file/t2430/ship_hull.jpg> <http://forum.openscad.org/file/t2430/MTC092_ship_hull.jpg> -- Sent from: http://forum.openscad.org/
FV
Frank van der Hulst
Thu, Dec 20, 2018 5:00 AM

Actually, if it was me I'd do it in OnShape.com. Probably most other CAD
software would work, but OnShape is what I am familiar with. Generate each
crosssection as a spline curve and a straight line across the top. Then use
the Loft function to generate the 3D solid.

On Thu, 20 Dec 2018, 3:08 PM stonysmith <stonysmith@gmail.com wrote:

I found that the tricky part is that that the different slices have
different
numbers of vertexes, so you end up with odd faceting in the final product.
The only choice would be to raise the number of vertexes on each slice.

Using hull() is also a bit tricky because you need to do it across each
pair
of slices, not across the entire set of slices.

--
Sent from: http://forum.openscad.org/


OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

Actually, if it was me I'd do it in OnShape.com. Probably most other CAD software would work, but OnShape is what I am familiar with. Generate each crosssection as a spline curve and a straight line across the top. Then use the Loft function to generate the 3D solid. On Thu, 20 Dec 2018, 3:08 PM stonysmith <stonysmith@gmail.com wrote: > I found that the tricky part is that that the different slices have > different > numbers of vertexes, so you end up with odd faceting in the final product. > The only choice would be to raise the number of vertexes on each slice. > > Using hull() is also a bit tricky because you need to do it across each > pair > of slices, not across the entire set of slices. > > > > -- > Sent from: http://forum.openscad.org/ > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
P
Parkinbot
Thu, Dec 20, 2018 12:34 PM

Note that hull will always give you a convex result. It depends on the form,
whether hulling is eligible.

I guess the technique you are heading for is to extrude over a series of
polygons. OpenSCAD has no native support for this, but there are libraries
that can be used: search for "sweep()" and "skin()".
sweep(), at least the version in my  Naca_sweep.scad
https://www.thingiverse.com/thing:900137  library, expects all polygons
in the series to have the same number of vertices. skin() does not have this
restriction.
It is usually a good idea to also use an interpolation scheme like  nSpline
https://www.thingiverse.com/thing:1208001  to refine the polygons and the
polygon series before doing the sweep.

Note that these libraries don't check for

  • the right winding order of the polygons. If your result shows only pink
    faces in F12 view you have to reverse the vertex order.
  • self intersections and mutual intersections of polygons. If your result
    shows some areas with pink faces in F12 view this indicates self
    intersections. While this is no problem in F5 view, you won't be able to do
    a valid STL export or Boolean operations with F6.

--
Sent from: http://forum.openscad.org/

Note that hull will always give you a convex result. It depends on the form, whether hulling is eligible. I guess the technique you are heading for is to extrude over a series of polygons. OpenSCAD has no native support for this, but there are libraries that can be used: search for "sweep()" and "skin()". sweep(), at least the version in my Naca_sweep.scad <https://www.thingiverse.com/thing:900137> library, expects all polygons in the series to have the same number of vertices. skin() does not have this restriction. It is usually a good idea to also use an interpolation scheme like nSpline <https://www.thingiverse.com/thing:1208001> to refine the polygons and the polygon series before doing the sweep. Note that these libraries don't check for - the right winding order of the polygons. If your result shows only pink faces in F12 view you have to reverse the vertex order. - self intersections and mutual intersections of polygons. If your result shows some areas with pink faces in F12 view this indicates self intersections. While this is no problem in F5 view, you won't be able to do a valid STL export or Boolean operations with F6. -- Sent from: http://forum.openscad.org/
S
shadowwynd
Thu, Dec 20, 2018 1:14 PM

Most 3D programs can do a loft/sweep/skin between "ribs" or profiles.

Rhino3D, Strata3D, AutoCAD, SolidWorks, Blender, TurboCAD, FreeCAD, Fusion
360, etc. all have ways of doing this.  OpenSCAD does not have a native way
(someone may have done it) to do this elegantly.  ... meaning you can
certainly do this in OpenSCAD, just not elegantly.

In Rhino, for example, you can define your ribs,then determine if the
resultant shape is curved / seamless, angular (like a polyhedron), etc.

For a traditional boat, the  cross-sectional ribs have both convex and
concave elements (such as where the keel meets the ribs, the interior
cavity, etc.), which doesn't work with OpenSCAD hull().  If you look on
thingiverse you can find some OpenSCAD lofts and things like the NACA
airfoil sweep that are different approaches to this.

If you wanted to do this purely in stock OpenSCAD, you would need to do
create profiles separately for the interior and exterior points and
difference the outer hull from the inner hull, like this:

rib1_outer = [[0, 10], [ 20, 10], [25, 0], [25, -5], [15, -15], [10, -16],
[5,-20], [0, -25] ];
rib2_outer = [[0,10], [10,10], [15,0], [10,-10], [0,-15]];

rib1_inner = [[-1,10], [18,11], [23,0], [23, -5], [13,-13],
[5,-16],[-1,-18]];
rib2_inner = [[-1,11], [8,11], [13,0], [8,-8], [0,-13]];

module profile(points)
{
linear_extrude(1)
{
polygon(points);
mirror([1,0,0]) polygon(points);
}
}

module outer_hull()
{

hull()
{
    translate ([0, 30, 0]) rotate ([90,0,0]) profile (rib1_outer);
    translate ([0, -30, 0]) rotate ([90,0,0]) profile (rib1_outer);
    
    translate ([0, 60, 0]) rotate ([90,0,0]) profile (rib2_outer);
    translate ([0, -60, 0]) rotate ([90,0,0]) profile (rib2_outer);
    
    translate ([0, 80, 0]) sphere (5);
    translate ([0, -80, 0]) sphere (5);
    
}

}

module inner_hull()
{

hull()
{
    translate ([0, 30, 0]) rotate ([90,0,0]) profile (rib1_inner);
    translate ([0, -30, 0]) rotate ([90,0,0]) profile (rib1_inner);
    
    translate ([0, 60, 0]) rotate ([90,0,0]) profile (rib2_inner);
    translate ([0, -60, 0]) rotate ([90,0,0]) profile (rib2_inner);
   
}

}

difference()
{
outer_hull();
inner_hull();
}

http://forum.openscad.org/file/t486/boat.png

--
Sent from: http://forum.openscad.org/

Most 3D programs can do a loft/sweep/skin between "ribs" or profiles. Rhino3D, Strata3D, AutoCAD, SolidWorks, Blender, TurboCAD, FreeCAD, Fusion 360, etc. all have ways of doing this. OpenSCAD does not have a native way (someone may have done it) to do this elegantly. ... meaning you can certainly do this in OpenSCAD, just not elegantly. In Rhino, for example, you can define your ribs,then determine if the resultant shape is curved / seamless, angular (like a polyhedron), etc. For a traditional boat, the cross-sectional ribs have both convex and concave elements (such as where the keel meets the ribs, the interior cavity, etc.), which doesn't work with OpenSCAD hull(). If you look on thingiverse you can find some OpenSCAD lofts and things like the NACA airfoil sweep that are different approaches to this. If you wanted to do this purely in stock OpenSCAD, you would need to do create profiles separately for the interior and exterior points and difference the outer hull from the inner hull, like this: rib1_outer = [[0, 10], [ 20, 10], [25, 0], [25, -5], [15, -15], [10, -16], [5,-20], [0, -25] ]; rib2_outer = [[0,10], [10,10], [15,0], [10,-10], [0,-15]]; rib1_inner = [[-1,10], [18,11], [23,0], [23, -5], [13,-13], [5,-16],[-1,-18]]; rib2_inner = [[-1,11], [8,11], [13,0], [8,-8], [0,-13]]; module profile(points) { linear_extrude(1) { polygon(points); mirror([1,0,0]) polygon(points); } } module outer_hull() { hull() { translate ([0, 30, 0]) rotate ([90,0,0]) profile (rib1_outer); translate ([0, -30, 0]) rotate ([90,0,0]) profile (rib1_outer); translate ([0, 60, 0]) rotate ([90,0,0]) profile (rib2_outer); translate ([0, -60, 0]) rotate ([90,0,0]) profile (rib2_outer); translate ([0, 80, 0]) sphere (5); translate ([0, -80, 0]) sphere (5); } } module inner_hull() { hull() { translate ([0, 30, 0]) rotate ([90,0,0]) profile (rib1_inner); translate ([0, -30, 0]) rotate ([90,0,0]) profile (rib1_inner); translate ([0, 60, 0]) rotate ([90,0,0]) profile (rib2_inner); translate ([0, -60, 0]) rotate ([90,0,0]) profile (rib2_inner); } } difference() { outer_hull(); inner_hull(); } <http://forum.openscad.org/file/t486/boat.png> -- Sent from: http://forum.openscad.org/