Operácie

OpenSCAD: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(22 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 2: Riadok 2:
zástupcom programov skupiny CSG -- t.j. constructive solid geometry (CSG). Softvér existuje vo verzii pre  Windows, Linux aj OS X.
zástupcom programov skupiny CSG -- t.j. constructive solid geometry (CSG). Softvér existuje vo verzii pre  Windows, Linux aj OS X.


* [http://www.openscad.org/ web],  
* [http://www.openscad.org/ homepage],  
* [http://openscad.net/ on-line],  
* [http://openscad.net/ on-line editor],  
* [http://files.openscad.org/OpenSCAD-2015.03-2-x86-32.zip portable],  
* [http://files.openscad.org/OpenSCAD-2015.03-2-x86-32.zip portable],  
* [http://reso-nance.org/files/ressources/openscad/openscad-manual.pdf book])
* [http://reso-nance.org/files/ressources/openscad/openscad-manual.pdf book]
* [https://en.wikibooks.org/wiki/OpenSCAD_User_Manual wiki book]
* [https://hackmd.io/@xavidominguez/HkqzwFe4N?type=view CAD with Code - introduction] by Xavier Dominguez


Príklady:  
'''Príklady:'''
* YouTube kanál s príkladmi v slovenčine: https://www.youtube.com/playlist?list=PLmh6bwr3ZDwDQG2mJzvW8x1oJy1AZJpN-
* [http://www.thefrankes.com/wp/?p=2674 Highly customizable wheel],  
* [http://www.thefrankes.com/wp/?p=2674 Highly customizable wheel],  
* [https://www.thingiverse.com/thing:231651 Parametric Lego Brick]
* [https://www.thingiverse.com/thing:231651 Parametric Lego Brick]
* [https://www.thingiverse.com/thing:4708988 Knob Factory]
* [https://www.thingiverse.com/thing:2187167 Parametric Hinge]




Najjednoduchšie príklady:
== Príklady: ==


{| width="100%"
|
| <source lang="C++">
    cylinder(d=6,h=10);
  </source>
| [[Súbor:OpenSCAD-cylinder.png|thumb|Jednoduchý valec]]
|}
'''Kompilácia a rendrovanie modelu'''
Príkaz pre vykreslenie valčeka vložíme do príkazového okna a skompilujeme ho klávesou F5. Ak bol preklad úspešný, zároveň uvidíte v pravom okne náhľad objektu. Ak potrebujete kvalitný obraz, vyrendrujte ho klávesou F6, ale počítajte s dlhším časom potrebným na výpočet.
{| width="100%"
|
| <source lang="C++">
  ekvivalentné príkazy
  cube(size = 18);
  cube(18);
  cube([18,18,18]);
  .
  cube(18,false);
  cube([18,18,18],false);
  cube([18,18,18],center=false);
  cube(size = [18,18,18], center = false);
  cube(center = false,size = [18,18,18] );
  </source>
|  [[Súbor:OpenSCAD-cube.png|thumb|Kocka]]]
|-
|
| <source lang="C++">
  sphere(r = 10);
 
  translate([0,25,0])
  color([0,1,0]) 
  sphere(d = 20);
  translate([0,50,0])
  color([0.8,0.1,1]) 
  sphere(d = 20);
  </source>
|  [[Súbor:OpenSCAD-sphere.png|thumb|Guľa]]
|}
Na poslednom príklade vidno aj možnosť zmeny farby objektu. Farba sa zadáva ako trojica komponentov RGB farby, akurát namiesto
obvyklých hodnôt 0 - 255 sa zadávajú ako reálne čísla v intervale 0,0 - 1,0. Okrem toho môžete používať aj pomenované farby,
pričom sa používajú tie isté ako pre web -- [http://en.wikipedia.org/wiki/Web_colors Web colors], napríklad: <code>color("red") cube();</code><BR>
'''Pozn.:''' farby sa prejavia len v režime Preview mode (F5);  render mode (F6) zatiaľ farby nepodporuje.
'''Export do STL'''
* Pozri https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/STL_Export
=='''Transformácie''' ==
=== translate ===
Príkaz translate presunie svoje komponenty podľa daného vektora.
{| width="100%"
|
| <source lang="C++">
  sphere(r = 10);
 
  translate([0,25,0])
  sphere(d = 20);
  </source>
|  [[Súbor:OpenSCAD-sphere.png|thumb|Guľa]]
|}
=== difference ===
Príkaz difference odpočíta druhý (a všetky nasledujúce) objekty od prvého.
{| width="100%"
|
| <source lang="C++">
  difference()
  {
    cylinder (h = 4, r=1, center = true, $fn=100);
    rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
  }
  </source>
|  [[Súbor:OpenSCAD-difference.png|thumb|Difference]]
|}
=== union ===
Príkaz union spraví zjednotenie všetkých nasledujúcich objektov.
{| width="100%"
|
| <source lang="C++">
  union()
  {
    cylinder (h = 4, r=1, center = true, $fn=100);
    rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
  }
  </source>
|  [[Súbor:OpenSCAD-union.png|thumb|Union]]
|}
=== intersection ===
Príkaz intersection spraví prienik všetkých nasledujúcich objektov.
{| width="100%"
|
| <source lang="C++">
  intersection()
  {
    cylinder (h = 4, r=1, center = true, $fn=100);
    rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
  }
  </source>
|  [[Súbor:OpenSCAD-intersection.png|thumb|Intersection]]
|}
=='''Text'''==


To create our cuboid we will use the openSCAD editor window to type our one line command:
Text je 2D objekt, ktorý musíme neskôr "extrudovať" aby z neho vznikol 3D objekt. Všimnite si rozdiel medzi preview [F5] a render [F6].


{| width="100%"
{| width="100%"
|
|
|'''Usage example 1 - simple cuboid:'''
| <source lang="C++">
|-
  text("Ahoj");
  </source>
|  [[Súbor:OpenSCAD-Ahoj.png|thumb|Basic Text]]
|}
Ďalšími parametrami príkazu vieme meniť font, jeho veľkosť, typ a zarovnanie textu.
 
  text(text = "Ahoj", font = "Arial:style=Bold", size = 10, halign = "center", valign = "center");
 
Zoznam dostupných fontov získate z menu Help -> Font List
 
{| width="100%"
|
|
|<source lang="javascript">
| <source lang="C++">
cube([2,3,4]);
  linear_extrude(height = 10, center = true)
</source>
    text(text = "Ahoj", font = "Arial:style=Bold", size = 10, halign = "center", valign = "center");
|[[File:OpenSCAD_Simple_Cuboid.png|thumb|OpenSCAD Simple Cuboid]]
  </source>
| [[Súbor:OpenSCAD-Ahoj3D.png|thumb|3D Text]]
|}
|}


=== Compiling and rendering our first model ===
Viac o texte - pozri https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Text


The cuboid can now be compiled and rendered by pressing F5 or F6 Function key on your keyboard while the OpenSCAD editor has focus.
You should now see your object in the preview window as shown above.




{|  
== Funkcie - moduly ==
|-
 
<source lang="C++">
Až s využitím viacnásobného volania funkcie (v OpenSCADe sa volá module)
   cylinder(d=6,h=10);
a pomocou parametrov vynikne sila a efektivita tohoto nástroja.
</source>
 
|  [[Súbor:OpenSCAD-cylinder.png]]
{| width="100%"
|-  
|
<source lang="C++">
| <source lang="C++">
  ekvivalentné príkazy
  spacer(30);
cube(size = 18);
 
cube(18);
module spacer(length=15)
  cube([18,18,18]);
{
  .
$fn = 15;
cube(18,false);
 
cube([18,18,18],false);
difference()
  cube([18,18,18],center=false);
{
cube(size = [18,18,18], center = false);
   cylinder(d=6, h=length, $fn=6);
cube(center = false,size = [18,18,18] );
  translate([0,0,-1])
</source>
      cylinder(d=3.2,h=length+2);
| [[Súbor:OpenSCAD-cube.png]]
}
|-
}
<source lang="C++">
 
   sphere(d=6,h=10);
  </source>
</source>
|  [[Súbor:OpenSCAD-Spacer.png|thumb|Práca s modulmi.]]
| [[Súbor:OpenSCAD-sphere.png]]
|}
 
 
== Konvexná obálka - hull ==
 
Príkazom hull obalíme objekty a vytvoríme celistvý povrch. To sa dá niekedy veľmi elegantne využiť pri konštrukcii.
 
 
{| width="100%"
|
| <source lang="C++">
  /* Dve kruznice (2D objekt): */
 
    translate([15,0,0]) circle(10);
    circle(10);
 
 
  /* Obal dvoch kruznic:  */
 
  hull()
    {
      translate([15,0,0]) circle(10);
      circle(10);
    }
 
  /* Trojrozmerna suciastka: */
$fn=64;
 
 
linear_extrude(height=5)
{
  difference()
  {
  hull()
    {
      translate([15,0,0]) circle(10);
      circle(10);
    }
    translate([15,0,0]) circle(5);
    circle(5);
  }     
   
}
  </source>
| [[Súbor:OpenSCAD-Hull.png|thumb|Práca s modulmi.]]
|}
 
 
== Minkowského suma ==
 
Príkazom minkowski vytvoríme [https://dml.cz/bitstream/handle/10338.dmlcz/141371/PokrokyMFA_52-2007-4_6.pdf Minkowského súčet] dvoch objektov, s výhodou sa táto pomerne neobvyklá transformácia používa napr. na zaobľovanie rohov.
 
Povedzme, že máme hranatú krabičku, ktorá by lepšie vyzerala so zaoblenými hranami.
Dá sa to urobiť rozličnými spôsobmi, ale príkaz minkowski je na to ako stvorený. Ku krabičke pridáme na jednu hranu valec:
 
{| width="100%"
|
| <source lang="C++">
  $fn=50;
 
  cube([10,10,1]);
  cylinder(r=2,h=1);
  </source>
| [[Súbor:OpenSCAD-mink1.png|thumb|Východisková situácia.]]
|}
 
 
Potom tento valec spočítame minkowskeho operátorom a máame hotovo. Všimnite si však, že rozmery objektov sa spočítali, takže
rozmery krabičky sú teraz 10 + 2 + 2 = 14 x 14 x 2, pretože aj výška objektov sa spočítala. :
 
{| width="100%"
|
| <source lang="C++">
  $fn=50;
 
  minkowski()
  {
    cube([10,10,1]);
    cylinder(r=2,h=1);
  }
  </source>
| [[Súbor:OpenSCAD-mink2.png|thumb|Výsledok minkowski.]]
|}
 
 
== Cykly a premenné ==
 
{| width="100%"
|
| <source lang="C++">
   for (x=[0:3])
{
for (y=[0:3])
{
  translate([x*25,y*25,0])
  {
      cube(20);
  }
}
 
  </source>
| [[Súbor:OpenSCAD-forCycle.png|thumb|Cyklus FOR.]]
|}
|}
== Čo ďalej? ==
* -> Pozrite si [[OpenSCAD príklady]]
* Preštudujte si [http://edutechwiki.unige.ch/en/OpenScad_beginners_tutorial podrobnejší tutorial] ako tento
* Pozrite sa na [http://edutechwiki.unige.ch/en/Doblo_factory Doblo Factory]
[[Category:OpenSCAD]] [[Category:DTV]] [[Category:NAVEZ]]

Aktuálna revízia z 18:45, 14. marec 2021

OpenSCAD je voľne dostupný softvér pre počítačom podporovanú CAD (computer-aided design) tvorbu 3D objektov. Je založený na skriptovacom jazyku, ktorým sú jednotlivé objekty vytvárané. Graficky sa dajú len prezerať a natáčať, ale nedá sa pracovať interaktívne s myšou. Základom jazyka sú primitívne geometrické útvary (napr. guľa, hranol, valec a pod.) a tieto modifikujeme pomocou základných geometrických a matematických operácií (napr. posun, prienik, rozdiel a pod.) čím vznikne požadovaný objekt -- 3D model. Program je zástupcom programov skupiny CSG -- t.j. constructive solid geometry (CSG). Softvér existuje vo verzii pre Windows, Linux aj OS X.

Príklady:


Príklady:

    cylinder(d=6,h=10);
Jednoduchý valec


Kompilácia a rendrovanie modelu

Príkaz pre vykreslenie valčeka vložíme do príkazového okna a skompilujeme ho klávesou F5. Ak bol preklad úspešný, zároveň uvidíte v pravom okne náhľad objektu. Ak potrebujete kvalitný obraz, vyrendrujte ho klávesou F6, ale počítajte s dlhším časom potrebným na výpočet.


   ekvivalentné príkazy
   cube(size = 18);
   cube(18);
   cube([18,18,18]);
   .
   cube(18,false);
   cube([18,18,18],false);
   cube([18,18,18],center=false);
   cube(size = [18,18,18], center = false);
   cube(center = false,size = [18,18,18] );
Kocka
]
   sphere(r = 10);
  
   translate([0,25,0])
   color([0,1,0])  
   sphere(d = 20);

   translate([0,50,0])
   color([0.8,0.1,1])  
   sphere(d = 20);
Guľa

Na poslednom príklade vidno aj možnosť zmeny farby objektu. Farba sa zadáva ako trojica komponentov RGB farby, akurát namiesto obvyklých hodnôt 0 - 255 sa zadávajú ako reálne čísla v intervale 0,0 - 1,0. Okrem toho môžete používať aj pomenované farby, pričom sa používajú tie isté ako pre web -- Web colors, napríklad: color("red") cube();

Pozn.: farby sa prejavia len v režime Preview mode (F5); render mode (F6) zatiaľ farby nepodporuje.

Export do STL

Transformácie

translate

Príkaz translate presunie svoje komponenty podľa daného vektora.

   sphere(r = 10);
  
   translate([0,25,0])
   sphere(d = 20);
Guľa



difference

Príkaz difference odpočíta druhý (a všetky nasledujúce) objekty od prvého.

   difference() 
   {
     cylinder (h = 4, r=1, center = true, $fn=100);
     rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
   }
Difference

union

Príkaz union spraví zjednotenie všetkých nasledujúcich objektov.

   union() 
   {
     cylinder (h = 4, r=1, center = true, $fn=100);
     rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
   }
Union


intersection

Príkaz intersection spraví prienik všetkých nasledujúcich objektov.

   intersection() 
   {
     cylinder (h = 4, r=1, center = true, $fn=100);
     rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
   }
Intersection

Text

Text je 2D objekt, ktorý musíme neskôr "extrudovať" aby z neho vznikol 3D objekt. Všimnite si rozdiel medzi preview [F5] a render [F6].

   text("Ahoj");
Basic Text

Ďalšími parametrami príkazu vieme meniť font, jeho veľkosť, typ a zarovnanie textu.

 text(text = "Ahoj", font = "Arial:style=Bold", size = 10, halign = "center", valign = "center");

Zoznam dostupných fontov získate z menu Help -> Font List

   linear_extrude(height = 10, center = true)
     text(text = "Ahoj", font = "Arial:style=Bold", size = 10, halign = "center", valign = "center");
3D Text

Viac o texte - pozri https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Text


Funkcie - moduly

Až s využitím viacnásobného volania funkcie (v OpenSCADe sa volá module) a pomocou parametrov vynikne sila a efektivita tohoto nástroja.

   spacer(30);

module spacer(length=15)
{
$fn = 15;

difference()
 { 
  cylinder(d=6, h=length, $fn=6);
  translate([0,0,-1])
       cylinder(d=3.2,h=length+2);
 }
}
Práca s modulmi.


Konvexná obálka - hull

Príkazom hull obalíme objekty a vytvoríme celistvý povrch. To sa dá niekedy veľmi elegantne využiť pri konštrukcii.


 /* Dve kruznice (2D objekt): */

    translate([15,0,0]) circle(10);
    circle(10);


 /* Obal dvoch kruznic:   */

   hull()
     {
      translate([15,0,0]) circle(10);
      circle(10);
     }

 /* Trojrozmerna suciastka: */
$fn=64;


linear_extrude(height=5)
{
  difference()
  {
   hull()
     {
      translate([15,0,0]) circle(10);
      circle(10);
     }
     translate([15,0,0]) circle(5);
     circle(5);
 }       
    
}
Práca s modulmi.


Minkowského suma

Príkazom minkowski vytvoríme Minkowského súčet dvoch objektov, s výhodou sa táto pomerne neobvyklá transformácia používa napr. na zaobľovanie rohov.

Povedzme, že máme hranatú krabičku, ktorá by lepšie vyzerala so zaoblenými hranami. Dá sa to urobiť rozličnými spôsobmi, ale príkaz minkowski je na to ako stvorený. Ku krabičke pridáme na jednu hranu valec:

   $fn=50;

   cube([10,10,1]);
   cylinder(r=2,h=1);
Východisková situácia.


Potom tento valec spočítame minkowskeho operátorom a máame hotovo. Všimnite si však, že rozmery objektov sa spočítali, takže rozmery krabičky sú teraz 10 + 2 + 2 = 14 x 14 x 2, pretože aj výška objektov sa spočítala. :

  $fn=50;

  minkowski() 
  {
    cube([10,10,1]);
    cylinder(r=2,h=1);
  }
Výsledok minkowski.


Cykly a premenné

  for (x=[0:3])
{
 for (y=[0:3])
 {
  translate([x*25,y*25,0])
   {
       cube(20);
   }
 }   
}
Cyklus FOR.



Čo ďalej?