discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

What are the rules for transform()

DS
Dan Shriver
Tue, Mar 6, 2018 9:51 PM

I'm having some issues with transform()

If I do something simple (like in arches() below), I get a 3D shape,  But
if I try to use points along a curve in the X Z plane (arches2()) I get
nothing.  The curve and the points look legitimate to me
----------------------------- DEBUGGING OUTPUT FROM
arches2()-------------------------------------------

ECHO: [[325, 0, 0], [324.796, 0, 15.6943], [324.183, 0, 31.3781], [323.162,
0, 47.0405], [321.734, 0, 62.6711], [319.9, 0, 78.2592], [317.661, 0,
93.7943], [315.018, 0, 109.266], [311.973, 0, 124.663], [308.528, 0,
139.976], [304.687, 0, 155.195], [300.45, 0, 170.308], [295.821, 0,
185.305], [290.804, 0, 200.178], [285.401, 0, 214.914], [279.617, 0,
229.505], [273.455, 0, 243.94], [266.919, 0, 258.21], [260.014, 0,
272.306], [252.744, 0, 286.216], [245.115, 0, 299.933], [237.131, 0,
313.447], [228.799, 0, 326.748], [220.123, 0, 339.828], [211.109, 0,
352.677], [201.764, 0, 365.288], [192.094, 0, 377.651], [182.106, 0,
389.758], [171.806, 0, 401.601], [149.454, 0, 426.029], [138.084, 0,
439.221], [127.102, 0, 452.737], [116.518, 0, 466.566], [106.339, 0,
480.697], [96.574, 0, 495.117], [87.232, 0, 509.815], [78.3204, 0,
524.777], [69.8469, 0, 539.992], [61.8185, 0, 555.446], [54.242, 0,
571.127], [47.1238, 0, 587.021], [40.4699, 0, 603.114], [34.2859, 0,
619.395], [28.5769, 0, 635.848], [23.3478, 0, 652.459], [18.6031, 0,
669.215], [14.3467, 0, 686.102], [10.5821, 0, 703.106], [7.31263, 0,
720.211], [4.54097, 0, 737.405], [2.26945, 0, 754.671], [0.5, 0, 771.996],
[0.5, 0, 771.996], [0, 0, 777.711], [-0.5, 0, 771.996], [-2.26945, 0,
754.671], [-4.54097, 0, 737.405], [-7.31263, 0, 720.211], [-10.5821, 0,
703.106], [-14.3467, 0, 686.102], [-18.6031, 0, 669.215], [-23.3478, 0,
652.459], [-28.5769, 0, 635.848], [-34.2859, 0, 619.395], [-40.4699, 0,
603.114], [-47.1238, 0, 587.021], [-54.242, 0, 571.127], [-61.8185, 0,
555.446], [-69.8469, 0, 539.992], [-78.3204, 0, 524.777], [-87.232, 0,
509.815], [-96.574, 0, 495.117], [-106.339, 0, 480.697], [-116.518, 0,
466.566], [-127.102, 0, 452.737], [-138.084, 0, 439.221], [-149.454, 0,
426.029], [-161.201, 0, 413.173], [-171.806, 0, 401.601], [-182.106, 0,
389.758], [-192.094, 0, 377.651], [-201.764, 0, 365.288], [-211.109, 0,
352.677], [-220.123, 0, 339.828], [-228.799, 0, 326.748], [-237.131, 0,
313.447], [-245.115, 0, 299.933], [-252.744, 0, 286.216], [-260.014, 0,
272.306], [-266.919, 0, 258.21], [-273.455, 0, 243.94], [-279.617, 0,
229.505], [-285.401, 0, 214.914], [-290.804, 0, 200.178], [-295.821, 0,
185.305], [-300.45, 0, 170.308], [-304.687, 0, 155.195], [-308.528, 0,
139.976], [-311.973, 0, 124.663], [-315.018, 0, 109.266], [-317.661, 0,
93.7943], [-319.9, 0, 78.2592], [-321.734, 0, 62.6711], [-323.162, 0,
47.0405], [-324.183, 0, 31.3781], [-324.796, 0, 15.6943], [-325, 0, 0]]

ECHO: "blah"

ECHO: [304.687, 0, 155.195]


function waveOut(i) = abs(sin(i)) * romanArch(65, 3, 70, 200) + (1 -
abs(sin(i))) * ogeepoly(65,3,60,60,200,1,10);

