Browse Source

Add operator for copying modifiers to many objects.

pull/170/head
Adam Johnson 5 years ago
parent
commit
43d7ed7cc9
Signed by: Hoikas
GPG Key ID: 0B6515D6FF6F271E
  1. 103
      korman/operators/op_modifier.py
  2. 2
      korman/ui/ui_modifiers.py

103
korman/operators/op_modifier.py

@ -72,46 +72,7 @@ class ModifierAddOperator(ModifierOperator, bpy.types.Operator):
return {"FINISHED"}
class ModifierCopyOperator(ModifierOperator, bpy.types.Operator):
bl_idname = "object.plasma_modifier_copy"
bl_label = "Copy Modifiers"
bl_description = "Copy Modifiers from an Object"
active_modifier = IntProperty(name="Modifier Display Order",
default=-1,
options={"HIDDEN"})
def execute(self, context):
pl_scene = context.scene.plasma_scene
pl_scene.modifier_copy_object = context.object
pl_mod = self._get_modifier(context)
if pl_mod is None:
pl_scene.property_unset("modifier_copy_id")
else:
pl_scene.modifier_copy_id = pl_mod.pl_id
return {"FINISHED"}
class ModifierPasteOperator(ModifierOperator, bpy.types.Operator):
bl_idname = "object.plasma_modifier_paste"
bl_label = "Paste Modifier"
bl_description = "Paste Modifier(s) to another Object"
def execute(self, context):
pl_scene = context.scene.plasma_scene
if not pl_scene.is_property_set("modifier_copy_object"):
raise RuntimeError()
dst_object, src_object = context.object, pl_scene.modifier_copy_object
pl_mod_id = pl_scene.modifier_copy_id
if pl_mod_id:
self._paste_modifier(src_object, dst_object, pl_mod_id)
else:
for mod_cls in modifiers.PlasmaModifierProperties.__subclasses__():
self._paste_modifier(src_object, dst_object, mod_cls.pl_id)
return {"FINISHED"}
class ModifierClipboard:
def _paste_modifier(self, src_object, dst_object, pl_mod_id):
src_mod = getattr(src_object.plasma_modifiers, pl_mod_id)
dst_mod = getattr(dst_object.plasma_modifiers, pl_mod_id)
@ -155,6 +116,68 @@ class ModifierPasteOperator(ModifierOperator, bpy.types.Operator):
except AttributeError:
pass
class ModifierCopyOperator(ModifierOperator, bpy.types.Operator):
bl_idname = "object.plasma_modifier_copy"
bl_label = "Copy Modifiers"
bl_description = "Copy Modifiers from an Object"
active_modifier = IntProperty(name="Modifier Display Order",
default=-1,
options={"HIDDEN"})
def execute(self, context):
pl_scene = context.scene.plasma_scene
pl_scene.modifier_copy_object = context.object
pl_mod = self._get_modifier(context)
if pl_mod is None:
pl_scene.property_unset("modifier_copy_id")
else:
pl_scene.modifier_copy_id = pl_mod.pl_id
return {"FINISHED"}
class ModifierCopyToOperator(ModifierClipboard, ModifierOperator, bpy.types.Operator):
bl_idname = "object.plasma_modifier_copy_to_selection"
bl_label = "Copy Modifiers to Selection"
bl_description = "Copy Modifiers from the active Object to all selected Objects"
def _iter_objects(self, context):
for i in context.selected_objects:
if i != context.active_object:
yield i
def execute(self, context):
if not any(self._iter_objects(context)):
self.report({"WARNING"}, "No objects are selected to copy to.")
return {"CANCELLED"}
for i in self._iter_objects(context):
for mod_cls in modifiers.PlasmaModifierProperties.__subclasses__():
self._paste_modifier(context.active_object, i, mod_cls.pl_id)
self.report({"INFO"}, "Copied Plasma Modifers to selection.")
return {"FINISHED"}
class ModifierPasteOperator(ModifierClipboard, ModifierOperator, bpy.types.Operator):
bl_idname = "object.plasma_modifier_paste"
bl_label = "Paste Modifier"
bl_description = "Paste Modifier(s) to another Object"
def execute(self, context):
pl_scene = context.scene.plasma_scene
if not pl_scene.is_property_set("modifier_copy_object"):
raise RuntimeError()
dst_object, src_object = context.object, pl_scene.modifier_copy_object
pl_mod_id = pl_scene.modifier_copy_id
if pl_mod_id:
self._paste_modifier(src_object, dst_object, pl_mod_id)
else:
for mod_cls in modifiers.PlasmaModifierProperties.__subclasses__():
self._paste_modifier(src_object, dst_object, mod_cls.pl_id)
return {"FINISHED"}
@classmethod
def poll(cls, context):
pl_scene = context.scene.plasma_scene

2
korman/ui/ui_modifiers.py

@ -95,5 +95,7 @@ class PlasmaModifiersSpecialMenu(ModifierButtonsPanel, bpy.types.Menu):
def draw(self, context):
layout = self.layout
layout.operator("object.plasma_modifier_copy_to_selection", icon="PASTEDOWN")
layout.separator()
layout.operator("object.plasma_modifier_copy", icon="COPYDOWN", text="Copy Modifiers").active_modifier = -1
layout.operator("object.plasma_modifier_paste", icon="PASTEDOWN", text="Paste Modifier(s)")

Loading…
Cancel
Save