<div dir="ltr"><div><div><div><div><div>>Surprising recoding, nophead. The for() statement is used as a let() !<br><br></div>It is a bodge because <span style="font-family:monospace,monospace">let()</span> isn't accepted at that position, <span style="font-family:monospace,monospace">assign</span> is deprecated in favour of assignment in braces but braces don't work if they are not the child of something like <span style="font-family:monospace,monospace">for</span> or <span style="font-family:monospace,monospace">if</span>.<br><br>>it is impossible to say to openscad to "simply put screws just where you have made holes ...<br><br></div>I make the screw hole positions relative to the part's origin into a module that translates a child. Then I can use that with a poly_cylinder child to drill the holes in both the part and mating parts and with a screw / washer / nut combo child to place the fasteners just after I place the part. <br><br>I haven't felt the need to encapsulate objects and their holes into the same module. I simply have my_object(), my_object_hole_positions() and usually my_object_assembly(), which is the object plus its fasteners. The hole positions might be used to drill clearance holes in the part and tappable holes or nut traps in a mating part, etc, so I find it more useful than having the object bore its own holes.<br><br>>i did not think of the trick with the FOR instead of Union you use. do you think it is faster?<br><br></div>No just more succinct source code.<br><br>> i had assumed that union of a union was a NOP and would not have any effect. <br><br></div>It is a NOP because children() already unions the kids so there is nothing to union. However I think we really want the kids to be hoisted into the difference without being unioned first.<br><br>>  i had a similar but very rough idea the branching is increased significantly by the sumUps<br><br></div>I don't think the branching adds any significant time. It has to be extra CSG ops to slow things down noticeably.<br><div><div><br>>by the way do you wish the rights to make the changes you wish(like the 
"For" optimisation or whatever) on github of the project?<br>
<br></div><div>No thanks. The normal protocol is fork and submit a pull request but for such a short piece of code it doesn't seem worth the hassle.<br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 7 October 2016 at 15:16, pproj <span dir="ltr"><<a href="mailto:pproj@posteo.de" target="_blank">pproj@posteo.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sorry of course i mean addAfterRemoving() as opposed to Add() and not the non-existent "addBeforeRemoving()" which is now called just add()<br>
that is definitely a weak spot in the predicate naming.<div class="HOEnZb"><div class="h5"><br>
<br>
On 07.10.2016 15:58, pproj wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello Don<br>
thanks for the good words, in fact i was thinking of naming the<br>
predicates positive() and negative().<br>
but this could not accomodate for the addBeforeRemoving() predicate<br>
which is very useful in real world cases.<br>
say when you construct holes and put screws in them.<br>
my take was  that calling it add() and remove() is less mathematical<br>
and should be a little bit more intuitively understood by just looking<br>
at the code.<br>
 at least this is what your module is doing: it "adds" stuff to your<br>
main model, then it "removes" some and than it can add new stuff<br>
(think screws in the holes) in one iteration. putting both things in<br>
the same iterationv(no nesting of sumUp needed) simplifies the code<br>
for the real-world-tasks for me a lot<br>
Peter<br>
On 07.10.2016 02:34, don bright wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That is very cool, seems a little bit like using "negative objects"<br>
and "positive objects".<br>
<br>
--<br>
<br>
 don bright<br>
<br>
 <a href="mailto:hmbright@fastmail.com" target="_blank">hmbright@fastmail.com</a><br>