function waveIn(i) = abs(sin(i)) * romanArch(95, 3, 40, 200) + (1 -
abs(sin(i))) * ogeepoly(65,3,60,60,200,1,10);

module arches() {

skin([
       for (i=[0 : 180])

transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]), waveOut(i))
]);

translate([0,0,90]) {
    skin([
       for (i=[0 : 180])

transform(translation([0,0,(i0.5)]) * rotation([0,0,0]), waveIn(i))
]);
}
/

       for (i=[0 : 90])

transform(translation([0,0,(i0.5)]) * rotation([0,0,0]),
interpolateWave(romanArch(70, 3, 62, 200), ogeepoly(65,3,60,60,100,1,10), i
))
]);
/
}

module arches2() {

yxzpath = ogeepolyPath(650, 3, 600, 600, 210, 1, 10);

echo(yxzpath);
echo("blah");
echo(yxzpath[10]);

skin([
       for (i=[1 : 30])

transform(translation(yxzpath[i]) * rotation([0,0,0]), waveOut(i*6))
]);
}

//arches();

arches2();

https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon
Virus-free.
www.avast.com
https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

I'm having some issues with transform() If I do something simple (like in arches() below), I get a 3D shape, But if I try to use points along a curve in the X Z plane (arches2()) I get nothing. The curve and the points look legitimate to me ----------------------------- DEBUGGING OUTPUT FROM arches2()------------------------------------------- ECHO: [[325, 0, 0], [324.796, 0, 15.6943], [324.183, 0, 31.3781], [323.162, 0, 47.0405], [321.734, 0, 62.6711], [319.9, 0, 78.2592], [317.661, 0, 93.7943], [315.018, 0, 109.266], [311.973, 0, 124.663], [308.528, 0, 139.976], [304.687, 0, 155.195], [300.45, 0, 170.308], [295.821, 0, 185.305], [290.804, 0, 200.178], [285.401, 0, 214.914], [279.617, 0, 229.505], [273.455, 0, 243.94], [266.919, 0, 258.21], [260.014, 0, 272.306], [252.744, 0, 286.216], [245.115, 0, 299.933], [237.131, 0, 313.447], [228.799, 0, 326.748], [220.123, 0, 339.828], [211.109, 0, 352.677], [201.764, 0, 365.288], [192.094, 0, 377.651], [182.106, 0, 389.758], [171.806, 0, 401.601], [149.454, 0, 426.029], [138.084, 0, 439.221], [127.102, 0, 452.737], [116.518, 0, 466.566], [106.339, 0, 480.697], [96.574, 0, 495.117], [87.232, 0, 509.815], [78.3204, 0, 524.777], [69.8469, 0, 539.992], [61.8185, 0, 555.446], [54.242, 0, 571.127], [47.1238, 0, 587.021], [40.4699, 0, 603.114], [34.2859, 0, 619.395], [28.5769, 0, 635.848], [23.3478, 0, 652.459], [18.6031, 0, 669.215], [14.3467, 0, 686.102], [10.5821, 0, 703.106], [7.31263, 0, 720.211], [4.54097, 0, 737.405], [2.26945, 0, 754.671], [0.5, 0, 771.996], [0.5, 0, 771.996], [0, 0, 777.711], [-0.5, 0, 771.996], [-2.26945, 0, 754.671], [-4.54097, 0, 737.405], [-7.31263, 0, 720.211], [-10.5821, 0, 703.106], [-14.3467, 0, 686.102], [-18.6031, 0, 669.215], [-23.3478, 0, 652.459], [-28.5769, 0, 635.848], [-34.2859, 0, 619.395], [-40.4699, 0, 603.114], [-47.1238, 0, 587.021], [-54.242, 0, 571.127], [-61.8185, 0, 555.446], [-69.8469, 0, 539.992], [-78.3204, 0, 524.777], [-87.232, 0, 509.815], [-96.574, 0, 495.117], [-106.339, 0, 480.697], [-116.518, 0, 466.566], [-127.102, 0, 452.737], [-138.084, 0, 439.221], [-149.454, 0, 426.029], [-161.201, 0, 413.173], [-171.806, 0, 401.601], [-182.106, 0, 389.758], [-192.094, 0, 377.651], [-201.764, 0, 365.288], [-211.109, 0, 352.677], [-220.123, 0, 339.828], [-228.799, 0, 326.748], [-237.131, 0, 313.447], [-245.115, 0, 299.933], [-252.744, 0, 286.216], [-260.014, 0, 272.306], [-266.919, 0, 258.21], [-273.455, 0, 243.94], [-279.617, 0, 229.505], [-285.401, 0, 214.914], [-290.804, 0, 200.178], [-295.821, 0, 185.305], [-300.45, 0, 170.308], [-304.687, 0, 155.195], [-308.528, 0, 139.976], [-311.973, 0, 124.663], [-315.018, 0, 109.266], [-317.661, 0, 93.7943], [-319.9, 0, 78.2592], [-321.734, 0, 62.6711], [-323.162, 0, 47.0405], [-324.183, 0, 31.3781], [-324.796, 0, 15.6943], [-325, 0, 0]] ECHO: "blah" ECHO: [304.687, 0, 155.195] -------------------------------------------------------------------------------------------------------------------------- function waveOut(i) = abs(sin(i)) * romanArch(65, 3, 70, 200) + (1 - abs(sin(i))) * ogeepoly(65,3,60,60,200,1,10); function waveIn(i) = abs(sin(i)) * romanArch(95, 3, 40, 200) + (1 - abs(sin(i))) * ogeepoly(65,3,60,60,200,1,10); module arches() { skin([ for (i=[0 : 180]) transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]), waveOut(i)) ]); translate([0,0,90]) { skin([ for (i=[0 : 180]) transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]), waveIn(i)) ]); } /* for (i=[0 : 90]) transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]), interpolateWave(romanArch(70, 3, 62, 200), ogeepoly(65,3,60,60,100,1,10), i )) ]);*/ } module arches2() { yxzpath = ogeepolyPath(650, 3, 600, 600, 210, 1, 10); echo(yxzpath); echo("blah"); echo(yxzpath[10]); skin([ for (i=[1 : 30]) transform(translation(yxzpath[i]) * rotation([0,0,0]), waveOut(i*6)) ]); } //arches(); arches2(); <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> Virus-free. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
RP
Ronaldo Persiano
Wed, Mar 7, 2018 12:00 AM

