blender3d.cz
http://www.blender3d.cz/forum/

Skript navržený Ad
http://www.blender3d.cz/forum/viewtopic.php?f=7&t=1466
Stránka 11

Autor:  Ragnos [ pon srp 08, 2005 3:52 pm ]
Předmět příspěvku:  Skript navržený Ad

Tak jsem se pustil do skriptu co navrhl Ad....jeho popis byl tento

"mám další návrh, ale nevím, jestli to půjde, nebo jestli to už někdo neudělal...

představoval bych si to asi takto:
vyselektuješ objekt ( nebo v edit režimu vertexy ) a
teď:

script má promněnou ( např. PŘÍZNAK) nastavenu na 0 a všechny určující promněnné ( size, rot, poloha X,Y,Z atd... )
jsou ve scriptu vynulovány ( ne v reálu)
prodvedu první duplikaci a selekce se samozřejmě přesune na ten duplikát. Ten nechám vyselektovaný a provedu standardní úpravu velikosti, polohy, nebo rotace ( nebo všech ) a dále ponechám vyselektovaný. Rozdíly zmněn po duplikaci se nastaví (zapíší) do pomněnných parametrů a PŘÍZNAK se změní na -1-. provedu duplikaci, ale další duplikát je už zmněněn o tejný rozdíl a to by se dalo opakovat do nekonečna.
Po odselektování se PŘÍZNAK vynuluje a hodnoty rozdílů také. Tím se při další duplikaci opět objekt nehne od původního.

praktické využití? - třeba točité schodiště. Uděláš pvní schod, zduplikuješ, posuneš nahoru a otočíš kolem 3D kurzoru a pak už jen duplikujš a duplikuješ a...... až je to tak vysoko, jak jsi potřeboval...
"

rozdelana verze skriptu
Kód:
import Blender
from Blender import NMesh

n_klonu=30


scene = Blender.Scene.getCurrent()
kopie = Blender.Object.GetSelected()[0]
nomdelobject=kopie.getName()
Mesh= Blender.NMesh.GetRawFromObject(nomdelobject)
zaklad = Blender.Object.GetSelected()[1]


posun_x=kopie.getLocation()[0]-zaklad.getLocation()[0]
posun_y=kopie.getLocation()[1]-zaklad.getLocation()[1]
posun_z=kopie.getLocation()[2]-zaklad.getLocation()[2]
rotace_x=kopie.getEuler()[0]-zaklad.getEuler()[0]
rotace_y=kopie.getEuler()[1]-zaklad.getEuler()[1]
rotace_z=kopie.getEuler()[2]-zaklad.getEuler()[2]
size_x=kopie.getSize()[0]-zaklad.getSize()[0]
size_y=kopie.getSize()[1]-zaklad.getSize()[1]
size_z=kopie.getSize()[2]-zaklad.getSize()[2]


for pocet_kopii in range(0,n_klonu):


   
   print pocet_kopii
   Obis= Blender.Object.New('Mesh')
   Obis.link(Mesh)
   Obis.setLocation(kopie.getLocation()[0]+posun_x*(pocet_kopii+1),kopie.getLocation()[1]+posun_y*(pocet_kopii+1),kopie.getLocation()[2]+posun_z*(pocet_kopii+1))
   Obis.setEuler(kopie.getEuler()[0]+rotace_x*(pocet_kopii+1),kopie.getEuler()[1]+rotace_y*(pocet_kopii+1), kopie.getEuler()[2]+rotace_z*(pocet_kopii+1))
   Obis.setSize(kopie.getSize()[0]+size_x*(pocet_kopii+1),kopie.getSize()[1]+size_y*(pocet_kopii+1),kopie.getSize()[2]+size_z*(pocet_kopii+1))
   scene.link(Obis)


Blender.Redraw()


Přílohy:
cube.jpg
cube.jpg [ 17.73 KiB | Zobrazeno 4551 krát ]
Poznámka: ukazka fce skriptu
schody.jpg
schody.jpg [ 47.52 KiB | Zobrazeno 4551 krát ]

