Voronoi přímo v Onshape: jak vznikl můj FeatureScript
Generátor Voronoi vzoru jako vlastní feature v Onshape – bez exportů přes SVG a DXF, s parametry, které jdou kdykoli změnit. Zdarma.

Modeluju v Onshape. Mám rád FeatureScript a často používám Hexinfill, který vygeneruje sketch vyplněný šestiúhelníky, které se dají vyextrudovat do voštinové mřížky. Dlouho jsem chtěl něco podobného i pro Voronoi, prostě generátor přímo v Onshape, bez přeskakování mezi nástroji.
Co je Voronoi? Vzor, který rozdělí plochu na buňky podle nejbližšího bodu. Vyberete pár bodů a každý kousek prostoru „spadne“ tomu, ke kterému má nejblíž. Výsledkem je síť nepravidelných polygonů, která vypadají přirozeně: jako praskliny v hlíně, mýdlová pěna nebo kostní tkáň. Je lehká a přitom pevná, a stačí změnit hustotu bodů nebo zaoblení hran a dostane úplně jiný charakter. Od jemné „krajky“ po hrubou technickou mřížku.
Voronoi v Onshape jen oklikou přes SVG a DXF
Doposud jsem to dělal oklikou. Voronoi jsem si vygeneroval v online nástroji, vyexportoval a pak importoval do sketche v Onshape. Fungovalo to, ale pokaždé to znamenalo krok navíc a v praxi to bylo pomalé a zdlouhavé, hlavně když jsem ladil tvar.
Co mě na tom zdržovalo:
- SVG bylo potřeba převést do DXF, protože SVG Onshape přímo neimportuje
- oblé rohy se po exportu a importu často změnily na lomenou čáru místo spojité křivky
- importovanému DXF nejde ve sketchi měnit velikost
- když jsem se netrefil do rozměru, musel jsem opakovat celý proces: generování → SVG → převod do DXF → import do sketche
Co od automatizace chci, bylo tedy jasné: méně ruční práce a hlavně rozměr i parametry pod kontrolou přímo v Onshape. Jenže Voronoi není „jen“ vzor – je to geometrie a matematika, a k tomu náhoda v pozadí.
První verze: hromada chyb v konzoli
Doteď jsem měl pár jednoduchých FeatureScriptů pro vlastní potřebu. Na Voronoi generátor jsem si ale netroufal, protože náhodný vzor znamená víc výpočtů a víc míst, kde se to může rozbít. Našel jsem sice online knihovny se zdrojáky pro generování Voronoi, ale pořád jsem si nebyl jistý, jestli to ve FeatureScriptu zvládnu.
Pak jsem zkusil GitHub Copilot v režimu Agent. FeatureScript je podobný TypeScriptu a dokumentace je veřejná, takže bylo od čeho se odrazit. Počítal jsem s tím, že skript budu do Onshape kopírovat a testovat ručně, ale protože model umí pracovat i se screenshoty, přišlo mi to jako rozumný kompromis.
Ve VS Code jsem založil nový projekt, popsal, jak má generátor vypadat, přidal odkazy na webové generátory a nahrál to do repozitáře. Copilot si udělal TODO list a začal skládat první verzi. Tu jsem zkopíroval do Onshape, commitnul… a v konzoli na mě čekala hromada chyb.

Výpis chyb v konzoli FeatureScriptu po prvním commitu
Screenshot chyb jsem poslal zpátky Copilotovi. Druhá verze už jich měla výrazně méně a po dvou až třech kolech skript konečně něco vykreslil. Ve sketchi se poprvé objevil základ Voronoi buněk a v tu chvíli to začalo dávat smysl.

První vygenerovaná Voronoi struktura
Další postup byl pořád stejný: screenshot, popsat, co je špatně a jak to má být, vložit upravený kód do Onshape a zkusit to znovu. Do kódu jsem ručně sahal minimálně, sám jsem upravoval spíš uživatelské rozhraní.
Když narazíte na geometrii
Časem přišly záludnější problémy. Hůř se popisovaly a často jsem ani netušil, odkud se berou. Typický příklad: občasné křížení hran buněk. Návrhy oprav ode mě i od Copilota problém někdy posunuly, ale často přidaly další chyby. Screenshoty a prompty přestaly stačit.

Překřížení hran buněk u některých vrcholů
Potřeboval jsem algoritmus ladit lokálně a koukat na výsledek přímo v prohlížeči. Copilot neuměl skript sám vkládat do Onshape, a tak jsem postavil samostatnou javascriptovou aplikaci, která běžela lokálně. Zároveň jsem Copilota navedl, ať se znovu podívá do dostupných knihoven, jestli tam řešení nenajde.
Nevím, co zabralo víc, jestli lokální testování, nebo nahlédnutí do knihoven. Každopádně to najednou „zacvaklo“ a problémy se vyřešily.
Rohy z úseček a jak z nich udělat oblouk
Pak už jsem přidával další funkce. Jedna z prvních byla možnost zaoblit rohy buněk na zadaný poloměr. První výsledek ale nevypadal dobře: místo výseče kruhu nebo spojité křivky vznikla sada krátkých rovných čar.

Zaoblené rohy určitě nejsou ideální
Řešení bylo jednodušší, než jsem čekal. Místo skládání oblouku z krátkých úseček zaobluji rohy vestavěnou funkcí přímo ve sketchi. Kruhové zaoblení není vždycky ideální, ale je rychlé a ve většině případů stačí.
Co všechno jde nastavit

Dialog Voronoi Pattern v Onshape
Vzor se vygeneruje na vybranou rovinnou plochu a to buď stěnu dílu nebo plochu sketche. V dialogu pak nastavíte:
- Cell count – počet buněk
- Seed distribution – jak se rozmístí body, ze kterých buňky vzniknou: Grid with Jitter (pravidelná mřížka s náhodným posunem, výchozí), Random (čistě náhodně, buňky můžou být hodně nestejné), Poisson Disk (body drží minimální odstup, vypadá to přirozeně) a Relaxed (Lloyd's) (nejrovnoměrnější buňky, ale nejpomalejší)
- Random seed – číslo od 1 do 9999, které určuje náhodu. Stejné číslo dá vždycky stejný vzor, takže se k povedené variantě můžete vrátit
- Space between cells – šířka mezery mezi buňkami
- Pattern margin – odstup vzoru od okraje plochy. Šipkou ho můžete obrátit, aby vzor naopak přesahoval přes okraj
- Fillet corners a Fillet radius – zaoblení rohů buněk
Když vzor nevypadá tak „hezky“, jak chcete, stačí kliknout na šipku vedle Random seed a dostanete novou variantu. Pro ladění jde zapnout i zobrazení bodů, ze kterých buňky vznikly, a ohraničujícího rámečku.

Váza s vyextrudovanými voronoi vzory na stěnách
Jak FeatureScript přidat do Onshape
FeatureScript je zdarma ve veřejném dokumentu Voronoi FeatureScript.
- Otevřete dokument a v záložce Feature Studio klikněte pravým tlačítkem na Voronoi Pattern.
- Zvolte Add to Custom Features.
- V Part Studiu ho pak najdete v nabídce vlastních featur jako Voronoi Pattern.
Vázu z úvodního obrázku najdete na Printables jako Voronoi Vase with Cast Concrete Base.
Jestli FeatureScript vyzkoušíte, napište mi, na co jste vzor použili a kde se rozbil a to buď do komentářů nebo na apps@xfanta.com.



Komentáře
Zatím tu žádný komentář není. Napište první.