view selected now uses boundboxes of dupli-objects and ignores centerpoints of the...
[blender.git] / release / scripts / ui / properties_data_metaball.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20 import bpy
21 from rna_prop_ui import PropertyPanel
22
23 narrowui = 180
24
25
26 class DataButtonsPanel(bpy.types.Panel):
27     bl_space_type = 'PROPERTIES'
28     bl_region_type = 'WINDOW'
29     bl_context = "data"
30
31     def poll(self, context):
32         return context.meta_ball
33
34
35 class DATA_PT_context_metaball(DataButtonsPanel):
36     bl_label = ""
37     bl_show_header = False
38
39     def draw(self, context):
40         layout = self.layout
41
42         ob = context.object
43         mball = context.meta_ball
44         space = context.space_data
45         wide_ui = context.region.width > narrowui
46
47         if wide_ui:
48             split = layout.split(percentage=0.65)
49             if ob:
50                 split.template_ID(ob, "data")
51                 split.separator()
52             elif mball:
53                 split.template_ID(space, "pin_id")
54                 split.separator()
55         else:
56             if ob:
57                 layout.template_ID(ob, "data")
58             elif mball:
59                 layout.template_ID(space, "pin_id")
60
61
62 class DATA_PT_custom_props_metaball(DataButtonsPanel, PropertyPanel):
63     _context_path = "object.data"
64
65
66 class DATA_PT_metaball(DataButtonsPanel):
67     bl_label = "Metaball"
68
69     def draw(self, context):
70         layout = self.layout
71
72         mball = context.meta_ball
73         wide_ui = context.region.width > narrowui
74
75         split = layout.split()
76
77         col = split.column()
78         col.label(text="Resolution:")
79         sub = col.column(align=True)
80         sub.prop(mball, "wire_size", text="View")
81         sub.prop(mball, "render_size", text="Render")
82
83         if wide_ui:
84             col = split.column()
85         col.label(text="Settings:")
86         col.prop(mball, "threshold", text="Threshold")
87
88         layout.label(text="Update:")
89         if wide_ui:
90             layout.prop(mball, "flag", expand=True)
91         else:
92             layout.prop(mball, "flag", text="")
93
94
95 class DATA_PT_metaball_element(DataButtonsPanel):
96     bl_label = "Active Element"
97
98     def poll(self, context):
99         return (context.meta_ball and context.meta_ball.active_element)
100
101     def draw(self, context):
102         layout = self.layout
103
104         metaelem = context.meta_ball.active_element
105         wide_ui = context.region.width > narrowui
106
107         if wide_ui:
108             layout.prop(metaelem, "type")
109         else:
110             layout.prop(metaelem, "type", text="")
111
112         split = layout.split()
113
114         col = split.column(align=True)
115         col.label(text="Settings:")
116         col.prop(metaelem, "stiffness", text="Stiffness")
117         col.prop(metaelem, "negative", text="Negative")
118         col.prop(metaelem, "hide", text="Hide")
119
120         if wide_ui:
121             col = split.column(align=True)
122
123         if metaelem.type in ('CUBE', 'ELLIPSOID'):
124             col.label(text="Size:")
125             col.prop(metaelem, "size_x", text="X")
126             col.prop(metaelem, "size_y", text="Y")
127             col.prop(metaelem, "size_z", text="Z")
128
129         elif metaelem.type == 'TUBE':
130             col.label(text="Size:")
131             col.prop(metaelem, "size_x", text="X")
132
133         elif metaelem.type == 'PLANE':
134             col.label(text="Size:")
135             col.prop(metaelem, "size_x", text="X")
136             col.prop(metaelem, "size_y", text="Y")
137
138
139 classes = [
140     DATA_PT_context_metaball,
141     DATA_PT_metaball,
142     DATA_PT_metaball_element,
143
144     DATA_PT_custom_props_metaball]
145
146
147 def register():
148     register = bpy.types.register
149     for cls in classes:
150         register(cls)
151
152
153 def unregister():
154     unregister = bpy.types.unregister
155     for cls in classes:
156         unregister(cls)
157
158 if __name__ == "__main__":
159     register()