Blender  V2.59
rna_modifier.c
Go to the documentation of this file.
00001 /*
00002  * $Id: rna_modifier.c 38866 2011-07-31 02:24:06Z nicholasbishop $
00003  *
00004  * ***** BEGIN GPL LICENSE BLOCK *****
00005  *
00006  * This program is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software Foundation,
00018  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019  *
00020  * Contributor(s): Blender Foundation (2008), Juho Veps‰l‰inen
00021  *
00022  * ***** END GPL LICENSE BLOCK *****
00023  */
00024 
00030 #include <float.h>
00031 #include <limits.h>
00032 #include <stdlib.h>
00033 
00034 #include "RNA_define.h"
00035 
00036 #include "rna_internal.h"
00037 
00038 #include "DNA_armature_types.h"
00039 #include "DNA_modifier_types.h"
00040 #include "DNA_object_types.h"
00041 #include "DNA_object_force.h"
00042 #include "DNA_scene_types.h"
00043 
00044 #include "MEM_guardedalloc.h"
00045 
00046 #include "BLI_math.h"
00047 
00048 #include "BKE_animsys.h"
00049 #include "BKE_bmesh.h" /* For BevelModifierData */
00050 #include "BKE_multires.h"
00051 #include "BKE_smoke.h" /* For smokeModifier_free & smokeModifier_createType */
00052 
00053 #include "WM_api.h"
00054 #include "WM_types.h"
00055 
00056 EnumPropertyItem modifier_type_items[] ={
00057         {0, "", 0, "Generate", ""},
00058         {eModifierType_Array, "ARRAY", ICON_MOD_ARRAY, "Array", ""},
00059         {eModifierType_Bevel, "BEVEL", ICON_MOD_BEVEL, "Bevel", ""},
00060         {eModifierType_Boolean, "BOOLEAN", ICON_MOD_BOOLEAN, "Boolean", ""},
00061         {eModifierType_Build, "BUILD", ICON_MOD_BUILD, "Build", ""},
00062         {eModifierType_Decimate, "DECIMATE", ICON_MOD_DECIM, "Decimate", ""},
00063         {eModifierType_EdgeSplit, "EDGE_SPLIT", ICON_MOD_EDGESPLIT, "Edge Split", ""},
00064         {eModifierType_Mask, "MASK", ICON_MOD_MASK, "Mask", ""},
00065         {eModifierType_Mirror, "MIRROR", ICON_MOD_MIRROR, "Mirror", ""},
00066         {eModifierType_Multires, "MULTIRES", ICON_MOD_MULTIRES, "Multiresolution", ""},
00067         {eModifierType_Screw, "SCREW", ICON_MOD_SCREW, "Screw", ""},
00068         {eModifierType_Solidify, "SOLIDIFY", ICON_MOD_SOLIDIFY, "Solidify", ""},
00069         {eModifierType_Subsurf, "SUBSURF", ICON_MOD_SUBSURF, "Subdivision Surface", ""},
00070         {eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""},
00071         {0, "", 0, "Deform", ""},
00072         {eModifierType_Armature, "ARMATURE", ICON_MOD_ARMATURE, "Armature", ""},
00073         {eModifierType_Cast, "CAST", ICON_MOD_CAST, "Cast", ""},
00074         {eModifierType_Curve, "CURVE", ICON_MOD_CURVE, "Curve", ""},
00075         {eModifierType_Displace, "DISPLACE", ICON_MOD_DISPLACE, "Displace", ""},
00076         {eModifierType_Hook, "HOOK", ICON_HOOK, "Hook", ""},
00077         {eModifierType_Lattice, "LATTICE", ICON_MOD_LATTICE, "Lattice", ""},
00078         {eModifierType_MeshDeform, "MESH_DEFORM", ICON_MOD_MESHDEFORM, "Mesh Deform", ""},
00079         {eModifierType_Shrinkwrap, "SHRINKWRAP", ICON_MOD_SHRINKWRAP, "Shrinkwrap", ""},
00080         {eModifierType_SimpleDeform, "SIMPLE_DEFORM", ICON_MOD_SIMPLEDEFORM, "Simple Deform", ""},
00081         {eModifierType_Smooth, "SMOOTH", ICON_MOD_SMOOTH, "Smooth", ""},
00082         {eModifierType_Warp, "WARP", ICON_MOD_SUBSURF, "Warp", ""},
00083         {eModifierType_Wave, "WAVE", ICON_MOD_WAVE, "Wave", ""},
00084         {0, "", 0, "Simulate", ""},
00085         {eModifierType_Cloth, "CLOTH", ICON_MOD_CLOTH, "Cloth", ""},
00086         {eModifierType_Collision, "COLLISION", ICON_MOD_PHYSICS, "Collision", ""},
00087         {eModifierType_Explode, "EXPLODE", ICON_MOD_EXPLODE, "Explode", ""},
00088         {eModifierType_Fluidsim, "FLUID_SIMULATION", ICON_MOD_FLUIDSIM, "Fluid Simulation", ""},
00089         {eModifierType_ParticleInstance, "PARTICLE_INSTANCE", ICON_MOD_PARTICLES, "Particle Instance", ""},
00090         {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", ICON_MOD_PARTICLES, "Particle System", ""},
00091         {eModifierType_Smoke, "SMOKE", ICON_MOD_SMOKE, "Smoke", ""},
00092         {eModifierType_Softbody, "SOFT_BODY", ICON_MOD_SOFT, "Soft Body", ""},
00093         {eModifierType_Surface, "SURFACE", ICON_MOD_PHYSICS, "Surface", ""},
00094         {0, NULL, 0, NULL, NULL}};
00095 
00096 #ifdef RNA_RUNTIME
00097 
00098 #include "DNA_particle_types.h"
00099 #include "DNA_smoke_types.h"
00100 
00101 #include "BKE_context.h"
00102 #include "BKE_depsgraph.h"
00103 #include "BKE_library.h"
00104 #include "BKE_modifier.h"
00105 #include "BKE_particle.h"
00106 
00107 static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
00108 {
00109         UVProjectModifierData *uvp= (UVProjectModifierData*)ptr->data;
00110         rna_iterator_array_begin(iter, (void*)uvp->projectors, sizeof(Object*), uvp->num_projectors, 0, NULL);
00111 }
00112 
00113 static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr)
00114 {
00115         ModifierData *md= (ModifierData*)ptr->data;
00116 
00117         switch(md->type) {
00118                 case eModifierType_Subsurf:
00119                         return &RNA_SubsurfModifier;
00120                 case eModifierType_Lattice:
00121                         return &RNA_LatticeModifier;
00122                 case eModifierType_Curve:
00123                         return &RNA_CurveModifier;
00124                 case eModifierType_Build:
00125                         return &RNA_BuildModifier;
00126                 case eModifierType_Mirror:
00127                         return &RNA_MirrorModifier;
00128                 case eModifierType_Decimate:
00129                         return &RNA_DecimateModifier;
00130                 case eModifierType_Wave:
00131                         return &RNA_WaveModifier;
00132                 case eModifierType_Armature:
00133                         return &RNA_ArmatureModifier;
00134                 case eModifierType_Hook:
00135                         return &RNA_HookModifier;
00136                 case eModifierType_Softbody:
00137                         return &RNA_SoftBodyModifier;
00138                 case eModifierType_Boolean:
00139                         return &RNA_BooleanModifier;
00140                 case eModifierType_Array:
00141                         return &RNA_ArrayModifier;
00142                 case eModifierType_EdgeSplit:
00143                         return &RNA_EdgeSplitModifier;
00144                 case eModifierType_Displace:
00145                         return &RNA_DisplaceModifier;
00146                 case eModifierType_UVProject:
00147                         return &RNA_UVProjectModifier;
00148                 case eModifierType_Smooth:
00149                         return &RNA_SmoothModifier;
00150                 case eModifierType_Cast:
00151                         return &RNA_CastModifier;
00152                 case eModifierType_MeshDeform:
00153                         return &RNA_MeshDeformModifier;
00154                 case eModifierType_ParticleSystem:
00155                         return &RNA_ParticleSystemModifier;
00156                 case eModifierType_ParticleInstance:
00157                         return &RNA_ParticleInstanceModifier;
00158                 case eModifierType_Explode:
00159                         return &RNA_ExplodeModifier;
00160                 case eModifierType_Cloth:
00161                         return &RNA_ClothModifier;
00162                 case eModifierType_Collision:
00163                         return &RNA_CollisionModifier;
00164                 case eModifierType_Bevel:
00165                         return &RNA_BevelModifier;
00166                 case eModifierType_Shrinkwrap:
00167                         return &RNA_ShrinkwrapModifier;
00168                 case eModifierType_Fluidsim:
00169                         return &RNA_FluidSimulationModifier;
00170                 case eModifierType_Mask:
00171                         return &RNA_MaskModifier;
00172                 case eModifierType_SimpleDeform:
00173                         return &RNA_SimpleDeformModifier;
00174                 case eModifierType_Multires:
00175                         return &RNA_MultiresModifier;
00176                 case eModifierType_Surface:
00177                         return &RNA_SurfaceModifier;
00178                 case eModifierType_Smoke:
00179                         return &RNA_SmokeModifier;
00180                 case eModifierType_Solidify:
00181                         return &RNA_SolidifyModifier;
00182                 case eModifierType_Screw:
00183                         return &RNA_ScrewModifier;
00184                 case eModifierType_Warp:
00185                         return &RNA_WarpModifier;
00186                 default:
00187                         return &RNA_Modifier;
00188         }
00189 }
00190 
00191 void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
00192 {
00193         ModifierData *md= ptr->data;
00194         char oldname[sizeof(md->name)];
00195         
00196         /* make a copy of the old name first */
00197         BLI_strncpy(oldname, md->name, sizeof(md->name));
00198         
00199         /* copy the new name into the name slot */
00200         BLI_strncpy(md->name, value, sizeof(md->name));
00201         
00202         /* make sure the name is truly unique */
00203         if (ptr->id.data) {
00204                 Object *ob= ptr->id.data;
00205                 modifier_unique_name(&ob->modifiers, md);
00206         }
00207         
00208         /* fix all the animation data which may link to this */
00209         BKE_all_animdata_fix_paths_rename("modifiers", oldname, md->name);
00210 }
00211 
00212 static char *rna_Modifier_path(PointerRNA *ptr)
00213 {
00214         return BLI_sprintfN("modifiers[\"%s\"]", ((ModifierData*)ptr->data)->name);
00215 }
00216 
00217 static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
00218 {
00219         DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
00220         WM_main_add_notifier(NC_OBJECT|ND_MODIFIER, ptr->id.data);
00221 }
00222 
00223 static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
00224 {
00225         rna_Modifier_update(bmain, scene, ptr);
00226         DAG_scene_sort(bmain, scene);
00227 }
00228 
00229 static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
00230 {
00231         SmokeModifierData *smd= (SmokeModifierData *)ptr->data;
00232         Object *ob= (Object*)ptr->id.data;
00233         ParticleSystemModifierData *psmd = NULL;
00234         ParticleSystem *psys = NULL;
00235         ParticleSettings *part = NULL;
00236 
00237         // nothing changed
00238         if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
00239                 return;
00240                 
00241         smokeModifier_free(smd); // XXX TODO: completely free all 3 pointers
00242         smokeModifier_createType(smd); // create regarding of selected type
00243 
00244         switch (smd->type) {
00245                 case MOD_SMOKE_TYPE_DOMAIN:
00246                         ob->dt = OB_WIRE;
00247                         break;
00248                 case MOD_SMOKE_TYPE_FLOW:
00249                         for(psys=ob->particlesystem.first; psys; psys=psys->next)
00250                                 if(psys->part->type == PART_EMITTER)
00251                                         break;
00252                         if(ob->type == OB_MESH && !psys) {
00253                                 /* add particle system */
00254                                 psmd = (ParticleSystemModifierData *)object_add_particle_system(scene, ob, NULL);
00255                                 if(psmd)
00256                                 {
00257                                         psys = psmd->psys;
00258                                         part = psys->part;
00259                                         part->lifetime = 1.0f;
00260                                         part->sta = 1.0f;
00261                                         part->end = 250.0f;
00262                                         part->ren_as = PART_DRAW_NOT;
00263                                         part->draw_as = PART_DRAW_DOT;
00264                                         sprintf(psys->name, "SmokeParticles");
00265                                         psys->recalc |= (PSYS_RECALC_RESET|PSYS_RECALC_PHYS);
00266                                         DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
00267                                 }
00268                         }
00269                         if(smd->flow)
00270                                 smd->flow->psys = psys;
00271                 case MOD_SMOKE_TYPE_COLL:
00272                 case 0:
00273                 default:
00274                         ob->dt = OB_TEXTURE;
00275                         break;
00276         }
00277         
00278         // update dependancy since a domain - other type switch could have happened
00279         rna_Modifier_dependency_update(bmain, scene, ptr);
00280 }
00281 
00282 static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
00283 {
00284         ExplodeModifierData *emd= (ExplodeModifierData*)ptr->data;
00285         rna_object_vgroup_name_index_get(ptr, value, emd->vgroup);
00286 }
00287 
00288 static int rna_ExplodeModifier_vgroup_length(PointerRNA *ptr)
00289 {
00290         ExplodeModifierData *emd= (ExplodeModifierData*)ptr->data;
00291         return rna_object_vgroup_name_index_length(ptr, emd->vgroup);
00292 }
00293 
00294 static void rna_ExplodeModifier_vgroup_set(PointerRNA *ptr, const char *value)
00295 {
00296         ExplodeModifierData *emd= (ExplodeModifierData*)ptr->data;
00297         rna_object_vgroup_name_index_set(ptr, value, &emd->vgroup);
00298 }
00299 
00300 static void rna_SimpleDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
00301 {
00302         SimpleDeformModifierData *smd= (SimpleDeformModifierData*)ptr->data;
00303         rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
00304 }
00305 
00306 static void rna_ShrinkwrapModifier_vgroup_set(PointerRNA *ptr, const char *value)
00307 {
00308         ShrinkwrapModifierData *smd= (ShrinkwrapModifierData*)ptr->data;
00309         rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
00310 }
00311 
00312 static void rna_LatticeModifier_vgroup_set(PointerRNA *ptr, const char *value)
00313 {
00314         LatticeModifierData *lmd= (LatticeModifierData*)ptr->data;
00315         rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
00316 }
00317 
00318 static void rna_ArmatureModifier_vgroup_set(PointerRNA *ptr, const char *value)
00319 {
00320         ArmatureModifierData *lmd= (ArmatureModifierData*)ptr->data;
00321         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00322 }
00323 
00324 static void rna_CurveModifier_vgroup_set(PointerRNA *ptr, const char *value)
00325 {
00326         CurveModifierData *lmd= (CurveModifierData*)ptr->data;
00327         rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
00328 }
00329 
00330 static void rna_DisplaceModifier_vgroup_set(PointerRNA *ptr, const char *value)
00331 {
00332         DisplaceModifierData *lmd= (DisplaceModifierData*)ptr->data;
00333         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00334 }
00335 
00336 static void rna_HookModifier_vgroup_set(PointerRNA *ptr, const char *value)
00337 {
00338         HookModifierData *lmd= (HookModifierData*)ptr->data;
00339         rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
00340 }
00341 
00342 static void rna_MaskModifier_vgroup_set(PointerRNA *ptr, const char *value)
00343 {
00344         MaskModifierData *lmd= (MaskModifierData*)ptr->data;
00345         rna_object_vgroup_name_set(ptr, value, lmd->vgroup, sizeof(lmd->vgroup));
00346 }
00347 
00348 static void rna_MeshDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
00349 {
00350         MeshDeformModifierData *lmd= (MeshDeformModifierData*)ptr->data;
00351         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00352 }
00353 
00354 static void rna_SmoothModifier_vgroup_set(PointerRNA *ptr, const char *value)
00355 {
00356         SmoothModifierData *lmd= (SmoothModifierData*)ptr->data;
00357         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00358 }
00359 
00360 static void rna_WaveModifier_vgroup_set(PointerRNA *ptr, const char *value)
00361 {
00362         WaveModifierData *lmd= (WaveModifierData*)ptr->data;
00363         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00364 }
00365 
00366 static void rna_CastModifier_vgroup_set(PointerRNA *ptr, const char *value)
00367 {
00368         CastModifierData *lmd= (CastModifierData*)ptr->data;
00369         rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
00370 }
00371 
00372 static void rna_SolidifyModifier_vgroup_set(PointerRNA *ptr, const char *value)
00373 {
00374         SolidifyModifierData *smd= (SolidifyModifierData*)ptr->data;
00375         rna_object_vgroup_name_set(ptr, value, smd->defgrp_name, sizeof(smd->defgrp_name));
00376 }
00377 
00378 static void rna_MappingInfo_uvlayer_set(PointerRNA *ptr, const char *value)
00379 {
00380         MappingInfoModifierData *mmd= (MappingInfoModifierData *)ptr->data;
00381         rna_object_uvlayer_name_set(ptr, value, mmd->uvlayer_name, sizeof(mmd->uvlayer_name));
00382 }
00383 
00384 static void rna_UVProjectModifier_uvlayer_set(PointerRNA *ptr, const char *value)
00385 {
00386         UVProjectModifierData *umd= (UVProjectModifierData*)ptr->data;
00387         rna_object_uvlayer_name_set(ptr, value, umd->uvlayer_name, sizeof(umd->uvlayer_name));
00388 }
00389 
00390 static void RNA_WarpModifier_vgroup_set(PointerRNA *ptr, const char *value)
00391 {
00392         WarpModifierData *tmd= (WarpModifierData*)ptr->data;
00393         rna_object_vgroup_name_set(ptr, value, tmd->defgrp_name, sizeof(tmd->defgrp_name));
00394 }
00395 
00396 static void rna_WaveModifier_uvlayer_set(PointerRNA *ptr, const char *value)
00397 {
00398         WaveModifierData *wmd= (WaveModifierData*)ptr->data;
00399         rna_object_uvlayer_name_set(ptr, value, wmd->uvlayer_name, sizeof(wmd->uvlayer_name));
00400 }
00401 
00402 static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max)
00403 {
00404         MultiresModifierData *mmd = (MultiresModifierData*)ptr->data;
00405 
00406         *min = 0;
00407         *max = mmd->totlvl; /* intentionally _not_ -1 */
00408         *max= MAX2(0, *max);
00409 }
00410 
00411 static int rna_MultiresModifier_external_get(PointerRNA *ptr)
00412 {
00413         Object *ob= (Object*)ptr->id.data;
00414         Mesh *me= ob->data;
00415 
00416         return CustomData_external_test(&me->fdata, CD_MDISPS);
00417 }
00418 
00419 static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
00420 {
00421         Object *ob= (Object*)ptr->id.data;
00422         CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external;
00423 
00424         BLI_strncpy(value, (external)? external->filename: "", sizeof(external->filename));
00425 }
00426 
00427 static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value)
00428 {
00429         Object *ob= (Object*)ptr->id.data;
00430         CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external;
00431 
00432         if(external && strcmp(external->filename, value)) {
00433                 BLI_strncpy(external->filename, value, sizeof(external->filename));
00434                 multires_force_external_reload(ob);
00435         }
00436 }
00437 
00438 static int rna_MultiresModifier_filepath_length(PointerRNA *ptr)
00439 {
00440         Object *ob= (Object*)ptr->id.data;
00441         CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external;
00442 
00443         return strlen((external)? external->filename: "");
00444 }
00445 
00446 static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
00447 {
00448         Object *ob= value.data;
00449 
00450         if(!self || ob != self) {
00451                 if(!ob || type == OB_EMPTY || ob->type == type) {
00452                         id_lib_extern((ID *)ob);
00453                         *ob_p= ob;
00454                 }
00455         }
00456 }
00457 
00458 static void rna_LatticeModifier_object_set(PointerRNA *ptr, PointerRNA value)
00459 {
00460         modifier_object_set(ptr->id.data, &((LatticeModifierData*)ptr->data)->object, OB_LATTICE, value);
00461 }
00462 
00463 static void rna_BooleanModifier_object_set(PointerRNA *ptr, PointerRNA value)
00464 {
00465         modifier_object_set(ptr->id.data, &((BooleanModifierData*)ptr->data)->object, OB_MESH, value);
00466 }
00467 
00468 static void rna_CurveModifier_object_set(PointerRNA *ptr, PointerRNA value)
00469 {
00470         modifier_object_set(ptr->id.data, &((CurveModifierData*)ptr->data)->object, OB_CURVE, value);
00471 }
00472 
00473 static void rna_CastModifier_object_set(PointerRNA *ptr, PointerRNA value)
00474 {
00475         modifier_object_set(ptr->id.data, &((CastModifierData*)ptr->data)->object, OB_EMPTY, value);
00476 }
00477 
00478 static void rna_ArmatureModifier_object_set(PointerRNA *ptr, PointerRNA value)
00479 {
00480         modifier_object_set(ptr->id.data, &((ArmatureModifierData*)ptr->data)->object, OB_ARMATURE, value);
00481 }
00482 
00483 static void rna_MaskModifier_armature_set(PointerRNA *ptr, PointerRNA value)
00484 {
00485         modifier_object_set(ptr->id.data, &((MaskModifierData*)ptr->data)->ob_arm, OB_ARMATURE, value);
00486 }
00487 
00488 static void rna_ShrinkwrapModifier_auxiliary_target_set(PointerRNA *ptr, PointerRNA value)
00489 {
00490         modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData*)ptr->data)->auxTarget, OB_MESH, value);
00491 }
00492 
00493 static void rna_ShrinkwrapModifier_target_set(PointerRNA *ptr, PointerRNA value)
00494 {
00495         modifier_object_set(ptr->id.data, &((ShrinkwrapModifierData*)ptr->data)->target, OB_MESH, value);
00496 }
00497 
00498 static int rna_ShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
00499 {
00500         ShrinkwrapModifierData *swm= (ShrinkwrapModifierData*)ptr->data;
00501         return swm->shrinkOpts & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
00502 }
00503 
00504 static void rna_ShrinkwrapModifier_face_cull_set(struct PointerRNA *ptr, int value)
00505 {
00506         ShrinkwrapModifierData *swm= (ShrinkwrapModifierData*)ptr->data;
00507         
00508         swm->shrinkOpts= (swm->shrinkOpts & ~(MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE|MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) | value;
00509 }
00510 
00511 static void rna_MeshDeformModifier_object_set(PointerRNA *ptr, PointerRNA value)
00512 {
00513         modifier_object_set(ptr->id.data, &((MeshDeformModifierData*)ptr->data)->object, OB_MESH, value);
00514 }
00515 
00516 static void rna_ArrayModifier_end_cap_set(PointerRNA *ptr, PointerRNA value)
00517 {
00518         modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->end_cap, OB_MESH, value);
00519 }
00520 
00521 static void rna_ArrayModifier_start_cap_set(PointerRNA *ptr, PointerRNA value)
00522 {
00523         modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->start_cap, OB_MESH, value);
00524 }
00525 
00526 static void rna_ArrayModifier_curve_set(PointerRNA *ptr, PointerRNA value)
00527 {
00528         modifier_object_set(ptr->id.data, &((ArrayModifierData*)ptr->data)->curve_ob, OB_CURVE, value);
00529 }
00530 
00531 static int rna_MeshDeformModifier_is_bound_get(PointerRNA *ptr)
00532 {
00533         return (((MeshDeformModifierData*)ptr->data)->bindcagecos != NULL);
00534 }
00535 
00536 static PointerRNA rna_SoftBodyModifier_settings_get(PointerRNA *ptr)
00537 {
00538         Object *ob= (Object*)ptr->id.data;
00539         return rna_pointer_inherit_refine(ptr, &RNA_SoftBodySettings, ob->soft);
00540 }
00541 
00542 static PointerRNA rna_SoftBodyModifier_point_cache_get(PointerRNA *ptr)
00543 {
00544         Object *ob= (Object*)ptr->id.data;
00545         return rna_pointer_inherit_refine(ptr, &RNA_PointCache, ob->soft->pointcache);
00546 }
00547 
00548 static PointerRNA rna_CollisionModifier_settings_get(PointerRNA *ptr)
00549 {
00550         Object *ob= (Object*)ptr->id.data;
00551         return rna_pointer_inherit_refine(ptr, &RNA_CollisionSettings, ob->pd);
00552 }
00553 
00554 static PointerRNA rna_UVProjector_object_get(PointerRNA *ptr)
00555 {
00556         Object **ob= (Object**)ptr->data;
00557         return rna_pointer_inherit_refine(ptr, &RNA_Object, *ob);
00558 }
00559 
00560 static void rna_UVProjector_object_set(PointerRNA *ptr, PointerRNA value)
00561 {
00562         Object **ob= (Object**)ptr->data;
00563 
00564         if(*ob)
00565                 id_us_min((ID*)*ob);
00566         if(value.data)
00567                 id_us_plus((ID*)value.data);
00568 
00569         *ob= value.data;
00570 }
00571 
00572 static void rna_UVProjectModifier_num_projectors_set(PointerRNA *ptr, int value)
00573 {
00574         UVProjectModifierData *md= (UVProjectModifierData*)ptr->data;
00575         int a;
00576 
00577         md->num_projectors= CLAMPIS(value, 1, MOD_UVPROJECT_MAX);
00578         for(a=md->num_projectors; a<MOD_UVPROJECT_MAX; a++)
00579                 md->projectors[a]= NULL;
00580 }
00581 
00582 static float rna_EdgeSplitModifier_split_angle_get(PointerRNA *ptr)
00583 {
00584         EdgeSplitModifierData *md= (EdgeSplitModifierData*)ptr->data;
00585         return DEG2RADF(md->split_angle);
00586 }
00587 
00588 static void rna_EdgeSplitModifier_split_angle_set(PointerRNA *ptr, float value)
00589 {
00590         EdgeSplitModifierData *md= (EdgeSplitModifierData*)ptr->data;
00591         value= RAD2DEGF(value);
00592         CLAMP(value, 0.0f, 180.0f);
00593         md->split_angle= (int)value;
00594 }
00595 
00596 static float rna_BevelModifier_angle_limit_get(PointerRNA *ptr)
00597 {
00598         BevelModifierData *md= (BevelModifierData*)ptr->data;
00599         return DEG2RADF(md->bevel_angle);
00600 }
00601 
00602 static void rna_BevelModifier_angle_limit_set(PointerRNA *ptr, float value)
00603 {
00604         BevelModifierData *md= (BevelModifierData*)ptr->data;
00605         value= RAD2DEGF(value);
00606         CLAMP(value, 0.0f, 180.0f);
00607         md->bevel_angle= (int)value;
00608 }
00609 
00610 #else
00611 
00612 static void rna_def_property_subdivision_common(StructRNA *srna, const char type[])
00613 {
00614         static EnumPropertyItem prop_subdivision_type_items[] = {
00615                 {0, "CATMULL_CLARK", 0, "Catmull-Clark", ""},
00616                 {1, "SIMPLE", 0, "Simple", ""},
00617                 {0, NULL, 0, NULL, NULL}};
00618 
00619         PropertyRNA *prop= RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
00620         RNA_def_property_enum_sdna(prop, NULL, type);
00621         RNA_def_property_enum_items(prop, prop_subdivision_type_items);
00622         RNA_def_property_ui_text(prop, "Subdivision Type", "Selects type of subdivision algorithm");
00623         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00624 }
00625 
00626 static void rna_def_modifier_subsurf(BlenderRNA *brna)
00627 {
00628         StructRNA *srna;
00629         PropertyRNA *prop;
00630 
00631         srna= RNA_def_struct(brna, "SubsurfModifier", "Modifier");
00632         RNA_def_struct_ui_text(srna, "Subsurf Modifier", "Subdivision surface modifier");
00633         RNA_def_struct_sdna(srna, "SubsurfModifierData");
00634         RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
00635 
00636         rna_def_property_subdivision_common(srna, "subdivType");
00637 
00638         prop= RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
00639         RNA_def_property_int_sdna(prop, NULL, "levels");
00640         RNA_def_property_ui_range(prop, 0, 6, 1, 0);
00641         RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform");
00642         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00643 
00644         prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
00645         RNA_def_property_int_sdna(prop, NULL, "renderLevels");
00646         RNA_def_property_ui_range(prop, 0, 6, 1, 0);
00647         RNA_def_property_ui_text(prop, "Render Levels", "Number of subdivisions to perform when rendering");
00648 
00649         prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
00650         RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_ControlEdges);
00651         RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
00652         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00653         
00654         prop= RNA_def_property(srna, "use_subsurf_uv", PROP_BOOLEAN, PROP_NONE);
00655         RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_SubsurfUv);
00656         RNA_def_property_ui_text(prop, "Subdivide UVs", "Use subsurf to subdivide UVs");
00657         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00658 }
00659 
00660 static void rna_def_modifier_generic_map_info(StructRNA *srna)
00661 {
00662         static EnumPropertyItem prop_texture_coordinates_items[] = {
00663                 {MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Map", "Uses the local coordinate system for the texture coordinates"},
00664                 {MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", "Uses the global coordinate system for the texture coordinates"},
00665                 {MOD_DISP_MAP_OBJECT, "OBJECT", 0, "Object", "Uses the linked object's local coordinate system for the texture coordinates"},
00666                 {MOD_DISP_MAP_UV, "UV", 0, "UV", "Uses UV coordinates for the texture coordinates"},
00667                 {0, NULL, 0, NULL, NULL}};
00668 
00669         PropertyRNA *prop;
00670 
00671         prop= RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
00672         RNA_def_property_ui_text(prop, "Texture", "");
00673         RNA_def_property_flag(prop, PROP_EDITABLE);
00674         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00675 
00676         prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
00677         RNA_def_property_enum_sdna(prop, NULL, "texmapping");
00678         RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
00679         RNA_def_property_ui_text(prop, "Texture Coordinates", "");
00680         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00681 
00682         prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
00683         RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
00684         RNA_def_property_ui_text(prop, "UV Layer", "UV layer name");
00685         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MappingInfo_uvlayer_set");
00686         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00687 
00688         prop= RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
00689         RNA_def_property_pointer_sdna(prop, NULL, "map_object");
00690         RNA_def_property_ui_text(prop, "Texture Coordinate Object", "Object to set the texture coordinates");
00691         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00692         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00693 }
00694 
00695 static void rna_def_modifier_warp(BlenderRNA *brna)
00696 {
00697         StructRNA *srna;
00698         PropertyRNA *prop;
00699 
00700         static EnumPropertyItem prop_falloff_items[] = {
00701                 {eWarp_Falloff_None,    "NONE", 0, "No Falloff", ""},
00702                 {eWarp_Falloff_Curve,   "CURVE", 0, "Curve", ""},
00703                 {eWarp_Falloff_Smooth,  "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
00704                 {eWarp_Falloff_Sphere,  "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
00705                 {eWarp_Falloff_Root,    "ROOT", ICON_ROOTCURVE, "Root", ""},
00706                 {eWarp_Falloff_Sharp,   "SHARP", ICON_SHARPCURVE, "Sharp", ""},
00707                 {eWarp_Falloff_Linear,  "LINEAR", ICON_LINCURVE, "Linear", ""},
00708                 {eWarp_Falloff_Const,   "CONSTANT", ICON_NOCURVE, "Constant", ""},
00709                 {0, NULL, 0, NULL, NULL}};
00710 
00711         srna= RNA_def_struct(brna, "WarpModifier", "Modifier");
00712         RNA_def_struct_ui_text(srna, "Warp Modifier", "Warp modifier");
00713         RNA_def_struct_sdna(srna, "WarpModifierData");
00714         //RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
00715 
00716         prop= RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
00717         RNA_def_property_ui_text(prop, "From", "Object to transform from");
00718         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00719         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00720 
00721         prop= RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
00722         RNA_def_property_ui_text(prop, "To", "Object to transform to");
00723         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00724         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00725 
00726         prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
00727         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
00728         RNA_def_property_ui_range(prop, -100, 100, 10, 2);
00729         RNA_def_property_ui_text(prop, "Strength", "");
00730         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00731 
00732         prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
00733         RNA_def_property_enum_items(prop, prop_falloff_items);
00734         RNA_def_property_ui_text(prop, "Falloff Type", "");
00735         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00736 
00737         prop= RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_UNSIGNED);
00738         RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
00739         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00740 
00741         prop= RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
00742         RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
00743         RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
00744         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00745 
00746         prop= RNA_def_property(srna, "use_volume_preserve", PROP_BOOLEAN, PROP_NONE);
00747         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WARP_VOLUME_PRESERVE);
00748         RNA_def_property_ui_text(prop, "Preserve Volume", "Preserve volume when rotations are used");
00749         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00750 
00751         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
00752         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
00753         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
00754         RNA_def_property_string_funcs(prop, NULL, NULL, "RNA_WarpModifier_vgroup_set");
00755         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00756 
00757         rna_def_modifier_generic_map_info(srna);
00758 }
00759 
00760 static void rna_def_modifier_multires(BlenderRNA *brna)
00761 {
00762         StructRNA *srna;
00763         PropertyRNA *prop;
00764 
00765         srna= RNA_def_struct(brna, "MultiresModifier", "Modifier");
00766         RNA_def_struct_ui_text(srna, "Multires Modifier", "Multiresolution mesh modifier");
00767         RNA_def_struct_sdna(srna, "MultiresModifierData");
00768         RNA_def_struct_ui_icon(srna, ICON_MOD_MULTIRES);
00769 
00770         rna_def_property_subdivision_common(srna, "simple");
00771 
00772         prop= RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
00773         RNA_def_property_int_sdna(prop, NULL, "lvl");
00774         RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to use in the viewport");
00775         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
00776         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00777 
00778         prop= RNA_def_property(srna, "sculpt_levels", PROP_INT, PROP_UNSIGNED);
00779         RNA_def_property_int_sdna(prop, NULL, "sculptlvl");
00780         RNA_def_property_ui_text(prop, "Sculpt Levels", "Number of subdivisions to use in sculpt mode");
00781         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
00782         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00783 
00784         prop= RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
00785         RNA_def_property_int_sdna(prop, NULL, "renderlvl");
00786         RNA_def_property_ui_text(prop, "Render Levels", "The subdivision level visible at render time");
00787         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
00788 
00789         prop= RNA_def_property(srna, "total_levels", PROP_INT, PROP_UNSIGNED);
00790         RNA_def_property_int_sdna(prop, NULL, "totlvl");
00791         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
00792         RNA_def_property_ui_text(prop, "Total Levels", "Number of subdivisions for which displacements are stored");
00793 
00794         prop= RNA_def_property(srna, "is_external", PROP_BOOLEAN, PROP_NONE);
00795         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
00796         RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", NULL);
00797         RNA_def_property_ui_text(prop, "External", "Store multires displacements outside the .blend file, to save memory");
00798 
00799         prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
00800         RNA_def_property_string_funcs(prop, "rna_MultiresModifier_filepath_get", "rna_MultiresModifier_filepath_length", "rna_MultiresModifier_filepath_set");
00801         RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
00802         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00803 
00804         prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
00805         RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges);
00806         RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
00807         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00808 
00809         prop= RNA_def_property(srna, "use_subsurf_uv", PROP_BOOLEAN, PROP_NONE);
00810         RNA_def_property_boolean_negative_sdna(prop, NULL, "flags", eMultiresModifierFlag_PlainUv);
00811         RNA_def_property_ui_text(prop, "Subdivide UVs", "Use subsurf to subdivide UVs");
00812         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00813 }
00814 
00815 static void rna_def_modifier_lattice(BlenderRNA *brna)
00816 {
00817         StructRNA *srna;
00818         PropertyRNA *prop;
00819 
00820         srna= RNA_def_struct(brna, "LatticeModifier", "Modifier");
00821         RNA_def_struct_ui_text(srna, "Lattice Modifier", "Lattice deformation modifier");
00822         RNA_def_struct_sdna(srna, "LatticeModifierData");
00823         RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
00824 
00825         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
00826         RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
00827         RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL, "rna_Lattice_object_poll");
00828         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00829         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00830 
00831         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
00832         RNA_def_property_string_sdna(prop, NULL, "name");
00833         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
00834         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_LatticeModifier_vgroup_set");
00835         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00836 }
00837 
00838 static void rna_def_modifier_curve(BlenderRNA *brna)
00839 {
00840         StructRNA *srna;
00841         PropertyRNA *prop;
00842 
00843         static EnumPropertyItem prop_deform_axis_items[] = {
00844                 {MOD_CURVE_POSX, "POS_X", 0, "X", ""},
00845                 {MOD_CURVE_POSY, "POS_Y", 0, "Y", ""},
00846                 {MOD_CURVE_POSZ, "POS_Z", 0, "Z", ""},
00847                 {MOD_CURVE_NEGX, "NEG_X", 0, "-X", ""},
00848                 {MOD_CURVE_NEGY, "NEG_Y", 0, "-Y", ""},
00849                 {MOD_CURVE_NEGZ, "NEG_Z", 0, "-Z", ""},
00850                 {0, NULL, 0, NULL, NULL}};
00851 
00852         srna= RNA_def_struct(brna, "CurveModifier", "Modifier");
00853         RNA_def_struct_ui_text(srna, "Curve Modifier", "Curve deformation modifier");
00854         RNA_def_struct_sdna(srna, "CurveModifierData");
00855         RNA_def_struct_ui_icon(srna, ICON_MOD_CURVE);
00856 
00857         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
00858         RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
00859         RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL, "rna_Curve_object_poll");
00860         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00861         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00862 
00863         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
00864         RNA_def_property_string_sdna(prop, NULL, "name");
00865         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
00866         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_CurveModifier_vgroup_set");
00867         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00868 
00869         prop= RNA_def_property(srna, "deform_axis", PROP_ENUM, PROP_NONE);
00870         RNA_def_property_enum_sdna(prop, NULL, "defaxis");
00871         RNA_def_property_enum_items(prop, prop_deform_axis_items);
00872         RNA_def_property_ui_text(prop, "Deform Axis", "The axis that the curve deforms along");
00873         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00874 }
00875 
00876 static void rna_def_modifier_build(BlenderRNA *brna)
00877 {
00878         StructRNA *srna;
00879         PropertyRNA *prop;
00880 
00881         srna= RNA_def_struct(brna, "BuildModifier", "Modifier");
00882         RNA_def_struct_ui_text(srna, "Build Modifier", "Build effect modifier");
00883         RNA_def_struct_sdna(srna, "BuildModifierData");
00884         RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
00885 
00886         prop= RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
00887         RNA_def_property_float_sdna(prop, NULL, "start");
00888         RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
00889         RNA_def_property_ui_text(prop, "Start", "Specify the start frame of the effect");
00890         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00891 
00892         prop= RNA_def_property(srna, "frame_duration", PROP_FLOAT, PROP_TIME);
00893         RNA_def_property_float_sdna(prop, NULL, "length");
00894         RNA_def_property_range(prop, 1, MAXFRAMEF);
00895         RNA_def_property_ui_text(prop, "Length", "Specify the total time the build effect requires");
00896         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00897 
00898         prop= RNA_def_property(srna, "use_random_order", PROP_BOOLEAN, PROP_NONE);
00899         RNA_def_property_boolean_sdna(prop, NULL, "randomize", 1);
00900         RNA_def_property_ui_text(prop, "Randomize", "Randomize the faces or edges during build");
00901         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00902 
00903         prop= RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
00904         RNA_def_property_range(prop, 1, MAXFRAMEF);
00905         RNA_def_property_ui_text(prop, "Seed", "Specify the seed for random if used");
00906         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00907 }
00908 
00909 static void rna_def_modifier_mirror(BlenderRNA *brna)
00910 {
00911         StructRNA *srna;
00912         PropertyRNA *prop;
00913 
00914         srna= RNA_def_struct(brna, "MirrorModifier", "Modifier");
00915         RNA_def_struct_ui_text(srna, "Mirror Modifier", "Mirroring modifier");
00916         RNA_def_struct_sdna(srna, "MirrorModifierData");
00917         RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
00918 
00919         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
00920         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_X);
00921         RNA_def_property_ui_text(prop, "X", "Enable X axis mirror");
00922         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00923 
00924         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
00925         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Y);
00926         RNA_def_property_ui_text(prop, "Y", "Enable Y axis mirror");
00927         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00928 
00929         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
00930         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Z);
00931         RNA_def_property_ui_text(prop, "Z", "Enable Z axis mirror");
00932         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00933 
00934         prop= RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
00935         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_CLIPPING);
00936         RNA_def_property_ui_text(prop, "Clip", "Prevents vertices from going through the mirror during transform");
00937         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00938 
00939         prop= RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
00940         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_VGROUP);
00941         RNA_def_property_ui_text(prop, "Mirror Vertex Groups", "Mirror vertex groups (e.g. .R->.L)");
00942         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00943         
00944         prop= RNA_def_property(srna, "use_mirror_merge", PROP_BOOLEAN, PROP_NONE);
00945         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", MOD_MIR_NO_MERGE);
00946         RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices within the merge threshold");
00947         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00948 
00949         prop= RNA_def_property(srna, "use_mirror_u", PROP_BOOLEAN, PROP_NONE);
00950         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_U);
00951         RNA_def_property_ui_text(prop, "Mirror U", "Mirror the U texture coordinate around the 0.5 point");
00952         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00953 
00954         prop= RNA_def_property(srna, "use_mirror_v", PROP_BOOLEAN, PROP_NONE);
00955         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_V);
00956         RNA_def_property_ui_text(prop, "Mirror V", "Mirror the V texture coordinate around the 0.5 point");
00957         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00958 
00959         prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
00960         RNA_def_property_float_sdna(prop, NULL, "tolerance");
00961         RNA_def_property_range(prop, 0, FLT_MAX);
00962         RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
00963         RNA_def_property_ui_text(prop, "Merge Limit", "Distance from axis within which mirrored vertices are merged");
00964         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00965 
00966         prop= RNA_def_property(srna, "mirror_object", PROP_POINTER, PROP_NONE);
00967         RNA_def_property_pointer_sdna(prop, NULL, "mirror_ob");
00968         RNA_def_property_ui_text(prop, "Mirror Object", "Object to use as mirror");
00969         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
00970         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
00971 }
00972 
00973 static void rna_def_modifier_decimate(BlenderRNA *brna)
00974 {
00975         StructRNA *srna;
00976         PropertyRNA *prop;
00977 
00978         srna= RNA_def_struct(brna, "DecimateModifier", "Modifier");
00979         RNA_def_struct_ui_text(srna, "Decimate Modifier", "Decimation modifier");
00980         RNA_def_struct_sdna(srna, "DecimateModifierData");
00981         RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
00982 
00983         prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE);
00984         RNA_def_property_float_sdna(prop, NULL, "percent");
00985         RNA_def_property_range(prop, 0, 1);
00986         RNA_def_property_ui_range(prop, 0, 1, 1, 2);
00987         RNA_def_property_ui_text(prop, "Ratio", "Defines the ratio of triangles to reduce to");
00988         RNA_def_property_update(prop, 0, "rna_Modifier_update");
00989 
00990         prop= RNA_def_property(srna, "face_count", PROP_INT, PROP_NONE);
00991         RNA_def_property_int_sdna(prop, NULL, "faceCount");
00992         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
00993         RNA_def_property_ui_text(prop, "Face Count", "The current number of faces in the decimated mesh");
00994 }
00995 
00996 static void rna_def_modifier_wave(BlenderRNA *brna)
00997 {
00998         StructRNA *srna;
00999         PropertyRNA *prop;
01000 
01001         static EnumPropertyItem prop_texture_coordinates_items[] = {
01002                 {MOD_WAV_MAP_LOCAL, "LOCAL", 0, "Local", ""},
01003                 {MOD_WAV_MAP_GLOBAL, "GLOBAL", 0, "Global", ""},
01004                 {MOD_WAV_MAP_OBJECT, "OBJECT", 0, "Object", ""},
01005                 {MOD_WAV_MAP_UV, "MAP_UV", 0, "UV", ""},
01006                 {0, NULL, 0, NULL, NULL}};
01007 
01008         srna= RNA_def_struct(brna, "WaveModifier", "Modifier");
01009         RNA_def_struct_ui_text(srna, "Wave Modifier", "Wave effect modifier");
01010         RNA_def_struct_sdna(srna, "WaveModifierData");
01011         RNA_def_struct_ui_icon(srna, ICON_MOD_WAVE);
01012 
01013         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
01014         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_X);
01015         RNA_def_property_ui_text(prop, "X", "X axis motion");
01016         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01017 
01018         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
01019         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_Y);
01020         RNA_def_property_ui_text(prop, "Y", "Y axis motion");
01021         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01022 
01023         prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
01024         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_CYCL);
01025         RNA_def_property_ui_text(prop, "Cyclic", "Cyclic wave effect");
01026         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01027 
01028         prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
01029         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM);
01030         RNA_def_property_ui_text(prop, "Normals", "Displace along normals");
01031         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01032 
01033         prop= RNA_def_property(srna, "use_normal_x", PROP_BOOLEAN, PROP_NONE);
01034         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_X);
01035         RNA_def_property_ui_text(prop, "X Normal", "Enable displacement along the X normal");
01036         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01037 
01038         prop= RNA_def_property(srna, "use_normal_y", PROP_BOOLEAN, PROP_NONE);
01039         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Y);
01040         RNA_def_property_ui_text(prop, "Y Normal", "Enable displacement along the Y normal");
01041         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01042 
01043         prop= RNA_def_property(srna, "use_normal_z", PROP_BOOLEAN, PROP_NONE);
01044         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Z);
01045         RNA_def_property_ui_text(prop, "Z Normal", "Enable displacement along the Z normal");
01046         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01047 
01048         prop= RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_NONE);
01049         RNA_def_property_float_sdna(prop, NULL, "timeoffs");
01050         RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
01051         RNA_def_property_ui_text(prop, "Time Offset", "Either the starting frame (for positive speed) or ending frame (for negative speed.)");
01052         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01053 
01054         prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_TIME);
01055         RNA_def_property_float_sdna(prop, NULL, "lifetime");
01056         RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
01057         RNA_def_property_ui_text(prop, "Lifetime",  "Lifetime of the wave in frames, zero means infinite");
01058         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01059 
01060         prop= RNA_def_property(srna, "damping_time", PROP_FLOAT, PROP_TIME);
01061         RNA_def_property_float_sdna(prop, NULL, "damp");
01062         RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
01063         RNA_def_property_ui_text(prop, "Damping Time",  "Number of frames in which the waves damps out after it dies");
01064         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01065 
01066         prop= RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
01067         RNA_def_property_float_sdna(prop, NULL, "falloff");
01068         RNA_def_property_range(prop, 0, FLT_MAX);
01069         RNA_def_property_ui_range(prop, 0, 100, 100, 2);
01070         RNA_def_property_ui_text(prop, "Falloff Radius",  "Distance after which it fades out");
01071         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01072 
01073         prop= RNA_def_property(srna, "start_position_x", PROP_FLOAT, PROP_DISTANCE);
01074         RNA_def_property_float_sdna(prop, NULL, "startx");
01075         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01076         RNA_def_property_ui_range(prop, -100, 100, 100, 2);
01077         RNA_def_property_ui_text(prop, "Start Position X",  "X coordinate of the start position");
01078         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01079 
01080         prop= RNA_def_property(srna, "start_position_y", PROP_FLOAT, PROP_DISTANCE);
01081         RNA_def_property_float_sdna(prop, NULL, "starty");
01082         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01083         RNA_def_property_ui_range(prop, -100, 100, 100, 2);
01084         RNA_def_property_ui_text(prop, "Start Position Y",  "Z coordinate of the start position");
01085         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01086 
01087         prop= RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE);
01088         RNA_def_property_pointer_sdna(prop, NULL, "objectcenter");
01089         RNA_def_property_ui_text(prop, "Start Position Object", "Object which defines the wave center");
01090         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01091         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01092 
01093         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01094         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01095         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the wave");
01096         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_vgroup_set");
01097         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01098 
01099         prop= RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
01100         RNA_def_property_ui_text(prop, "Texture", "Texture for modulating the wave");
01101         RNA_def_property_flag(prop, PROP_EDITABLE);
01102         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01103 
01104         prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
01105         RNA_def_property_enum_sdna(prop, NULL, "texmapping");
01106         RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
01107         RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used for modulating input");
01108         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01109 
01110         prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
01111         RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
01112         RNA_def_property_ui_text(prop, "UV Layer", "UV layer name");
01113         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_uvlayer_set");
01114         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01115 
01116         prop= RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
01117         RNA_def_property_pointer_sdna(prop, NULL, "map_object");
01118         RNA_def_property_ui_text(prop, "Texture Coordinates Object", "");
01119         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01120         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01121 
01122         prop= RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE);
01123         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01124         RNA_def_property_ui_range(prop, -1, 1, 10, 2);
01125         RNA_def_property_ui_text(prop, "Speed", "Speed of the wave, towards the starting point when negative");
01126         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01127 
01128         prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
01129         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01130         RNA_def_property_ui_range(prop, -2, 2, 10, 2);
01131         RNA_def_property_ui_text(prop, "Height", "Height of the wave");
01132         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01133 
01134         prop= RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
01135         RNA_def_property_range(prop, 0, FLT_MAX);
01136         RNA_def_property_ui_range(prop, 0, 5, 10, 2);
01137         RNA_def_property_ui_text(prop, "Width", "Distance between the waves");
01138         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01139 
01140         prop= RNA_def_property(srna, "narrowness", PROP_FLOAT, PROP_DISTANCE);
01141         RNA_def_property_float_sdna(prop, NULL, "narrow");
01142         RNA_def_property_range(prop, 0, FLT_MAX);
01143         RNA_def_property_ui_range(prop, 0, 10, 10, 2);
01144         RNA_def_property_ui_text(prop, "Narrowness", "Distance between the top and the base of a wave, the higher the value, the more narrow the wave");
01145         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01146 }
01147 
01148 static void rna_def_modifier_armature(BlenderRNA *brna)
01149 {
01150         StructRNA *srna;
01151         PropertyRNA *prop;
01152 
01153         srna= RNA_def_struct(brna, "ArmatureModifier", "Modifier");
01154         RNA_def_struct_ui_text(srna, "Armature Modifier", "Armature deformation modifier");
01155         RNA_def_struct_sdna(srna, "ArmatureModifierData");
01156         RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
01157 
01158         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01159         RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
01160         RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL, "rna_Armature_object_poll");
01161         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01162         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01163 
01164         prop= RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
01165         RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE);
01166         RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Binds Bone envelope  to armature modifier");
01167         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01168 
01169         prop= RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
01170         RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP);
01171         RNA_def_property_ui_text(prop, "Use Vertex Groups", "Binds vertex group to armature modifier");
01172         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01173         
01174         prop= RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
01175         RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
01176         RNA_def_property_ui_text(prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
01177         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01178 
01179         prop= RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
01180         RNA_def_property_boolean_sdna(prop, NULL, "multi", 0);
01181         RNA_def_property_ui_text(prop, "Multi Modifier",  "Use same input as previous modifier, and mix results using overall vgroup");
01182         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01183         
01184         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01185         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01186         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
01187         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ArmatureModifier_vgroup_set");
01188         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01189 
01190         prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
01191         RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP);
01192         RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
01193         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01194 }
01195 
01196 static void rna_def_modifier_hook(BlenderRNA *brna)
01197 {
01198         StructRNA *srna;
01199         PropertyRNA *prop;
01200 
01201         srna= RNA_def_struct(brna, "HookModifier", "Modifier");
01202         RNA_def_struct_ui_text(srna, "Hook Modifier", "Hook modifier to modify the location of vertices");
01203         RNA_def_struct_sdna(srna, "HookModifierData");
01204         RNA_def_struct_ui_icon(srna, ICON_HOOK);
01205 
01206         prop= RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_DISTANCE);
01207         RNA_def_property_range(prop, 0, FLT_MAX);
01208         RNA_def_property_ui_range(prop, 0, 100, 100, 2);
01209         RNA_def_property_ui_text(prop, "Falloff",  "If not zero, the distance from the hook where influence ends");
01210         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01211 
01212         prop= RNA_def_property(srna, "force", PROP_FLOAT, PROP_NONE);
01213         RNA_def_property_range(prop, 0, 1);
01214         RNA_def_property_ui_text(prop, "Force",  "Relative force of the hook");
01215         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01216 
01217         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01218         RNA_def_property_ui_text(prop, "Object", "Parent Object for hook, also recalculates and clears offset");
01219         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01220         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01221         
01222         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
01223         RNA_def_property_string_sdna(prop, NULL, "subtarget");
01224         RNA_def_property_ui_text(prop, "Sub-Target", "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
01225         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01226 
01227         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01228         RNA_def_property_string_sdna(prop, NULL, "name");
01229         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
01230         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_HookModifier_vgroup_set");
01231         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01232 }
01233 
01234 static void rna_def_modifier_softbody(BlenderRNA *brna)
01235 {
01236         StructRNA *srna;
01237         PropertyRNA *prop;
01238 
01239         srna= RNA_def_struct(brna, "SoftBodyModifier", "Modifier");
01240         RNA_def_struct_ui_text(srna, "Soft Body Modifier", "Soft body simulation modifier");
01241         RNA_def_struct_sdna(srna, "SoftbodyModifierData");
01242         RNA_def_struct_ui_icon(srna, ICON_MOD_SOFT);
01243 
01244         prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
01245         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01246         RNA_def_property_struct_type(prop, "SoftBodySettings");
01247         RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_settings_get", NULL, NULL, NULL);
01248         RNA_def_property_ui_text(prop, "Soft Body Settings", "");
01249 
01250         prop= RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
01251         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01252         RNA_def_property_struct_type(prop, "PointCache");
01253         RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_point_cache_get", NULL, NULL, NULL);
01254         RNA_def_property_ui_text(prop, "Soft Body Point Cache", "");
01255 }
01256 
01257 static void rna_def_modifier_boolean(BlenderRNA *brna)
01258 {
01259         StructRNA *srna;
01260         PropertyRNA *prop;
01261 
01262         static EnumPropertyItem prop_operation_items[] = {
01263                 {eBooleanModifierOp_Intersect, "INTERSECT", 0, "Intersect", "Keeps the part of the mesh that intersects with the other selected object"},
01264                 {eBooleanModifierOp_Union, "UNION", 0, "Union", "Combines two meshes in an additive way"},
01265                 {eBooleanModifierOp_Difference, "DIFFERENCE", 0, "Difference", "Combines two meshes in a subtractive way"},
01266                 {0, NULL, 0, NULL, NULL}};
01267 
01268         srna= RNA_def_struct(brna, "BooleanModifier", "Modifier");
01269         RNA_def_struct_ui_text(srna, "Boolean Modifier", "Boolean operations modifier");
01270         RNA_def_struct_sdna(srna, "BooleanModifierData");
01271         RNA_def_struct_ui_icon(srna, ICON_MOD_BOOLEAN);
01272 
01273         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01274         RNA_def_property_ui_text(prop, "Object", "Mesh object to use for Boolean operation");
01275         RNA_def_property_pointer_funcs(prop, NULL, "rna_BooleanModifier_object_set", NULL, "rna_Mesh_object_poll");
01276         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01277         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01278 
01279         prop= RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE);
01280         RNA_def_property_enum_items(prop, prop_operation_items);
01281         RNA_def_property_ui_text(prop, "Operation", "");
01282         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01283 }
01284 
01285 static void rna_def_modifier_array(BlenderRNA *brna)
01286 {
01287         StructRNA *srna;
01288         PropertyRNA *prop;
01289 
01290         static EnumPropertyItem prop_fit_type_items[] = {
01291                 {MOD_ARR_FIXEDCOUNT, "FIXED_COUNT", 0, "Fixed Count", "Duplicate the object a certain number of times"},
01292                 {MOD_ARR_FITLENGTH, "FIT_LENGTH", 0, "Fit Length", "Duplicate the object as many times as fits in a certain length"},
01293                 {MOD_ARR_FITCURVE, "FIT_CURVE", 0, "Fit Curve", "Fit the duplicated objects to a curve"},
01294                 {0, NULL, 0, NULL, NULL}};
01295 
01296         srna= RNA_def_struct(brna, "ArrayModifier", "Modifier");
01297         RNA_def_struct_ui_text(srna, "Array Modifier", "Array duplication modifier");
01298         RNA_def_struct_sdna(srna, "ArrayModifierData");
01299         RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
01300 
01301         /* Length parameters */
01302         prop= RNA_def_property(srna, "fit_type", PROP_ENUM, PROP_NONE);
01303         RNA_def_property_enum_items(prop, prop_fit_type_items);
01304         RNA_def_property_ui_text(prop, "Fit Type", "Array length calculation method");
01305         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01306 
01307         prop= RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
01308         RNA_def_property_range(prop, 1, INT_MAX);
01309         RNA_def_property_ui_range(prop, 1, 1000, 1, 0);
01310         RNA_def_property_ui_text(prop, "Count",  "Number of duplicates to make");
01311         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01312 
01313         prop= RNA_def_property(srna, "fit_length", PROP_FLOAT, PROP_DISTANCE);
01314         RNA_def_property_float_sdna(prop, NULL, "length");
01315         RNA_def_property_range(prop, 0, INT_MAX);
01316         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
01317         RNA_def_property_ui_text(prop, "Length", "Length to fit array within");
01318         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01319 
01320         prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
01321         RNA_def_property_pointer_sdna(prop, NULL, "curve_ob");
01322         RNA_def_property_ui_text(prop, "Curve", "Curve object to fit array length to");
01323         RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_curve_set", NULL, "rna_Curve_object_poll");
01324         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01325         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01326 
01327         /* Offset parameters */
01328         prop= RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_TRANSLATION);
01329         RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_CONST);
01330         RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");
01331         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01332         
01333         prop= RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
01334         RNA_def_property_float_sdna(prop, NULL, "offset");
01335         RNA_def_property_ui_text(prop, "Constant Offset Displacement", "Value for the distance between arrayed items");
01336         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01337 
01338         prop= RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
01339         RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_RELATIVE);
01340         RNA_def_property_ui_text(prop, "Relative Offset", "Add an offset relative to the object's bounding box");
01341         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01342 
01343         prop= RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_NONE); /* PROP_TRANSLATION causes units to be used which we dont want */
01344         RNA_def_property_float_sdna(prop, NULL, "scale");
01345         RNA_def_property_ui_text(prop, "Relative Offset Displacement", "The size of the geometry will determine the distance between arrayed items");
01346         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01347 
01348         /* Vertex merging parameters */
01349         prop= RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
01350         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGE);
01351         RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in adjacent duplicates");
01352         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01353 
01354         prop= RNA_def_property(srna, "use_merge_vertices_cap", PROP_BOOLEAN, PROP_NONE);
01355         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGEFINAL);
01356         RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in first and last duplicates");
01357         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01358 
01359         prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
01360         RNA_def_property_float_sdna(prop, NULL, "merge_dist");
01361         RNA_def_property_range(prop, 0, FLT_MAX);
01362         RNA_def_property_ui_range(prop, 0, 1, 1, 4);
01363         RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
01364         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01365 
01366         /* Offset object */
01367         prop= RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
01368         RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_OBJ);
01369         RNA_def_property_ui_text(prop, "Object Offset", "Add another object's transformation to the total offset");
01370         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01371 
01372         prop= RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
01373         RNA_def_property_pointer_sdna(prop, NULL, "offset_ob");
01374         RNA_def_property_ui_text(prop, "Object Offset", "Uses the location and rotation of another object to determine the distance and rotational change between arrayed items");
01375         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01376         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01377         
01378         /* Caps */
01379         prop= RNA_def_property(srna, "start_cap", PROP_POINTER, PROP_NONE);
01380         RNA_def_property_ui_text(prop, "Start Cap", "Mesh object to use as a start cap");
01381         RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_start_cap_set", NULL, "rna_Mesh_object_poll");
01382         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01383         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01384 
01385         prop= RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
01386         RNA_def_property_ui_text(prop, "End Cap", "Mesh object to use as an end cap");
01387         RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_end_cap_set", NULL, "rna_Mesh_object_poll");
01388         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01389         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01390 }
01391 
01392 static void rna_def_modifier_edgesplit(BlenderRNA *brna)
01393 {
01394         StructRNA *srna;
01395         PropertyRNA *prop;
01396 
01397         srna= RNA_def_struct(brna, "EdgeSplitModifier", "Modifier");
01398         RNA_def_struct_ui_text(srna, "EdgeSplit Modifier", "Edge splitting modifier to create sharp edges");
01399         RNA_def_struct_sdna(srna, "EdgeSplitModifierData");
01400         RNA_def_struct_ui_icon(srna, ICON_MOD_EDGESPLIT);
01401 
01402 #if 1 /* expose as radians */
01403         prop= RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
01404         RNA_def_property_float_funcs(prop, "rna_EdgeSplitModifier_split_angle_get", "rna_EdgeSplitModifier_split_angle_set", NULL);
01405         RNA_def_property_range(prop, 0, DEG2RAD(180));
01406         RNA_def_property_ui_range(prop, 0, DEG2RAD(180), 100, 2);
01407 #else
01408         prop= RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_NONE);
01409         RNA_def_property_range(prop, 0, 180);
01410         RNA_def_property_ui_range(prop, 0, 180, 100, 2);
01411 #endif
01412         RNA_def_property_ui_text(prop, "Split Angle", "Angle above which to split edges");
01413         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01414 
01415         prop= RNA_def_property(srna, "use_edge_angle", PROP_BOOLEAN, PROP_NONE);
01416         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_EDGESPLIT_FROMANGLE);
01417         RNA_def_property_ui_text(prop, "Use Edge Angle", "Split edges with high angle between faces");
01418         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01419 
01420         prop= RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
01421         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_EDGESPLIT_FROMFLAG);
01422         RNA_def_property_ui_text(prop, "Use Sharp Edges", "Split edges that are marked as sharp");
01423         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01424 }
01425 
01426 static void rna_def_modifier_displace(BlenderRNA *brna)
01427 {
01428         StructRNA *srna;
01429         PropertyRNA *prop;
01430 
01431         static EnumPropertyItem prop_direction_items[] = {
01432                 {MOD_DISP_DIR_X, "X", 0, "X", "Uses the texture's intensity value to displace in the X direction"},
01433                 {MOD_DISP_DIR_Y, "Y", 0, "Y", "Uses the texture's intensity value to displace in the Y direction"},
01434                 {MOD_DISP_DIR_Z, "Z", 0, "Z", "Uses the texture's intensity value to displace in the Z direction"},
01435                 {MOD_DISP_DIR_NOR, "NORMAL", 0, "Normal", "Uses the texture's intensity value to displace in the normal direction"},
01436                 {MOD_DISP_DIR_RGB_XYZ, "RGB_TO_XYZ", 0, "RGB to XYZ", "Uses the texture's RGB values to displace the mesh in the XYZ direction"},
01437                 {0, NULL, 0, NULL, NULL}};
01438 
01439         srna= RNA_def_struct(brna, "DisplaceModifier", "Modifier");
01440         RNA_def_struct_ui_text(srna, "Displace Modifier", "Displacement modifier");
01441         RNA_def_struct_sdna(srna, "DisplaceModifierData");
01442         RNA_def_struct_ui_icon(srna, ICON_MOD_DISPLACE);
01443 
01444         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01445         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01446         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
01447         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_DisplaceModifier_vgroup_set");
01448         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01449 
01450         prop= RNA_def_property(srna, "mid_level", PROP_FLOAT, PROP_DISTANCE);
01451         RNA_def_property_float_sdna(prop, NULL, "midlevel");
01452         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01453         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
01454         RNA_def_property_ui_text(prop, "Midlevel", "Material value that gives no displacement");
01455         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01456 
01457         prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
01458         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01459         RNA_def_property_ui_range(prop, -100, 100, 10, 3);
01460         RNA_def_property_ui_text(prop, "Strength", "Amount to displace geometry");
01461         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01462 
01463         prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
01464         RNA_def_property_enum_items(prop, prop_direction_items);
01465         RNA_def_property_ui_text(prop, "Direction", "");
01466         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01467 
01468         rna_def_modifier_generic_map_info(srna);
01469 }
01470 
01471 static void rna_def_modifier_uvproject(BlenderRNA *brna)
01472 {
01473         StructRNA *srna;
01474         PropertyRNA *prop;
01475 
01476         srna= RNA_def_struct(brna, "UVProjectModifier", "Modifier");
01477         RNA_def_struct_ui_text(srna, "UV Project Modifier", "UV projection modifier to sets UVs from a projector");
01478         RNA_def_struct_sdna(srna, "UVProjectModifierData");
01479         RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
01480 
01481         prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
01482         RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
01483         RNA_def_property_ui_text(prop, "UV Layer", "UV layer name");
01484         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UVProjectModifier_uvlayer_set");
01485         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01486 
01487         prop= RNA_def_property(srna, "projector_count", PROP_INT, PROP_NONE);
01488         RNA_def_property_int_sdna(prop, NULL, "num_projectors");
01489         RNA_def_property_ui_text(prop, "Number of Projectors", "Number of projectors to use");
01490         RNA_def_property_int_funcs(prop, NULL, "rna_UVProjectModifier_num_projectors_set", NULL);
01491         RNA_def_property_range(prop, 1, MOD_UVPROJECT_MAX);
01492         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01493 
01494         prop= RNA_def_property(srna, "projectors", PROP_COLLECTION, PROP_NONE);
01495         RNA_def_property_struct_type(prop, "UVProjector");
01496         RNA_def_property_collection_funcs(prop, "rna_UVProject_projectors_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", 0, 0, 0);
01497         RNA_def_property_ui_text(prop, "Projectors", "");
01498 
01499         prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
01500         RNA_def_property_ui_text(prop, "Image", "");
01501         RNA_def_property_flag(prop, PROP_EDITABLE);
01502         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01503 
01504         prop= RNA_def_property(srna, "aspect_x", PROP_FLOAT, PROP_NONE);
01505         RNA_def_property_float_sdna(prop, NULL, "aspectx");
01506         RNA_def_property_range(prop, 1, FLT_MAX);
01507         RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
01508         RNA_def_property_ui_text(prop, "Horizontal Aspect Ratio", "");
01509         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01510 
01511         prop= RNA_def_property(srna, "aspect_y", PROP_FLOAT, PROP_NONE);
01512         RNA_def_property_float_sdna(prop, NULL, "aspecty");
01513         RNA_def_property_range(prop, 1, FLT_MAX);
01514         RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
01515         RNA_def_property_ui_text(prop, "Vertical Aspect Ratio", "");
01516         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01517         
01518         prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
01519         RNA_def_property_float_sdna(prop, NULL, "scalex");
01520         RNA_def_property_range(prop, 0, FLT_MAX);
01521         RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
01522         RNA_def_property_ui_text(prop, "Horizontal Scale", "");
01523         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01524 
01525         prop= RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
01526         RNA_def_property_float_sdna(prop, NULL, "scaley");
01527         RNA_def_property_range(prop, 0, FLT_MAX);
01528         RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
01529         RNA_def_property_ui_text(prop, "Vertical Scale", "");
01530         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01531 
01532         prop= RNA_def_property(srna, "use_image_override", PROP_BOOLEAN, PROP_NONE);
01533         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_UVPROJECT_OVERRIDEIMAGE);
01534         RNA_def_property_ui_text(prop, "Override Image", "Override faces' current images with the given image");
01535         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01536 
01537         srna= RNA_def_struct(brna, "UVProjector", NULL);
01538         RNA_def_struct_ui_text(srna, "UVProjector", "UV projector used by the UV project modifier");
01539 
01540         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01541         RNA_def_property_struct_type(prop, "Object");
01542         RNA_def_property_pointer_funcs(prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", NULL, NULL);
01543         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01544         RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
01545         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01546 }
01547 
01548 static void rna_def_modifier_smooth(BlenderRNA *brna)
01549 {
01550         StructRNA *srna;
01551         PropertyRNA *prop;
01552 
01553         srna= RNA_def_struct(brna, "SmoothModifier", "Modifier");
01554         RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smoothing effect modifier");
01555         RNA_def_struct_sdna(srna, "SmoothModifierData");
01556         RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
01557 
01558         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
01559         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_X);
01560         RNA_def_property_ui_text(prop, "X", "Smooth object along X axis");
01561         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01562 
01563         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
01564         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Y);
01565         RNA_def_property_ui_text(prop, "Y", "Smooth object along Y axis");
01566         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01567 
01568         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
01569         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Z);
01570         RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
01571         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01572 
01573         prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
01574         RNA_def_property_float_sdna(prop, NULL, "fac");
01575         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01576         RNA_def_property_ui_range(prop, -10, 10, 1, 3);
01577         RNA_def_property_ui_text(prop, "Factor", "Strength of modifier effect");
01578         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01579 
01580         prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
01581         RNA_def_property_int_sdna(prop, NULL, "repeat");
01582         RNA_def_property_ui_range(prop, 0, 30, 1, 0);
01583         RNA_def_property_ui_text(prop, "Repeat", "");
01584         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01585         
01586         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01587         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01588         RNA_def_property_ui_text(prop, "Vertex Group", "Name of Vertex Group which determines influence of modifier per point");
01589         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SmoothModifier_vgroup_set");
01590         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01591 }
01592 
01593 static void rna_def_modifier_cast(BlenderRNA *brna)
01594 {
01595         StructRNA *srna;
01596         PropertyRNA *prop;
01597 
01598         static EnumPropertyItem prop_cast_type_items[] = {
01599                 {MOD_CAST_TYPE_SPHERE, "SPHERE", 0, "Sphere", ""},
01600                 {MOD_CAST_TYPE_CYLINDER, "CYLINDER", 0, "Cylinder", ""},
01601                 {MOD_CAST_TYPE_CUBOID, "CUBOID", 0, "Cuboid", ""},
01602                 {0, NULL, 0, NULL, NULL}};
01603 
01604         srna= RNA_def_struct(brna, "CastModifier", "Modifier");
01605         RNA_def_struct_ui_text(srna, "Cast Modifier", "Cast modifier to cast to other shapes");
01606         RNA_def_struct_sdna(srna, "CastModifierData");
01607         RNA_def_struct_ui_icon(srna, ICON_MOD_CAST);
01608 
01609         prop= RNA_def_property(srna, "cast_type", PROP_ENUM, PROP_NONE);
01610         RNA_def_property_enum_sdna(prop, NULL, "type");
01611         RNA_def_property_enum_items(prop, prop_cast_type_items);
01612         RNA_def_property_ui_text(prop, "Cast Type", "Target object shape");
01613         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01614         
01615         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01616         RNA_def_property_ui_text(prop, "Object", "Control object: if available, its location determines the center of the effect");
01617         RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL, NULL);
01618         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01619         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01620 
01621         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
01622         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_X);
01623         RNA_def_property_ui_text(prop, "X", "");
01624         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01625 
01626         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
01627         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Y);
01628         RNA_def_property_ui_text(prop, "Y", "");
01629         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01630 
01631         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
01632         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Z);
01633         RNA_def_property_ui_text(prop, "Z", "");
01634         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01635         
01636         prop= RNA_def_property(srna, "use_radius_as_size", PROP_BOOLEAN, PROP_NONE);
01637         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_SIZE_FROM_RADIUS);
01638         RNA_def_property_ui_text(prop, "From Radius", "Use radius as size of projection shape (0 = auto)");
01639         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01640         
01641         prop= RNA_def_property(srna, "use_transform", PROP_BOOLEAN, PROP_NONE);
01642         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_USE_OB_TRANSFORM);
01643         RNA_def_property_ui_text(prop, "Use transform", "Use object transform to control projection shape");
01644         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01645         
01646         prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
01647         RNA_def_property_float_sdna(prop, NULL, "fac");
01648         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
01649         RNA_def_property_ui_range(prop, -10, 10, 5, 2);
01650         RNA_def_property_ui_text(prop, "Factor", "");
01651         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01652 
01653         prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
01654         RNA_def_property_range(prop, 0, FLT_MAX);
01655         RNA_def_property_ui_range(prop, 0, 100, 5, 2);
01656         RNA_def_property_ui_text(prop, "Radius", "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)");
01657         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01658 
01659         prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
01660         RNA_def_property_range(prop, 0, FLT_MAX);
01661         RNA_def_property_ui_range(prop, 0, 100, 5, 2);
01662         RNA_def_property_ui_text(prop, "Size", "Size of projection shape (leave as 0 for auto.)");
01663         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01664 
01665         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01666         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01667         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
01668         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_CastModifier_vgroup_set");
01669         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01670 }
01671 
01672 static void rna_def_modifier_meshdeform(BlenderRNA *brna)
01673 {
01674         StructRNA *srna;
01675         PropertyRNA *prop;
01676 #if 0
01677         static EnumPropertyItem prop_mode_items[] = {
01678                 {0, "VOLUME", 0, "Volume", "Bind to volume inside cage mesh"},
01679                 {1, "SURFACE", 0, "Surface", "Bind to surface of cage mesh"},
01680                 {0, NULL, 0, NULL, NULL}};
01681 #endif
01682 
01683         srna= RNA_def_struct(brna, "MeshDeformModifier", "Modifier");
01684         RNA_def_struct_ui_text(srna, "MeshDeform Modifier", "Mesh deformation modifier to deform with other meshes");
01685         RNA_def_struct_sdna(srna, "MeshDeformModifierData");
01686         RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
01687 
01688         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01689         RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with");
01690         RNA_def_property_pointer_funcs(prop, NULL, "rna_MeshDeformModifier_object_set", NULL, NULL);
01691         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01692         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01693         
01694         prop= RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
01695         RNA_def_property_boolean_funcs(prop, "rna_MeshDeformModifier_is_bound_get", NULL);
01696         RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to control cage");
01697         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
01698         
01699         prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
01700         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_INVERT_VGROUP);
01701         RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
01702         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01703 
01704         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01705         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
01706         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
01707         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshDeformModifier_vgroup_set");
01708         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01709 
01710         prop= RNA_def_property(srna, "precision", PROP_INT, PROP_NONE);
01711         RNA_def_property_int_sdna(prop, NULL, "gridsize");
01712         RNA_def_property_range(prop, 2, 10);
01713         RNA_def_property_ui_text(prop, "Precision", "The grid size for binding");
01714         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01715 
01716         prop= RNA_def_property(srna, "use_dynamic_bind", PROP_BOOLEAN, PROP_NONE);
01717         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_DYNAMIC_BIND);
01718         RNA_def_property_ui_text(prop, "Dynamic", "Recompute binding dynamically on top of other deformers (slower and more memory consuming.)");
01719         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01720 
01721 #if 0
01722         prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
01723         RNA_def_property_enum_items(prop, prop_mode_items);
01724         RNA_def_property_ui_text(prop, "Mode", "Method of binding vertices are bound to cage mesh");
01725         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01726 #endif
01727 }
01728 
01729 static void rna_def_modifier_particlesystem(BlenderRNA *brna)
01730 {
01731         StructRNA *srna;
01732         PropertyRNA *prop;
01733 
01734         srna= RNA_def_struct(brna, "ParticleSystemModifier", "Modifier");
01735         RNA_def_struct_ui_text(srna, "ParticleSystem Modifier", "Particle system simulation modifier");
01736         RNA_def_struct_sdna(srna, "ParticleSystemModifierData");
01737         RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
01738         
01739         prop= RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
01740         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01741         RNA_def_property_pointer_sdna(prop, NULL, "psys");
01742         RNA_def_property_ui_text(prop, "Particle System", "Particle System that this modifier controls");
01743 }
01744 
01745 static void rna_def_modifier_particleinstance(BlenderRNA *brna)
01746 {
01747         StructRNA *srna;
01748         PropertyRNA *prop;
01749 
01750         static EnumPropertyItem particleinstance_axis[] = {
01751                 {0, "X", 0, "X", ""},
01752                 {1, "Y", 0, "Y", ""},
01753                 {2, "Z", 0, "Z", ""},
01754                 {0, NULL, 0, NULL, NULL}
01755         };
01756 
01757         srna= RNA_def_struct(brna, "ParticleInstanceModifier", "Modifier");
01758         RNA_def_struct_ui_text(srna, "ParticleInstance Modifier", "Particle system instancing modifier");
01759         RNA_def_struct_sdna(srna, "ParticleInstanceModifierData");
01760         RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
01761 
01762         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
01763         RNA_def_property_pointer_sdna(prop, NULL, "ob");
01764         RNA_def_property_ui_text(prop, "Object", "Object that has the particle system");
01765         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
01766         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
01767 
01768         prop= RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
01769         RNA_def_property_int_sdna(prop, NULL, "psys");
01770         RNA_def_property_range(prop, 1, 10);
01771         RNA_def_property_ui_text(prop, "Particle System Number", "");
01772         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01773 
01774         prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
01775         RNA_def_property_enum_sdna(prop, NULL, "axis");
01776         RNA_def_property_enum_items(prop, particleinstance_axis);
01777         RNA_def_property_ui_text(prop, "Axis", "Pole axis for rotation");
01778         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01779         
01780         prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
01781         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Parents);
01782         RNA_def_property_ui_text(prop, "Normal", "Create instances from normal particles");
01783         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01784 
01785         prop= RNA_def_property(srna, "use_children", PROP_BOOLEAN, PROP_NONE);
01786         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Children);
01787         RNA_def_property_ui_text(prop, "Children", "Create instances from child particles");
01788         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01789 
01790         prop= RNA_def_property(srna, "use_path", PROP_BOOLEAN, PROP_NONE);
01791         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Path);
01792         RNA_def_property_ui_text(prop, "Path", "Create instances along particle paths");
01793         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01794 
01795         prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
01796         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Unborn);
01797         RNA_def_property_ui_text(prop, "Unborn", "Show instances when particles are unborn");
01798         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01799 
01800         prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
01801         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Alive);
01802         RNA_def_property_ui_text(prop, "Alive", "Show instances when particles are alive");
01803         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01804 
01805         prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
01806         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Dead);
01807         RNA_def_property_ui_text(prop, "Dead", "Show instances when particles are dead");
01808         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01809 
01810         prop= RNA_def_property(srna, "use_preserve_shape", PROP_BOOLEAN, PROP_NONE);
01811         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_KeepShape);
01812         RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object");
01813         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01814 
01815         prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
01816         RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_UseSize);
01817         RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances");
01818         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01819 
01820         prop= RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
01821         RNA_def_property_float_sdna(prop, NULL, "position");
01822         RNA_def_property_range(prop, 0.0, 1.0);
01823         RNA_def_property_ui_text(prop, "Position", "Position along path");
01824         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01825 
01826         prop= RNA_def_property(srna, "random_position", PROP_FLOAT, PROP_NONE);
01827         RNA_def_property_float_sdna(prop, NULL, "random_position");
01828         RNA_def_property_range(prop, 0.0, 1.0);
01829         RNA_def_property_ui_text(prop, "Random Position", "Randomize position along path");
01830         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01831 }
01832 
01833 static void rna_def_modifier_explode(BlenderRNA *brna)
01834 {
01835         StructRNA *srna;
01836         PropertyRNA *prop;
01837 
01838         srna= RNA_def_struct(brna, "ExplodeModifier", "Modifier");
01839         RNA_def_struct_ui_text(srna, "Explode Modifier", "Explosion effect modifier based on a particle system");
01840         RNA_def_struct_sdna(srna, "ExplodeModifierData");
01841         RNA_def_struct_ui_icon(srna, ICON_MOD_EXPLODE);
01842 
01843         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
01844         RNA_def_property_string_funcs(prop, "rna_ExplodeModifier_vgroup_get", "rna_ExplodeModifier_vgroup_length", "rna_ExplodeModifier_vgroup_set");
01845         RNA_def_property_ui_text(prop, "Vertex Group", "");
01846 
01847         prop= RNA_def_property(srna, "protect", PROP_FLOAT, PROP_NONE);
01848         RNA_def_property_range(prop, 0, 1);
01849         RNA_def_property_ui_text(prop, "Protect", "Clean vertex group edges");
01850         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01851 
01852         prop= RNA_def_property(srna, "use_edge_cut", PROP_BOOLEAN, PROP_NONE);
01853         RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_EdgeCut);
01854         RNA_def_property_ui_text(prop, "Cut Edges", "Cut face edges for nicer shrapnel");
01855         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01856 
01857         prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
01858         RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Unborn);
01859         RNA_def_property_ui_text(prop, "Unborn", "Show mesh when particles are unborn");
01860         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01861 
01862         prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
01863         RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Alive);
01864         RNA_def_property_ui_text(prop, "Alive", "Show mesh when particles are alive");
01865         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01866 
01867         prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
01868         RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Dead);
01869         RNA_def_property_ui_text(prop, "Dead", "Show mesh when particles are dead");
01870         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01871 
01872         prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
01873         RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_PaSize);
01874         RNA_def_property_ui_text(prop, "Size", "Use particle size for the shrapnel");
01875         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01876 
01877         prop= RNA_def_property(srna, "particle_uv", PROP_STRING, PROP_NONE);
01878         RNA_def_property_string_sdna(prop, NULL, "uvname");
01879         RNA_def_property_string_maxlength(prop, 32);
01880         RNA_def_property_ui_text(prop, "Particle UV", "UV Layer to change with particle age");
01881         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01882 }
01883 
01884 static void rna_def_modifier_cloth(BlenderRNA *brna)
01885 {
01886         StructRNA *srna;
01887         PropertyRNA *prop;
01888 
01889         srna= RNA_def_struct(brna, "ClothModifier", "Modifier");
01890         RNA_def_struct_ui_text(srna, "Cloth Modifier", "Cloth simulation modifier");
01891         RNA_def_struct_sdna(srna, "ClothModifierData");
01892         RNA_def_struct_ui_icon(srna, ICON_MOD_CLOTH);
01893         
01894         prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
01895         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01896         RNA_def_property_pointer_sdna(prop, NULL, "sim_parms");
01897         RNA_def_property_ui_text(prop, "Cloth Settings", "");
01898         
01899         prop= RNA_def_property(srna, "collision_settings", PROP_POINTER, PROP_NONE);
01900         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01901         RNA_def_property_pointer_sdna(prop, NULL, "coll_parms");
01902         RNA_def_property_ui_text(prop, "Cloth Collision Settings", "");
01903         
01904         prop= RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
01905         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01906         RNA_def_property_ui_text(prop, "Point Cache", "");
01907 }
01908 
01909 static void rna_def_modifier_smoke(BlenderRNA *brna)
01910 {
01911         StructRNA *srna;
01912         PropertyRNA *prop;
01913         
01914         static EnumPropertyItem prop_smoke_type_items[] = {
01915                         {0, "NONE", 0, "None", ""},
01916                         {MOD_SMOKE_TYPE_DOMAIN, "DOMAIN", 0, "Domain", ""},
01917                         {MOD_SMOKE_TYPE_FLOW, "FLOW", 0, "Flow", "Inflow/Outflow"},
01918                         {MOD_SMOKE_TYPE_COLL, "COLLISION", 0, "Collision", ""},
01919                         {0, NULL, 0, NULL, NULL}};
01920         
01921         srna= RNA_def_struct(brna, "SmokeModifier", "Modifier");
01922         RNA_def_struct_ui_text(srna, "Smoke Modifier", "Smoke simulation modifier");
01923         RNA_def_struct_sdna(srna, "SmokeModifierData");
01924         RNA_def_struct_ui_icon(srna, ICON_MOD_SMOKE);
01925         
01926         prop= RNA_def_property(srna, "domain_settings", PROP_POINTER, PROP_NONE);
01927         RNA_def_property_pointer_sdna(prop, NULL, "domain");
01928         RNA_def_property_ui_text(prop, "Domain Settings", "");
01929         
01930         prop= RNA_def_property(srna, "flow_settings", PROP_POINTER, PROP_NONE);
01931         RNA_def_property_pointer_sdna(prop, NULL, "flow");
01932         RNA_def_property_ui_text(prop, "Flow Settings", "");
01933         
01934         prop= RNA_def_property(srna, "coll_settings", PROP_POINTER, PROP_NONE);
01935         RNA_def_property_pointer_sdna(prop, NULL, "coll");
01936         RNA_def_property_ui_text(prop, "Collision Settings", "");
01937         
01938         prop= RNA_def_property(srna, "smoke_type", PROP_ENUM, PROP_NONE);
01939         RNA_def_property_enum_sdna(prop, NULL, "type");
01940         RNA_def_property_enum_items(prop, prop_smoke_type_items);
01941         RNA_def_property_ui_text(prop, "Type", "");
01942         RNA_def_property_update(prop, 0, "rna_Smoke_set_type");
01943 }
01944 
01945 static void rna_def_modifier_collision(BlenderRNA *brna)
01946 {
01947         StructRNA *srna;
01948         PropertyRNA *prop;
01949 
01950         srna= RNA_def_struct(brna, "CollisionModifier", "Modifier");
01951         RNA_def_struct_ui_text(srna, "Collision Modifier", "Collision modifier defining modifier stack position used for collision");
01952         RNA_def_struct_sdna(srna, "CollisionModifierData");
01953         RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
01954 
01955         prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
01956         RNA_def_property_flag(prop, PROP_NEVER_NULL);
01957         RNA_def_property_struct_type(prop, "CollisionSettings");
01958         RNA_def_property_pointer_funcs(prop, "rna_CollisionModifier_settings_get", NULL, NULL, NULL);
01959         RNA_def_property_ui_text(prop, "Settings", "");
01960 }
01961 
01962 static void rna_def_modifier_bevel(BlenderRNA *brna)
01963 {
01964         StructRNA *srna;
01965         PropertyRNA *prop;
01966 
01967         static EnumPropertyItem prop_limit_method_items[] = {
01968                 {0, "NONE", 0, "None", "Bevel the entire mesh by a constant amount"},
01969                 {BME_BEVEL_ANGLE, "ANGLE", 0, "Angle", "Only bevel edges with sharp enough angles between faces"},
01970                 {BME_BEVEL_WEIGHT, "WEIGHT", 0, "Weight", "Use bevel weights to determine how much bevel is applied; apply them separately in vert/edge select mode"},
01971                 {0, NULL, 0, NULL, NULL}};
01972 
01973         static EnumPropertyItem prop_edge_weight_method_items[] = {
01974                 {0, "AVERAGE", 0, "Average", ""},
01975                 {BME_BEVEL_EMIN, "SHARPEST", 0, "Sharpest", ""},
01976                 {BME_BEVEL_EMAX, "LARGEST", 0, "Largest", ""},
01977                 {0, NULL, 0, NULL, NULL}};
01978 
01979         srna= RNA_def_struct(brna, "BevelModifier", "Modifier");
01980         RNA_def_struct_ui_text(srna, "Bevel Modifier", "Bevel modifier to make edges and vertices more rounded");
01981         RNA_def_struct_sdna(srna, "BevelModifierData");
01982         RNA_def_struct_ui_icon(srna, ICON_MOD_BEVEL);
01983 
01984         prop= RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
01985         RNA_def_property_float_sdna(prop, NULL, "value");
01986         RNA_def_property_range(prop, 0, FLT_MAX);
01987         RNA_def_property_ui_range(prop, 0, 10, 0.1, 4);
01988         RNA_def_property_ui_text(prop, "Width", "Bevel value/amount");
01989         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01990 
01991         prop= RNA_def_property(srna, "use_only_vertices", PROP_BOOLEAN, PROP_NONE);
01992         RNA_def_property_boolean_sdna(prop, NULL, "flags", BME_BEVEL_VERT);
01993         RNA_def_property_ui_text(prop, "Only Vertices", "Bevel verts/corners, not edges");
01994         RNA_def_property_update(prop, 0, "rna_Modifier_update");
01995 
01996         prop= RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
01997         RNA_def_property_enum_sdna(prop, NULL, "lim_flags");
01998         RNA_def_property_enum_items(prop, prop_limit_method_items);
01999         RNA_def_property_ui_text(prop, "Limit Method", "");
02000         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02001 
02002         prop= RNA_def_property(srna, "edge_weight_method", PROP_ENUM, PROP_NONE);
02003         RNA_def_property_enum_sdna(prop, NULL, "e_flags");
02004         RNA_def_property_enum_items(prop, prop_edge_weight_method_items);
02005         RNA_def_property_ui_text(prop, "Edge Weight Method", "What edge weight to use for weighting a vertex");
02006         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02007 
02008 #if 1 /* expose as radians */
02009         prop= RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_ANGLE);
02010         RNA_def_property_float_funcs(prop, "rna_BevelModifier_angle_limit_get", "rna_BevelModifier_angle_limit_set", NULL);
02011         RNA_def_property_range(prop, 0, DEG2RAD(180));
02012         RNA_def_property_ui_range(prop, 0, DEG2RAD(180), 100, 2);
02013 #else
02014         prop= RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_NONE);
02015         RNA_def_property_float_sdna(prop, NULL, "bevel_angle");
02016         RNA_def_property_range(prop, 0, 180);
02017         RNA_def_property_ui_range(prop, 0, 180, 100, 2);
02018 #endif
02019         RNA_def_property_ui_text(prop, "Angle", "Angle above which to bevel edges");
02020         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02021 }
02022 
02023 static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
02024 {
02025         StructRNA *srna;
02026         PropertyRNA *prop;
02027 
02028         static EnumPropertyItem shrink_type_items[] = {
02029                 {MOD_SHRINKWRAP_NEAREST_SURFACE, "NEAREST_SURFACEPOINT", 0, "Nearest Surface Point", "Shrinks the mesh to the nearest target surface"},
02030                 {MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project", "Shrinks the mesh to the nearest target surface along a given axis"},
02031                 {MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex", "Shrinks the mesh to the nearest target vertex"},
02032                 {0, NULL, 0, NULL, NULL}};
02033         
02034         static EnumPropertyItem shrink_face_cull_items[] = {
02035                 {0, "OFF", 0, "Off", ""},
02036                 {MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, "FRONT", 0, "Front", ""},
02037                 {MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, "BACK", 0, "Back", ""},
02038                 {0, NULL, 0, NULL, NULL}};
02039 
02040         srna= RNA_def_struct(brna, "ShrinkwrapModifier", "Modifier");
02041         RNA_def_struct_ui_text(srna, "Shrinkwrap Modifier", "Shrink wrapping modifier to shrink wrap and object to a target");
02042         RNA_def_struct_sdna(srna, "ShrinkwrapModifierData");
02043         RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
02044 
02045         prop= RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
02046         RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
02047         RNA_def_property_enum_items(prop, shrink_type_items);
02048         RNA_def_property_ui_text(prop, "Mode", "");
02049         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02050 
02051         prop= RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
02052         RNA_def_property_enum_sdna(prop, NULL, "shrinkOpts");
02053         RNA_def_property_enum_items(prop, shrink_face_cull_items);
02054         RNA_def_property_enum_funcs(prop, "rna_ShrinkwrapModifier_face_cull_get", "rna_ShrinkwrapModifier_face_cull_set", NULL);
02055         RNA_def_property_ui_text(prop, "Face Cull", "Stop vertices from projecting to a the face on the target when facing towards/away");
02056         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02057 
02058         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
02059         RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
02060         RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL, "rna_Mesh_object_poll");
02061         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
02062         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
02063 
02064         prop= RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
02065         RNA_def_property_pointer_sdna(prop, NULL, "auxTarget");
02066         RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
02067         RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_auxiliary_target_set", NULL, "rna_Mesh_object_poll");
02068         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
02069         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
02070 
02071         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
02072         RNA_def_property_string_sdna(prop, NULL, "vgroup_name");
02073         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
02074         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ShrinkwrapModifier_vgroup_set");
02075         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02076 
02077         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
02078         RNA_def_property_float_sdna(prop, NULL, "keepDist");
02079         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
02080         RNA_def_property_ui_range(prop, -100, 100, 1, 2);
02081         RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
02082         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02083 
02084         prop= RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
02085         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
02086         RNA_def_property_ui_text(prop, "X", "");
02087         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02088 
02089         prop= RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
02090         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
02091         RNA_def_property_ui_text(prop, "Y", "");
02092         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02093 
02094         prop= RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
02095         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
02096         RNA_def_property_ui_text(prop, "Z", "");
02097         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02098         
02099         prop= RNA_def_property(srna, "subsurf_levels", PROP_INT, PROP_NONE);
02100         RNA_def_property_int_sdna(prop, NULL, "subsurfLevels");
02101         RNA_def_property_range(prop, 0, 6);
02102         RNA_def_property_ui_range(prop, 0, 6, 1, 0);
02103         RNA_def_property_ui_text(prop, "Subsurf Levels", "Number of subdivisions that must be performed before extracting vertices' positions and normals");
02104         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02105 
02106         prop= RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
02107         RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR);
02108         RNA_def_property_ui_text(prop, "Negative", "Allow vertices to move in the negative direction of axis");
02109         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02110 
02111         prop= RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
02112         RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR);
02113         RNA_def_property_ui_text(prop, "Positive", "Allow vertices to move in the positive direction of axis");
02114         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02115 
02116         prop= RNA_def_property(srna, "use_keep_above_surface", PROP_BOOLEAN, PROP_NONE);
02117         RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE);
02118         RNA_def_property_ui_text(prop, "Keep Above Surface", "");
02119         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02120 }
02121 
02122 static void rna_def_modifier_fluidsim(BlenderRNA *brna)
02123 {
02124         StructRNA *srna;
02125         PropertyRNA *prop;
02126 
02127         srna= RNA_def_struct(brna, "FluidSimulationModifier", "Modifier");
02128         RNA_def_struct_ui_text(srna, "Fluid Simulation Modifier", "Fluid simulation modifier");
02129         RNA_def_struct_sdna(srna, "FluidsimModifierData");
02130         RNA_def_struct_ui_icon(srna, ICON_MOD_FLUIDSIM);
02131 
02132         prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
02133         RNA_def_property_flag(prop, PROP_NEVER_NULL);
02134         RNA_def_property_pointer_sdna(prop, NULL, "fss");
02135         RNA_def_property_ui_text(prop, "Settings", "Settings for how this object is used in the fluid simulation");
02136 }
02137 
02138 static void rna_def_modifier_mask(BlenderRNA *brna)
02139 {
02140         StructRNA *srna;
02141         PropertyRNA *prop;
02142 
02143         static EnumPropertyItem modifier_mask_mode_items[] = {
02144                 {MOD_MASK_MODE_VGROUP, "VERTEX_GROUP", 0, "Vertex Group", ""},
02145                 {MOD_MASK_MODE_ARM, "ARMATURE", 0, "Armature", ""},
02146                 {0, NULL, 0, NULL, NULL}};
02147 
02148         srna= RNA_def_struct(brna, "MaskModifier", "Modifier");
02149         RNA_def_struct_ui_text(srna, "Mask Modifier", "Mask modifier to hide parts of the mesh");
02150         RNA_def_struct_sdna(srna, "MaskModifierData");
02151         RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
02152 
02153         prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
02154         RNA_def_property_enum_items(prop, modifier_mask_mode_items);
02155         RNA_def_property_ui_text(prop, "Mode", "");
02156         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02157 
02158         prop= RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE);
02159         RNA_def_property_pointer_sdna(prop, NULL, "ob_arm");
02160         RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask");
02161         RNA_def_property_pointer_funcs(prop, NULL, "rna_MaskModifier_armature_set", NULL, "rna_Armature_object_poll");
02162         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
02163         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
02164 
02165         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
02166         RNA_def_property_string_sdna(prop, NULL, "vgroup");
02167         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
02168         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MaskModifier_vgroup_set");
02169         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02170 
02171         prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
02172         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MASK_INV);
02173         RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
02174         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02175 }
02176 
02177 static void rna_def_modifier_simpledeform(BlenderRNA *brna)
02178 {
02179         StructRNA *srna;
02180         PropertyRNA *prop;
02181 
02182         static EnumPropertyItem simple_deform_mode_items[] = {
02183                 {MOD_SIMPLEDEFORM_MODE_TWIST, "TWIST", 0, "Twist", "Rotates around the Z axis of the modifier space"},
02184                 {MOD_SIMPLEDEFORM_MODE_BEND, "BEND", 0, "Bend", "Bends the mesh over the Z axis of the modifier space"},
02185                 {MOD_SIMPLEDEFORM_MODE_TAPER, "TAPER", 0, "Taper", "Linearly scales along Z axis of the modifier space"},
02186                 {MOD_SIMPLEDEFORM_MODE_STRETCH, "STRETCH", 0, "Stretch", "Stretches the object along the Z axis of the modifier space"},
02187                 {0, NULL, 0, NULL, NULL}};
02188 
02189         srna= RNA_def_struct(brna, "SimpleDeformModifier", "Modifier");
02190         RNA_def_struct_ui_text(srna, "SimpleDeform Modifier", "Simple deformation modifier to apply effects such as twisting and bending");
02191         RNA_def_struct_sdna(srna, "SimpleDeformModifierData");
02192         RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLEDEFORM);
02193 
02194         prop= RNA_def_property(srna, "deform_method", PROP_ENUM, PROP_NONE);
02195         RNA_def_property_enum_sdna(prop, NULL, "mode");
02196         RNA_def_property_enum_items(prop, simple_deform_mode_items);
02197         RNA_def_property_ui_text(prop, "Mode", "");
02198         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02199 
02200         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
02201         RNA_def_property_string_sdna(prop, NULL, "vgroup_name");
02202         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
02203         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SimpleDeformModifier_vgroup_set");
02204         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02205 
02206         prop= RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE);
02207         RNA_def_property_ui_text(prop, "Origin", "Origin of modifier space coordinates");
02208         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
02209         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
02210 
02211         prop= RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
02212         RNA_def_property_boolean_sdna(prop, NULL, "originOpts", MOD_SIMPLEDEFORM_ORIGIN_LOCAL);
02213         RNA_def_property_ui_text(prop, "Relative", "Sets the origin of deform space to be relative to the object");
02214         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02215 
02216         prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
02217         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
02218         RNA_def_property_ui_range(prop, -10, 10, 1, 3);
02219         RNA_def_property_ui_text(prop, "Factor", "Amount to deform object");
02220         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02221 
02222         prop= RNA_def_property(srna, "limits", PROP_FLOAT, PROP_NONE);
02223         RNA_def_property_float_sdna(prop, NULL, "limit");
02224         RNA_def_property_array(prop, 2);
02225         RNA_def_property_range(prop, 0, 1);
02226         RNA_def_property_ui_range(prop, 0, 1, 5, 2);
02227         RNA_def_property_ui_text(prop, "Limits", "Lower/Upper limits for deform");
02228         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02229 
02230         prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
02231         RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_X);
02232         RNA_def_property_ui_text(prop, "Lock X Axis", "Do not allow tapering along the X axis");
02233         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02234 
02235         prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
02236         RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_Y);
02237         RNA_def_property_ui_text(prop, "Lock Y Axis", "Do not allow tapering along the Y axis");
02238         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02239 }
02240 
02241 static void rna_def_modifier_surface(BlenderRNA *brna)
02242 {
02243         StructRNA *srna;
02244 
02245         srna= RNA_def_struct(brna, "SurfaceModifier", "Modifier");
02246         RNA_def_struct_ui_text(srna, "Surface Modifier", "Surface modifier defining modifier stack position used for surface fields");
02247         RNA_def_struct_sdna(srna, "SurfaceModifierData");
02248         RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
02249 }
02250 
02251 static void rna_def_modifier_solidify(BlenderRNA *brna)
02252 {
02253         StructRNA *srna;
02254         PropertyRNA *prop;
02255 
02256         srna= RNA_def_struct(brna, "SolidifyModifier", "Modifier");
02257         RNA_def_struct_ui_text(srna, "Solidify Modifier", "Create a solid skin by extruding, compensating for sharp angles");
02258         RNA_def_struct_sdna(srna, "SolidifyModifierData");
02259         RNA_def_struct_ui_icon(srna, ICON_MOD_SOLIDIFY);
02260 
02261         prop= RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
02262         RNA_def_property_float_sdna(prop, NULL, "offset");
02263         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
02264         RNA_def_property_ui_range(prop, -10, 10, 0.1, 4);
02265         RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell");
02266         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02267 
02268         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
02269         RNA_def_property_float_sdna(prop, NULL, "offset_fac");
02270         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
02271         RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
02272         RNA_def_property_ui_text(prop, "Offset", "Offset the thickness from the center");
02273         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02274 
02275         prop= RNA_def_property(srna, "edge_crease_inner", PROP_FLOAT, PROP_FACTOR);
02276         RNA_def_property_float_sdna(prop, NULL, "crease_inner");
02277         RNA_def_property_range(prop, 0, 1);
02278         RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
02279         RNA_def_property_ui_text(prop, "Inner Crease", "Assign a crease to inner edges");
02280         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02281 
02282         prop= RNA_def_property(srna, "edge_crease_outer", PROP_FLOAT, PROP_FACTOR);
02283         RNA_def_property_float_sdna(prop, NULL, "crease_outer");
02284         RNA_def_property_range(prop, 0, 1);
02285         RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
02286         RNA_def_property_ui_text(prop, "Outer Crease", "Assign a crease to outer edges");
02287         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02288 
02289         prop= RNA_def_property(srna, "edge_crease_rim", PROP_FLOAT, PROP_FACTOR);
02290         RNA_def_property_float_sdna(prop, NULL, "crease_rim");
02291         RNA_def_property_range(prop, 0, 1);
02292         RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
02293         RNA_def_property_ui_text(prop, "Rim Crease", "Assign a crease to the edges making up the rim");
02294         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02295 
02296         prop= RNA_def_property(srna, "material_offset", PROP_INT, PROP_NONE);
02297         RNA_def_property_int_sdna(prop, NULL, "mat_ofs");
02298         RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
02299         RNA_def_property_ui_text(prop, "Material Offset", "Offset material index of generated faces");
02300         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02301 
02302         prop= RNA_def_property(srna, "material_offset_rim", PROP_INT, PROP_NONE);
02303         RNA_def_property_int_sdna(prop, NULL, "mat_ofs_rim");
02304         RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
02305         RNA_def_property_ui_text(prop, "Rim Material Offset", "Offset material index of generated rim faces");
02306         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02307 
02308         prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
02309         RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
02310         RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
02311         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SolidifyModifier_vgroup_set");
02312         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02313 
02314         prop= RNA_def_property(srna, "use_rim", PROP_BOOLEAN, PROP_NONE);
02315         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_RIM);
02316         RNA_def_property_ui_text(prop, "Fill Rim", "Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)");
02317         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02318 
02319         prop= RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE);
02320         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_EVEN);
02321         RNA_def_property_ui_text(prop, "Even Thickness", "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)");
02322         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02323 
02324         prop= RNA_def_property(srna, "use_quality_normals", PROP_BOOLEAN, PROP_NONE);
02325         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_NORMAL_CALC);
02326         RNA_def_property_ui_text(prop, "High Quality Normals", "Calculate normals which result in more even thickness (slow, disable when not needed)");
02327         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02328 
02329         prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
02330         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_VGROUP_INV);
02331         RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
02332         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02333         
02334         
02335 }
02336 
02337 static void rna_def_modifier_screw(BlenderRNA *brna)
02338 {
02339         static EnumPropertyItem axis_items[]= {
02340                 {0, "X", 0, "X Axis", ""},
02341                 {1, "Y", 0, "Y Axis", ""},
02342                 {2, "Z", 0, "Z Axis", ""},
02343                 {0, NULL, 0, NULL, NULL}};
02344 
02345         StructRNA *srna;
02346         PropertyRNA *prop;
02347 
02348         srna= RNA_def_struct(brna, "ScrewModifier", "Modifier");
02349         RNA_def_struct_ui_text(srna, "Screw Modifier", "Revolve edges");
02350         RNA_def_struct_sdna(srna, "ScrewModifierData");
02351         RNA_def_struct_ui_icon(srna, ICON_MOD_SCREW);
02352 
02353         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
02354         RNA_def_property_pointer_sdna(prop, NULL, "ob_axis");
02355         RNA_def_property_ui_text(prop, "Object", "Object to define the screw axis");
02356         RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
02357         RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
02358 
02359         prop= RNA_def_property(srna, "steps", PROP_INT, PROP_UNSIGNED);
02360         RNA_def_property_range(prop, 2, 10000);
02361         RNA_def_property_ui_range(prop, 2, 512, 1, 0);
02362         RNA_def_property_ui_text(prop, "Steps", "Number of steps in the revolution");
02363         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02364 
02365         prop= RNA_def_property(srna, "render_steps", PROP_INT, PROP_UNSIGNED);
02366         RNA_def_property_range(prop, 2, 10000);
02367         RNA_def_property_ui_range(prop, 2, 512, 1, 0);
02368         RNA_def_property_ui_text(prop, "Render Steps", "Number of steps in the revolution");
02369         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02370 
02371         prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
02372         RNA_def_property_int_sdna(prop, NULL, "iter");
02373         RNA_def_property_range(prop, 1, 10000);
02374         RNA_def_property_ui_range(prop, 1, 100, 1, 0);
02375         RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply the screw operation");
02376         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02377 
02378         prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
02379         RNA_def_property_enum_items(prop, axis_items);
02380         RNA_def_property_ui_text(prop, "Axis", "Screw axis");
02381         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02382 
02383         prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
02384         RNA_def_property_ui_range(prop, 0, -M_PI*2, M_PI*2, 2);
02385         RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
02386         RNA_def_property_ui_text(prop, "Angle", "Angle of revolution");
02387         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02388 
02389         prop= RNA_def_property(srna, "screw_offset", PROP_FLOAT, PROP_DISTANCE);
02390         RNA_def_property_float_sdna(prop, NULL, "screw_ofs");
02391         RNA_def_property_ui_text(prop, "Screw", "Offset the revolution along its axis");
02392         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02393 
02394         prop= RNA_def_property(srna, "use_normal_flip", PROP_BOOLEAN, PROP_NONE);
02395         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_NORMAL_FLIP);
02396         RNA_def_property_ui_text(prop, "Flip", "Flip normals of lathed faces");
02397         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02398 
02399         prop= RNA_def_property(srna, "use_normal_calculate", PROP_BOOLEAN, PROP_NONE);
02400         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_NORMAL_CALC);
02401         RNA_def_property_ui_text(prop, "Calc Order", "Calculate the order of edges (needed for meshes, but not curves)");
02402         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02403 
02404         prop= RNA_def_property(srna, "use_object_screw_offset", PROP_BOOLEAN, PROP_NONE);
02405         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_OBJECT_OFFSET);
02406         RNA_def_property_ui_text(prop, "Object Screw", "Use the distance between the objects to make a screw");
02407         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02408 
02409         /*prop= RNA_def_property(srna, "use_angle_object", PROP_BOOLEAN, PROP_NONE);
02410         RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SCREW_OBJECT_ANGLE);
02411         RNA_def_property_ui_text(prop, "Object Angle", "Use the angle between the objects rather than the fixed angle");
02412         RNA_def_property_update(prop, 0, "rna_Modifier_update");*/
02413 }
02414 
02415 void RNA_def_modifier(BlenderRNA *brna)
02416 {
02417         StructRNA *srna;
02418         PropertyRNA *prop;
02419         
02420         /* data */
02421         srna= RNA_def_struct(brna, "Modifier", NULL);
02422         RNA_def_struct_ui_text(srna , "Modifier", "Modifier affecting the geometry data of an object");
02423         RNA_def_struct_refine_func(srna, "rna_Modifier_refine");
02424         RNA_def_struct_path_func(srna, "rna_Modifier_path");
02425         RNA_def_struct_sdna(srna, "ModifierData");
02426         
02427         /* strings */
02428         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
02429         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Modifier_name_set");
02430         RNA_def_property_ui_text(prop, "Name", "Modifier name");
02431         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER|NA_RENAME, NULL);
02432         RNA_def_struct_name_property(srna, prop);
02433         
02434         /* enums */
02435         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
02436         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
02437         RNA_def_property_enum_sdna(prop, NULL, "type");
02438         RNA_def_property_enum_items(prop, modifier_type_items);
02439         RNA_def_property_ui_text(prop, "Type", "");
02440         
02441         /* flags */
02442         prop= RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
02443         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Realtime);
02444         RNA_def_property_ui_text(prop, "Realtime", "Realtime display of a modifier");
02445         RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
02446         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02447         RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 0);
02448         
02449         prop= RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
02450         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Render);
02451         RNA_def_property_ui_text(prop, "Render", "Use modifier during rendering");
02452         RNA_def_property_ui_icon(prop, ICON_SCENE, 0);
02453         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, NULL);
02454         
02455         prop= RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
02456         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Editmode);
02457         RNA_def_property_ui_text(prop, "Editmode", "Use modifier while in the edit mode");
02458         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02459         RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
02460         
02461         prop= RNA_def_property(srna, "show_on_cage", PROP_BOOLEAN, PROP_NONE);
02462         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_OnCage);
02463         RNA_def_property_ui_text(prop, "On Cage", "Enable direct editing of modifier control cage");
02464         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02465         
02466         prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
02467         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
02468         RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
02469         RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
02470 
02471         prop= RNA_def_property(srna, "use_apply_on_spline", PROP_BOOLEAN, PROP_NONE);
02472         RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_ApplyOnSpline);
02473         RNA_def_property_ui_text(prop, "Apply on spline", "Apply this and all preceding deformation modifiers on splines' points rather than on filled curve/surface");
02474         RNA_def_property_ui_icon(prop, ICON_SURFACE_DATA, 0);
02475         RNA_def_property_update(prop, 0, "rna_Modifier_update");
02476 
02477         /* types */
02478         rna_def_modifier_subsurf(brna);
02479         rna_def_modifier_lattice(brna);
02480         rna_def_modifier_curve(brna);
02481         rna_def_modifier_build(brna);
02482         rna_def_modifier_mirror(brna);
02483         rna_def_modifier_decimate(brna);
02484         rna_def_modifier_wave(brna);
02485         rna_def_modifier_armature(brna);
02486         rna_def_modifier_hook(brna);
02487         rna_def_modifier_softbody(brna);
02488         rna_def_modifier_boolean(brna);
02489         rna_def_modifier_array(brna);
02490         rna_def_modifier_edgesplit(brna);
02491         rna_def_modifier_displace(brna);
02492         rna_def_modifier_uvproject(brna);
02493         rna_def_modifier_smooth(brna);
02494         rna_def_modifier_cast(brna);
02495         rna_def_modifier_meshdeform(brna);
02496         rna_def_modifier_particlesystem(brna);
02497         rna_def_modifier_particleinstance(brna);
02498         rna_def_modifier_explode(brna);
02499         rna_def_modifier_cloth(brna);
02500         rna_def_modifier_collision(brna);
02501         rna_def_modifier_bevel(brna);
02502         rna_def_modifier_shrinkwrap(brna);
02503         rna_def_modifier_fluidsim(brna);
02504         rna_def_modifier_mask(brna);
02505         rna_def_modifier_simpledeform(brna);
02506         rna_def_modifier_warp(brna);
02507         rna_def_modifier_multires(brna);
02508         rna_def_modifier_surface(brna);
02509         rna_def_modifier_smoke(brna);
02510         rna_def_modifier_solidify(brna);
02511         rna_def_modifier_screw(brna);
02512 }
02513 
02514 #endif