[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47599] trunk/blender/source/blender: Fix #31743: Applying Smooth modifier to a curve crashes Blender

Sergey Sharybin sergey.vfx at gmail.com
Fri Jun 8 10:17:50 CEST 2012


Revision: 47599
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47599
Author:   nazgul
Date:     2012-06-08 08:17:34 +0000 (Fri, 08 Jun 2012)
Log Message:
-----------
Fix #31743: Applying Smooth modifier to a curve crashes Blender

Actually there were two different issues involved here:

- Recently enabled Smooth modifier wasn't actually designed for curves, so
  it in fact requires a bit bigger work to make it working.

  For now added check for object's typy in this modifier and if it's not
  mesh, it wouldn't try to use edges.

  The reason why it worked in 3d viewport is that creating DM from curve while
  displist is still ocntrcuting for would result in empty CDDM and that leads to
  not taking edges into account, only vertexCos passed to modifier would be used.

  This makes it behaving a bit differently from if it was a mesh, but still gives
  quite reasonable result. Would leave actual fix for a guy who enabled smooth
  modifier.

- Another issue is related on ensuring sculpt mask layer after applying modifier.
  This shall happen only for meshes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/modifiers/intern/MOD_smooth.c

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-06-08 07:55:15 UTC (rev 47598)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-06-08 08:17:34 UTC (rev 47599)
@@ -642,8 +642,10 @@
 	BLI_remlink(&ob->modifiers, md);
 	modifier_free(md);
 
-	/* ensure mesh paint mask layer remains after applying */
-	ED_sculpt_mask_layers_ensure(ob, NULL);
+	if (ob->type == OB_MESH) {
+		/* ensure mesh paint mask layer remains after applying */
+		ED_sculpt_mask_layers_ensure(ob, NULL);
+	}
 
 	return 1;
 }

Modified: trunk/blender/source/blender/modifiers/intern/MOD_smooth.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_smooth.c	2012-06-08 07:55:15 UTC (rev 47598)
+++ trunk/blender/source/blender/modifiers/intern/MOD_smooth.c	2012-06-08 08:17:34 UTC (rev 47599)
@@ -118,8 +118,14 @@
 	fac = smd->fac;
 	facm = 1 - fac;
 
-	medges = dm->getEdgeArray(dm);
-	numDMEdges = dm->getNumEdges(dm);
+	if (ob->type == OB_MESH) {
+		medges = dm->getEdgeArray(dm);
+		numDMEdges = dm->getNumEdges(dm);
+	}
+	else {
+		medges = NULL;
+		numDMEdges = 0;
+	}
 
 	modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
 




More information about the Bf-blender-cvs mailing list