svn merge -r39990:39991 https://svn.blender.org/svnroot/bf-blender/trunk/blender
authorCampbell Barton <ideasman42@gmail.com>
Thu, 8 Sep 2011 08:08:31 +0000 (08:08 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 8 Sep 2011 08:08:31 +0000 (08:08 +0000)
1  2 
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/writefile.c
source/blender/makesdna/DNA_modifier_types.h
source/blender/makesrna/RNA_access.h
source/blender/makesrna/intern/rna_modifier.c
source/blender/modifiers/CMakeLists.txt
source/blender/modifiers/MOD_modifiertypes.h
source/blender/modifiers/intern/MOD_util.c

index 82ad20d4001c160f75a62a8f60b1e67640ecf710,c4eef981669e21ef6d8de9b56eb6f88c78f80d78..59373490c83911a9efb5455753df9b5eac059610
@@@ -71,7 -71,9 +71,10 @@@ typedef enum ModifierType 
        eModifierType_Solidify,
        eModifierType_Screw,
        eModifierType_Warp,
+       eModifierType_WeightVGEdit,
+       eModifierType_WeightVGMix,
+       eModifierType_WeightVGProximity,
 +      eModifierType_NgonInterp,
        NUM_MODIFIER_TYPES
  } ModifierType;
  
Simple merge
index 2800739ebdae0fe252457fe93129d0e3e7a8d88e,76e34352e8d9ea02728a253047ea9b22a4e1d278..657ec8939252ee5f324ca17c69db904dd0c5b05f
@@@ -2423,25 -2486,298 +2489,317 @@@ static void rna_def_modifier_screw(Blen
        RNA_def_property_update(prop, 0, "rna_Modifier_update");*/
  }
  
+ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
+ {
+       static EnumPropertyItem weightvg_mask_tex_map_items[] = {
+               {MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Local", ""},
+               {MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", ""},
+               {MOD_DISP_MAP_OBJECT, "OBJECT", 0, "Object", ""},
+               {MOD_DISP_MAP_UV, "UV", 0, "UV", ""},
+               {0, NULL, 0, NULL, NULL}};
+       static EnumPropertyItem weightvg_mask_tex_used_items[] = {
+               {MOD_WVG_MASK_TEX_USE_INT, "INT", 0, "Intensity", ""},
+               {MOD_WVG_MASK_TEX_USE_RED, "RED", 0, "Red", ""},
+               {MOD_WVG_MASK_TEX_USE_GREEN, "GREEN", 0, "Green", ""},
+               {MOD_WVG_MASK_TEX_USE_BLUE, "BLUE", 0, "Blue", ""},
+               {MOD_WVG_MASK_TEX_USE_HUE, "HUE", 0, "Hue", ""},
+               {MOD_WVG_MASK_TEX_USE_SAT, "SAT", 0, "Saturation", ""},
+               {MOD_WVG_MASK_TEX_USE_VAL, "VAL", 0, "Value", ""},
+               {MOD_WVG_MASK_TEX_USE_ALPHA, "ALPHA", 0, "Alpha", ""},
+               {0, NULL, 0, NULL, NULL}};
+       PropertyRNA *prop;
+       prop= RNA_def_property(srna, "mask_constant", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+       RNA_def_property_ui_range(prop, -1.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Influence", "Global influence of current modifications on vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mask_vertex_group", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "mask_defgrp_name");
+       RNA_def_property_ui_text(prop, "Mask VGroup", "Masking vertex group name.");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_mask_vgroup_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mask_texture", PROP_POINTER, PROP_NONE);
+       RNA_def_property_ui_text(prop, "Masking Tex", "Masking texture.");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mask_tex_use_channel", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_mask_tex_used_items);
+       RNA_def_property_ui_text(prop, "Use Channel", "Which texture channel to use for masking.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mask_tex_mapping", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_mask_tex_map_items);
+       RNA_def_property_ui_text(prop, "Texture Coordinates", "Which texture coordinates "
+                                                             "to use for mapping.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+       prop= RNA_def_property(srna, "mask_tex_uv_layer", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "mask_tex_uvlayer_name");
+       RNA_def_property_ui_text(prop, "UV Layer", "UV layer name");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_mask_uvlayer_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mask_tex_map_object", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "mask_tex_map_obj");
+       RNA_def_property_ui_text(prop, "Texture Coordinate Object", "Which object to take texture "
+                                                                   "coordinates from.");
+       RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+       RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+ }
+ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
+ {
+       static EnumPropertyItem weightvg_edit_mapping_mode_items[] = {
+               {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", ""},
+               {MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
+               {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
+               {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
+               {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
+               {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
+               {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
+               {MOD_WVG_MAPPING_STEP, "STEP", ICON_NOCURVE, "Median Step", ""}, /* Would need a better icon... */
+               {0, NULL, 0, NULL, NULL}};
+       StructRNA *srna;
+       PropertyRNA *prop;
+       srna= RNA_def_struct(brna, "WeightVGEditModifier", "Modifier");
+       RNA_def_struct_ui_text(srna, "WeightVG Edit Modifier",
+                              "Edit the weights of vertices in a group.");
+       RNA_def_struct_sdna(srna, "WeightVGEditModifierData");
+       RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
+       prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
+       RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name.");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_vgroup_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mapping_mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_edit_mapping_mode_items);
+       RNA_def_property_ui_text(prop, "Mapping Mode", "How weights are mapped to there new values.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "edit_flags", MOD_WVG_EDIT_ADD2VG);
+       RNA_def_property_ui_text(prop, "Group Add", "Add vertices with weight over threshold "
+                                                   "to vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "use_remove", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "edit_flags", MOD_WVG_EDIT_REMFVG);
+       RNA_def_property_ui_text(prop, "Group Remove", "Remove vertices with weight below threshold "
+                                                     "from vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, 0.0, 1.0f);
+       RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Default Weight", "Default weight a vertex will have if "
+                                                        "it is not in the vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "cmap_curve");
+       RNA_def_property_ui_text(prop, "Mapping Curve", "Custom mapping curve.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "add_threshold", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "add_threshold");
+       RNA_def_property_range(prop, 0.0, 1.0);
+       RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Add Threshold", "Lower bound for a vertex's weight "
+                                                       "to be added to the vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "remove_threshold", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "rem_threshold");
+       RNA_def_property_range(prop, 0.0, 1.0);
+       RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Rem Threshold", "Upper bound for a vertex's weight "
+                                                       "to be removed from the vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       /* Common masking properties. */
+       rna_def_modifier_weightvg_mask(brna, srna);
+ }
+ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
+ {
+       static EnumPropertyItem weightvg_mix_modes_items[] = {
+               {MOD_WVG_MIX_SET, "SET", 0, "Replace weights", ""},
+               {MOD_WVG_MIX_ADD, "ADD", 0, "Add to weights", ""},
+               {MOD_WVG_MIX_SUB, "SUB", 0, "Subtract from weights", ""},
+               {MOD_WVG_MIX_MUL, "MUL", 0, "Multiply weights", ""},
+               {MOD_WVG_MIX_DIV, "DIV", 0, "Divide weights", ""},
+               {MOD_WVG_MIX_DIF, "DIF", 0, "Difference", ""},
+               {MOD_WVG_MIX_AVG, "AVG", 0, "Average", ""},
+               {0, NULL, 0, NULL, NULL}};
+       static EnumPropertyItem weightvg_mix_set_items[] = {
+               {MOD_WVG_SET_ALL,   "ALL",   0, "All vertices", ""},
+               {MOD_WVG_SET_A,     "A",   0, "Vertices from group A", ""},
+               {MOD_WVG_SET_B,     "B",   0, "Vertices from group B", ""},
+               {MOD_WVG_SET_OR,    "OR", 0, "Vertices from one group", ""},
+               {MOD_WVG_SET_AND,   "AND", 0, "Vertices from both groups", ""},
+               {0, NULL, 0, NULL, NULL}};
+       StructRNA *srna;
+       PropertyRNA *prop;
+       srna= RNA_def_struct(brna, "WeightVGMixModifier", "Modifier");
+       RNA_def_struct_ui_text(srna, "WeightVG Mix Modifier",
+                              "Mix the weights of two vertex groups.");
+       RNA_def_struct_sdna(srna, "WeightVGMixModifierData");
+       RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
+       prop= RNA_def_property(srna, "vertex_group_a", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "defgrp_name_a");
+       RNA_def_property_ui_text(prop, "Vertex Group A", "First vertex group name.");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_vgroup_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "vertex_group_b", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "defgrp_name_b");
+       RNA_def_property_ui_text(prop, "Vertex Group B", "Second vertex group name.");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGMixModifier_vgroup2_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "default_weight_a", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, 0.0, 1.0f);
+       RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Default Weight A", "Default weight a vertex will have if "
+                                                        "it is not in the first vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "default_weight_b", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, 0.0, 1.0f);
+       RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Default Weight B", "Default weight a vertex will have if "
+                                                          "it is not in the second vgroup.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_mix_modes_items);
+       RNA_def_property_ui_text(prop, "Mix Mode", "How weights from vgroup 2 affect weights "
+                                                  "of vgroup 1.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mix_set", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_mix_set_items);
+       RNA_def_property_ui_text(prop, "Vertex Set", "Which vertices should be affected.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       /* Common masking properties. */
+       rna_def_modifier_weightvg_mask(brna, srna);
+ }
+ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
+ {
+       static EnumPropertyItem weightvg_proximity_modes_items[] = {
+               {MOD_WVG_PROXIMITY_OBJECT, "OBJECT", 0, "Object Distance",
+                "Use distance between affected and target objects."},
+               {MOD_WVG_PROXIMITY_GEOMETRY, "GEOMETRY", 0, "Geometry Distance",
+                "Use distance between affected object's vertices and target object, or target object's geometry."},
+               {0, NULL, 0, NULL, NULL}};
+       static EnumPropertyItem proximity_geometry_items[] = {
+               {MOD_WVG_PROXIMITY_GEOM_VERTS, "VERTEX", ICON_VERTEXSEL, "Vertex", ""},
+               {MOD_WVG_PROXIMITY_GEOM_EDGES, "EDGE", ICON_EDGESEL, "Edge", ""},
+               {MOD_WVG_PROXIMITY_GEOM_FACES, "FACE", ICON_FACESEL, "Face", ""},
+               {0, NULL, 0, NULL, NULL}};
+       static EnumPropertyItem weightvg_proximity_mapping_mode_items[] = {
+               {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", ""},
+               /* No curve mapping here! */
+               {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
+               {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
+               {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
+               {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
+               {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
+               {MOD_WVG_MAPPING_STEP, "STEP", ICON_NOCURVE, "Median Step", ""}, /* Would need a better icon... */
+               {0, NULL, 0, NULL, NULL}};
+       StructRNA *srna;
+       PropertyRNA *prop;
+       srna= RNA_def_struct(brna, "WeightVGProximityModifier", "Modifier");
+       RNA_def_struct_ui_text(srna, "WeightVG Proximity Modifier",
+                              "Set the weights of vertices in a group from a target object's "
+                              "distance.");
+       RNA_def_struct_sdna(srna, "WeightVGProximityModifierData");
+       RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
+       prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
+       RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name.");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_vgroup_set");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "proximity_mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_proximity_modes_items);
+       RNA_def_property_ui_text(prop, "Proximity Mode", "Which distances to target object to use.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "proximity_geometry", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "proximity_flags");
+       RNA_def_property_enum_items(prop, proximity_geometry_items);
+       RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
+       RNA_def_property_ui_text(prop, "Proximity Geometry", "Use shortest distance to target object's geometry as weight");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "proximity_ob_target");
+       RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from.");
+       RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
+       RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+       prop= RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, 0.0, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Lowest Dist", "Distance mapping to weight 0.0.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "max_dist", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_range(prop, 0.0, FLT_MAX);
+       RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, 0);
+       RNA_def_property_ui_text(prop, "Highest Dist", "Distance mapping to weight 1.0.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       prop= RNA_def_property(srna, "mapping_mode", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_items(prop, weightvg_proximity_mapping_mode_items);
+       RNA_def_property_ui_text(prop, "Mapping Mode", "How weights are mapped to there new values.");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+       /* Common masking properties. */
+       rna_def_modifier_weightvg_mask(brna, srna);
+ }
 +
 +
 +static void rna_def_modifier_ngoninterp(BlenderRNA *brna)
 +{
 +      StructRNA *srna;
 +      PropertyRNA *prop;
 +
 +      srna= RNA_def_struct(brna, "NgonInterpModifier", "Modifier");
 +      RNA_def_struct_ui_text(srna, "Precision UV Modifier", "Precision UV interpolation");
 +      RNA_def_struct_sdna(srna, "NgonInterpModifierData");
 +      RNA_def_struct_ui_icon(srna, ICON_MOD_SCREW);
 +
 +      prop= RNA_def_property(srna, "resolution", PROP_INT, PROP_UNSIGNED);
 +      RNA_def_property_range(prop, 1, 10000);
 +      RNA_def_property_ui_range(prop, 1, 100, 1, 0);
 +      RNA_def_property_ui_text(prop, "Resolution", "Size of interpolation grids");
 +      RNA_def_property_update(prop, 0, "rna_Modifier_update");
 +
 +}
  void RNA_def_modifier(BlenderRNA *brna)
  {
        StructRNA *srna;
        rna_def_modifier_smoke(brna);
        rna_def_modifier_solidify(brna);
        rna_def_modifier_screw(brna);
+       rna_def_modifier_weightvgedit(brna);
+       rna_def_modifier_weightvgmix(brna);
+       rna_def_modifier_weightvgproximity(brna);
 +      rna_def_modifier_ngoninterp(brna);
  }
  
  #endif
index 510a3d0fc7786dfa84a3f47cf2073667b1517305,0ba906a433b66a9643437b40238d643561ee07c1..c545beba75ac4b7a20e07df17ed70e308cd0e17f
@@@ -72,7 -72,9 +72,10 @@@ extern ModifierTypeInfo modifierType_Sh
  extern ModifierTypeInfo modifierType_Solidify;
  extern ModifierTypeInfo modifierType_Screw;
  extern ModifierTypeInfo modifierType_Warp;
+ extern ModifierTypeInfo modifierType_WeightVGEdit;
+ extern ModifierTypeInfo modifierType_WeightVGMix;
+ extern ModifierTypeInfo modifierType_WeightVGProximity;
 +extern ModifierTypeInfo modifierType_NgonInterp;
  
  /* MOD_util.c */
  void modifier_type_init(ModifierTypeInfo *types[]);
index a60a665b3d08f02c13075722237ef66edbbb6a7f,26e9d48cd0a58bac6bf686b2f24b235ecc6b8e3f..13abaa7058fcb2cc15070a6b36daecbef6d84583
@@@ -295,6 -295,8 +295,9 @@@ void modifier_type_init(ModifierTypeInf
        INIT_TYPE(Solidify);
        INIT_TYPE(Screw);
        INIT_TYPE(Warp);
+       INIT_TYPE(WeightVGEdit);
+       INIT_TYPE(WeightVGMix);
+       INIT_TYPE(WeightVGProximity);
 +      INIT_TYPE(NgonInterp);
  #undef INIT_TYPE
  }