První kroky v Pythonu pro Rhino

30. 1. 2023
Jan Slanina
První kroky v Pythonu pro Rhino

Python je moderní programovací jazyk, který je vstřícný k začínajícím programátorům. Rhino je zase vstřícné k začínajícím modelářům - tak co to tedy zkusit společně? Přinášíme vám překlad

Co je Rhino.Python?


... ale lepší otázka je:

Co je Python?


Python je moderní programovací jazyk. Python se někdy nazývá skriptovací jazyk nebo slepovací jazyk. To znamená, že python se často používá ke spouštění řady příkazů v podobě skriptu nebo se používá jako lepidlo k vytváření vazeb mezi dvěma jinými technologiemi. Naučíte se jej používat snadněji než jiné kompilované jazyky, které nejsou skriptovací, jako například C#, VB nebo C/C++. Přesto je poměrně výkonný.

Jazyk Python je interpretovaný, což znamená, že se vykonává po jednotlivých řádcích. Díky tomu je tok programu snadno pochopitelný. Také je sémanticky dynamický, což umožňuje, aby syntaxe byla méně restriktivní a méně formální při používání deklarací a typů proměnných. Tyto vlastnosti přispívají ke snadnému používání jazyka Python pro základní programovací úlohy.

Python můžete využít, pokud chcete:

  • automatizovat opakující se úlohy v Rhinu mnohem rychleji, než byste ji dokázali provádět ručně.
  • provádět úlohy v Rhinu nebo Grasshopperu, pro které neexistují standardní příkazy Rhina nebo komponenty Grasshopperu
  • generovat geometrii pomocí algoritmů
  • provádět mnoho a mnoho dalších věcí. Koneckonců je to programovací jazyk.


Proč Python?


Proč byste měli používat Python? Python je zamýšlený jako jednoduchý jazyk, ve kterém se snadno čte i píše. Python také běží v Rhinu pro Windows i Mac. Protože je skriptování v Pythonu pro Rhino dostupné na obou platformách, mohou stejné skripty v Pythonu běžet na obou verzích Rhina! Python lze spustit také jako komponentu Grasshopperu.

Co je však důležitější: Python je velmi populární i mimo Rhino! Mnohé z toho, co se o Pythonu naučíte, lze použít v mnoha dalších oblastech.

Možná si řeknete, že Rhino již vlastně obsahuje skriptovací jazyk RhinoScript, proč tedy potřebujeme další jazyk? RhinoScript je velmi snadno použitelný skriptovací jazyk v systému Windows. Rhinoscript budeme podporovat i nadále. RhinoScript je však založen na trochu starší technologii, takže je méně flexibilní než modernější jazyk Python. RhinoScript nelze podporovat na platformě Mac. Také bohužel není podporován komunitou na stejné úrovni jako Python.


Jakou verzi Pythonu Rhino využívá?


Rhino používá Python verze 2.7. Přesněji řečeno, Rhino používá IronPython, který spojuje jazyk Python a framework .NET od společnosti Microsoft.


Kde všude můžu využít Python v Rhinu?


Jazyk Python lze používat v celém Rhinu mnoha různými způsoby. Python lze použít k vytváření:

  • interaktivních skriptů
  • nových vlastních příkazů
  • nových zásuvných modulů
  • čtení a zápis vlastních formátů souborů
  • interakce s cloudovými aplikacemi
  • vyzeb na jiné aplikace v reálném čase
  • vlastních komponent Grasshopperu
  • ukládání a zobrazování specifických informací o projektu nad rámec toho, co umí základní Rhino


Funkce ve stylu RhinoScriptu


Jednou z klíčových funkcí RhinoScriptu, která usnadňuje psaní výkonných skriptů, je rozsáhlá knihovna specifických funkcí Rhina, které lze ze skriptů volat. Naše implementace Pythonu obsahuje sadu podobných funkcí, které lze importovat a použít v libovolném skriptu Pythonu pro Rhino. Tato sada funkcí je známá jako balíček rhinoscriptsyntax.

Porovnejme nyní dva skripty, které umožňují uživateli zadat dva body a přidat do Rhina úsečku mezi těmito dvěma body...

Toto je RhinoScript:

Dim arrStart, arrEnd
arrStart = Rhino.GetPoint("Zacatek usecky")
If IsArray(arrStart) Then
  arrEnd = Rhino.GetPoint("Konec usecky")
  If IsArray(arrEnd) Then
    Rhino.AddLine arrStart, arrEnd
  End If