<br>
On Thu, Oct 6, 2016, at 02:55 PM, <a href="mailto:pproj@posteo.de" target="_blank">pproj@posteo.de</a> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
hello after few years of work on my quite complex cad project, which<br>
i created using openscad .(my love to openscad was hampered by quite<br>
few a limittions for a compex project- but i am still working with<br>
it)<br>
<br>
anyway,<br>
<br>
i have decided it is time to share with others some of the things i<br>
have discovered and developed in the years of use.<br>
<br>
i will start with the sumUp(). which is an advanced replacement for<br>
the difference() keyword and allows for holes inside modules, and<br>
reduced nesting producing simpler code among other things.<br>
<br>
i have put it it under:<br>
<br>
<a href="https://github.com/solidboredom/sumUp" rel="noreferrer" target="_blank">https://github.com/solidboredo<wbr>m/sumUp</a> [1]<br>
<br>
but to show you why i have been using it so much: it can produce<br>
this example. the code below and the lib is all you need<br>
<br>
:<br>
<br>
include<sumup.scad><br>
<br>
sumUp()<br>
{<br>
add()<br>
cube([20,20,7],center=true);<br>
lidWithNailsAndWasher();<br>
}<br>
<br>
//== modules below ==<br>
module lidWithNailsAndWasher()<br>
{<br>
add() //washer<br>
translate([0,0,8])<br>
cube([20,20,1],center=true);<br>
addAfterRemoving() //top cover without holes<br>
translate([0,0,11])<br>
color("green")<br>
cube([17,17,2],center=true);<br>
for(x=[-1,1],y=[-1,1])<br>
translate([x*7,y*7,2])<br>
{<br>
remove()<br>
cylinder(h=25,d=4.5,center=tru<wbr>e);<br>
#addAfterRemoving()<br>
cylinder(h=10,d2=3,d1=1);<br>
}<br>
}<br>
<br>
i have been quite happy with thhe library (actually its predecessor)<br>
so i hope you will find it useful too.<br>
<br>
i have been using it so much i would like to have its approach<br>
somehow integrated in openscad itself.<br>
<br>
this perhaps could resolve its main drawback: speed on complex<br>
models: openscad creates a lot groups and getting much slower on<br>
complex models than with the difference().<br>
<br>
i would also like to share another library: essentially a human(not<br>
linear algebra robot) oriented syntax rewrite library for basic<br>
openscad operations i use a lot, but still need to make it ready for<br>
publishing and documented first.<br>
<br>
so whats your take folks?<br>
<br>
Peter<br>
<br>
______________________________<wbr>_________________<br>
<br>
OpenSCAD mailing list<br>
<br>
<a href="mailto:Discuss@lists.openscad.org" target="_blank">Discuss@lists.openscad.org</a><br>
<br>
<br>
</blockquote>
<a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/mail<wbr>man/listinfo/discuss_lists.<wbr>openscad.org</a><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
[2]<br>
</blockquote>
<br>
<br>
<br>
Links:<br>
------<br>
[1] <a href="https://github.com/solidboredom/sumUp" rel="noreferrer" target="_blank">https://github.com/solidboredo<wbr>m/sumUp</a><br>
[2] <a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/mail<wbr>man/listinfo/discuss_lists.<wbr>openscad.org</a><br>
<br>
______________________________<wbr>_________________<br>
OpenSCAD mailing list<br>
<a href="mailto:Discuss@lists.openscad.org" target="_blank">Discuss@lists.openscad.org</a><br>
<a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/mail<wbr>man/listinfo/discuss_lists.<wbr>openscad.org</a><br>
</blockquote>
<br>
______________________________<wbr>_________________<br>
OpenSCAD mailing list<br>
<a href="mailto:Discuss@lists.openscad.org" target="_blank">Discuss@lists.openscad.org</a><br>
<a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/mail<wbr>man/listinfo/discuss_lists.<wbr>openscad.org</a><br>
</blockquote>
<br>
______________________________<wbr>_________________<br>
OpenSCAD mailing list<br>
<a href="mailto:Discuss@lists.openscad.org" target="_blank">Discuss@lists.openscad.org</a><br>
<a href="http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org" rel="noreferrer" target="_blank">http://lists.openscad.org/mail<wbr>man/listinfo/discuss_lists.<wbr>openscad.org</a><br>
</div></div></blockquote></div><br></div>