Автор Тема: Модификатор Array. Скрипт  (Прочитано 2256 раз)

Оффлайн nig_rishat_n

  • Житель
Модификатор Array. Скрипт
« : 10 Март 2015, 16:36:12 »
Привет!
Нужно написать скрипт для работы с модификаторами. Это то, что сделал:
bl_info = {
    "name": "My Addon",
    "category": "3D View"
}
 
 
import bpy
 
 
class MyOperator(bpy.types.Operator):
 bl_idname = "ar1.append"
    bl_label = "Array"
 
    def execute(self, context):
        bpy.ops.object.modifier_add(type='ARRAY')
        bpy.data.objects["Cube"].modifiers["Array"].count=3
        return {'FINISHED'}
    class MyPanel(bpy.types.Panel):
    bl_label = "My Menu"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout

        layout.operator("ar1.append")
 
def register():
    bpy.utils.register_class(MyOperator)
    bpy.utils.register_class(MyPanel)
 
 
def unregister():
    bpy.utils.unregister_class(MyOperator)
    bpy.utils.unregister_class(MyPanel)
 
 
if __name__ == "__main__":
    register()

Так то работает все, на панели создает кнопку. А мне нужно чтобы он сделал не кнопку, а список.
И из этого списка выбирать количество (здесь в коде count=3).

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #1 : 10 Март 2015, 16:38:09 »
такой список

[вложение удалено Администратором]

bdancer

  • Гость

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #3 : 11 Март 2015, 17:47:57 »
bdancer, подробнее можно, а то я не совсем там понял.

bdancer

  • Гость

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #5 : 13 Март 2015, 11:31:27 »
благодарю.

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #6 : 16 Март 2015, 19:36:28 »
а можно сделать, чтобы объекты ставились по X, Y, и Z.

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #7 : 16 Март 2015, 21:00:06 »
и код применения.
пишу так: bpy.ops.object.modifier_apply(apply_as='DATA')
не применяет

bdancer

  • Гость
Re: Модификатор Array. Скрипт
« Ответ #8 : 19 Март 2015, 16:15:35 »
1. Ваще не понял что ты хочешь чтобы делалось...
2. Не применят? Ошибку пишет?
Ты можешь сразу давать больше инфы с картинками и ошибками?

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #9 : 19 Март 2015, 21:05:26 »
bdancer, вообще в идеале я хочу сделать приложение (аддон) для постройки зданий. Здание состоит из блоков (окна, двери, крыша). Каждый объект находится в отдельном файле. Аддон должен импортировать эти объекты (это уже сделан). И при помощи модификатора Array должен вставить нужное количество (это который ты сделал) и по каким координатам (x,y,z) нужно вставить эти объекты, чтобы получить стену. Нужно еще сделать такую функцию, который при нажатии на кнопку должен изменить угол на 90 градусов   и начал вставить эти объекты, ну чтобы сделать 2 стену и так далее 3-ю и 4-ю.
Ошибок программа так то не дает.
Вот полный код приложения:
Код: Python
bl_info = { 
    "name": "My Addon",
    "category": "3D View"
}
 
 
import bpy
 
 
class MyOperator1(bpy.types.Operator):
    bl_idname = "w1.append"
    bl_label = "Insert window 1"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w1.blend",
        directory="D:/Project_Blender/windows/w1.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}

class MyOperator2(bpy.types.Operator):
    bl_idname = "w2.append"
    bl_label = "Insert window 2"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w2.blend",
        directory="D:/Project_Blender/windows/w2.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator3(bpy.types.Operator):   
    bl_idname = "w3.append"
    bl_label = "Insert window 3"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w3.blend",
        directory="D:/Project_Blender/windows/w3.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
       
