Initial commit for the Meadow Generator addon.
[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 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(name="Patch Group Name", description="Object group for storing patch copies of templates", default="Patches")
42     blob_groupname = StringProperty(name="Blob Group Name", description="Object group for storing blob duplicators", default="Blobs")
43
44     seed = IntProperty(name="Seed", description="General random number seed value", default=12345)
45
46     patch_radius = FloatProperty(name="Patch Radius", description="Free area around each patch where no other patch overlaps", default=1.0, min=0.01)
47     max_patches = IntProperty(name="Maximum Patch Number", description="Maximum number of patches", default=1000, max=1000000, soft_max=10000)
48
49     dupli_draw_type = EnumProperty(name="Dupli Draw Type", description="Maximum draw type in the viewport for duplis", items=dupli_draw_type_items, default='BOUNDS', update=dupli_draw_type_update)
50
51     def patch_group(self, context):
52         return bpy.data.groups.get(self.patch_groupname)
53     def blob_group(self, context):
54         return bpy.data.groups.get(self.blob_groupname)
55
56     def draw_ex(self, layout, context):
57         layout.prop(self, "patch_groupname")
58         layout.prop(self, "blob_groupname")
59         
60         layout.separator()
61         
62         layout.prop(self, "seed")
63         
64         layout.prop(self, "patch_radius")
65         layout.prop(self, "max_patches")
66         
67         layout.prop(self, "dupli_draw_type")
68
69
70     def draw(self, context):
71         self.draw_ex(self, self.layout, context)
72
73 def get(context):
74     userprefs = context.user_preferences
75     return userprefs.addons[__package__].preferences
76
77 #-----------------------------------------------------------------------
78
79 type_items = [
80     ('NONE', 'None', ''),
81     ('GROUND', 'Ground', 'Base mesh defining the ground surface'),
82     ('BLOBGRID', 'Blob Grid', 'Grid vertex positions for simulated blobs'),
83     ('TEMPLATE', 'Template', 'Template for copies and instancing'),
84     ]
85 unique_types = {'GROUND', 'BLOBGRID'}
86
87 def type_update(self, context):
88     if self.type in unique_types:
89         scene = context.scene
90         for ob in scene.objects:
91             if ob != self.id_data and ob.meadow.type == self.type:
92                 ob.meadow.type = 'NONE'
93
94 class MeadowObjectSettings(PropertyGroup):
95     type = EnumProperty(name="Type", description="Role of the object in the meadow simulation", items=type_items, update=type_update)
96     use_as_dupli = BoolProperty(name="Use as Dupli", description="Use the object for dupli instances", default=True)
97     
98     # internal
99     blob_index = IntProperty(name="Blob Index", description="Unique blob index of the object", default=-1, options={'HIDDEN'})
100
101 #-----------------------------------------------------------------------
102
103 def register():
104     bpy.utils.register_class(MeadowAddonPreferences)
105     
106     bpy.utils.register_class(MeadowObjectSettings)
107     bpy.types.Object.meadow = PointerProperty(type=MeadowObjectSettings)
108
109 def unregister():
110     bpy.utils.unregister_class(MeadowAddonPreferences)
111     
112     del bpy.types.Object.meadow
113     bpy.utils.unregister_class(MeadowObjectSettings)