I'm having some issues with transform()

If I do something simple (like in arches() below), I get a 3D shape,  But

if I try to use points along a curve in the X Z plane (arches2()) I get
nothing.  The curve and the points look legitimate to me

I guess you are referring to the function transform() defined in
transformations.scad as part of scad-utils. This function have two
parameters: the first one is a 4x4 matrix and the former is a list of 3D
points. To apply transform() to 2D points you must embed them in 3D with
function to_3d that accepts a list of 2D points and return a list of 3D
points, like in:

my3Dtransformedpoints = transform(matrix, to_3d(my2Dpoints))

> > I'm having some issues with transform() If I do something simple (like in arches() below), I get a 3D shape, But > if I try to use points along a curve in the X Z plane (arches2()) I get > nothing. The curve and the points look legitimate to me I guess you are referring to the function transform() defined in transformations.scad as part of scad-utils. This function have two parameters: the first one is a 4x4 matrix and the former is a list of 3D points. To apply transform() to 2D points you must embed them in 3D with function to_3d that accepts a list of 2D points and return a list of 3D points, like in: my3Dtransformedpoints = transform(matrix, to_3d(my2Dpoints)) ​ >
DS
Dan Shriver
Wed, Mar 7, 2018 7:02 PM

Yes I'm referring to scad-utils transform

I'm confused because this works fine:

     transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]),

waveOut(i))

and this does not

      transform(translation(yxzpath[i]) * rotation([0,0,0]),

waveOut(i*6))

and when I do  the debugging output and grab a random yxzpath member it
looks like a standard 3 element matrix (just like the first example)

[304.687, 0, 155.195]

On Tue, Mar 6, 2018 at 7:00 PM, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

I'm having some issues with transform()

If I do something simple (like in arches() below), I get a 3D shape,  But

if I try to use points along a curve in the X Z plane (arches2()) I get
nothing.  The curve and the points look legitimate to me

I guess you are referring to the function transform() defined in
transformations.scad as part of scad-utils. This function have two
parameters: the first one is a 4x4 matrix and the former is a list of 3D
points. To apply transform() to 2D points you must embed them in 3D with
function to_3d that accepts a list of 2D points and return a list of 3D
points, like in:

my3Dtransformedpoints = transform(matrix, to_3d(my2Dpoints))

