Nanoman Napisano 20 Lipiec 2014 Napisano 20 Lipiec 2014 Witam. Znacie może jakiś skrypt pozwalający rozłączyć automatycznie wszystkie krzywe metodą "By loose parts"? Mam do zaimportowania złożone wektorowe obiekty jako *.svg, którym muszę zwiększyć wartość parametru "Extrude". Niestety w przypadku krzywych polecenie "Copy to selscted" jest nieaktywne więc trzeba powtarzać czynność na każdej krzywej oddzielnie albo wszystkie je połączyć, dostosować "Extrude" a następnie rozłączać jedna po drugiej, lecz to bardzo czasochłonne przy większej ilości krzywych. Z góry dzięki
alex3d Napisano 20 Lipiec 2014 Napisano 20 Lipiec 2014 (edytowane) Trochę od drugiej strony niż pytasz, ale jak chcesz masowo zmienić wartość "extrude" dla krzywych to spróbuj takiego skryptu: import bpy obs = bpy.context.selected_objects for ob in obs: if ob.type == 'CURVE': curve = ob.data curve.extrude = 1 Swoją drogą wyciąganie z svg to potężne narzędzie w wielu zastosowaniach. W kodzie zamiast "1" wpisujesz żądaną wartość. Edytowane 20 Lipiec 2014 przez alex3d
Monio Napisano 20 Lipiec 2014 Napisano 20 Lipiec 2014 Jakbyś dalej potrzebował to tutaj lamerski skrypt rozdzielający krzywe. import bpy obj = bpy.context.active_object splines = obj.data.splines # Count splines loop spl_cnt = -1 for x in splines: spl_cnt = spl_cnt + 1 # Split last spline loop for x in splines: if spl_cnt == 0: pass else: bpy.ops.object.mode_set(mode='EDIT') bpy.ops.curve.select_all(action='DESELECT') splines[spl_cnt].bezier_points[0].select_control_point = True bpy.ops.curve.select_linked() bpy.ops.curve.separate() spl_cnt = spl_cnt - 1
Nanoman Napisano 21 Lipiec 2014 Autor Napisano 21 Lipiec 2014 O i super dzięki chłopaki :) Monio mógłbyś dopisać do swojego skryptu operator itd i wydać jako addon, bo na blender artists tez pytali to takie coś a z tego co pamiętam to nie padło jednoznaczne rozwiązanie. alex3d twoja opcja też się przyda - jeśli uda mi się zagnieździć gdzieś ten kawałeczek kodu z możliwością zmiany wartości.
Monio Napisano 21 Lipiec 2014 Napisano 21 Lipiec 2014 Nanoman- Blender robi coś strasznego podczas przenumerowywania splineów gdy jakiś usuniesz czy odseparujesz. W moim skrypcie usuwam te ostatnie bo gdy wycinałem ten pierwszy (id 0) robił jakieś bzdury na przykład działał na co drugim spline, jakby update nie robił się z kazdym operatorem tylko co drugie wywołanie w petli. Trzeba było odpalić skrypt kilka razy do skutku żeby wykonał swoją robotę. Jednak przy usuwaniu ostatniego tez nie jest tak pięknie, zdarzyło mi się że pominął jakiegoś splinea. Wiem jak zrobić żeby ten skrypt działał zawsze poprawnie i tylko na obiektach typu curve i miał fikuśne UI ale napisanie go zajęłoby mi kilka razy więcej czasu którym teraz nie dysponuje. Może kiedyś, nie w przed październikiem. ;)
Nanoman Napisano 21 Lipiec 2014 Autor Napisano 21 Lipiec 2014 Kapuję... w każdym razie potestuję, ale na chwilę obecną skrypt działa prawidłowo na moich przykładach..
Nanoman Napisano 21 Lipiec 2014 Autor Napisano 21 Lipiec 2014 Nanoman- Blender robi coś strasznego podczas przenumerowywania splineów gdy jakiś usuniesz czy odseparujesz. W moim skrypcie usuwam te ostatnie bo gdy wycinałem ten pierwszy (id 0) robił jakieś bzdury na przykład działał na co drugim spline, jakby update nie robił się z kazdym operatorem tylko co drugie wywołanie w petli... Wciąż za mało znam pythona ale może w momencie odseparowywania pierwszego splajnu, ten następny w kolejce staje się pierwszy w grupie i przyjmuje w tym momencie id 0?
szczuro Napisano 22 Lipiec 2014 Napisano 22 Lipiec 2014 Monio: Nanoman chyba ma racje powinieneś chyba użyć while, chyba że nie rozumiem problemu możesz sprawdzić na tym import bpy obj = bpy.context.active_object splines = obj.data.splines lastmode = bpy.context.mode bpy.ops.object.mode_set(mode='EDIT') bpy.ops.curve.select_all(action='DESELECT') while (len(splines)>1): splines[0].bezier_points[0].select_control_point = True bpy.ops.curve.select_linked() bpy.ops.curve.separate() try: bpy.ops.object.mode_set(mode=lastmode) except: pass
Nanoman Napisano 22 Lipiec 2014 Autor Napisano 22 Lipiec 2014 Panowie a da radę dopisać obsługę krzywych typu "Poly"? Na chwilę obecną skrypt działa tylko na Bezierach...
szczuro Napisano 22 Lipiec 2014 Napisano 22 Lipiec 2014 takie ? import bpy obj = bpy.context.active_object splines = obj.data.splines lastmode = bpy.context.mode bpy.ops.object.mode_set(mode='EDIT') bpy.ops.curve.select_all(action='DESELECT') while (len(splines)>1): spline = splines[0] if (spline.bezier_points): spline.bezier_points[0].select_control_point = True if (spline.points): spline.points[0].select = True bpy.ops.curve.select_linked() bpy.ops.curve.separate() try: bpy.ops.object.mode_set(mode=lastmode) except: pass
Nanoman Napisano 22 Lipiec 2014 Autor Napisano 22 Lipiec 2014 Tak proszę Pana takie :):) Teraz działa na wszystkich rodzajach krzywych. No to szczuro ponawiam propozycję do opublikowania jako pełnoprawnego dodatku, bo na pewno wielu ludziskom się przyda... Podziękował...
szczuro Napisano 23 Lipiec 2014 Napisano 23 Lipiec 2014 jak na razie dodatek bez żadnych praw :P http://www.pasteall.org/53016/python @Monio: jak bardzo chcesz mogę Cię dopisać jako współautora :)
Monio Napisano 23 Lipiec 2014 Napisano 23 Lipiec 2014 Nie trzeba. Twój kod działa lepiej. ;) Dobra sprawa z tym 'try', nie korzystałem z tego wcześniej.
szczuro Napisano 28 Lipiec 2014 Napisano 28 Lipiec 2014 jak zrobie na swojej stronie dział ze skryptami to wrzuce na BA;)
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ę