Patch #21267 by Sergey Sharybin
authorTon Roosendaal <ton@blender.org>
Sat, 27 Feb 2010 16:06:33 +0000 (16:06 +0000)
committerTon Roosendaal <ton@blender.org>
Sat, 27 Feb 2010 16:06:33 +0000 (16:06 +0000)
His log:
There is a small typo in copy_curve(): there will be serious troubles
if this functions is called for OB_FONT in edit mode (for my cases
it is segmentation fault).
I think we should set editfont to NULL for cloned curves (as it is made
for edit nurb).

This bug was found by trying to edit text with applied Cast modifier
and while I was searching what's wrong, I've found that in
castModifier_deformVerts() DerivedMesh is creating for all objects,
but in castModifier_*_do() derived mesh is used only for OB_MESH
objects. Maybe this place could be optimized a bit by skipping DM
creation for non-meshes?

source/blender/blenkernel/intern/curve.c
source/blender/blenkernel/intern/modifier.c

index 9d33bc5..fb27327 100644 (file)
@@ -191,6 +191,7 @@ Curve *copy_curve(Curve *cu)
        cun->path= 0;
 
        cun->editnurb= NULL;
+       cun->editfont= NULL;
 
 #if 0  // XXX old animation system
        /* single user ipo too */
index 65843c2..146701f 100644 (file)
@@ -4825,9 +4825,15 @@ static void castModifier_deformVerts(
                                     ModifierData *md, Object *ob, DerivedMesh *derivedData,
         float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
 {
-       DerivedMesh *dm = get_dm(md->scene, ob, NULL, derivedData, NULL, 0);
+       DerivedMesh *dm = NULL;
        CastModifierData *cmd = (CastModifierData *)md;
 
+       if (ob->type == OB_MESH) {
+               /* DerivedMesh is used only in case object is MESH */
+               /* so we could optimize modifier applying by skipping DM creation */
+               dm = get_dm(md->scene, ob, NULL, derivedData, NULL, 0);
+       }
+
        if (cmd->type == MOD_CAST_TYPE_CUBOID) {
                castModifier_cuboid_do(cmd, ob, dm, vertexCos, numVerts);
        } else { /* MOD_CAST_TYPE_SPHERE or MOD_CAST_TYPE_CYLINDER */