RT-Virus Napisano 18 Lipiec 2012 Napisano 18 Lipiec 2012 Witam. Próbuję stworzyć skrypt tworzący hook w każdym punkcie siatki Lattice. Próbowałem w ten sposób: for point in bpy.data.lattices['Lattice.001'].points: bpy.ops.object.hook_add_newob() jednak nic się nie dzieje po odpaleniu skryptu, nawet konsola nie pokazuje żadnego błędu
szczuro Napisano 18 Lipiec 2012 Napisano 18 Lipiec 2012 bpy.ops.object.hook_add_newob() dodaje hooka do zaznaczenia, a dla lattice point devovie chyba nie przewidzieli mozliwosci zaznaczenia :) vertex i curve mają :| wiec chyba nici ze skryptu ps. aby ci zadziałał (cos robił) musisz wejsc w edit mode lattice, ale to ci zrobi kilka empty w srodku
RT-Virus Napisano 19 Lipiec 2012 Autor Napisano 19 Lipiec 2012 Właśnie próbowałem robić to w editmode :P. Chce stworzyć hooki na każdym z puntków lattice i bardzo dobrze że zrobi obiekty empty o to właśnie mi chodzi. Jednak nie chce każdego punktu osobno zaznaczać i dodawać hooka, chce to skryptem załatwić jakoś :)
szczuro Napisano 19 Lipiec 2012 Napisano 19 Lipiec 2012 (edytowane) to jest kod który robi to co chesz ale na meshu import bpy # retrieve the active object bpy.ops.object.mode_set(mode = 'OBJECT') obj = bpy.context.active_object i = 0 for vert in obj.data.vertices: # deselect everything bpy.ops.object.mode_set(mode = 'EDIT') bpy.ops.mesh.select_all(action = 'DESELECT') # reselect the originally selected face bpy.ops.object.mode_set(mode = 'OBJECT') [b] obj.data.vertices[i].select = True[/b] i+=1 #adding hook bpy.ops.object.mode_set(mode = 'EDIT') bpy.ops.object.hook_add_newob() wg mnie, brak odpowiednika w latticepoint dla obj.data.vertices.select sprawia, uniemożliwia napisanie tego dla lattice tak wygladałoby to dla lattice gdyby latticePoint miał "select" import bpy # retrieve the active object bpy.ops.object.mode_set(mode = 'OBJECT') obj = bpy.context.active_object i = 0 for vert in obj.data.points: # deselect everything bpy.ops.object.mode_set(mode = 'EDIT') bpy.ops.lattice.select_all(action = 'DESELECT') # reselect the originally selected face bpy.ops.object.mode_set(mode = 'OBJECT') [b] obj.data.points[i].select = True # i+=1 #adding hook bpy.ops.object.mode_set(mode = 'EDIT') bpy.ops.object.hook_add_newob() Edytowane 19 Lipiec 2012 przez szczuro
RT-Virus Napisano 19 Lipiec 2012 Autor Napisano 19 Lipiec 2012 No tak to wygląda sensownie, jeszcze próbowałem z innej strony to zrobić, czyli najpierw by zrobić obiekty Empty w miejscach punktów Lattice i potem na tych punktach zrobić hooki do tych Empty, tyle że tu wcześniej mi wyskakuje problem, ale chyba będzie lepiej jak pokażę cały skrypt i jego idee: import bpy plajtl = bpy.context.active_object.location plajt = bpy.context.active_object print(plajtl) print(plajt) plajtm = plajt.name plajtd = bpy.data.objects[plajtm].dimensions plajtr = bpy.data.objects[plajtm].rotation_euler print(plajtd) bpy.ops.object.add(type='LATTICE', location=(plajtl)) lat = bpy.context.active_object lat.name = lat.name + "_" + plajtm latm = lat.name latmid = bpy.context.active_object.data.name bpy.data.objects[latm].scale = plajtd bpy.data.objects[latm].rotation_euler = plajtr print(bpy.data.objects[latm].scale) plajtdx = bpy.data.objects[plajtm].dimensions.x * 2.8 plajtdy = bpy.data.objects[plajtm].dimensions.y * 2.8 print(plajtdx) bpy.data.lattices[latmid].points_u = plajtdx print(bpy.data.lattices[latmid].points_u) bpy.data.lattices[latmid].points_v = plajtdy print(bpy.data.lattices[latmid].points_v) for point in bpy.data.lattices[latmid].points: poi = point.co + bpy.data.objects[latm].location bpy.ops.object.add(location=(poi)) A więc chodzi o to że mamy zaznaczony Plane, po uruchomieniu skryptu tworzy w jego miejscu Lattice, którego przeskalowuje do wymiarów Plane. plajtdx = bpy.data.objects[plajtm].dimensions.x * 2.8 plajtdy = bpy.data.objects[plajtm].dimensions.y * 2.8 print(plajtdx) bpy.data.lattices[latmid].points_u = plajtdx print(bpy.data.lattices[latmid].points_u) bpy.data.lattices[latmid].points_v = plajtdy print(bpy.data.lattices[latmid].points_v) ten fragment tworzy podziały Lattice ze względu na wymiary Plane. for point in bpy.data.lattices[latmid].points: poi = point.co + bpy.data.objects[latm].location bpy.ops.object.add(location=(poi)) I na końcu tworzenie obiektów empty, które niestety wstawiają się w miejsce punktów lattice ale przed przeskalowaniem :/
szczuro Napisano 19 Lipiec 2012 Napisano 19 Lipiec 2012 możesz wstawić w tagi ? bo cieżko sie to czyta
szczuro Napisano 19 Lipiec 2012 Napisano 19 Lipiec 2012 siedziałem nad tym troche, (poczysciłem treoche, wg mnie robisz za duzo zmiennych) ale dalej nie jest idealnie, bo nie bierze pod uwage obrotu i nie chce mi sie myslec jak to zrobić :) import bpy obj = bpy.context.active_object bpy.ops.object.add(type='LATTICE', location=obj.location) lat = bpy.context.active_object lat.name +="_" + obj.name lat.scale = obj.dimensions lat.rotation_euler = obj.rotation_euler lat.data.points_u = obj.dimensions.x * 2.8 lat.data.points_v = obj.dimensions.y * 2.8 for point in lat.data.points: [b] poi = (point.co*lat.matrix_world+lat.location)[/b] //głowna zmiana to *lat.matrix_world bpy.ops.object.add(location=(poi))
alexx600 Napisano 5 Sierpień 2012 Napisano 5 Sierpień 2012 Ja osobiście bym to zrobił tak. Jeżeli nie mogę użyć lattice to stworzyłbym Cube i odpowiednio dodał edge loops. Następnie przesunąłbym Cuba nad obiekt który ma być edytowany. W obiekcie tym użyłbym modyfikatora MeshDeform. Ręcznie wskazałbym obiekt itp. Zaznaczyłbym Cube i użył skryptu który szczuro pokazał na samym początku. Nie wiem czy takie rozwiązanie Cie satysfakcjonuje. Nie wiem czy takie rozwiązanie Ci się przyda ale wydaje mi się ,że kombinując stracisz więcej czasu niż rzeczywiście jest to potrzebne. Sprawdzałem na Cubie i Monkey i działa.
RT-Virus Napisano 8 Sierpień 2012 Autor Napisano 8 Sierpień 2012 faktycznie na MeshDeform jest to o wiele prostsze, ale konkretnie potrzebuje lattice by modyfikować za pomocom jego plane więc wszystko na płaskich powierzchniach by się odbywało, z MeshDeform muszę użyć obiektu który nie będzie płaski, więc dojdą mi dodatkowe punty vertex, które już stają się problematyczne
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się