End If

...ve srovnání s Pythonem:

import rhinoscriptsyntax as rs
 
start = rs.GetPoint("Zacatek usecky")
if start:
  end = rs.GetPoint("Konec usecky")
  if end: rs.AddLine(start,end)

Ano, jsou odlišné... ale přitom natolik podobné, že byste měli být schopni zjistit, co se děje v Pythonu, pokud jste napsali RhinoScript. Rhinoscriptsyntax také obsahuje mnoho pomocných funkcí, které usnadňují programování v Pythonu.

Další informace o tom, jak používat Rhinoscriptsyntax a Python, najdete v příručce Rhino.Python Guide. Některé úvodní informace z této příručky najdete v pokračování tohoto článku.


Grasshopper

Python lze použít také v Grasshopperu k vytváření vlastních komponent uvnitř definice Grasshopperu. Komponenta GhPython obsahuje editor skriptů Pythonu a přímý přístup k funkcím Pythonu, Rhina a Grasshopperu. Pomocí GhPython můžete vytvářet a manipulovat s uživatelskými daty v rámci Grasshopperu.


RhinoCommon

RhinoCommon je nízkoúrovňové výkonné SDK pro všechny platformy Rhina, které používají především zkušenější vývojáři. Skripty v jazyce Python mohou používat RhinoCommon, aby měly plný přístup k frameworku .NET včetně přístupu k RhinoCommon SDK Rhina. Průvodce přístupem k RhinoCommon ze skriptů v jazyce Python naleznete na stránce Using RhinoCommon from Python.


Základní syntaxe Pythonu


Mnoho skriptovacích a programovacích jazyků, jako jsou JScript, C# a C++, se nesnaží o shodu spouštěného kódu se skutečnými fyzickými řádky zadanými do textového editoru. Je to proto, že nerozpoznají konec řádku kódu, dokud neuvidí ukončovací znak (v těchto případech středník). Skutečné fyzické řádky písma zabrané kódem jsou tedy irelevantní.

Na rozdíl od jiných jazyků nepoužívá Python znak konce řádku. Většinou postačí jednoduchý Enter. Přesto si Python v určitých případech velmi potrpí na odsazení, mezery a řádky. Tento dokument má pomoci porozumět formátování jazyka Python.

Je důležité pochopit, jak Python interpretuje:

  • konec příkazu
  • názvy a psaní velkých písmen
  • komentáře
  • blokové struktury
  • tabulátory a mezery

Oficiální velmi podrobnou dokumentaci k syntaxi jazyka Python najdete v příručce Style Guide for Python Code.


Konec řádku


Chcete-li v Pythonu ukončit řádek, nemusíte psát středník ani jiný speciální znak, ale stačí stisknout klávesu Enter. Například tento kód vygeneruje syntaktickou chybu:

 

message
=
'Hello World!'

 ...zatímco tento ne:

message = 'Hello World!'

Obecně lze říci, že absence povinného znaku pro ukončení řádku v Pythonu zjednodušuje psaní skriptů. Je tu však jedna komplikace: Pro zvýšení čitelnosti se doporučuje omezit délku jednoho řádku kódu na 79 znaků. Co se tedy stane, když máte řádek kódu, který obsahuje 100 znaků?

Ačkoli by se to mohlo zdát jako očividné řešení, nemůžete příkaz rozdělit na více řádků pouhým Enterem. Například následující úryvek kódu vrátí chybu při běhu Pythonu, protože příkaz byl rozdělen pomocí klávesy Enter.

message= 'Tato zprava vygeneruje chybu, protoze
  byla rozdelena pomoci klavesy Enter na vasi
  klavesnici'

V Pythonu nelze příkaz rozdělit na více řádků stisknutím klávesy Enter. Místo toho použijte zpětné lomítko (\), které informuje o pokračování příkazu na dalším řádku. V níže uvedené revidované verzi skriptu prázdná mezera a podtržítko označují, že příkaz, který byl zahájen na řádku 1, pokračuje na řádku 2. Aby bylo zřejmé, že řádek 2 je pokračováním řádku 1, je řádek 2 také odsazen o čtyři mezery. (Bylo to provedeno kvůli čitelnosti, ale pokračující řádky nemusíte odsazovat. )

