Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2010-10-19 05:57:15 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2010-10-19 05:57:15 +0400
commit8b0179a965180c325910e1c4127bdc2c53dfbb40 (patch)
tree530bfe7356efe6859e32981ca687f9055918a03c /source
parente01c00d19437c9aef1fc27568d7becbabdef9ba2 (diff)
== 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
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c46
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h3
2 files changed, 33 insertions, 16 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 505e37d95f6..fccee048525 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -2815,6 +2815,36 @@ static void sculpt_cache_free(StrokeCache *cache)
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 @@ static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSessio
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 @@ static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSessio
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) {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 27f9c9cd5f3..0708698c40c 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -220,7 +220,8 @@ typedef struct ArrayModifierData {
typedef struct MirrorModifierData {
ModifierData modifier;
- short axis, flag;
+ short axis; /* deprecated, use flag instead */
+ short flag;
float tolerance;
struct Object *mirror_ob;
} MirrorModifierData;