Autor:  Ragnos [ pon srp 08, 2005 3:57 pm ]
Předmět příspěvku: 

tedka jsem zjistil ze ma nekde nejake mouchy...tak to jdu opravit

Autor:  slajfka [ pon srp 08, 2005 5:26 pm ]
Předmět příspěvku: 

No zkus do výpočtu zahrnout výšku schodnice (nebo i mezi nimi) a úhel natočení od středové osy schodiště. Sice to zautomatizuje výpočet, tak se nebudeš muset starat o správné natočení, skript ti to udělá automaticky. Také většinou točitá schodiště schodnice trapézového tvaru, u středu jsou užší, viz obr.

Přílohy:
Poznámka: schodnice
schod.png
schod.png [ 1.21 KiB | Zobrazeno 4533 krát ]

Autor:  Ragnos [ pon srp 08, 2005 5:35 pm ]
Předmět příspěvku: 

funguje to na principu porovnani zmen...myslim si ze to takhle staci

Autor:  AD [ stř srp 10, 2005 8:56 am ]
Předmět příspěvku: 

paráda... jak bude chvilka, budu to muset vyzkoušet.. :D

-> slajfka nešlo o script jen na schody, ale o libovolné pravidelné duplikování, jako jsou schody, ploty atd...proto je na uživateli, jak přesně si to nastaví...

teď mě napadlo, že kdyby jsi tam zahrnul ještě volitelnou náhodnou míru odchylky (0 - 1) jednotlivých os, tak by to už byl slušný nástroj...

Autor:  Ragnos [ stř srp 10, 2005 11:35 pm ]
Předmět příspěvku: 

mazec ten skript jde pouzit pro vyrobu retezu, zkopirovat jeden clanek retezu posunout otocit, oznaci obe veci a spustit skript....nebo pri tvorbe schodu, vzit prvni schod, zduplikovat posunout trosku nahoru na na stranu kde budou schody.... a je to....zajimavy je kdyz ten druhy schod trosku zvetsite...to mate pomalu schody jako v nejaky amfiteatru, nebo jak se tomu rika... :D

Autor:  jm [ čtv srp 11, 2005 10:27 am ]
Předmět příspěvku: 

supr.

dvno sem si rikal proc v blendru neni nastavitelna duplikace jako napr v maye.
v maye pri duplikovani muzes nastavit:
- pocet objektu kolik ti vytvori.
- samozrejme velikost x,y,z
- jejich nasledne zarovnani v osach x,y,z
- rotaci x,y,z

- taper, coz je pozvolne zvetsovani nebo naopak
- a to same v rotaci
- a vzdaleosti

je tam tabulka kterou si muzes ukazat a nastavit, nastavene hodnoty plati do ty doby dokud nezdas jinak.

jeste jedna funkce je tam na tohle dobra.
je tam shortcut kterej ti zopakuje posledni tah, tzn pokud naduplikujes napr objekt a posunes o kus jinam zmackes onen short cut tak to provede znova, a tak dal.

jm

Autor:  JRun [ pon srp 15, 2005 10:29 pm ]
Předmět příspěvku: 

prosim, jak se tento script použiji v blenderu.dík :)

Autor:  Ragnos [ pon srp 15, 2005 10:47 pm ]
Předmět příspěvku: 

JRun píše:
prosim, jak se tento script použiji v blenderu.dík :)

ulozis si ho do textaku a ten otevres v Blenderu v textovym editoru(SHIFT+F11)... a potom nastavis promennou n_klonu=30 na kolik potrebujes udelat kopii oznacis dva objekty. a das v editoru Alt+P pro spusteni skriptu...musis mit samozrejme nainstalovany Python..

Autor:  JRun [ úte srp 16, 2005 8:38 am ]
Předmět příspěvku: 

Jo dík, já sem moc zbrklej a místo alt-p sem furt mackal alt-t :oops:

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/