class MyOperator4(bpy.types.Operator):       
    bl_idname = "w4.append"
    bl_label = "Insert window 4"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w4.blend",
        directory="D:/Project_Blender/windows/w4.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator5(bpy.types.Operator):     
    bl_idname = "w5.append"
    bl_label = "Insert window 5"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w5.blend",
        directory="D:/Project_Blender/windows/w5.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator6(bpy.types.Operator):     
    bl_idname = "w6.append"
    bl_label = "Insert window 6"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="w6.blend",
        directory="D:/Project_Blender/windows/w6.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator7(bpy.types.Operator): 
    bl_idname = "d1.append"
    bl_label = "Insert door 1"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="d1.blend",
        directory="D:/Project_Blender/doors/d1.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
       
class MyOperator8(bpy.types.Operator):
    bl_idname = "d2.append"
    bl_label = "Insert door 2"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="d2.blend",
        directory="D:/Project_Blender/doors/d2.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator9(bpy.types.Operator):   
    bl_idname = "d3.append"
    bl_label = "Insert door 3"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="d3.blend",
        directory="D:/Project_Blender/doors/d3.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator10(bpy.types.Operator):
    bl_idname = "r1.append"
    bl_label = "Insert roof 1"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="r1.blend",
        directory="D:/Project_Blender/roofs/r1.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}

class MyOperator11(bpy.types.Operator):
    bl_idname = "r2.append"
    bl_label = "Insert roof 2"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="r2.blend",
        directory="D:/Project_Blender/roofs/r2.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator12(bpy.types.Operator):   
    bl_idname = "r3.append"
    bl_label = "Insert roof 3"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="r3.blend",
        directory="D:/Project_Blender/roofs/r3.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator13(bpy.types.Operator):   
    bl_idname = "f.append"
    bl_label = "Insert foundation"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="f.blend",
        directory="D:/Project_Blender/foundation/f.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator14(bpy.types.Operator):   
    bl_idname = "c.append"
    bl_label = "Insert angle"
 
    def execute(self, context):
        bpy.ops.wm.append(
        filepath="c.blend",
        directory="D:/Project_Blender/corner/c.blend/Object/",
        filename="Cube")     
        return {'FINISHED'}
   
class MyOperator15(bpy.types.Operator):
    bl_idname = "ar1.append"
    bl_label = "Change settings"
 
    count = bpy.props.IntProperty(
        name    = "Count",
        min     = 0,
        default = 2
    )
   
    oninsert = bpy.props.StringProperty(
        name    = "To insert",
        default = "x"
    )
 
    def invoke(self, context, event):
        wm = context.window_manager
        return wm.invoke_props_dialog(self)
 
    def execute(self, context):
        ob = context.active_object
        if not ob:
            return {'CANCELLED'}
 
        bpy.ops.object.modifier_add(type='ARRAY')
        ob.modifiers["Array"].count = self.count
       
        if self.oninsert == "x":
            bpy.data.objects["Cube"].modifiers["Array"].relative_offset_displace=(1,0,0)

        if self.oninsert == "y":
            bpy.data.objects["Cube"].modifiers["Array"].relative_offset_displace=(0,1,0)
             
        if self.oninsert == "z":
            bpy.data.objects["Cube"].modifiers["Array"].relative_offset_displace=(0,0,1)
   
        bpy.ops.object.modifier_apply(apply_as='DATA')
        return {'FINISHED'}


class MyPanel1(bpy.types.Panel):
    bl_label = "Foundation"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout
        layout.operator("f.append")
 
class MyPanel2(bpy.types.Panel):
    bl_label = "Angle"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout
        layout.operator("c.append")
   
class MyPanel3(bpy.types.Panel):
    bl_label = "Windows"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout       
        layout.operator("w1.append")
        layout.operator("w2.append")
        layout.operator("w3.append")
        layout.operator("w4.append")
        layout.operator("w5.append")
        layout.operator("w6.append")
       
class MyPanel4(bpy.types.Panel):
    bl_label = "Doors"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout
        layout.operator("d1.append")
        layout.operator("d2.append")
        layout.operator("d3.append")
       
