Zdravím,
před letu tu bylo dost pokročilých uživatelů, tak bych se rád zeptal, jestli z těch co zůstali někdo neřešil podobný problém.
Používám OpenSCAD na to si nakreslit nějaký budoucí projekt (reálně jsou to jednodušší konstrukce z kovu, ale pro popis problému to zjednoduším na příkladu).
Jednotlivé prvky jsou v samostatné knihovně jako moduly, např.
module spejle(delka, polomer) {
cylinder(r=polomer, l=delka);
}
module prkynko(x,y,tloustka) {
cube([x,y,tlousktka]);
}
....
a samotný projekt je pak nepřehledný mix difference-union--- v modulu (+funkční podcelky v dalších modulech) stylu
module jerab() {
diference() {
union() {
prkynko(30,30,2);
translate([...]) rotate([...]) spejle();
....
}
translate([...]) dira(4); // cylinder
}
}
No a teď k vlastnímu problému. Těch dílů je reálně víc, a je potřeba je objednat. To je celkem jednoduché, do modulu spejle() se prostě přihodí něco jako echo("Kup spejli ", r=r, l=l);, a v horším případě se to copypastne z console v GUI, v lepším se to spustí z command line s patřičným outputem.
Ale teď je tu problém druhý - potřeboval bych jednotlivé díly vidět (==hodit na papír a vzít do dílny). Fajn, přeparsovat ty echa do .scad je triviální, ale to problém neřeší. Co ve skutečnosti v našem modelovém případu je potřeba dostat "na papír" tu desku, ale včetně díry (opět, v reálu tomu odpovídají věci jako tady navrtat, tady vyříznout závit, tady vypálit do plechu díru, u složitějších tvarů via vytisknout na 3d šablonu, podle které se to objede plasmou). A pokud možno to nedělat ručně (těch dílů tam může být několik desítek. A každý díl může být v nějakém difference, takže prosté oremování by mělo dost nehezké následky).
Zpracovat to přímo z té knihovny nevím jak - tam vím, jak je prvek velkej, ale už nevidím, jak moc je otočený/posunutý, takže udělat intersekci jednoho prvku (který jsem získal tím echem) z celým modelem nepůjde.
Co bohužel taky nepůjde je v knihovně počítat, kolikátý prvek to je (ano, v procedurálním jazyce není nic snadnějšího než něco jako if (displej && displej != global_count++) return; a pouštět to postupně openscad -D displej=$n -output prvek$n.stl ale jak tohle udělat v funkcionálním opravdu netuším).
Napadá mě snad jedině každé součástce přihodit ID jako parametr a pak to projet nějakým preprocesorem, ale to už je čuňárna docela veliká i na mě, i když by to fungovalo.
Nemáte někdo vymyšlené něco jednoduššího?