Rhinoceros a skripty - třetí praktický příklad - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

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:



3dscena

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í: Skript tetraedr2.rvb 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.

Příkazový řádek

Pro určení středu podstavy jsme použili funkci Rhino.getPoint.

Příkazový řádek

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í: Skript tetraedr3.rvb ke stažení

Zde k určení bodů podstavy využijeme základní čáry. Tu vytvořím přes příkazovou řádku.

Příkazový řádek


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ý.

Výsledek


Zde vám ještě nabídnu ikonky pro dané příklady.

Ikona pro skript tetraedr2.rvb Ikona pro skript tetraedr3.rvb

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):

Tématické zařazení:

 » Rubriky  » 3dscena  

 » Rubriky  » Go verze  

 » Rubriky  » 3D grafika  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: