Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
3D grafika
Rhinoceros a skripty - třetí praktický příklad
30. června 2003, 00.00 | Pokračujeme v našem modelování tetraedru. V minulém díle jsme jej modelovali v přesně daném místě. Teď si ukážeme, jak jej modelovat tam, kde bude uživatel chtít.
Pokračujeme v našem modelování tetraedru. V minulém díle jsme jej modelovali v přesně daném místě. Teď si ukážeme, jak jej modelovat tam, kde bude uživatel chtít.Určení pomocí středu podstavy
Sub VytvorTetraedr2 'Nadeklaruji promenne Dim Bod1(2),Bod2(2),Bod3(2),Bod4(2) Dim DelkaStrany Dim StredPodstavy(2) Dim StredPodstavyP Dim StredPodstavyStr 'Zeptam se na rozmer strany DelkaStrany = Rhino.getString("Delka strany ") 'Zeptam se na stred podstavy StredPodstavyP = Rhino.getPoint("Vyberte stred podstavy") if IsArray(StredPodstavyP) Then Rhino.Print "Není to nulová hodnota" StredPodstavy(0) = StredPodstavyP(0) StredPodstavy(1) = StredPodstavyP(1) StredPodstavy(2) = StredPodstavyP(2) StredPodstavyStr = StredPodstavy(0) & "," & StredPodstavy(1) & "," & StredPodstavy(2) else Rhino.Print "Je to nulová hodnota" StredPodstavy(0) = 0 StredPodstavy(1) = 0 StredPodstavy(2) = 0 StredPodstavyStr = "0,0,0" end if 'Vytiskneme souradnice Rhino.Print CStr(StredPodstavyStr) 'Spocitam a naplnim souradnice bodu Bod1(0) = StredPodstavy(0)-(DelkaStrany/2) Bod1(1) = StredPodstavy(1)-(DelkaStrany/6)*((3)^(1/2)) Bod1(2) = 0 Bod2(0) = StredPodstavy(0)+(DelkaStrany/2) Bod2(1) = StredPodstavy(1)-(DelkaStrany/6)*((3)^(1/2)) Bod2(2) = 0 Bod3(0) = StredPodstavy(0) Bod3(1) = StredPodstavy(1)+(DelkaStrany/3)*((3)^(1/2)) Bod3(2) = 0 Bod4(0) = StredPodstavy(0) Bod4(1) = StredPodstavy(1) Bod4(2) = (DelkaStrany^2-((DelkaStrany^2)/3))^(1/2) 'Vytvorim plochy pomoci prikazu Rhina SrfPt Dim Plocha1,Plocha2,Plocha3,Plocha4 Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod2) & Pt2Str(Bod3) & " ENTER") Plocha1 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod2) & Pt2Str(Bod4) & " ENTER") Plocha2 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod2) & Pt2Str(Bod3) & Pt2Str(Bod4) & " ENTER") Plocha3 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod3) & Pt2Str(Bod4) & " ENTER") Plocha4 = Rhino.GetLastObjectID 'Spojim plochy v teleso reprezentovane plochami Dim Teleso Rhino.SetObjectSelect Plocha1, vbTrue Rhino.SetObjectSelect Plocha2, vbTrue Rhino.SetObjectSelect Plocha3, vbTrue Rhino.SetObjectSelect Plocha4, vbTrue Rhino.Command("Join enter") Teleso = Rhino.GetLastObjectID Rhino.Command("SelNone") Rhino.ResetPrompt End Sub 'Funkce pro prevod souradnic pro zadavani ve World formatu Function Pt2Str(pointObj) Pt2Str = " w" & pointObj(0) & "," & pointObj(1) & "," & pointObj(2) End Function 'Samotne telo kodu VytvorTetraedr2 |
Soubor ke stažení:
Jak jste poznali, tento skript nabízí uživateli zadání rozměru hrany a středu podstavy. Pro zadání rozměru jsme použili funkci Rhino.getString. Ta vrací uživatelský vstup z příkazového řádku.
Pro určení středu podstavy jsme použili funkci Rhino.getPoint.
Vrácenou hodnotu pak testujeme, zda je typu pole. Pokud je, přiřadíme hodnoty souřadnic do nové proměné. Pokud není, bereme jako střed počátek souřadného systému. Dále jsme využili funkce Rhino.Print pro výstup souřadnic středu podstavy na příkazovou řádku. Ve výpočtech souřadnic daného tetraedru není snad nic složitého. Předpokládáme, že jedna hrana bude vždy rovnoběžná s osou x. Zbylá část kódu je obdobná jako poslední příklad z minulého dílu.
Určení pomocí hrany podstavy
Sub VytvorTetraedr3 'Nadeklaruji promenne Dim Bod1,Bod2,Bod3,Bod4(2) Dim DelkaStrany Dim StredPodstavy(2) Dim Zakladni Dim Bod3P 'Uzivatel musi zadat zakladni caru Rhino.Command("SelNone") Rhino.Command("Line pause pause ") Zakladni = Rhino.GetLastObjectID 'Naplnim souradnice prvnich dvou bodu Bod1 = Rhino.GetCurveStartPoint(CStr(Zakladni)) Bod2 = Rhino.GetCurveEndPoint(CStr(Zakladni)) 'Smazu zakladni caru Rhino.SetObjectSelect Zakladni, vbTrue Rhino.Command("Delete") 'Urcim delku strany DelkaStrany = ((Bod2(0)-Bod1(0))^2+(Bod2(1)-Bod1(1))^2)^(1/2) 'Vytvorim treti bod Rhino.Command("Point " & Pt2Str(Bod1)) Bod3P = Rhino.GetLastObjectID Rhino.SetObjectSelect Bod3P, vbTrue Rhino.Command("Rotate " & Pt2Str(Bod2) & " -60 ") Bod3 = Rhino.GetPointCoordinates(CStr(Bod3P)) Rhino.Command("Delete") 'Teziste StredPodstavy(0) = (1/3)*(Bod1(0)+Bod2(0)+Bod3(0)) StredPodstavy(1) = (1/3)*(Bod1(1)+Bod2(1)+Bod3(1)) 'Ctvrty vrchol Bod4(0) = StredPodstavy(0) Bod4(1) = StredPodstavy(1) Bod4(2) = (DelkaStrany^2-((DelkaStrany^2)/3))^(1/2) 'Vytvorim plochy pomoci prikazu Rhina SrfPt Dim Plocha1,Plocha2,Plocha3,Plocha4 Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod2) & Pt2Str(Bod3) & " ENTER") Plocha1 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod2) & Pt2Str(Bod4) & " ENTER") Plocha2 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod2) & Pt2Str(Bod3) & Pt2Str(Bod4) & " ENTER") Plocha3 = Rhino.GetLastObjectID Rhino.Command("SrfPt " & Pt2Str(Bod1) & Pt2Str(Bod3) & Pt2Str(Bod4) & " ENTER") Plocha4 = Rhino.GetLastObjectID 'Spojim plochy v teleso reprezentovane plochami Dim Teleso Rhino.SetObjectSelect Plocha1, vbTrue Rhino.SetObjectSelect Plocha2, vbTrue Rhino.SetObjectSelect Plocha3, vbTrue Rhino.SetObjectSelect Plocha4, vbTrue Rhino.Command("Join enter") Teleso = Rhino.GetLastObjectID Rhino.Command("SelNone") Rhino.ResetPrompt End Sub 'Funkce pro prevod souradnic pro zadavani ve World formatu Function Pt2Str(pointObj) Pt2Str = " w" & pointObj(0) & "," & pointObj(1) & "," & pointObj(2) End Function 'Samotne telo kodu VytvorTetraedr3 |
Soubor ke stažení:
Zde k určení bodů podstavy využijeme základní čáry. Tu vytvořím přes příkazovou řádku.
Poté pomocí funkcí Rhino.GetCurveStartPoint a Rhino.GetCurveEndPoint určíme souřadnice prvních dvou bodů. Základní čáru ak smažeme. Výpočtem určíme délku strany základny. Třetí bod vytvoříme tak, že v jednom z prvních dvou bodů vytvoříme bod, který otočíme o 60 stupňů kolem druhého bodu. Funkcí Rhino.GetPointCoordinates vytáhneme souřadnice a pomocný bod smažeme. Opět využijeme matematiky a spočítáme těžiště, které nám dopomůže k určení čtvrtého bodu. Zbytek kódu je opět shodný s předchozím příkladem a výsledek je shodný.
Zde vám ještě nabídnu ikonky pro dané příklady.
Jak vidíte, je opravdu dost způsobů, jak daný problém řešit. Je už pak na vás, jaký postup zvolíte a do jaké hloubky se vrhnete. První příklady byly jednoduché a jejich vytvoření nezabere moc času. Poslední příklad je už rozsáhlý a umožňuje větší volnost v zadání.
V dalších dílech se zaměřím již na skriptování v Rhinu 3. Zde se již dá propojovat s externími aplikacemi, ale hlavně jsou končně jeho funkce pojaty lépe.
Obsah seriálu (více o seriálu):
- Rhinoceros a skripty - úvod
- Rhinoceros a skripty II
- Rhinoceros a skripty III - první lehký praktický příklad
- Rhinoceros a skripty - druhý střední praktický příklad
- Rhinoceros a skripty - třetí praktický příklad
Tématické zařazení:
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
11. května 2014
-
23. května 2014
Epson na konferenci Droidcon Berlin ukázal nové možnosti čekající na vývojáře OS Android
-
24. listopadu 2014
-
13. května 2014
Samsung NX3000: retro styl, špičkový výkon a snadná konektivita v jednom přístroji
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
15. prosince 2014
Konica Minolta pomůže živnostenským úřadům s digitalizací dokumentů
-
11. května 2014
-
26. listopadu 2014
Canon Junior Awards již posedmé ocení mladé fotografy v rámci Czech Press Photo
-
21. srpna 2014