Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'add_advanced_objects_menu/__init__.py')
-rw-r--r--add_advanced_objects_menu/__init__.py573
1 files changed, 573 insertions, 0 deletions
diff --git a/add_advanced_objects_menu/__init__.py b/add_advanced_objects_menu/__init__.py
new file mode 100644
index 00000000..b1d86454
--- /dev/null
+++ b/add_advanced_objects_menu/__init__.py
@@ -0,0 +1,573 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# Contributed to by:
+# meta-androcto, Bill Currie, Jorge Hernandez - Melenedez Jacob Morris, Oscurart #
+# Rebellion, Antonis Karvelas, Eleanor Howick, lijenstina, Daniel Schalla, Domlysz #
+# Unnikrishnan(kodemax), Florian Meyer, Omar ahmed, Brian Hinton (Nichod), liero #
+# Atom, Dannyboy, Mano-Wii, Kursad Karatas, teldredge, Phil Cote #
+
+bl_info = {
+ "name": "Add Advanced Objects",
+ "author": "Meta Androcto,",
+ "version": (0, 1, 3),
+ "blender": (2, 78, 0),
+ "location": "View3D > Add ",
+ "description": "Add Object & Camera extras",
+ "warning": "",
+ "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6"
+ "/Py/Scripts/Object/Add_Advanced",
+ "category": "Object"}
+
+if "bpy" in locals():
+ import importlib
+
+ importlib.reload(add_light_template)
+ importlib.reload(scene_objects_bi)
+ importlib.reload(scene_objects_cycles)
+ importlib.reload(scene_texture_render)
+ importlib.reload(trilighting)
+ importlib.reload(pixelate_3d)
+ importlib.reload(object_add_chain)
+ importlib.reload(circle_array)
+ importlib.reload(copy2)
+ importlib.reload(make_struts)
+ importlib.reload(random_box_structure)
+ importlib.reload(cubester)
+ importlib.reload(rope_alpha)
+ importlib.reload(add_mesh_aggregate)
+ importlib.reload(arrange_on_curve)
+ importlib.reload(mesh_easylattice)
+
+
+else:
+ from . import add_light_template
+ from . import scene_objects_bi
+ from . import scene_objects_cycles
+ from . import scene_texture_render
+ from . import trilighting
+ from . import pixelate_3d
+ from . import object_add_chain
+ from . import circle_array
+ from . import copy2
+ from . import make_struts
+ from . import random_box_structure
+ from . import cubester
+ from . import rope_alpha
+ from . import add_mesh_aggregate
+ from . import arrange_on_curve
+ from . import mesh_easylattice
+
+
+import bpy
+from bpy.types import (
+ Menu,
+ AddonPreferences,
+ PropertyGroup,
+ )
+from bpy.props import (
+ BoolProperty,
+ BoolVectorProperty,
+ EnumProperty,
+ FloatProperty,
+ FloatVectorProperty,
+ IntProperty,
+ StringProperty,
+ PointerProperty,
+ )
+
+
+# Define the "Scenes" menu
+class INFO_MT_scene_elements_add(Menu):
+ bl_idname = "INFO_MT_scene_elements"
+ bl_label = "Test Scenes"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("bi.add_scene",
+ text="Scene_Objects_BI")
+ layout.operator("objects_cycles.add_scene",
+ text="Scene_Objects_Cycles")
+ layout.operator("objects_texture.add_scene",
+ text="Scene_Textures_Cycles")
+
+
+# Define the "Lights" menu
+class INFO_MT_mesh_lamps_add(Menu):
+ bl_idname = "INFO_MT_scene_lamps"
+ bl_label = "Lighting Sets"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("object.add_light_template",
+ text="Add Light Template")
+ layout.operator("object.trilighting",
+ text="Add Tri Lighting")
+
+
+# Define the "Chains" menu
+class INFO_MT_mesh_chain_add(Menu):
+ bl_idname = "INFO_MT_mesh_chain"
+ bl_label = "Chains"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("mesh.primitive_chain_add", icon="LINKED")
+ layout.operator("mesh.primitive_oscurart_chain_add", icon="LINKED")
+
+
+# Define the "Array" Menu
+class INFO_MT_array_mods_add(Menu):
+ bl_idname = "INFO_MT_array_mods"
+ bl_label = "Array Mods"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ layout.menu("INFO_MT_mesh_chain", icon="LINKED")
+
+ layout.operator("objects.circle_array_operator",
+ text="Circle Array", icon="MOD_ARRAY")
+ layout.operator("object.agregate_mesh",
+ text="Aggregate Mesh", icon="MOD_ARRAY")
+ layout.operator("mesh.copy2",
+ text="Copy To Vert/Edge", icon="MOD_ARRAY")
+
+
+# Define the "Blocks" Menu
+class INFO_MT_quick_blocks_add(Menu):
+ bl_idname = "INFO_MT_quick_tools"
+ bl_label = "Block Tools"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ layout.operator("object.pixelate", icon="MESH_GRID")
+ layout.operator("mesh.generate_struts",
+ text="Struts", icon="GRID")
+ layout.operator("object.make_structure",
+ text="Random Boxes", icon="SEQ_SEQUENCER")
+ layout.operator("object.easy_lattice",
+ text="Easy Lattice", icon="MOD_LATTICE")
+
+
+# Define the "Phsysics Tools" Menu
+class INFO_MT_Physics_tools_add(Menu):
+ bl_idname = "INFO_MT_physics_tools"
+ bl_label = "Physics Tools"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("object.drop_on_active",
+ text="Drop To Ground", icon="SORTSIZE")
+ layout.operator("ball.rope",
+ text="Wrecking Ball", icon='PHYSICS')
+ layout.operator("clot.rope",
+ text="Cloth Rope", icon='PHYSICS')
+
+
+# Define "Extras" menu
+def menu(self, context):
+ layout = self.layout
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ self.layout.separator()
+ self.layout.menu("INFO_MT_scene_elements", icon="SCENE_DATA")
+ self.layout.menu("INFO_MT_scene_lamps", icon="LAMP_SPOT")
+ self.layout.separator()
+ self.layout.menu("INFO_MT_array_mods", icon="MOD_ARRAY")
+ self.layout.menu("INFO_MT_quick_tools", icon="MOD_BUILD")
+ self.layout.menu("INFO_MT_physics_tools", icon="PHYSICS")
+
+
+# Addons Preferences
+class AdvancedObjPreferences(AddonPreferences):
+ bl_idname = __name__
+
+ show_menu_list = BoolProperty(
+ name="Menu List",
+ description="Show/Hide the Add Menu items",
+ default=False
+ )
+ show_panel_list = BoolProperty(
+ name="Panels List",
+ description="Show/Hide the Panel items",
+ default=False
+ )
+
+ def draw(self, context):
+ layout = self.layout
+
+ icon_1 = "TRIA_RIGHT" if not self.show_menu_list else "TRIA_DOWN"
+ box = layout.box()
+ box.prop(self, "show_menu_list", emboss=False, icon=icon_1)
+
+ if self.show_menu_list:
+ box.label(text="Items located in the Add Menu (default shortcut Ctrl + A):",
+ icon="LAYER_USED")
+ box.label(text="Test Scenes:", icon="LAYER_ACTIVE")
+ box.label(text="Scene Objects BI, Scene Objects Cycles, Scene Textures Cycles",
+ icon="LAYER_USED")
+ box.label(text="Lighting Sets:", icon="LAYER_ACTIVE")
+ box.label(text="Add Light Template, Add Tri Lighting", icon="LAYER_USED")
+ box.label(text="Array Mods:", icon="LAYER_ACTIVE")
+ box.label(text="Circle Array, Chains submenu, Copy Vert/Edge and Aggregate Mesh",
+ icon="LAYER_ACTIVE")
+ box.label(text="Chains Submenu - Add Chain, Chain to Bones",
+ icon="LAYER_ACTIVE")
+ box.label(text="Block Tools:", icon="LAYER_ACTIVE")
+ box.label(text="Pixelate Object, Struts, Random Boxes, Easy Lattice",
+ icon="LAYER_USED")
+ box.label(text="Physics Tools:", icon="LAYER_ACTIVE")
+ box.label(text="Drop to Ground, Wrecking Ball and Cloth Rope", icon="LAYER_USED")
+
+
+ icon_2 = "TRIA_RIGHT" if not self.show_panel_list else "TRIA_DOWN"
+ box = layout.box()
+ box.prop(self, "show_panel_list", emboss=False, icon=icon_2)
+
+ if self.show_panel_list:
+ box.label(text="Panels located in 3D View Tools Region > Create",
+ icon="LAYER_ACTIVE")
+ box.label(text="CubeSter", icon="LAYER_USED")
+
+
+
+# Cubester update functions
+def find_audio_length(self, context):
+ adv_obj = context.scene.advanced_objects
+ audio_file = adv_obj.cubester_audio_path
+ length = 0
+
+ if audio_file != "":
+ # confirm that strip hasn't been loaded yet
+ get_sequence = getattr(context.scene.sequence_editor, "sequences_all", [])
+ for strip in get_sequence:
+ if type(strip) == bpy.types.SoundSequence and strip.sound.filepath == audio_file:
+ length = strip.frame_final_duration
+
+ if length == 0:
+ area = context.area
+ old_type = area.type
+ area.type = "SEQUENCE_EDITOR"
+ try:
+ bpy.ops.sequencer.sound_strip_add(filepath=audio_file)
+ adv_obj.cubester_check_audio = True
+ except Exception as e:
+ print("\n[Add Advanced Objects]\n Function: "
+ "find_audio_length\n {}\n".format(e))
+ adv_obj.cubester_check_audio = False
+ pass
+
+ area.type = old_type
+
+ # find audio file
+ for strip in context.scene.sequence_editor.sequences_all:
+ if type(strip) == bpy.types.SoundSequence and strip.sound.filepath == audio_file:
+ adv_obj.cubester_check_audio = True
+ length = strip.frame_final_duration
+
+ adv_obj.cubester_audio_file_length = length
+
+
+# load image if possible
+def adjust_selected_image(self, context):
+ scene = context.scene.advanced_objects
+ try:
+ image = bpy.data.images.load(scene.cubester_load_image)
+ scene.cubester_image = image.name
+ except Exception as e:
+ print("\n[Add Advanced Objects]\n Function: "
+ "adjust_selected_image\n {}\n".format(e))
+
+
+# load color image if possible
+def adjust_selected_color_image(self, context):
+ scene = context.scene.advanced_objects
+ try:
+ image = bpy.data.images.load(scene.cubester_load_color_image)
+ scene.cubester_color_image = image.name
+ except Exception as e:
+ print("\nAdd Advanced Objects]\n Function: "
+ "adjust_selected_color_image\n {}\n".format(e))
+
+
+class AdvancedObjProperties(PropertyGroup):
+ # cubester
+ # main properties
+ cubester_check_audio = BoolProperty(
+ name="",
+ default=False
+ )
+ cubester_audio_image = EnumProperty(
+ name="Input Type",
+ items=(("image", "Image",
+ "Use an Image as input for generating Geometry", "IMAGE_COL", 0),
+ ("audio", "Audio",
+ "Use a Sound Strip as input for generating Geometry", "FILE_SOUND", 1))
+ )
+ cubester_audio_file_length = IntProperty(
+ default=0
+ )
+ # audio
+ cubester_audio_path = StringProperty(
+ default="",
+ name="Audio File",
+ subtype="FILE_PATH",
+ update=find_audio_length
+ )
+ cubester_audio_min_freq = IntProperty(
+ name="Minimum Frequency",
+ min=20, max=100000,
+ default=20
+ )
+ cubester_audio_max_freq = IntProperty(
+ name="Maximum Frequency",
+ min=21, max=999999,
+ default=5000
+ )
+ cubester_audio_offset_type = EnumProperty(
+ name="Offset Type",
+ items=(("freq", "Frequency Offset", ""),
+ ("frame", "Frame Offset", "")),
+ description="Type of offset per row of mesh"
+ )
+ cubester_audio_frame_offset = IntProperty(
+ name="Frame Offset",
+ min=0, max=10,
+ default=2
+ )
+ cubester_audio_block_layout = EnumProperty(
+ name="Block Layout",
+ items=(("rectangle", "Rectangular", ""),
+ ("radial", "Radial", ""))
+ )
+ cubester_audio_width_blocks = IntProperty(
+ name="Width Block Count",
+ min=1, max=10000,
+ default=5
+ )
+ cubester_audio_length_blocks = IntProperty(
+ name="Length Block Count",
+ min=1, max=10000,
+ default=50
+ )
+ # image
+ cubester_load_type = EnumProperty(
+ name="Image Input Type",
+ items=(("single", "Single Image", ""),
+ ("multiple", "Image Sequence", ""))
+ )
+ cubester_image = StringProperty(
+ default="",
+ name=""
+ )
+ cubester_load_image = StringProperty(
+ default="",
+ name="Load Image",
+ subtype="FILE_PATH",
+ update=adjust_selected_image
+ )
+ cubester_skip_images = IntProperty(
+ name="Image Step",
+ min=1, max=30,
+ default=1,
+ description="Step from image to image by this number"
+ )
+ cubester_max_images = IntProperty(
+ name="Max Number Of Images",
+ min=2, max=1000,
+ default=10,
+ description="Maximum number of images to be used"
+ )
+ cubester_frame_step = IntProperty(
+ name="Frame Step Size",
+ min=1, max=10,
+ default=4,
+ description="The number of frames each picture is used"
+ )
+ cubester_skip_pixels = IntProperty(
+ name="Skip # Pixels",
+ min=0, max=256,
+ default=64,
+ description="Skip this number of pixels before placing the next"
+ )
+ cubester_mesh_style = EnumProperty(
+ name="Mesh Type",
+ items=(("blocks", "Blocks", ""),
+ ("plane", "Plane", "")),
+ description="Compose mesh of multiple blocks or of a single plane"
+ )
+ cubester_block_style = EnumProperty(
+ name="Block Style",
+ items=(("size", "Vary Size", ""),
+ ("position", "Vary Position", "")),
+ description="Vary Z-size of block, or vary Z-position"
+ )
+ cubester_height_scale = FloatProperty(
+ name="Height Scale",
+ subtype="DISTANCE",
+ min=0.1, max=2,
+ default=0.2
+ )
+ cubester_invert = BoolProperty(
+ name="Invert Height",
+ default=False
+ )
+ # general adjustments
+ cubester_size_per_hundred_pixels = FloatProperty(
+ name="Size Per 100 Blocks/Points",
+ subtype="DISTANCE",
+ min=0.001, max=5,
+ default=1
+ )
+ # material based stuff
+ cubester_materials = EnumProperty(
+ name="Material",
+ items=(("vertex", "Vertex Colors", ""),
+ ("image", "Image", "")),
+ description="Color with vertex colors, or uv unwrap and use an image"
+ )
+ cubester_use_image_color = BoolProperty(
+ name="Use Original Image Colors'?",
+ default=True,
+ description="Use original image colors, or replace with an another one"
+ )
+ cubester_color_image = StringProperty(
+ default="",
+ name=""
+ )
+ cubester_load_color_image = StringProperty(
+ default="",
+ name="Load Color Image",
+ subtype="FILE_PATH",
+ update=adjust_selected_color_image
+ )
+ cubester_vertex_colors = {}
+ # advanced
+ cubester_advanced = BoolProperty(
+ name="Advanced Options",
+ default=False
+ )
+ cubester_random_weights = BoolProperty(
+ name="Random Weights",
+ default=False
+ )
+ cubester_weight_r = FloatProperty(
+ name="Red",
+ subtype="FACTOR",
+ min=0.01, max=1.0,
+ default=0.25
+ )
+ cubester_weight_g = FloatProperty(
+ name="Green",
+ subtype="FACTOR",
+ min=0.01, max=1.0,
+ default=0.25
+ )
+ cubester_weight_b = FloatProperty(
+ name="Blue",
+ subtype="FACTOR",
+ min=0.01, max=1.0,
+ default=0.25
+ )
+ cubester_weight_a = FloatProperty(
+ name="Alpha",
+ subtype="FACTOR",
+ min=0.01, max=1.0,
+ default=0.25
+ )
+
+ # pixelate_3d properties
+ pixelate_3d_size = FloatProperty(
+ name="Size",
+ min=.05, max=5,
+ default=.25,
+ description="Size of the cube / grid"
+ )
+ pixelate_3d_gap = IntProperty(
+ name="Gap",
+ min=0, max=90,
+ default=10,
+ subtype='PERCENTAGE',
+ description="Separation - percent of size"
+ )
+ pixelate_3d_smooth = FloatProperty(
+ name="Smooth",
+ min=0, max=1,
+ default=.0,
+ description="Smooth factor when subdividing mesh"
+ )
+ # arrange_on_curve
+ arrange_c_use_selected = BoolProperty(
+ name="Use Selected",
+ description="Use the selected objects to duplicate",
+ default=True,
+ )
+ arrange_c_obj_arranjar = StringProperty(
+ name=""
+ )
+ arrange_c_select_type = EnumProperty(
+ name="Type",
+ description="Select object or group",
+ items=[
+ ('O', "Object", "Make duplicates of a specific object"),
+ ('G', "Group", "Make duplicates of the objects in a group"),
+ ],
+ default='O',
+ )
+
+
+def register():
+ bpy.utils.register_module(__name__)
+
+ bpy.types.Scene.advanced_objects = PointerProperty(
+ type=AdvancedObjProperties
+ )
+
+ # Add "Extras" menu to the "Add" menu
+ bpy.types.INFO_MT_add.append(menu)
+ try:
+ bpy.types.VIEW3D_MT_AddMenu.append(menu)
+ except:
+ pass
+
+
+def unregister():
+ # Remove "Extras" menu from the "Add" menu.
+ bpy.types.INFO_MT_add.remove(menu)
+ try:
+ bpy.types.VIEW3D_MT_AddMenu.remove(menu)
+ except:
+ pass
+
+ bpy.utils.unregister_module(__name__)
+ del bpy.types.Scene.advanced_objects
+
+ # cleanup Easy Lattice Scene Property if it was created
+ if hasattr(bpy.types.Scene, "activelatticeobject"):
+ del bpy.types.Scene.activelatticeobject
+
+
+if __name__ == "__main__":
+ register()