forked from bookyakuno/Blender-Scramble-Addon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPHYSICS_PT_field.py
73 lines (61 loc) · 1.95 KB
/
PHYSICS_PT_field.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 「プロパティ」エリア > 「物理演算」タブ > 「フォースフィールド」パネル
# "Propaties" Area > "Physics" Tab > "Force Fields" Panel
import bpy
################
# オペレーター #
################
class ForcefieldCopy(bpy.types.Operator):
bl_idname = "object.forcefield_copy"
bl_label = "Copy Force Field Setting"
bl_description = "Copy active object's Force Field settings to other selected objects"
bl_options = {'REGISTER'}
def execute(self, context):
active_ob = context.object
source = active_ob.field
for ob in context.selected_objects:
if ob.name == active_ob.name:
continue
if not ob.field:
override = context.copy()
override['object'] = ob
bpy.ops.object.forcefield_toggle(override)
for attr_name in dir(source):
if attr_name[0] == '_' or 'rna' in attr_name:
continue
value = getattr(source, attr_name)
try:
setattr(ob.field, attr_name, value)
except AttributeError:
pass
for area in context.screen.areas:
area.tag_redraw()
return {'FINISHED'}
################
# クラスの登録 #
################
classes = [
ForcefieldCopy
]
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
################
# メニュー追加 #
################
# メニューのオン/オフの判定
def IsMenuEnable(self_id):
for id in bpy.context.preferences.addons[__name__.partition('.')[0]].preferences.disabled_menu.split(','):
if (id == self_id):
return False
else:
return True
# メニューを登録する関数
def menu(self, context):
if (IsMenuEnable(__name__.split('.')[-1])):
if 2 <= len(context.selected_objects):
self.layout.operator(ForcefieldCopy.bl_idname, icon='COPY_ID')
if (context.preferences.addons[__name__.partition('.')[0]].preferences.use_disabled_menu):
self.layout.operator('wm.toggle_menu_enable', icon='CANCEL').id = __name__.split('.')[-1]