bdancer, вообще в идеале я хочу сделать приложение (аддон) для постройки зданий. Здание состоит из блоков (окна, двери, крыша). Каждый объект находится в отдельном файле. Аддон должен импортировать эти объекты (это уже сделан). И при помощи модификатора Array должен вставить нужное количество (это который ты сделал) и по каким координатам (x,y,z) нужно вставить эти объекты, чтобы получить стену. Нужно еще сделать такую функцию, который при нажатии на кнопку должен изменить угол на 90 градусов и начал вставить эти объекты, ну чтобы сделать 2 стену и так далее 3-ю и 4-ю.
Ошибок программа так то не дает.
Вот полный код приложения:
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()