teepee changed the topic of #openscad to: OpenSCAD - The Programmers Solid 3D CAD Modeller | This channel is logged! | https://openscad.org/advent-calendar-2021/ | Website: http://www.openscad.org/ | FAQ: https://goo.gl/pcT7y3 | Request features / report bugs: https://goo.gl/lj0JRI | Tutorial: https://bit.ly/37P6z0B | Books: https://bit.ly/3xlLcQq | FOSDEM 2020: https://bit.ly/35xZGy6 | Logs: https://bit.ly/32MfbH5
ferdna has joined #openscad
aiyion has quit [Ping timeout: 240 seconds]
aiyion has joined #openscad
lostapathy has quit [Quit: WeeChat 2.8]
<InPhase> I would not mind a £2 trillion check.
califax has quit [Remote host closed the connection]
Guest46 has joined #openscad
Guest46 has quit [Client Quit]
Netfool has joined #openscad
Guest96 has joined #openscad
Guest96 has quit [Client Quit]
Guest20 has joined #openscad
Guest20 has quit [Client Quit]
jonasbits has quit [Ping timeout: 252 seconds]
jonasbits has joined #openscad
ur5us_ has quit [Ping timeout: 240 seconds]
<evils[m]> hi, i'd like to have a loop that increments a variable on every run, but it seems that doesn't work; is there a right way to do that?
zauberfisch has joined #openscad
<InPhase> evils[m]: You can increment in a C-style list comprehension. Or you can calculate a value instead of incrementing.
<InPhase> You can also increment with recursion, which can be done efficiently with function recursion to pre-generate your values (a highly recommended solution) or it can be done with module recursion, which is a sensible solution only for reasonable depth sizes of a handful up through maybe 1000.
<evils[m]> C-style list comprehension, you mean do the incrementing in the arguments to `for`?
<InPhase> If the function recursion method with tail recursion optimization is not familiar to you, here's an example of a sum(v) function summing the values in a list: https://github.com/thehans/funcutils/blob/master/math.scad#L13-L19
<evils[m]> the thing i want to do is increment a scale value by a percentage on every run
<evils[m]> i don't know how to phrase that other than to just `* 1.2` on every run...
<InPhase> evils[m]: Yes, the increment can be in the for in that approach.
<InPhase> Oh, well that's easy.
<InPhase> Loop over index i, and do val*1.2^i
<evils[m]> ah, thanks
<InPhase> e.g.: for (i=[0:5]) echo(10*1.2^i);
<evils[m]> sigh, really annoying i can't just adjust things in the loop...
ferdna has quit [Quit: Leaving]
<evils[m]> i'm not seeing how to do that spacing without starting with an offset
ur5us_ has joined #openscad
<evils[m]> this gets me close to what i want, thanks for pointing me in the right direction... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/19429491cad455f3cb5549db5d38ff43ea71ce05)
J2239 has joined #openscad
J22 has quit [Ping timeout: 256 seconds]
<evils[m]> nope, this doesn't work for me...
<evils[m]> i want to use the variables mutated in the for loop after the loop...
<InPhase> Pre-computing is your friend.
<evils[m]> i think i'll stick with this for now
<InPhase> lol.
<InPhase> Well that's hitting the language with a mallet. :)
<evils[m]> it had it coming -_-
<InPhase> It's a declarative language rather than imperative. It takes a little getting used to, but can do all the same things.
<InPhase> See that bpa.st link above.
<evils[m]> i'm thuroughly confused
<evils[m]> what's `VP`?
<evils[m]> why does the function body start with `=`?
<InPhase> Sum Vector Plus 1
<InPhase> I was just naming the function after your equation.
<InPhase> That's the syntax for declaring a function. A function is not a set of statements, it's an assignment of an expression that produces the return value.
<InPhase> That is a single expression, which first does a conditional for the recursive base case, then if it's not the base case, assigns a new variable in the let statement, and recurses with tail recursion.
<InPhase> There's a very good manual available here: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language
<evils[m]> yea, i looked at it before (always starting from the cheatsheet)
<evils[m]> mostly i've been annoyed at the section of the for loop not showing anything near what i want to do :P
<othx> InPhase: Okay.
<InPhase> resources?
clapont has quit [Ping timeout: 256 seconds]
<evils[m]> > <@evils:nixos.dev> this gets me close to what i want, thanks for pointing me in the right direction... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/62f172bfe527061e720cc5e884680c36a69cbb6c)
<InPhase> evils[m]: Well, it's clear you got used to programming with an imperative language. :) There's an adjustment period for the people who come at OpenSCAD with a purely imperative background. The best advice I can give is try to embrace the different mode of thinking rather than fight it, and it will start to click.
<evils[m]> yea, i'm more used to C and Bash
clapont has joined #openscad
<evils[m]> also some Nix, but i don't usually do math in that xD
<evils[m]> InPhase: i get the general concept of using a function to provide the values i want
<evils[m]> but i still think for this specific use case, an imperative for loop would be way more straight-forward
<evils[m]> i'm also starting to think calling it a for loop at all is misleading xD
cbmuser_ has quit [Ping timeout: 250 seconds]
<InPhase> It's a declarative for loop. :)
<evils[m]> which is to say
<evils[m]> i should stop thinking of openscad's for loop as anything i'm familiar with
<InPhase> The thing to mentally update is not about the for loop, but about variable values.
<InPhase> This produces a warning (to help you out), but it still executes and produces an output on the echo. Guess what the output value is? a = 5; echo(a); a = 7;
cbmuser_ has joined #openscad
<evils[m]> 7
<InPhase> Aye.
<evils[m]> mostly i think it shouldn't be called `for` because in Nix, we have `map()` which is kinda the same, but just having a different name for it was enough for me to get used to it being completely different
<InPhase> This produces no warning. It still outputs 7. a = 5; union() { echo(a); a = 7; }
<evils[m]> i guess it all comes down to openscad's for loop not being iterative (despite being called a loop for some reason) and variables being immutable?
<InPhase> More important than immutable, declarative.
<InPhase> They simply have a value in a context.
<InPhase> a = a + 1; only has meaning if you are adding 1 to the value of the same-named value from the outer context.
<InPhase> s/same-named value/same-named variable/
<evils[m]> yea and the context doesn't change across "loops"
<InPhase> Right.
<evils[m]> which IMO is the whole point of a loop xD
<InPhase> It is, in fact, looping. The echo statement reveals this. :)
<Junxter> absolutely love OpenSCAD, but functional programming really is unecessary
<evils[m]> i'd argue it's bad for adoption only because functional programming isn't widely adopted :P
<Junxter> VHDL / Verilog aren't functional
<Junxter> both describe "static" hardware
<evils[m]> mostly i'm shocked at how much i've used openscad without noticing the declarative nature
<InPhase> Junxter: The reasoning starts from the fact that the geometry itself is declarative. The language is simply preparing an abstract syntax tree describing a geometry.
<InPhase> I don't use functional programming in my day job, because it doesn't fit most problems well. But I think it fits this problem domain pretty decently.
<Junxter> InPhase: it fits the domain in so far as it simplifies the job of the language design, perhaps at the expense of those using the language.
<Junxter> e.g. there really isn't tangible benefit to have openscad function definitions being "functional" rather than imperative
<evils[m]> to be fair, i'd rather have declarative openscad than not have openscad because they're still working on a more intuitive language
<Junxter> significantly restricts ... well... "functionality"
<Junxter> imo
ur5us_ has quit [Ping timeout: 240 seconds]
<InPhase> Junxter: There are in fact benefits. State is very easy to reason about in OpenSCAD.
<Junxter> that's the point. "state" is an language internal construct, makes the language easy to develope, but not to use
<InPhase> No.
<InPhase> I mean as an implementer using the language, state is very easy to reason about.
<InPhase> As a library designer, state is easy to reason about. As a user of libraries, state is easy to reason about. And as someone trying to debug code other people have problems with, state is easy to reason about because it is all locally well-defined.
<Junxter> where would one need to reason about "state" in an OpenSCAD construct ? any examples ? i am curious
<InPhase> Exactly.
<InPhase> It is all inputs and outputs.
<InPhase> That's the whole point. :)
<InPhase> You benefit from it when using it, it's just transparent that this is a benefit.
<Junxter> i was raised on VHDL and Verilog, doing hardware design in software. I couldn't imagine doing complex stuff with the sort of crutch imposed by functional immutability. Seems it would make things a lot more difficult, perhaps unwarrantedly so.
<Junxter> but that's just imo ...
<InPhase> It's not the right solution for every problem domain. Many problems fit much much better with keeping track of an evolving state.
<InPhase> You don't really want to implement a cash register without having mutable state.
<InPhase> But defining a geometry? It can be very helpful for this.
<Junxter> it just feels like openscad is the sort of thing that could benefit from a front-end transpiler
<InPhase> The less interactive complexity across large distances there is, the more you can focus on the core problem domain of defining a geometry with inputs and outputs.
<InPhase> Sure, there are plenty of front-end transpilers to choose from. But they are less popular than OpenSCAD itself, because it fits the problem domain. But of course you are welcome to try them out if you find it too hard to switch over to this mindset for this type of problem.
<Junxter> as the final stage that connects to the underlying csg, the final restful "state" of the geometry being immutable. This without restricting what one could do to arrive at it, or what to do with it
<InPhase> It was not done this way to make it easier to write. It was done this way out of a belief it was the right way to do it.
<Junxter> InPhase, I've dabled with a few. None as popular as openscad, so i am averse to adopting them for extended development effort.
<Junxter> i know. that's what I am a bit afraid of ... most functional languages arise out of putative orthodoxy
<Junxter> but really so far no complaint. openscad truly has been awesome
<Junxter> i find ways around the functional rigidity
<InPhase> We could trivially add general-purpose imperatively updating mutables to OpenSCAD, giving it things like global state variables that change every time an operation updates them. It would not be hard. But it would really disrupt the usage of the language I think.
<Junxter> InPhase, you maybe right. While libraries in openScad are few, but what there are, seem to be rock solid. Quite the opposite to say javascript or node.
<InPhase> I do think there are some places we could special-case an imperative context. The C-style for loops sort of did that, although they also cause a bit of extra confusion.
<InPhase> let statements are also somewhat close to imperative, in that they are strictly sequential operations, just where each variable name is still declared once.
<Junxter> that's a bit of give and take. I would vote for backward compatibility over feature extension
<Junxter> on another front, csg preview slows down rapidly with with increasing design complexity. So I wrote some helpers to address this.
<Junxter> break down a scad file, render modules into stl files in parallel, and automatically construct substitute modules that incorporate the mesh
<Junxter> so the design workflow can nimbly go forward iterrating over csg and meshing
<InPhase> That can work. Or you can design around polyhedrons: https://github.com/rcolyer/closepoints https://github.com/rcolyer/plot-function
<InPhase> Or, you can just use the new fast-csg feature in the master branch. :)
<Junxter> fast-csg ... hm ...
<InPhase> It's almost perfect. Although it eats fabric and lizards.
<InPhase> (Two currently malfunctioning models.)
<Junxter> another thing, I separate out the transforms that define relationships between modules into a lookup table. So the mesh modules assemble themselves.
<Junxter> a()b(); or a()c(); how b fits onto a, or how c fits onto a, are centrally defined in a big lookup table, one for each subassembly
<Junxter> each subassembly comprising one scad file incorporating multiple modules
GNUmoon has quit [Ping timeout: 240 seconds]
peepsalot has quit [Quit: Connection reset by peep]
peepsalot has joined #openscad
teepee has quit [Ping timeout: 240 seconds]
arebil has joined #openscad
teepee has joined #openscad
splud has quit [Ping timeout: 256 seconds]
lastrodamo has joined #openscad
GNUmoon has joined #openscad
clapont has quit [Remote host closed the connection]
zauberfisch has quit [Ping timeout: 240 seconds]
zauberfisch has joined #openscad
teepee_ has joined #openscad
teepee has quit [Ping timeout: 240 seconds]
teepee_ is now known as teepee
zauberfisch has quit [Read error: Connection reset by peer]
zauberfisch has joined #openscad
<evils[m]> <evils[m]> "> <@evils:nixos.dev> this gets..." <- InPhase: in case you're interested, this is what i ended up doing... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/41f69a0fcbeca5da095c32efe7e143b886185ec0)
splud has joined #openscad
<J2239> do you just want a list  of font sizes ?
<evils[m]> yes
<J2239> evils[m]:
<J2239> F();
<J2239> module F(rec=15){
<J2239> if(rec)translate([0,rec+1])F(rec=rec-1);
<J2239> text(str("Test:size",rec),size=rec);
<J2239> }
<evils[m]> neat
foul_owl has quit [Ping timeout: 272 seconds]
<J2239> recursions allows what other programming languages do with loops
<evils[m]> what is the `F();` part doing there?
Guest3732 has joined #openscad
Guest3732 has quit [Client Quit]
Guest3788 has joined #openscad
Guest3788 has quit [Client Quit]
Junxter has quit [Read error: Connection reset by peer]
Junxter has joined #openscad
<J2239> F() is the module that is called ..  it calles itself (recursivly)
<J2239> ..  there is also an experimental feature in the dev snapshots that let you read out fontmetrics https://bpa.st/XCYA
<J2239> as  size is not exactly the text size.y
<evils[m]> doh, it's the invocation of the module that is defined after it
<J2239> ah yes you could put this also after the definition - Ü
<evils[m]> J2239: `textmetrics()` is equivalent to `text()` but returns metrics?
<J2239> yes  .. there is also fontmetrics
<evils[m]> kinda a moot point as dev snapshots are not available to me
<J2239> which only uses  size and font
<evils[m]> J2239: what does it do?
<J2239> it gives you the size of that font  (ascent, descent  max interline )
<teepee> why no dev snapshots?
foul_owl has joined #openscad
<evils[m]> i'm on NixOS
<evils[m]> updating the package fails to build
<evils[m]> the appimage is missing a dependency
<teepee> :(
<J2239> every time i see that huge sad emoticon i feel the urge to hug you
<teepee> haha, I'm not so much the hugging type :)
<teepee> but thanks :D
<teepee> how is nixos handling extra packages anyway?
<J2239> https://pasteboard.co/BoVtQOMb318z.png    how i see it
<teepee> right, that really looks very very sad
<J2239> soon we have artificial companions https://www.youtube.com/watch?v=gS1m_TIxEW0
<othx> J2239 linked to YouTube video "What's Her Secret?" => 1 IRC mentions
<J2239> (ffwd to 1min)
<evils[m]> <teepee> "how is nixos handling extra..." <- woeps, almost missed that, depends on what you mean with extra packages
<teepee> well, I don't plan to become a nixos package manager
<teepee> but if there's something that could help making the dev snapshots available, that would be interesting
<evils[m]> well, we have appimage-run, which runs appimages
<evils[m]> but that assumes the appimage has all its dependencies included, i think
<evils[m]> and i'm getting `libgmp.so.10` missing
<teepee> hmm, interesting
<evils[m]> and adding a package that provides that to my environment doesn't seem to help
<teepee> hmm
<evils[m]> but i think we should just package openscad's master branch in addition to the releases
<evils[m]> considering how infrequent releases are, and all the awesome features i'm missing out on :P
<teepee> yes! official package for everyone (...using NixOS)
arebil has quit [Quit: My keyboard has gone to sleep. ZZZzzz…]
<evils[m]> teepee: with Nix, just because a dependancy depends on something, doesn't mean you have access to it
<teepee> this libgmp is specifically on the exclude list, so it's not being packaged by the appimage tools
<evils[m]> well, the comment is right, i have 16 copies of libgmp.so.10 on my system
<evils[m]> and i could probably patch it in somehow...
<evils[m]> and there's probably a fair argument to be made that we should provide it through appimage-run...
<teepee> yes, the argument is in the exclude list :)
Guest35 has joined #openscad
<evils[m]> teepee: oh darn, i thought this was an openscad specific excludelist
<teepee> yeah, It's in the appimage tools
<teepee> and I would not really want to mess with it
<teepee> unless TheAssassin says its fine ;-)
walterwhip has joined #openscad
Guest35 has quit [Quit: Client closed]
Guest22gf has joined #openscad
Guest22gf has quit [Client Quit]
pah is now known as pa
arebil has joined #openscad
walterwhip has quit [Ping timeout: 240 seconds]
<TheAssassin> teepee: no time to read the entire backlog, what do you need feedback for?
<teepee> TheAssassin: discussion was about libgmp which caused an issue on NixOS
<teepee> if you don't have any extra info other than the note in the excludelist, they need to check that ticket for the appimage-run (no idea what that does)
<TheAssassin> I see. yeah, that's a problem within that appimage-run script.
<TheAssassin> appimage-run is a workaround (very bad hack) to make appimages run on nixos
<TheAssassin> it removes all the magic from appimages, but just extracts them and runs the contents in some environment
<TheAssassin> appimage doesn't support it, it's their job to get it right
<TheAssassin> it does seem to work for many people, though
<teepee> sure
<teepee> just wondering if there's any argument for packaging libgmp
<teepee> but I'm totally fine leaving this to the nixos ticket fixing the appimage-run
<TheAssassin> usually theres good reasons not to include those
<TheAssassin> if something just doesnt run under appimage-run, it's not a general issue, and you don't need to take any action, I'd say
<TheAssassin> !wiki somebody else's problem
<TheAssassin> damn, this chan needs some bot...
<teepee> it has :)
<teepee> but I don't think it can google or wiki
<TheAssassin> maybe it needs a better bot then
<teepee> botsnack!
<othx> YUM! This is why I love #openscad.
<TheAssassin> my bot implementation is used frequently in #curl, which has 80 more users, so it must be better :P
<teepee> othx is gthx which is in #reprap :P
<othx> teepee: Okay.
<teepee> lol
<teepee> othx: forget gthx
<othx> teepee: I've forgotten about gthx
<teepee> that said, we also have gbruno for github stuff, not sure what other features that one has
<teepee> gbruno: help?
<TheAssassin> damn, #reprap is a lot bigger
<TheAssassin> well that github stuff is underdeveloped then, given it doesn't react on github urls
<teepee> I think it only reacts on notifications, not on stuff from the channel
<teepee> I wonder if othx still does thingiverse
<TheAssassin> reacting on github refs is the core job of the bot I maintain, nowadays
<othx> teepee linked to "Minty Boost Case by Torsten" on thingiverse => 4 IRC mentions
<TheAssassin> ew, that thing uses a database...
<TheAssassin> 800 lines of bot in one file, nice
<TheAssassin> anyway, in case you want to have a look, https://github.com/TheAssassin/relbot
<teepee> and bookmarked
arebil has quit [Quit: My keyboard has gone to sleep. ZZZzzz…]
arebil has joined #openscad
arebil has quit [Quit: My keyboard has gone to sleep. ZZZzzz…]
myosotis has joined #openscad
<nelson_> My wife's late husband made a chase in his library surrounding pipes going to the floor above. On the outside corner, he used a 2cm radius curve.
<nelson_> You may be wondering why that has anything to do with OpenSCAD, aren't you?
<nelson_> Well, I'm installing crown moulding, and it's straight not curved.
<nelson_> But if you make a 2D shape matching the crown molding, and then rotate_extrude it with the correct offset, you get curved crown moulding that exactly matches the straight purchased moulding.
<nelson_> Something that absolutely could not be created any other way, short of carving it out of wood by hand.
<nelson_> THANK YOU OPENSCAD!!!
<dalias> :-)
<dalias> are you printing moulding from the model, or making a router jig for wood?
<nelson_> Given that the moulding itself is plastic, I'm printing it from the model.
<dalias> nice
<nelson_> I was thinking about being really fancy about it, and making some kind of overlap that would ensure perfect alignment, but I can probably do that by hand, and it's a one-off.
<dalias> small enough it's easy to print?
<myosotis> probably only needs the small curved part to be printed out
<dalias> when i think printing moulding i imagine a cr30 :-)
<nelson_> Oh yes, it's only 30mm high.
<dalias> with a cr30 you can do a whole house in custom moulding :)
<myosotis> but you might be retired before it's finished...
<dalias> well if you still have marlin on it printing at 30 mm/s and 500 accel... :-p
J2239 has quit [Quit: Client closed]
J2239 has joined #openscad
Netfool has quit [Quit: Client closed]
<InPhase> nelson_: You can caulk the edges when you insert it and thusly get a perfect fit.
<InPhase> nelson_: But also, with a permanently installed item like that, you're going to want to use at least 2 layers of a sturdy paint over the printed plastic. The layer lines in printed parts, especially if white, will accumulate dust over the scale of years turning that into an eyesore. But with a thicker paint (enamel paint has worked well for me in heavy duty areas, but most should do for that purpose)
<InPhase> you get a smooth surface that can be wiped clean of dust.
<nelson_> Interesting, thanks for the advice.
<dalias> I would recommend starting with a "self-leveling" primer designed to fill surface inconsisencies
<dalias> then lightly sand and put 2+ coats of the final paint
<InPhase> nelson_: And making little custom parts like that for around the house is definitely a huge asset of 3D printing. It basically lets you solve problems that are otherwise very challenging to solve, as the appropriate parts often just don't exist.
<InPhase> Leveling is reasonable, yeah. Although the simplest leveler for a wall moulding piece would be a little bit of spackling paste (which most homeowners already have a can of sitting around). You cannot spackling paste between the moulding pieces, as that will just crack from thermals. So between requires caulk. But spackling paste will level pretty much perfectly. You can basically just finger rub it
<InPhase> into the cracks.
<InPhase> And you can paint right on top of that then to lock it in.
<InPhase> Acrylic caulk will be the easier application between the pieces. Silicone caulk works but requires a bit of practice to not make a mess with. (If you go with silicone caulking, the professional secret is wiping with a lightly soapy sponge.)
arebil has joined #openscad
lostapathy has joined #openscad
lastrodamo has quit [Quit: Leaving]
<J2239> while acrylic can be painted over  (and a wet sponge works here even better)
arebil has quit [Quit: My keyboard has gone to sleep. ZZZzzz…]
<InPhase> Right. It's certainly easier to paint over the top of that.
<InPhase> Although not strictly necessary if you've gone with classic white for moulding.
<J2239> oh it was for closing gaps in the mould then silicone is more durable .. i thought it was for filling the gaps when putting the parts on the wall/ceiling
<J2239> .. it is the paint you might need after 5years
<InPhase> I would avoid caulk for sealing layer lines, as that's likely to not get a smooth finish. But caulk is the right choice for the gaps between moulding pieces and along the wall edge.
<InPhase> https://www.thingiverse.com/thing:3024698 This is an example I did of paint sealing without smoothing the layer lines. A smoothing layer was not prudent here as it was going to be water exposed, and thus a strong water resistant enamel finish was the priority. But a moulding piece can afford the spackling smoothness, as it matches the water resistance of the surrounding materials.
<othx> InPhase linked to "Toothbrush / Toothpaste Holder, Philips Sonicare and More by rcolyer" on thingiverse => 4 IRC mentions
<InPhase> You can see a little bit of layer line rippling left on that if you zoom, but it was adequately smooth for washing.
<J2239> for removing layer i only revert to sanding them down  - but some epoxy also works
<J2239> scarping is also a quick option
<othx> J2239 linked to YouTube video "Shave your prints with a card scraper instead of sanding them. How to easily smooth your 3d prints." => 1 IRC mentions
Junxter has quit [Read error: Connection reset by peer]
arebil has joined #openscad
snaked has quit [Remote host closed the connection]
snaked has joined #openscad
arebil has quit [Quit: My keyboard has gone to sleep. ZZZzzz…]
kiba has joined #openscad
<kiba> hello
teepee has quit [Quit: bye...]
paper_ has joined #openscad
teepee has joined #openscad
J2239 is now known as J22
<J22> Hi
myosotis has quit [Quit: Leaving]
<kiba> anybody with lot of experience with openscad?
<ccox> that would be almost everyone in the channel...
<ccox> if you have a question, just ask.
<kiba> I mostly wanna know what an expert openscad user can do.
<kiba> I don't have specific questions at the moment.
<teepee> I suppose the gallery page is not a bad overview in that regard
<kiba> I am thinking in term of speed
<kiba> and complexity
<teepee> speed of what?
<teepee> as for complexity, as that's shown on the page, people have designed whole 3d printers. I would rate that as maybe the complexity that can be achieved reasonably
<kiba> speed in designing objects
<kiba> for example, it took me some time to modify a simple rectangle container I designed to have a rectangular skirt at the bottom
<teepee> that very much depends on how the design is structured
<teepee> like with any code, so it depends more on the design not the tool
<ccox> (and productivity depends on the designer and their level of experience)
ur5us has joined #openscad
ur5us_ has joined #openscad
myosotis has joined #openscad
ur5us has quit [Ping timeout: 240 seconds]
<J22> kiba  speed is also a question of tools  so if you use libraries  (or write your own tools)  you get much quicker results
<J22> while SCAD offers a cube  a library  can offer you a box with hinges and lid  - but as teepee pointed out  this means parametric design so you can reuse it with different parameters
<kiba> libraries which required learning to use, but that's the same for any libraries
<J22> well  just write your own - that is how i started as i didn't want to repeat  the  same modules over and over again
<J22> and now i just need some minutes  to create  things like you can see here https://www.prusaprinters.org/social/167780
<J22> the main trick in coding is  "do the work only once"
<myosotis> definitely use other peoples work if it's available
<kiba> yeah, I am a programmer at heart.
<kiba> I just figured out the other day how to write my own module
<J22> so  if you need 10 spheres  you use   for(i=[0:10]) translate([i*10,0])sphere(3);
<kiba> and I was able to automate placement of 'peg'
<kiba> you use these libraries?
<J22> mostly  UB.scad   and if i miss somthing i add it to my lib
<J22> you will notice that there is a lot of overlap between libraries because  all need the same tools .. like  chamfered cylinder and a placing methode
<J22> and for sure peeking in other libraries or scripts  give you an idea how to do things
<kiba> placing method, as in position a geometrical object right next to another object?
<J22> yes   so  i have  a methode for Linear() and Polar() (radial) placing .. and also a Grid() method
<J22> and also one to keep same distance between objects with different size
<kiba> any math that would be useful to learn?
<J22> trigonometry
<myosotis> depends on what you need to make =)
<kiba> I am terrible at trignometry
<J22> just start designing with SCAD and you will master it .. just because you need it all the time
<J22> you are only terrible at things you  seldom use  or avoid doing  ..
ur5us_ has quit [Read error: Connection reset by peer]
<myosotis> you can do quite a bit in openscad with very minimal math
<myosotis> especially if you make use of other peoples work to do things like create threads or parabolic cones
ur5us_ has joined #openscad
<J22> also  you can narrow things ( alt+arrow)  this is not perfect but enough for most prints .. only if you need full parametric designs you need the math how to place things or get coordinates   .. ( or when starting with meshes and polyhedra)
<J22> when you start everything is new  but after some time  you get used to it and familiar things are easy and you  will master more complex  challenges
<J22> key is repeating things to learn
<J22> and if you have enough then write a module in your library  so  you can use it  and  worry about more  complex problems .. and after a while these will also go into a module
<J22> not only is the code formed by your mind, also your mind is formed by the code you write!
<kiba> I hope I didn't forget about the primitive in the process of doing so.
kiba has quit [Quit: Client closed]
gunnbr has joined #openscad
zauberfisch has quit []
zauberfisch has joined #openscad
zauberfisch has quit [Read error: Connection reset by peer]
jonasbits has quit [Ping timeout: 252 seconds]
zauberfisch has joined #openscad
J22 has quit [Ping timeout: 256 seconds]
zauberfisch has quit []
foul_owl has quit [*.net *.split]
linext has quit [*.net *.split]
ccox has quit [*.net *.split]
little_blossom has quit [*.net *.split]
nelson_ has quit [*.net *.split]
linext has joined #openscad
foul_owl has joined #openscad
ccox has joined #openscad
little_blossom has joined #openscad
nelson_ has joined #openscad
zauberfisch has joined #openscad
zauberfisch has quit [Client Quit]
ur5us_ has quit [Ping timeout: 240 seconds]
zauberfisch has joined #openscad
J22 has joined #openscad