Cleanup: nicer line breaks for property definitions.
[blender-addons-contrib.git] / object_physics_meadow / settings.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
21 import bpy
22 from bpy.types import AddonPreferences, PropertyGroup
23 from bpy.props import *
24
25 def copy_rna_enum_items(type, prop):
26     return [(item.identifier, item.name, item.description) for item in type.bl_rna.properties[prop].enum_items]
27
28 #-----------------------------------------------------------------------
29
30 dupli_draw_type_items = copy_rna_enum_items(bpy.types.Object, 'draw_type')
31
32 def dupli_draw_type_update(self, context):
33     from object_physics_meadow import blob # import here to avoid cyclic import
34     
35     for ob in blob.blob_objects(context):
36         blob.blob_apply_settings(ob, self)
37
38 class MeadowAddonPreferences(AddonPreferences):
39     bl_idname = __package__
40
41     patch_groupname = StringProperty(
42         name="Patch Group Name",
43         description="Object group for storing patch copies of templates",
44         default="Patches"
45         )
46     blob_groupname = StringProperty(
47         name="Blob Group Name",
48         description="Object group for storing blob duplicators",
49         default="Blobs"
50         )
51
52     dupli_draw_type = EnumProperty(
53         name="Dupli Draw Type",
54         description="Maximum draw type in the viewport for duplis",
55         items=dupli_draw_type_items,
56         default='BOUNDS',
57         update=dupli_draw_type_update
58         )
59
60     def patch_group(self, context):
61         return bpy.data.groups.get(self.patch_groupname)
62     def blob_group(self, context):
63         return bpy.data.groups.get(self.blob_groupname)
64
65     def draw_ex(self, layout, context):
66         layout.prop(self, "patch_groupname")
67         layout.prop(self, "blob_groupname")
68         
69         layout.separator()
70         
71         layout.prop(self, "dupli_draw_type")
72
73
74     def draw(self, context):
75         self.draw_ex(self, self.layout, context)
76
77 def get(context):
78     userprefs = context.user_preferences
79     return userprefs.addons[__package__].preferences
80
81 #-----------------------------------------------------------------------
82
83 type_items = [
84     ('NONE', 'None', ''),
85     ('GROUND', 'Ground', 'Base mesh defining the ground surface'),
86     ('BLOBGRID', 'Blob Grid', 'Grid vertex positions for simulated blobs'),
87     ('TEMPLATE', 'Template', 'Template for copies and instancing'),
88     ]
89 unique_types = {'GROUND', 'BLOBGRID'}
90
91 def type_update(self, context):
92     if self.type in unique_types:
93         scene = context.scene
94         for ob in scene.objects:
95             if ob != self.id_data and ob.meadow.type == self.type:
96                 ob.meadow.type = 'NONE'
97
98 class MeadowObjectSettings(PropertyGroup):
99     type = EnumProperty(
100         name="Type",
101         description="Role of the object in the meadow simulation",
102         items=type_items,
103         update=type_update
104         )
105     
106     use_as_dupli = BoolProperty(
107         name="Use as Dupli",
108         description="Use the object for dupli instances",
109         default=True
110         )
111     
112     seed = IntProperty(
113         name="Seed",
114         description="General random number seed value",
115         default=12345
116         )
117     
118     patch_radius = FloatProperty(
119         name="Patch Radius",
120         description="Free area around each patch where no other patch overlaps",
121         default=1.0,
122         min=0.01
123         )
124     max_patches = IntProperty(
125         name="Maximum Patch Number",
126         description="Maximum number of patches",
127         default=1000,
128         max=1000000,
129         soft_max=10000
130         )
131     
132     # internal
133     blob_index = IntProperty(
134         name="Blob Index",
135         description="Unique blob index of the object",
136         default=-1,
137         options={'HIDDEN'}
138         )
139
140 #-----------------------------------------------------------------------
141
142 def register():
143     bpy.utils.register_class(MeadowAddonPreferences)
144     
145     bpy.utils.register_class(MeadowObjectSettings)
146     bpy.types.Object.meadow = PointerProperty(type=MeadowObjectSettings)
147
148 def unregister():
149     bpy.utils.unregister_class(MeadowAddonPreferences)
150     
151     del bpy.types.Object.meadow
152     bpy.utils.unregister_class(MeadowObjectSettings)