[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32576] trunk/blender/source/blender: == Sculpt ==

Nicholas Bishop nicholasbishop at gmail.com
Tue Oct 19 03:57:17 CEST 2010


Revision: 32576
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32576
Author:   nicholasbishop
Date:     2010-10-19 03:57:15 +0200 (Tue, 19 Oct 2010)

Log Message:
-----------
== Sculpt ==

Fixed bug #24111, "Mirror clipping not working while sculpting a mirrored mesh"

* Mirror modifiers can handle multiple-axis mirroring, updated sculpt to work with that
* Marked the "axis" field of MirrorModifierData deprecated, since it looks like bitflags are supposed to be used now

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-10-19 01:48:03 UTC (rev 32575)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-10-19 01:57:15 UTC (rev 32576)
@@ -2815,6 +2815,36 @@
 	MEM_freeN(cache);
 }
 
+/* Initialize mirror modifier clipping */
+static void sculpt_init_mirror_clipping(Object *ob, SculptSession *ss)
+{
+	ModifierData *md;
+	int i;
+
+	for(md= ob->modifiers.first; md; md= md->next) {
+		if(md->type==eModifierType_Mirror &&
+		   (md->mode & eModifierMode_Realtime)) {
+			MirrorModifierData *mmd = (MirrorModifierData*)md;
+			
+			if(mmd->flag & MOD_MIR_CLIPPING) {
+				/* check each axis for mirroring */
+				for(i = 0; i < 3; ++i) {
+					if(mmd->flag & (MOD_MIR_AXIS_X << i)) {
+						/* enable sculpt clipping */
+						ss->cache->flag |= CLIP_X << i;
+						
+						/* update the clip tolerance */
+						if(mmd->tolerance >
+						   ss->cache->clip_tolerance[i])
+							ss->cache->clip_tolerance[i] =
+								mmd->tolerance;
+					}
+				}
+			}
+		}
+	}
+}
+
 /* Initialize the stroke cache invariants from operator properties */
 static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSession *ss, wmOperator *op, wmEvent *event)
 {
@@ -2822,7 +2852,6 @@
 	Brush *brush = paint_brush(&sd->paint);
 	ViewContext *vc = paint_stroke_view_context(op->customdata);
 	Object *ob= CTX_data_active_object(C);
-	ModifierData *md;
 	int i;
 	int mode;
 
@@ -2835,22 +2864,9 @@
 
 	ss->cache->plane_trim_squared = brush->plane_trim * brush->plane_trim;
 
-	/* Initialize mirror modifier clipping */
-
 	ss->cache->flag = 0;
 
-	for(md= ob->modifiers.first; md; md= md->next) {
-		if(md->type==eModifierType_Mirror && (md->mode & eModifierMode_Realtime)) {
-			const MirrorModifierData *mmd = (MirrorModifierData*) md;
-			
-			/* Mark each axis that needs clipping along with its tolerance */
-			if(mmd->flag & MOD_MIR_CLIPPING) {
-				ss->cache->flag |= CLIP_X << mmd->axis;
-				if(mmd->tolerance > ss->cache->clip_tolerance[mmd->axis])
-					ss->cache->clip_tolerance[mmd->axis] = mmd->tolerance;
-			}
-		}
-	}
+	sculpt_init_mirror_clipping(ob, ss);
 
 	/* Initial mouse location */
 	if (event) {

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2010-10-19 01:48:03 UTC (rev 32575)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2010-10-19 01:57:15 UTC (rev 32576)
@@ -220,7 +220,8 @@
 typedef struct MirrorModifierData {
 	ModifierData modifier;
 
-	short axis, flag;
+	short axis; /* deprecated, use flag instead */
+	short flag;
 	float tolerance;
 	struct Object *mirror_ob;
 } MirrorModifierData;





More information about the Bf-blender-cvs mailing list