class MyPanel5(bpy.types.Panel):
    bl_label = "Roofs"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout
        layout.operator("r1.append")
        layout.operator("r2.append")
        layout.operator("r3.append")
       
class MyPanel6(bpy.types.Panel):
    bl_label = "Parametrix"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
 
    def draw(self, context):
        layout = self.layout       
        layout.operator("ar1.append")
 
def register():
    bpy.utils.register_class(MyOperator1)
    bpy.utils.register_class(MyOperator2)
    bpy.utils.register_class(MyOperator3)
    bpy.utils.register_class(MyOperator4)
    bpy.utils.register_class(MyOperator5)
    bpy.utils.register_class(MyOperator6)
    bpy.utils.register_class(MyOperator7)
    bpy.utils.register_class(MyOperator8)
    bpy.utils.register_class(MyOperator9)
    bpy.utils.register_class(MyOperator10)
    bpy.utils.register_class(MyOperator11)
    bpy.utils.register_class(MyOperator12)
    bpy.utils.register_class(MyOperator13)
    bpy.utils.register_class(MyOperator14)
    bpy.utils.register_class(MyOperator15)
    bpy.utils.register_class(MyPanel1)
    bpy.utils.register_class(MyPanel2)
    bpy.utils.register_class(MyPanel3)
    bpy.utils.register_class(MyPanel4)
    bpy.utils.register_class(MyPanel5)
    bpy.utils.register_class(MyPanel6)
 
 
def unregister():
    bpy.utils.unregister_class(MyOperator1)
    bpy.utils.unregister_class(MyOperator2)
    bpy.utils.unregister_class(MyOperator3)
    bpy.utils.unregister_class(MyOperator4)
    bpy.utils.unregister_class(MyOperator5)
    bpy.utils.unregister_class(MyOperator6)
    bpy.utils.unregister_class(MyOperator7)
    bpy.utils.unregister_class(MyOperator8)
    bpy.utils.unregister_class(MyOperator9)
    bpy.utils.unregister_class(MyOperator10)
    bpy.utils.unregister_class(MyOperator11)
    bpy.utils.unregister_class(MyOperator12)
    bpy.utils.unregister_class(MyOperator13)
    bpy.utils.unregister_class(MyOperator14)
    bpy.utils.unregister_class(MyOperator15)
    bpy.utils.unregister_class(MyPanel1)
    bpy.utils.unregister_class(MyPanel2)
    bpy.utils.unregister_class(MyPanel3)
    bpy.utils.unregister_class(MyPanel4)
    bpy.utils.unregister_class(MyPanel5)
    bpy.utils.unregister_class(MyPanel6)
 
if __name__ == "__main__":
    register()
« Последнее редактирование: 19 Март 2015, 21:32:05 от sungreen »

bdancer

  • Гость
Re: Модификатор Array. Скрипт
« Ответ #10 : 19 Март 2015, 21:07:31 »
Holy shit! 15 одинаковых операторов с разными путями! Срочно читать любые книги по программированию!

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #11 : 19 Март 2015, 21:28:13 »
вот

[вложение удалено Администратором]

Оффлайн nig_rishat_n

  • Житель
Re: Модификатор Array. Скрипт
« Ответ #12 : 20 Март 2015, 13:51:21 »
хотя бы эту функцию

[вложение удалено Администратором]
« Последнее редактирование: 20 Март 2015, 14:52:02 от nig_rishat_n »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Модификатор Array. Скрипт
« Ответ #13 : 20 Март 2015, 17:15:39 »
... это у тебя курсовая или диплом? Напиши все задание и требования к нему ...
Для Кота

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 90
Автор: LEXA ANЭGROWND
blender.png
Скачано: 97
Автор: ipv2007
4.png
Скачано: 127
Автор: hiroyukiss
2.png
Скачано: 146
Автор: hiroyukiss

Скачано: 156
Автор: Dilifa12