discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Rendering fails (difference between F5 and F6)

MK
Marius Kintel
Tue, Dec 15, 2015 3:51 AM

On Dec 14, 2015, at 20:44 PM, Parkinbot rudolf@parkinbot.com wrote:

I just had a look, how skin() behaves when it has to connect polygons with
different number of points (mine doesn't do that at all for a good reason).
The result is somehow unexpected.

Yes, the Steiner point insertion is a bit automagic. Not sure I would call it unexpected though - the screenshot you posted is dominated by effects of polygon tessellation. Since we cannot represent non-planar polygons like that, we have to make a tessellation discussion. The actual Steiner point insertion kind of makes sense. Ideas are welcome.

And an immediate feature request would be: adding furcations like a
bifurcation and an inverse (anastomosis) to it.

That would be cool - perhaps something to leave for the future.
As always, if we can prototype partial functionality in user-space, that would help understand it.
If there are missing features in the OpenSCAD language which makes this hard, we could address that in a separate project.

-Marius

> On Dec 14, 2015, at 20:44 PM, Parkinbot <rudolf@parkinbot.com> wrote: > > I just had a look, how skin() behaves when it has to connect polygons with > different number of points (mine doesn't do that at all for a good reason). > The result is somehow unexpected. > Yes, the Steiner point insertion is a bit automagic. Not sure I would call it unexpected though - the screenshot you posted is dominated by effects of polygon tessellation. Since we cannot represent non-planar polygons like that, we have to make a tessellation discussion. The actual Steiner point insertion kind of makes sense. Ideas are welcome. > And an immediate feature request would be: adding furcations like a > bifurcation and an inverse (anastomosis) to it. That would be cool - perhaps something to leave for the future. As always, if we can prototype partial functionality in user-space, that would help understand it. If there are missing features in the OpenSCAD language which makes this hard, we could address that in a separate project. -Marius
P
Parkinbot
Tue, Dec 15, 2015 12:25 PM

kintel wrote

Yes, the Steiner point insertion is a bit automagic. Not sure I would call
it unexpected though - the screenshot you posted is dominated by effects
of polygon tessellation. Since we cannot represent non-planar polygons
like that, we have to make a tessellation discussion. The actual Steiner
point insertion kind of makes sense. Ideas are welcome.

I wouldn't say it makes sense in this specific situation, as Steiner points
are mainly meant for mesh repair purposes in odd non-planar situations like
z-fighting. Modelling the same thing using hull() gives exactly the expected
behavior - unpaired triangles.

hull()
{
cylinder($fn=6,r=50);
translate([0, 0, 70])
cylinder($fn=8,r=50);
}

http://forum.openscad.org/file/n15173/showcase7.png

and here: left is hull, right is Steiner point. What would you expect?

http://forum.openscad.org/file/n15173/showcase6.png

or look at this:

r=50;
height=140;
layers = 2;
skin([for (i=[0:layers-1])
transform(translation([150,0,iheight/layers]) *
rotation([0,0,-0
i]),
i==0?circle($fn=6+47*i,r=r): [[0,0], [0,10]]) ]);

http://forum.openscad.org/file/n15173/showcase8.png

So, if I wanted Steiner point semantics, I could refine the 2D-shape in
principle myself. But if skin() does Steiner point semantics unwantedly, I
don't have any means to prevent it.
One could offer Steiner point semantics as a flavor by adding a mode
attribute, but I guess this is not necessary, as the Steiner regularization
used by skin() is easily done by a an own function (and in a more problem
specific manner) when preparing the dataset.

kintel wrote

Parkinbot wrote

And an immediate feature request would be: adding furcations like a
bifurcation and an inverse (anastomosis) to it.

That would be cool - perhaps something to leave for the future.
As always, if we can prototype partial functionality in user-space, that
would help understand it.
If there are missing features in the OpenSCAD language which makes this
hard, we could address that in a separate project.

I'll do the job and implement it in a more generic (=inefficient) way and on
the basis of my sweep() - as it is already on my todo list.

What makes it hard? Implementing matrix related stuff in OpenSCAD is so
painful - especially if you're committed more to imperative programming.
Think about an NxMxL matrix A and you want to alter some value, say A[10]
[101][100]. In OpenSCAD you have to go through three loops, get thousands of
copies of copies ...
See e.g. also the fibonacci discussion in the thingiverse  OpenSCAD group
http://www.thingiverse.com/groups/openscad/topic:3916#comment-732942
which is kind of absurd, as fibonacci is a recursive problem. But runtime is
runtime.

  • Rudolf -

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15173.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

kintel wrote > Yes, the Steiner point insertion is a bit automagic. Not sure I would call > it unexpected though - the screenshot you posted is dominated by effects > of polygon tessellation. Since we cannot represent non-planar polygons > like that, we have to make a tessellation discussion. The actual Steiner > point insertion kind of makes sense. Ideas are welcome. I wouldn't say it makes sense in this specific situation, as Steiner points are mainly meant for mesh repair purposes in odd non-planar situations like z-fighting. Modelling the same thing using hull() gives exactly the expected behavior - unpaired triangles. > hull() > { > cylinder($fn=6,r=50); > translate([0, 0, 70]) > cylinder($fn=8,r=50); > } <http://forum.openscad.org/file/n15173/showcase7.png> and here: left is hull, right is Steiner point. What would you expect? <http://forum.openscad.org/file/n15173/showcase6.png> or look at this: > r=50; > height=140; > layers = 2; > skin([for (i=[0:layers-1]) > transform(translation([150,0,i*height/layers]) * > rotation([0,0,-0*i]), > i==0?circle($fn=6+47*i,r=r): [[0,0], [0,10]]) ]); <http://forum.openscad.org/file/n15173/showcase8.png> So, if I wanted Steiner point semantics, I could refine the 2D-shape in principle myself. But if skin() does Steiner point semantics unwantedly, I don't have any means to prevent it. One could offer Steiner point semantics as a flavor by adding a mode attribute, but I guess this is not necessary, as the Steiner regularization used by skin() is easily done by a an own function (and in a more problem specific manner) when preparing the dataset. kintel wrote > > Parkinbot wrote >>> And an immediate feature request would be: adding furcations like a >>> bifurcation and an inverse (anastomosis) to it. > That would be cool - perhaps something to leave for the future. > As always, if we can prototype partial functionality in user-space, that > would help understand it. > If there are missing features in the OpenSCAD language which makes this > hard, we could address that in a separate project. I'll do the job and implement it in a more generic (=inefficient) way and on the basis of my sweep() - as it is already on my todo list. What makes it hard? Implementing matrix related stuff in OpenSCAD is so painful - especially if you're committed more to imperative programming. Think about an NxMxL matrix A and you want to alter some value, say A[10] [101][100]. In OpenSCAD you have to go through three loops, get thousands of copies of copies ... See e.g. also the fibonacci discussion in the thingiverse OpenSCAD group <http://www.thingiverse.com/groups/openscad/topic:3916#comment-732942> which is kind of absurd, as fibonacci is a recursive problem. But runtime is runtime. - Rudolf - -- View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15173.html Sent from the OpenSCAD mailing list archive at Nabble.com.
P
Parkinbot
Tue, Dec 15, 2015 9:00 PM

I've done a fast implementation of a bifurcation on the basis of skin() and
the proposed representation scheme. It showed me, that there is no "natural"
semantics in implementing it.
There is a root part, child parts and a connector. The connector is the salt
in the soup. I think it needs either some problem specific treatment or if
it is generated automatically at least some interpolation scheme like
B-spline to provide a good approximation of the transition. The stuff can
(and should) be put into library first, to see how it works. This will take
time.

use
<
scad-utils/transformations.scad
>
use
<skin.scad>
use
<naca4.scad>
// http://www.thingiverse.com/thing:898554

a = af(120, 100, 0, 0);
b = af(100, 100, 0, 10);
c1 = af(50, 50, 0, 20);
c2 = af(35, 50, 55, 20);
d1 = af(30, 50, 10, 30);
d2 = af(30, 50, 60, 30);

skin_furc([a, b, [c1, c2], [d1, d2]]);

// create and place airfoil shape
function af(L, N, x, z) = transform(translation([x, 0, z]),
airfoil_data(naca = 1412, N=N, L=L));

// consumes [..., [X], [[x], [y]], ...]
module skin_furc(C)
{
i = find_furc(C);
if(i)
{
S=split(C, i+1);
adapter = [S[0][i], furc(S[2][0], S[1][0])];
skin(S[0]);
skin(adapter);
skin(S[1]);
skin(S[2]);
}
else
skin(C);
}

function find_furc(C) =  let (res = [for(i=[0:len(C)-2])
if(!len(C[i][0][0]) && len(C[i+1][0][0])) i]) res[0];

// calculate furcation adapter
function furc(B, C) =
let(b0 = floor(len(B)/2))
let(b1 = len(B)-b0)
let(c = floor(len(C)))
[for (i=[0:b0+c+b1-1])
i
<
b0?B[i]:
i<b0+c?C[i-b0]:
B[i-c]];
</quote
>
// split matrix at row n into root and children
function split(M, n) =
[
[for(i=[0:n-1]) M[i]],
[for(i=[n:len(M)-1]) M[i][0]],
[for(i=[n:len(M)-1]) M[i][1]]
];

http://forum.openscad.org/file/n15182/showcase9.png

  • Rudolf -

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15182.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

I've done a fast implementation of a bifurcation on the basis of skin() and the proposed representation scheme. It showed me, that there is no "natural" semantics in implementing it. There is a root part, child parts and a connector. The connector is the salt in the soup. I think it needs either some problem specific treatment or if it is generated automatically at least some interpolation scheme like B-spline to provide a good approximation of the transition. The stuff can (and should) be put into library first, to see how it works. This will take time. > use > &lt; > scad-utils/transformations.scad > &gt; > use > <skin.scad> > use > <naca4.scad> > // http://www.thingiverse.com/thing:898554 > > a = af(120, 100, 0, 0); > b = af(100, 100, 0, 10); > c1 = af(50, 50, 0, 20); > c2 = af(35, 50, 55, 20); > d1 = af(30, 50, 10, 30); > d2 = af(30, 50, 60, 30); > > skin_furc([a, b, [c1, c2], [d1, d2]]); > > // create and place airfoil shape > function af(L, N, x, z) = transform(translation([x, 0, z]), > airfoil_data(naca = 1412, N=N, L=L)); > > // consumes [..., [X], [[x], [y]], ...] > module skin_furc(C) > { > i = find_furc(C); > if(i) > { > S=split(C, i+1); > adapter = [S[0][i], furc(S[2][0], S[1][0])]; > skin(S[0]); > skin(adapter); > skin(S[1]); > skin(S[2]); > } > else > skin(C); > } > > function find_furc(C) = let (res = [for(i=[0:len(C)-2]) > if(!len(C[i][0][0]) && len(C[i+1][0][0])) i]) res[0]; > > // calculate furcation adapter > function furc(B, C) = > let(b0 = floor(len(B)/2)) > let(b1 = len(B)-b0) > let(c = floor(len(C))) > [for (i=[0:b0+c+b1-1]) > i > &lt; > b0?B[i]: > i&lt;b0+c?C[i-b0]: > B[i-c]]; > &lt;/quote > &gt; > // split matrix at row n into root and children > function split(M, n) = > [ > [for(i=[0:n-1]) M[i]], > [for(i=[n:len(M)-1]) M[i][0]], > [for(i=[n:len(M)-1]) M[i][1]] > ]; <http://forum.openscad.org/file/n15182/showcase9.png> - Rudolf - -- View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15182.html Sent from the OpenSCAD mailing list archive at Nabble.com.
JJ
Johan Jonker
Sat, Dec 19, 2015 4:36 PM

Hello everyone,

Maybe interesting to see the first printed results?
http://forum.openscad.org/file/n15228/WP_20151218_09_54_07_Pro.jpg

I tested the result and the sound is fine!
Only the other part, the bow, has its tone hole on the wrong place. So I
have to make a new bow.
I can improve the bow's design in the same way as the bell desig.

Thanks for helping!
Johan

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15228.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Hello everyone, Maybe interesting to see the first printed results? <http://forum.openscad.org/file/n15228/WP_20151218_09_54_07_Pro.jpg> I tested the result and the sound is fine! Only the other part, the bow, has its tone hole on the wrong place. So I have to make a new bow. I can improve the bow's design in the same way as the bell desig. Thanks for helping! Johan -- View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15228.html Sent from the OpenSCAD mailing list archive at Nabble.com.
N
Neon22
Sun, Dec 20, 2015 4:55 AM

Brilliant and well done. Looks great :)

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15236.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Brilliant and well done. Looks great :) -- View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15236.html Sent from the OpenSCAD mailing list archive at Nabble.com.
DV
david vanhorn
Sun, Dec 20, 2015 4:59 AM

