Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - wefhy

Strony: 1
1
No, coś tam wyskrobałem ;)
Jedyny warunek dzałania to środek obiektu tam gdzie trzeba (w kostkach będzie w dobrym miejscu, jak nie to shift+ctrl+alt+c, origin to geometry)
import bpy
from mathutils import Vector
from random import randrange
scene = bpy.context.scene
context = bpy.context

number_of_objects = 25

def dupli(object):
    objdata = object.data.copy()
    new_obj = bpy.data.objects.new('script-generated-mesh', objdata)
    bpy.context.scene.objects.link(new_obj)
    new_obj.scale = object.scale.copy()
    # new_obj.rotation_euler = object.rotation_euler.copy()
    return new_obj


def main():
    to_dupli = []
    for object in context.selected_objects:
        to_dupli.append(object)
        object.select = False

    current_pos = Vector((0,0,0))
    number_selected = len(to_dupli)
    last_dim = 0

    if (number_selected <= 0):
        print("No objects selected!")
        return

    for x in range(number_of_objects):
        object = to_dupli[randrange(0, number_selected)]
        curr_dim = object.dimensions.x
        print(object)
        duplicate = dupli(object)
        current_pos = current_pos + Vector(((last_dim + curr_dim)/2,0,0))
        duplicate.location = current_pos
        duplicate.select = True
        last_dim = curr_dim
       
main()
Działanie jest proste, zaznaczasz obiekty, które mają tworzyć ciąg przełączasz się w wiodok scripting, tworzysz nowy dokument, wklejasz kod i klikasz alt+p (z myszą nad tekstem)
Powstanie 25 losowo zduplikowanych obiektów od (0,0,0) w górę osi x. Wszystkie zostaną zaznaczone, żeby łatwo je było przenieść, obrócić itp ;) Wrzucam też screena efektu ;)
Jak chcesz zmienić ilość obiektów, w kodzie jest od tego zmienna. Jeszcze kiedyś powstanie z tego dodatek z interfejsem.

EDIT: mały update, wersja uwzględniająca przemieszczone środki obiektów:
import bpy
from mathutils import Vector
from random import randrange
scene = bpy.context.scene
context = bpy.context

number_of_objects = 25

def dupli(object):
    objdata = object.data.copy()
    new_obj = bpy.data.objects.new('script-generated-mesh', objdata)
    bpy.context.scene.objects.link(new_obj)
    new_obj.scale = object.scale.copy()
    # new_obj.rotation_euler = object.rotation_euler.copy()
    return new_obj

def get_x_dim(object): #better to make function getting from center to left, from center to rigth. One of them to current, one of them to last ;)
    bounding_box = [x[:] for x in object.bound_box]
    max_x = max(bounding_box, key=lambda x: x[0])
    min_x = min(bounding_box, key=lambda x: x[0])
    return (max_x[0] - min_x[0]) * object.scale.x

def get_x_before(object):
    bounding_box = [x[:] for x in object.bound_box]
    min_x = min(bounding_box, key=lambda x: x[0])
    return - min_x[0] * object.scale.x

def get_x_after(object):
    bounding_box = [x[:] for x in object.bound_box]
    max_x = max(bounding_box, key=lambda x: x[0])
    return max_x[0] * object.scale.x

def main():
    to_dupli = []
    for object in context.selected_objects:
        to_dupli.append(object)
        object.select = False

    current_pos = Vector((0,0,0))
    number_selected = len(to_dupli)
    last_dim = 0

    if (number_selected <= 0):
        print("No objects selected!")
        return

    for x in range(number_of_objects):
        object = to_dupli[randrange(0, number_selected)]
        curr_dim = get_x_before(object) #object.dimensions.x
        print(object, ":", curr_dim)
        duplicate = dupli(object)
        current_pos = current_pos + Vector(((last_dim + curr_dim),0,0))
        duplicate.location = current_pos
        duplicate.select = True
        last_dim = get_x_after(object)
       
main()
Jedyne kiedy może nie działać, to obiekt przeskalowany tylko w jednej osi i obrócony.
Użytkownicy, którzy podziękowali za ten post: misztal

Strony: 1

* Wszystko dobre...

...co się dobrze kończy.
1998-2024
Dziękuję wszystkim, którzy pomagali tworzyć i rozwijać Blenderownię w tym czasie. Dziękuję użytkownikom za chęć korzystania z serwisu. Nawiększą satysfakcję mam z tego, że kilka karier zawodowych zaczęło się na tym forum. Oraz z tego, że Blender jest oprogramowaniem mainstreamowym.

Wasz były administrator
Mad Max

* Zaloguj




* Losowy obrazek