message\
=\
'This \
back slash \
acts \
like \
enter'
print\
message

message\
=\
'''triple
quotes
will
span
multiple lines
without
errors'''
print\
message

Pokračování řádku je automatické, pokud k rozdělení dojde, když je příkaz uvnitř kulatých závorek ( ( ), hranatých závorek ( [ ) nebo složených závorek ( { ). To je pohodlné, ale může to také vést k chybám, pokud není uzavřená kulatá, hranatá nebo složená závorka. Python by v takovém případě interpretoval zbytek skriptu jako jeden příkaz.

Python používá jednoduché uvozovky (') dvojité uvozovky (") a trojité uvozovky (""") pro označení textových řetězců. Pouze řetězce s trojitými uvozovkami (""") také automaticky pokračují přes příkaz na konci řádku.

Někdy může být na jednom řádku umístěn více než jeden příkaz. V Pythonu lze k oddělení více příkazů na jednom řádku použít středník (;). Například lze zapsat tři příkazy:

y = 3; x = 5; print(x+y)

Pro interpreter jazyka Python by to byla stejné jako tato sada příkazů:

y = 3
x = 5
print(x+y)

Váš první skript v Pythonu pro Rhino (Windows)

Dozvíte se, jak v Rhinu zobrazit okno se zprávou "Hello World". Naučíte se základní deovednosti pro úpravu, načítání a spouštění skriptů.


Takto vypadá náš kompletní skript

 

import rhinoscriptsyntax as rs
 
rs.MessageBox ("Hello World")

Otestujte si skript:

  • spusťte Rhino
  • zobrazí se dialogové okno Editor Rhino Pytohn
  • do okna pro ediatci skriptu zkopírujte výše uvedenou ukázku kódu
  • klepněte na tlačítko "Zahájit ladění".
  • dialogové okno pro úpravy skriptu zmizí a zobrazí se zpráva Hello World
  • do příkazového řádku zadejte příkaz UpravitPythonSkript a stiskněte klávesu Enter


Funkce HelloWorld

Pokud byste psali složitější skript a chtěli na strategických místech skriptu zobrazit zprávu "Hello World", mohli byste tento kód napsat pokaždé, když byste chtěli, aby se zpráva zobrazila.

Pokud byste si to ale rozmysleli a chtěli místo toho říkat "Howdy World", museli byste vyhledat všechna místa, kde se vyskytuje "Hello World", a nahradit je.

Jednodušší způsob, jak tento problém vyřešit, je napsat funkci (def slouží k definici funkce). Na různých místech vašeho skriptu pak můžete tuto funkci volate. Funkce už se sama postará o zobrazení zprávy, takže zprávu stačí změnit pouze na jednom místě.

Takto vypadá definice funkce:

import rhinoscriptsyntax as rs
 
def HelloWorld():
    rs.MessageBox ("Hello World")

Pokud v této chvíli kliknete na tlačítko pro spuštění skriptu, nic se nestane. To proto, že RhinoScript definoval podprogram, ale ve skutečnosti ho nezavolal. Chcete-li podprogram zavolat, buď přidejte tento řádek kódu a klepněte na tlačítko Spustit.

Chcete-li tuto funkci zavolat, jednoduše přidejte na konec skriptu tento řádek a spusťte skript znovu:

HelloWorld()

V Pythonu musí definice funkcí předcházet jejich volání v kódu.


Testujeme HelloWorld

  • do příkazového řádku zadejte příkaz UpravitPythonSkript a stiskněte Enter
  • zobrazí se dialogové okno Upravit skript
  • do okna Kód skriptu zadejte:
import rhinoscriptsyntax as rs
 
def HelloWorld():
    rs.MessageBox ("Hello World")
 
HelloWorld()

Klikněte na tlačítko pro spuštění skriptu.

 

Pokud napíšete více než jen pár řádků skriptu, je nutné skript uložit do souboru, abyste jej mohli spouštět bez nutnosti pokaždé jej psát znovu. Pokud chcete skript uložit, klikněte na ikonu diskety Uložit skript. Uložte svůj skript pod názvem HelloWorld.py.

 


Spouštíme skript HelloWorld.py

 

  • Do příkazového řádku zadejte příkaz SpustitPythonSkript a stiskněte Enter
  • V dialogovém okně které se objeví vyberte uložený soubor "Hello World.py" a klikněte na tlačítko Otevřít.

Použité vybavení