Wow!  How many parts?
On Dec 19, 2015 9:56 PM, "Neon22" mschafer@wireframe.biz wrote:

Brilliant and well done. Looks great :)

--
View this message in context:
http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15236.html
Sent from the OpenSCAD mailing list archive at Nabble.com.


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

Wow! How many parts? On Dec 19, 2015 9:56 PM, "Neon22" <mschafer@wireframe.biz> wrote: > Brilliant and well done. Looks great :) > > > > -- > View this message in context: > http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15236.html > Sent from the OpenSCAD mailing list archive at Nabble.com. > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
RW
Rob Ward
Sun, Dec 20, 2015 5:09 AM

Really excellent Johan, you have put new life into the instrument.
Inspiring...

Rob

On 20/12/15 03:36, Johan Jonker wrote:

Hello everyone,

Maybe interesting to see the first printed results?
http://forum.openscad.org/file/n15228/WP_20151218_09_54_07_Pro.jpg

I tested the result and the sound is fine!
Only the other part, the bow, has its tone hole on the wrong place. So I
have to make a new bow.
I can improve the bow's design in the same way as the bell desig.

Thanks for helping!
Johan

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15228.html
Sent from the OpenSCAD mailing list archive at Nabble.com.


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

Really excellent Johan, you have put new life into the instrument. Inspiring... Rob On 20/12/15 03:36, Johan Jonker wrote: > Hello everyone, > > Maybe interesting to see the first printed results? > <http://forum.openscad.org/file/n15228/WP_20151218_09_54_07_Pro.jpg> > > > I tested the result and the sound is fine! > Only the other part, the bow, has its tone hole on the wrong place. So I > have to make a new bow. > I can improve the bow's design in the same way as the bell desig. > > Thanks for helping! > Johan > > > > -- > View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15228.html > Sent from the OpenSCAD mailing list archive at Nabble.com. > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
JJ
Johan Jonker
Sun, Dec 20, 2015 5:21 PM

Three parts:
the bow, the key and the bell.

--
View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15249.html
Sent from the OpenSCAD mailing list archive at Nabble.com.

Three parts: the bow, the key and the bell. -- View this message in context: http://forum.openscad.org/Rendering-fails-difference-between-F5-and-F6-tp15041p15249.html Sent from the OpenSCAD mailing list archive at Nabble.com.