User Poll: What do you want to see from OpenSCAD development?

classic Classic list List threaded Threaded
82 messages Options
12345
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

JordanBrown
Here's a stupid little feature that I often want:  a "clip" operator that cuts away everything on one side of a plane.

Yes, you can do this with difference or intersection with a big cube, but I find it ... aesthetically unpleasant ... to have to decide how big the cube should be.

At its simplest (and probably as a default) it should just cut away everything where Z<0, so
    clip() sphere();
gives a half-sphere above Z=0.

That's enough, but for extra credit let the caller specify a normal vector (as for mirror()), or for double extra credit a point and normal vector so as to define a plane and an orientation.

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

nophead
I use this:  https://github.com/nophead/NopSCADlib#Clip Not quite what you want but it can clip against any plane perpendicular to one of the axes.

On Fri, 22 Nov 2019 at 18:01, Jordan Brown <[hidden email]> wrote:
Here's a stupid little feature that I often want:  a "clip" operator that cuts away everything on one side of a plane.

Yes, you can do this with difference or intersection with a big cube, but I find it ... aesthetically unpleasant ... to have to decide how big the cube should be.

At its simplest (and probably as a default) it should just cut away everything where Z<0, so
    clip() sphere();
gives a half-sphere above Z=0.

That's enough, but for extra credit let the caller specify a normal vector (as for mirror()), or for double extra credit a point and normal vector so as to define a plane and an orientation.
_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

RevarBat
In reply to this post by JordanBrown
I have to upvote this one. It’d be stupid simple, and I could use it to better implement the `front_half()`, `left_half()`, etc modules in my library.

Another language request that’s make my life easier would be a way to assign multiple variables from elements of a list.

    a, b, c = func_returning_three_item_list();

Instead of having to write:

    foo = func_returning_three_item_list();
    a = foo[0];
    b = foo[1];
    c = foo[2];

- Revar


> On Nov 22, 2019, at 10:08 AM, Jordan Brown <[hidden email]> wrote:
>
>  Here's a stupid little feature that I often want:  a "clip" operator that cuts away everything on one side of a plane.
>
> Yes, you can do this with difference or intersection with a big cube, but I find it ... aesthetically unpleasant ... to have to decide how big the cube should be.
>
> At its simplest (and probably as a default) it should just cut away everything where Z<0, so
>     clip() sphere();
> gives a half-sphere above Z=0.
>
> That's enough, but for extra credit let the caller specify a normal vector (as for mirror()), or for double extra credit a point and normal vector so as to define a plane and an orientation.
> _______________________________________________
> OpenSCAD mailing list
> [hidden email]
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

JordanBrown
In reply to this post by nophead
On 11/22/2019 12:14 PM, nop head wrote:
I use this:  https://github.com/nophead/NopSCADlib#Clip Not quite what you want but it can clip against any plane perpendicular to one of the axes.

Sure.  Like I said, easy enough, but you have to decide how big the cube should be, and that's annoying.

BTW, why the polyhedron rather than a cube?  It sure seems like a translated cube would be simpler.

Here's the one I wrote some time back:

// @brief Clip children against a specified plane
// @param o          point on the plane
// @param v          normal vector; retain only this direction
// @param <children> objects to clip
// @note
// Limited to 200x200x200 cube.
module clip(o=[0,0,0],v=[0,0,1]) {
    sz = 200;
    r = norm(v);
    intersection() {
        children();
        translate(o)
            rotate([0, 0, atan2(v[1], v[0])])
            rotate([0, acos(v[2]/r), 0])
            jcube([sz, sz, sz], centerx=true, centery=true);
    }
}

jcube is a cube that you can center on the three axes independently.  Even that usage is legacy in this project; my current standard would be jcube([sz,sz,sz], justify=[0,0,1]), which expands to justify(justify=[0,0,1], dims=[sz,sz,sz]) cube([sz,sz,sz]).  I don't immediately remember why jcube doesn't support a single size argument.  Details of those left as an exercise for the reader.

(I wrote that a long time ago, and I never used the rotate capabilities much if at all, and I haven't checked the trig today.  If I got it wrong, please let me know and I'll be suitably embarrassed.)



_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

tifn
In reply to this post by thehans
While I would be happy to have some of the things already mentioned by others
(like a good standard library, or intersection/difference with a virtually
infinite half-space), the thing that is on top of everything else is:
robustness with respect to incorrect geometry, either happening from bad
user input (polyhedron primitive, bad STL import) or as the result of some
operation which happen to be non 2-manifold or otherwise unsupported.

By robust, I mean that the input to polyhedron, import,... should be fully
validated, the errors properly described in terms of the user code, and any
issue discovered while rendering should be reported immediately, clearly,
and precisely in terms of the SCAD program, not as CGAL assert failures
which only refer to the CGAL implementation.

