Napisano 20 Lipiec 201410 l 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
Napisano 20 Lipiec 201410 l 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 201410 l przez alex3d
Napisano 20 Lipiec 201410 l 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
Napisano 21 Lipiec 201410 l Autor 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.
Napisano 21 Lipiec 201410 l 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. ;)
Napisano 21 Lipiec 201410 l Autor Kapuję... w każdym razie potestuję, ale na chwilę obecną skrypt działa prawidłowo na moich przykładach..
Napisano 21 Lipiec 201410 l Autor 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?
Napisano 22 Lipiec 201410 l 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
Napisano 22 Lipiec 201410 l Autor Panowie a da radę dopisać obsługę krzywych typu "Poly"? Na chwilę obecną skrypt działa tylko na Bezierach...
Napisano 22 Lipiec 201410 l 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
Napisano 22 Lipiec 201410 l Autor 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ł...
Napisano 23 Lipiec 201410 l jak na razie dodatek bez żadnych praw :P http://www.pasteall.org/53016/python @Monio: jak bardzo chcesz mogę Cię dopisać jako współautora :)
Napisano 23 Lipiec 201410 l Nie trzeba. Twój kod działa lepiej. ;) Dobra sprawa z tym 'try', nie korzystałem z tego wcześniej.
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto