Fix to enable copying of the vertex group field for the Curve, Lattice,
authorBen Batt <benbatt@gmail.com>
Fri, 8 Sep 2006 01:05:57 +0000 (01:05 +0000)
committerBen Batt <benbatt@gmail.com>
Fri, 8 Sep 2006 01:05:57 +0000 (01:05 +0000)
Armature and Hook modifiers, and the flag field for the Mirror modifier. These
modifiers should all be copied correctly now.

This fix also means that converting modifiers to mesh with Alt-C now works
correctly (the convertmenu function copies the modifers before applying them,
so it wasn't always giving correct results for the above modifiers before).

The convertmenu function has also been changed to use DM_to_mesh instead of
converting to DispListMesh and using displistmesh_to_mesh, which means that
extra mesh data such as dverts is preserved.

source/blender/blenkernel/intern/modifier.c
source/blender/src/editobject.c

index 0a9fcd7d1c1dab4322d1a06840dbb01fb1bf77e7..bf8d8218e598b259678e37b238cf8c9a79262762 100644 (file)
@@ -179,6 +179,7 @@ static void curveModifier_copyData(ModifierData *md, ModifierData *target)
        CurveModifierData *tcmd = (CurveModifierData*) target;
 
        tcmd->object = cmd->object;
        CurveModifierData *tcmd = (CurveModifierData*) target;
 
        tcmd->object = cmd->object;
+       strncpy(tcmd->name, cmd->name, 32);
 }
 
 static int curveModifier_isDisabled(ModifierData *md)
 }
 
 static int curveModifier_isDisabled(ModifierData *md)
@@ -243,6 +244,7 @@ static void latticeModifier_copyData(ModifierData *md, ModifierData *target)
        LatticeModifierData *tlmd = (LatticeModifierData*) target;
 
        tlmd->object = lmd->object;
        LatticeModifierData *tlmd = (LatticeModifierData*) target;
 
        tlmd->object = lmd->object;
+       strncpy(tlmd->name, lmd->name, 32);
 }
 
 static int latticeModifier_isDisabled(ModifierData *md)
 }
 
 static int latticeModifier_isDisabled(ModifierData *md)
@@ -1076,6 +1078,7 @@ static void mirrorModifier_copyData(ModifierData *md, ModifierData *target)
        MirrorModifierData *tmmd = (MirrorModifierData*) target;
 
        tmmd->axis = mmd->axis;
        MirrorModifierData *tmmd = (MirrorModifierData*) target;
 
        tmmd->axis = mmd->axis;
+       tmmd->flag = mmd->flag;
        tmmd->tolerance = mmd->tolerance;
 }
 
        tmmd->tolerance = mmd->tolerance;
 }
 
@@ -1258,10 +1261,10 @@ static void edgesplitModifier_initData(ModifierData *md)
 static void edgesplitModifier_copyData(ModifierData *md, ModifierData *target)
 {
        EdgeSplitModifierData *emd = (EdgeSplitModifierData*) md;
 static void edgesplitModifier_copyData(ModifierData *md, ModifierData *target)
 {
        EdgeSplitModifierData *emd = (EdgeSplitModifierData*) md;
-       EdgeSplitModifierData *tamd = (EdgeSplitModifierData*) target;
+       EdgeSplitModifierData *temd = (EdgeSplitModifierData*) target;
 
 
-       tamd->split_angle = emd->split_angle;
-       tamd->flags = emd->flags;
+       temd->split_angle = emd->split_angle;
+       temd->flags = emd->flags;
 }
 
 typedef struct SmoothMesh {
 }
 
 typedef struct SmoothMesh {
@@ -3055,6 +3058,7 @@ static void armatureModifier_copyData(ModifierData *md, ModifierData *target)
 
        tamd->object = amd->object;
        tamd->deformflag = amd->deformflag;
 
        tamd->object = amd->object;
        tamd->deformflag = amd->deformflag;
+       strncpy(tamd->defgrp_name, amd->defgrp_name, 32);
 }
 
 static int armatureModifier_isDisabled(ModifierData *md)
 }
 
 static int armatureModifier_isDisabled(ModifierData *md)
@@ -3134,6 +3138,7 @@ static void hookModifier_copyData(ModifierData *md, ModifierData *target)
        thmd->totindex = hmd->totindex;
        thmd->indexar = MEM_dupallocN(hmd->indexar);
        memcpy(thmd->parentinv, hmd->parentinv, sizeof(hmd->parentinv));
        thmd->totindex = hmd->totindex;
        thmd->indexar = MEM_dupallocN(hmd->indexar);
        memcpy(thmd->parentinv, hmd->parentinv, sizeof(hmd->parentinv));
+       strncpy(thmd->name, hmd->name, 32);
 }
 
 static void hookModifier_freeData(ModifierData *md)
 }
 
 static void hookModifier_freeData(ModifierData *md)
index ea8305cde9573e90ec8f25e828ee7c5f866992c9..753353b24ff5b6ab27da37a6001f107610027257 100644 (file)
@@ -2359,7 +2359,6 @@ void convertmenu(void)
                        
                        if(ob->flag & OB_DONE);
                        else if(ob->type==OB_MESH && ob->modifiers.first) { /* converting a mesh with no modifiers causes a segfault */
                        
                        if(ob->flag & OB_DONE);
                        else if(ob->type==OB_MESH && ob->modifiers.first) { /* converting a mesh with no modifiers causes a segfault */
-                               DispListMesh *dlm;
                                DerivedMesh *dm;
                                int needsfree=0;
                                
                                DerivedMesh *dm;
                                int needsfree=0;
                                
@@ -2390,8 +2389,8 @@ void convertmenu(void)
                                dm= mesh_get_derived_final(ob1, &needsfree);
                                //dm= mesh_create_derived_no_deform(ob1, NULL); this was called original (instead of get_derived). man o man why! (ton)
                                
                                dm= mesh_get_derived_final(ob1, &needsfree);
                                //dm= mesh_create_derived_no_deform(ob1, NULL); this was called original (instead of get_derived). man o man why! (ton)
                                
-                               dlm= dm->convertToDispListMesh(dm, 0);
-                               displistmesh_to_mesh(dlm, ob1->data);
+                               DM_to_mesh(dm, ob1->data);
+
                                if(needsfree) dm->release(dm);
                                object_free_modifiers(ob1);     /* after derivedmesh calls! */
                                
                                if(needsfree) dm->release(dm);
                                object_free_modifiers(ob1);     /* after derivedmesh calls! */