This is somewhat related to the spawned discussion  Discuss manifoldness,
co-incident faces edges etc
<http://forum.openscad.org/Discuss-manifoldness-co-incident-faces-edges-etc-td27862i80.html>  
about lifting current limitations on allowed geometry. I am in favor of
supporting as many "mathematically meaningful" cases as possible in this
respect (in the limits of the CGAL capabilities and people's time to
implement them of course), independently of notions of printable, physical
object. The arguments for allowing such cases like two cubes touching at an
edge have been thoroughly explained.

But whether the limitations are addressed or not, it is essential to check
for incorrect geometry. This is definitely a usability issue, not only for
beginners, and it is very often reported. Here are "a few" occurrences in
the issue tracker
#2351 <https://github.com/openscad/openscad/issues/2351>  
#3117 <https://github.com/openscad/openscad/issues/3117>  
#3107 <https://github.com/openscad/openscad/issues/3107>  
#3100 <https://github.com/openscad/openscad/issues/3100>  
#2847 <https://github.com/openscad/openscad/issues/2847>  
#3082 <https://github.com/openscad/openscad/issues/3082>  
#3034 <https://github.com/openscad/openscad/issues/3034>  
#3023 <https://github.com/openscad/openscad/issues/3023>  

It is absolutely incorrect to close them as not being bugs, it only make
more users spend time reporting an issue which is well known to developers
and experts, but extremely surprising from an outsider's viewpoint. When I
contributed to the first one in the above list (and spent time to reduce the
original test case to just one simple facet), the final argument to close it
was that "this could consume a lot of energy for no gain with correct
geometry". This is absurd, we could say similarly that type-checking
consumes a lot of energy for no gain for well-typed programs. By the way I
am also not convinced either by the "lot of energy". I'm not familiar with
CGAL and it's invariants, but I imagine that someone who knows the code
could add calls to at least validate user input with reasonable effort.

I can perfectly understand that some other issues may have higher priority,
and developers are of course free to work on what they want, but it should
at least be recognized as an issue. No one can seriously consider it a
normal thing that the following two lines:

   
polyhedron(points=[[1,0,0],[0,0,0],[-0.1,1,0],[0,2,0]],faces=[[0,1,3,2]]);                                          
     cube([1,1,1]);                                                                                                      

give the following output (with version 2019.11.19.nightly):

CGAL error: assertion violation!
Expression : itl != it->second.end()
File       : /usr/include/CGAL/Nef_3/SNC_external_structure.h
Line       : 1152
Explanation:
Refer to the bug-reporting instructions at
http://www.cgal.org/bug_report.html
Aborted (core dumped)




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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

MichaelAtOz
Administrator
tifn wrote
> When I contributed to the first one in the above list (and spent time to
> reduce the
> original test case to just one simple facet), the final argument to close
> it
> was that "this could consume a lot of energy for no gain with correct
> geometry".

I closed it because you had reproduced the issue, confirming it was a
malformed polyhedron producing the CGAL assertion. Nothing to be fixed in
OpenSCAD. We get CGAL assertion error reports regularly, very few - close to
zero, are other than bad STLs or poly's.

What I actually said was

> There is some discussion on whether to expend resources checking validity
> of poly's & import individually prior to render, but this could consume a
> lot of energy for no gain with correct geometry.

I agree with you that a CGAL assertion is not a very user friendly method to
report problems with geometry.



-----
Admin - email* me if you need anything,  or if I've done something stupid...

* click on my MichaelAtOz label, there is a link to email me.

Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.

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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Admin - email* me if you need anything, or if I've done something stupid...
* click on my MichaelAtOz label, there is a link to email me.

Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work.
Obviously inclusion of works of previous authors is not included in the above.
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

MichaelAtOz
Administrator
In reply to this post by tifn
tifn wrote

> polyhedron(points=[[1,0,0],[0,0,0],[-0.1,1,0],[0,2,0]],faces=[[0,1,3,2]]);                                          
>      cube([1,1,1]);                                                                                                      
>
> give the following output (with version 2019.11.19.nightly):
>
> CGAL error: assertion violation!
> Expression : itl != it->second.end()
> File       : /usr/include/CGAL/Nef_3/SNC_external_structure.h
> Line       : 1152
> Explanation:
> Refer to the bug-reporting instructions at
> http://www.cgal.org/bug_report.html
> Aborted (core dumped)

tifn, what did you use that output the last 4 lines?
I don't see that in the GUI (Windows/Debian) or command-line (Windows).



-----
Admin - email* me if you need anything,  or if I've done something stupid...

* click on my MichaelAtOz label, there is a link to email me.

Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.

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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Admin - email* me if you need anything, or if I've done something stupid...
* click on my MichaelAtOz label, there is a link to email me.

Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work.
Obviously inclusion of works of previous authors is not included in the above.
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