Yes I'm referring to scad-utils transform I'm confused because this works fine: transform(translation([0,0,(i*0.5)]) * rotation([0,0,0]), waveOut(i)) and this does not transform(translation(yxzpath[i]) * rotation([0,0,0]), waveOut(i*6)) and when I do the debugging output and grab a random yxzpath member it looks like a standard 3 element matrix (just like the first example) [304.687, 0, 155.195] On Tue, Mar 6, 2018 at 7:00 PM, Ronaldo Persiano <rcmpersiano@gmail.com> wrote: > I'm having some issues with transform() > > If I do something simple (like in arches() below), I get a 3D shape, But >> if I try to use points along a curve in the X Z plane (arches2()) I get >> nothing. The curve and the points look legitimate to me > > > I guess you are referring to the function transform() defined in > transformations.scad as part of scad-utils. This function have two > parameters: the first one is a 4x4 matrix and the former is a list of 3D > points. To apply transform() to 2D points you must embed them in 3D with > function to_3d that accepts a list of 2D points and return a list of 3D > points, like in: > > my3Dtransformedpoints = transform(matrix, to_3d(my2Dpoints)) > > ​ >> > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >
RP
Ronaldo Persiano
Wed, Mar 7, 2018 10:12 PM

So, the trouble isn't the transform() call but the translation(). It
requires the same parameter as translate(), that is, just a 3d vector and
not a list of vectors.

So, the trouble isn't the transform() call but the translation(). It requires the same parameter as translate(), that is, just a 3d vector and not a list of vectors.
DS
Dan Shriver
Thu, Mar 8, 2018 12:31 AM

I'm having another issue now. I can get something to render fine if I do
"arches2()", but if I do "difference, mirror; mirror" I get some odd error.

I am doing that because I have two shapes that overlap somewhat, so I
subtract the overlap, then put the shape back in.

difference() { arches2(); mirror([0,0,1]) { arches2(); } } mirror([0,0,1])
{ arches2(); }

Rendering Polygon Mesh using CGAL...

ERROR: CGAL error in CGALUtils::applyBinaryOperator difference: CGAL ERROR:
assertion violation! Expr: itl != it->second.end() File:
/opt/mxe/usr/x86_64-w64-mingw32.static.posix/include/CGAL/Nef_3/SNC_external_structure.h
Line: 1152

ERROR: CGAL error in CGALUtils::applyBinaryOperator union: CGAL ERROR:
assertion violation! Expr: itl != it->second.end() File:
/opt/mxe/usr/x86_64-w64-mingw32.static.posix/include/CGAL/Nef_3/SNC_external_structure.h
Line: 1152

Geometries in cache: 5

Geometry cache size in bytes: 12079904

CGAL Polyhedrons in cache: 2

CGAL cache size in bytes: 53351536

Total rendering time: 0 hours, 5 minutes, 49 seconds

Rendering finished.

https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon
Virus-free.
www.avast.com
https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

On Wed, Mar 7, 2018 at 5:12 PM, Ronaldo Persiano rcmpersiano@gmail.com
wrote:

So, the trouble isn't the transform() call but the translation(). It
requires the same parameter as translate(), that is, just a 3d vector and
not a list of vectors.


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

I'm having another issue now. I can get something to render fine if I do "arches2()", but if I do "difference, mirror; mirror" I get some odd error. I am doing that because I have two shapes that overlap somewhat, so I subtract the overlap, then put the shape back in. difference() { arches2(); mirror([0,0,1]) { arches2(); } } mirror([0,0,1]) { arches2(); } Rendering Polygon Mesh using CGAL... ERROR: CGAL error in CGALUtils::applyBinaryOperator difference: CGAL ERROR: assertion violation! Expr: itl != it->second.end() File: /opt/mxe/usr/x86_64-w64-mingw32.static.posix/include/CGAL/Nef_3/SNC_external_structure.h Line: 1152 ERROR: CGAL error in CGALUtils::applyBinaryOperator union: CGAL ERROR: assertion violation! Expr: itl != it->second.end() File: /opt/mxe/usr/x86_64-w64-mingw32.static.posix/include/CGAL/Nef_3/SNC_external_structure.h Line: 1152 Geometries in cache: 5 Geometry cache size in bytes: 12079904 CGAL Polyhedrons in cache: 2 CGAL cache size in bytes: 53351536 Total rendering time: 0 hours, 5 minutes, 49 seconds Rendering finished. <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon> Virus-free. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> On Wed, Mar 7, 2018 at 5:12 PM, Ronaldo Persiano <rcmpersiano@gmail.com> wrote: > So, the trouble isn't the transform() call but the translation(). It > requires the same parameter as translate(), that is, just a 3d vector and > not a list of vectors. > > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org > >