tifn
In reply to this post by MichaelAtOz
MichaelAtOz wrote
> I closed it because you had reproduced the issue, confirming it was a
> malformed polyhedron producing the CGAL assertion. Nothing to be fixed in
> OpenSCAD. [...]

I precisely disagree with that, I'm advocating that there _is_ something to
be fixed in OpenSCAD.
I will answer the "core dump" part in the issue.




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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Ronaldo
Considering the advent of function literals, some builtin OpenSCAD functions might allow an additional function argument like in the following examples:

function max() ( or min() ):
----------------------------------

L = [ ["one", 1] , ["zero",0], ["two",2] ];
pick = function(x) x[1];
echo( max(L, fn=pick)[0] ); // ECHO:  "two"

or, even better with a comparison function:

L = list of strings
compare = function(a,b) lexicographic_comparison (a,b); // user provided
 a = max(L, fn=compare); 

function search():
----------------------

L = [ ["one", [1, 0] ] , ["zero", [0,12] ], ["two",[2,1] ] ];
pick = function(x) x[1][1] ;
echo( search(12, L, fn=pick)  );  // ECHO:  ["zero", [0,12] ]

That would increase a lot the power of those functions.


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Max Bond
Similarly, I would use the heck out of map(), filter(), and reduce() primitives, a la other functional languages.

On Mon, Dec 2, 2019 at 5:52 AM Ronaldo Persiano <[hidden email]> wrote:
Considering the advent of function literals, some builtin OpenSCAD functions might allow an additional function argument like in the following examples:

function max() ( or min() ):
----------------------------------

L = [ ["one", 1] , ["zero",0], ["two",2] ];
pick = function(x) x[1];
echo( max(L, fn=pick)[0] ); // ECHO:  "two"

or, even better with a comparison function:

L = list of strings
compare = function(a,b) lexicographic_comparison (a,b); // user provided
 a = max(L, fn=compare); 

function search():
----------------------

L = [ ["one", [1, 0] ] , ["zero", [0,12] ], ["two",[2,1] ] ];
pick = function(x) x[1][1] ;
echo( search(12, L, fn=pick)  );  // ECHO:  ["zero", [0,12] ]

That would increase a lot the power of those functions.

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Max Bond
For instance right now I'm working on a library for doing affine transforms on points/paths, to help me build up objects for use with polyhedron(). Right now if I want to compose the convenience functions I've written for doing so, my points end up being translated back and forth from Cartesian to homogenous coordinates. If I had a reduce() primitive, I could take the different matrices I want to apply, and multiply them together. Of course i could do that manually, and for now I will if I think it's a performance sensitive area, but that sort of defeats the purpose of having my convenience functions.

On Mon, Dec 2, 2019 at 9:41 AM Max Bond <[hidden email]> wrote:
Similarly, I would use the heck out of map(), filter(), and reduce() primitives, a la other functional languages.

On Mon, Dec 2, 2019 at 5:52 AM Ronaldo Persiano <[hidden email]> wrote:
Considering the advent of function literals, some builtin OpenSCAD functions might allow an additional function argument like in the following examples:

function max() ( or min() ):
----------------------------------

L = [ ["one", 1] , ["zero",0], ["two",2] ];
pick = function(x) x[1];
echo( max(L, fn=pick)[0] ); // ECHO:  "two"

or, even better with a comparison function:

L = list of strings
compare = function(a,b) lexicographic_comparison (a,b); // user provided
 a = max(L, fn=compare); 

function search():
----------------------

L = [ ["one", [1, 0] ] , ["zero", [0,12] ], ["two",[2,1] ] ];
pick = function(x) x[1][1] ;
echo( search(12, L, fn=pick)  );  // ECHO:  ["zero", [0,12] ]

That would increase a lot the power of those functions.

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
tp3
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

tp3
I don't think min()/max() and similar functions are good
candidates for extension, if at all, they should get simpler
(but that's hard to impossible to do).

I see function arguments are things like linear_extrude()
where the function parameter could really add huge value.

Fold/Reduce is already possible right now, although it's
a bit awkward with passing along the vector index, e.g. like

fold = function(i, v, f, off = 0) len(v) > off ? fold(f(i, v[off]), v, f, off + 1) : i;

Which is why I think we really want the array/vector slicing
which would change it to

fold = function(i, v, f) len(v) > 0 ? fold(f(i, v[0]), v[1:], f) : i;

With fold, here's max and the max with picking:

max = function(v) fold(0, v, function(x, y) y > x ? y : x);

echo(max([1, 6, 2, 9, 3])); // ECHO: 9

maxp = function(v) fold(["", -1], v, function(x, y) y[1] > x[1] ? y : x);

echo(maxp([ ["one", 1] , ["zero",0], ["two",2] ])[0]); // ECHO: "two"

ciao,
  Torsten.

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
-- Torsten
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

acwest
The case I definitely needed this for was sort... I did an
implementation of merge sort and quick sort, both of which desperately
need a comparison function argument to be properly generic...

On Mon, Dec 2, 2019 at 3:09 PM Torsten Paul <[hidden email]> wrote:

>
> I don't think min()/max() and similar functions are good
> candidates for extension, if at all, they should get simpler
> (but that's hard to impossible to do).
>
> I see function arguments are things like linear_extrude()
> where the function parameter could really add huge value.
>
> Fold/Reduce is already possible right now, although it's
> a bit awkward with passing along the vector index, e.g. like
>
> fold = function(i, v, f, off = 0) len(v) > off ? fold(f(i, v[off]), v, f, off + 1) : i;
>
> Which is why I think we really want the array/vector slicing
> which would change it to
>
> fold = function(i, v, f) len(v) > 0 ? fold(f(i, v[0]), v[1:], f) : i;
>
> With fold, here's max and the max with picking:
>
> max = function(v) fold(0, v, function(x, y) y > x ? y : x);
>
> echo(max([1, 6, 2, 9, 3])); // ECHO: 9
>
> maxp = function(v) fold(["", -1], v, function(x, y) y[1] > x[1] ? y : x);
>
> echo(maxp([ ["one", 1] , ["zero",0], ["two",2] ])[0]); // ECHO: "two"
>
> ciao,
>   Torsten.
>
> _______________________________________________
> OpenSCAD mailing list
> [hidden email]
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

thehans
In reply to this post by Max Bond

On Mon, Dec 2, 2019 at 10:48 AM Max Bond <[hidden email]> wrote:
For instance right now I'm working on a library for doing affine transforms on points/paths, to help me build up objects for use with polyhedron(). 

Hi Max, not sure how much of this you've already implemented, but I have a library for essentially the same purpose, here:

It doesn't compose matrices, and was written before (still experimental) first class function support, but maybe some of the code will still be useful for you.


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Max Bond
Thanks Hans, I'll check that out!

On Mon, Dec 2, 2019, 1:50 PM Hans L <[hidden email]> wrote:

On Mon, Dec 2, 2019 at 10:48 AM Max Bond <[hidden email]> wrote:
For instance right now I'm working on a library for doing affine transforms on points/paths, to help me build up objects for use with polyhedron(). 

Hi Max, not sure how much of this you've already implemented, but I have a library for essentially the same purpose, here:

It doesn't compose matrices, and was written before (still experimental) first class function support, but maybe some of the code will still be useful for you.

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

OpenSCAD mailing list-2
In reply to this post by thehans
The thing which I'd really like to see is a mode where OpenSCAD is a
Workbench in FreeCAD --- model in OpensCAD using the language, then switch
to the drawing/edit view and be able to adjust things
graphically/interactively which would update the parameters of the code (for
bonus points, modifications/additions would be instantiated as new OpenSCAD
code).

William



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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

OpenSCAD mailing list-2
In reply to this post by thehans
Belatedly I will kick in:
1. multi-threading for performance!
2. I would love to get access to the pixel data in surface(), both greyscale
and RGB!!  And *not* have surface() produce an object.   Just the data
please.





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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Marius Kintel

> On Jan 31, 2020, at 20:20, richalt2 via Discuss <[hidden email]> wrote:
>
> 2. I would love to get access to the pixel data in surface(), both greyscale
> and RGB!!  And *not* have surface() produce an object.   Just the data
> please.
>
I don’t quite understand this wish: surface() is a module that takes pixel data as input and generates a shape, so if you just look at your input, that’s pixel data right there.

 -Marius


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

OpenSCAD mailing list-2
Marius, yes I use surface() sometimes.  To get pixel data I presently run a
python script which outputs an openscad list containing the RGB data, into a
.txt  file.  Then include the .txt.
Can I avoid or automate the python run?  Can you offer a snippet of openscad
code which shows echo(some rgb data from a .png file) ?
Thanks!!
Rich




-----
richalt2  (so why does the forum show me as OpenSCAD mailing list?)
Rich Altmaier

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

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: User Poll: What do you want to see from OpenSCAD development?

Marius Kintel
Thanks for the explanation. I understand your use-case and request now.
Running an external script is probably the best solution right now.

 -Marius


> On Jan 31, 2020, at 21:31, richalt2 via Discuss <[hidden email]> wrote:
>
> Marius, yes I use surface() sometimes.  To get pixel data I presently run a
> python script which outputs an openscad list containing the RGB data, into a
> .txt  file.  Then include the .txt.
> Can I avoid or automate the python run?  Can you offer a snippet of openscad
> code which shows echo(some rgb data from a .png file) ?
> Thanks!!
> Rich


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
12345