[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42826] branches/vgroup_modifiers/source/ blender: On second thought, also enable weight preview in object mode, like for DynamicPaint.
Bastien Montagne
montagne29 at wanadoo.fr
Thu Dec 22 17:37:27 CET 2011
Revision: 42826
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42826
Author: mont29
Date: 2011-12-22 16:37:14 +0000 (Thu, 22 Dec 2011)
Log Message:
-----------
On second thought, also enable weight preview in object mode, like for DynamicPaint. This commit also generalizes/factorizes the way that feature (CD_WEIGHT_MCOL preview in object mode) is handled:
* Adding in BKE_modifier.h "int modifiers_isWMColPreview(struct Object *ob);", which checks whether there is a modifier in the object's stack that needs WEIGHT_MCOL preview. This higly simplifies the code in draw_mesh_fancy() (drawobject.c).
* Adding in BKE_modifier.h "int modifier_usesWMColPreview(struct ModifierData *md);", which checks whether that modifier needs WEIGHT_MCOL preview. Used among other places in mesh_calc_modifiers() (DerivedMesh.c) to make sure preview mask remains for following modifiers.
* Adding the new flag "eModifierTypeFlag_UsesWMColPreview" for those modifiers, used by above functions to make a first, quick check.
Modified Paths:
--------------
branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h
branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c
branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c
branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c
branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgproximity.c
Modified: branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/BKE_modifier.h 2011-12-22 16:37:14 UTC (rev 42826)
@@ -99,7 +99,10 @@
eModifierTypeFlag_Single = (1<<7),
/* Some modifier can't be added manually by user */
- eModifierTypeFlag_NoUserAdd = (1<<8)
+ eModifierTypeFlag_NoUserAdd = (1<<8),
+
+ /* For modifiers that use CD_WEIGHT_MCOL for preview. */
+ eModifierTypeFlag_UsesWMColPreview = (1<<9)
} ModifierTypeFlag;
typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);
@@ -308,14 +311,14 @@
struct ModifierData *modifier_new(int type);
void modifier_free(struct ModifierData *md);
-void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
+void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
void modifier_copyData(struct ModifierData *md, struct ModifierData *target);
int modifier_dependsOnTime(struct ModifierData *md);
int modifier_supportsMapping(struct ModifierData *md);
int modifier_couldBeCage(struct Scene *scene, struct ModifierData *md);
int modifier_isCorrectableDeformed(struct ModifierData *md);
-int modifier_sameTopology(ModifierData *md);
+int modifier_sameTopology(ModifierData *md);
int modifier_nonGeometrical(ModifierData *md);
int modifier_isEnabled(struct Scene *scene, struct ModifierData *md, int required_mode);
void modifier_setError(struct ModifierData *md, const char *format, ...)
@@ -323,6 +326,7 @@
__attribute__ ((format (printf, 2, 3)))
#endif
;
+int modifier_usesWMColPreview(struct ModifierData *md);
void modifiers_foreachObjectLink(struct Object *ob,
ObjectWalkFunc walk,
@@ -349,6 +353,7 @@
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
int modifiers_isCorrectableDeformed(struct Object *ob);
void modifier_freeTemporaryData(struct ModifierData *md);
+int modifiers_isWMColPreview(struct Object *ob);
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
Modified: branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/intern/DerivedMesh.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -1070,8 +1070,9 @@
}
}
- /* in case of dynamic paint, make sure preview mask remains for following modifiers */
- if (md->type == eModifierType_DynamicPaint)
+ /* In case of dynamic paint or WeightVG with enabled preview, make sure
+ * preview mask remains for following modifiers. */
+ if (modifier_usesWMColPreview(md))
append_mask |= CD_MASK_WEIGHT_MCOL;
}
Modified: branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/blenkernel/intern/modifier.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -48,6 +48,7 @@
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_dynamicpaint_types.h"
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
@@ -142,6 +143,42 @@
(mti->flags & eModifierTypeFlag_SupportsMapping));
}
+int modifier_usesWMColPreview(ModifierData *md)
+{
+ ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+
+ if (!(mti->flags & eModifierTypeFlag_UsesWMColPreview))
+ return FALSE;
+
+ if (md->type == eModifierType_DynamicPaint) {
+ DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md;
+ /* if canvas is ready to preview vertex colors */
+ if (pmd->canvas && pmd->canvas->flags & MOD_DPAINT_PREVIEW_READY)
+ return TRUE;
+ }
+ else if (md->type == eModifierType_WeightVGEdit) {
+ WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
+ /* If preview of vertex weights is enabled... */
+ if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+ return TRUE;
+ }
+ else if (md->type == eModifierType_WeightVGMix) {
+ WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
+ printf("A mix modifier…\n");
+ /* If preview of vertex weights is enabled... */
+ if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+ return TRUE;
+ }
+ else if (md->type == eModifierType_WeightVGProximity) {
+ WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData*) md;
+ /* If preview of vertex weights is enabled... */
+ if (wmd->common_flags & MOD_WVG_CFLAG_WEIGHT_PREVIEW)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
ModifierData *modifiers_findByType(Object *ob, ModifierType type)
{
ModifierData *md = ob->modifiers.first;
@@ -545,6 +582,20 @@
return 0;
}
+/* Check whether the given object has a modifier in its stack that uses WEIGHT_MCOL CD layer
+ * to preview something... Used by DynamicPaint and WeightVG currently. */
+int modifiers_isWMColPreview(Object *ob)
+{
+ ModifierData *md = ob->modifiers.first;
+
+ for (; md; md = md->next) {
+ if (md->mode & eModifierMode_Realtime && modifier_usesWMColPreview(md))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
int modifiers_indexInObject(Object *ob, ModifierData *md_seek)
{
int i= 0;
Modified: branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/editors/space_view3d/drawobject.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -36,7 +36,6 @@
#include "DNA_camera_types.h"
#include "DNA_curve_types.h"
#include "DNA_constraint_types.h" // for drawing constraint
-#include "DNA_dynamicpaint_types.h"
#include "DNA_lamp_types.h"
#include "DNA_lattice_types.h"
#include "DNA_material_types.h"
@@ -3039,27 +3038,16 @@
eWireDrawMode draw_wire= OBDRAW_WIRE_OFF;
int /* totvert,*/ totedge, totface;
DerivedMesh *dm= mesh_get_derived_final(scene, ob, scene->customdata_mask);
- ModifierData *md = NULL;
const short is_obact= (ob == OBACT);
int draw_flags = (is_obact && paint_facesel_test(ob)) ? DRAW_FACE_SELECT : 0;
if(!dm)
return;
- /* check to draw dynamic paint colors */
- if ((md = modifiers_findByType(ob, eModifierType_DynamicPaint)))
- {
- /* check if target has an active dpaint modifier */
- if(md && (md->mode & eModifierMode_Realtime))
- {
- DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
- /* if canvas is ready to preview vertex colors */
- if (pmd->canvas && pmd->canvas->flags & MOD_DPAINT_PREVIEW_READY &&
- DM_get_face_data_layer(dm, CD_WEIGHT_MCOL)) {
- draw_flags |= DRAW_DYNAMIC_PAINT_PREVIEW;
- }
- }
- }
+ /* Check to draw dynamic paint colors (or weights from WeightVG modifiers).
+ * Note: Last "preview-active" modifier in stack will win! */
+ if(DM_get_face_data_layer(dm, CD_WEIGHT_MCOL) && modifiers_isWMColPreview(ob))
+ draw_flags |= DRAW_DYNAMIC_PAINT_PREVIEW;
/* Unwanted combination */
if (draw_flags & DRAW_FACE_SELECT) {
Modified: branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c
===================================================================
--- branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_dynamicpaint.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -157,8 +157,9 @@
/* structSize */ sizeof(DynamicPaintModifierData),
/* type */ eModifierTypeType_Constructive,
/* flags */ eModifierTypeFlag_AcceptsMesh
- | eModifierTypeFlag_UsesPointCache
- | eModifierTypeFlag_Single,
+ |eModifierTypeFlag_UsesPointCache
+ |eModifierTypeFlag_Single
+ |eModifierTypeFlag_UsesWMColPreview,
/* copyData */ copyData,
/* deformVerts */ NULL,
Modified: branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c
===================================================================
--- branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvg_util.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -290,7 +290,7 @@
float temp_color[3];
int j = mface[i].v4 ? 4 : 3;
while(j--) {
- int idx = (j==0)?mface[i].v1: (j==1)?mface[i].v2: (j==2)?mface[i].v3: mface[i].v4;
+ int idx = *((&mface[i].v1)+j);
CLAMP(w[idx], 0.0f, 1.0f);
weight_to_rgb(temp_color, w[idx]);
@@ -300,7 +300,6 @@
col[i*4+j].a = 255;
}
}
-// pmd->canvas->flags |= MOD_DPAINT_PREVIEW_READY;
if(indices)
MEM_freeN(w);
Modified: branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c
===================================================================
--- branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c 2011-12-22 16:00:34 UTC (rev 42825)
+++ branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgedit.c 2011-12-22 16:37:14 UTC (rev 42826)
@@ -266,7 +266,8 @@
/* type */ eModifierTypeType_NonGeometrical,
/* flags */ eModifierTypeFlag_AcceptsMesh
|eModifierTypeFlag_SupportsMapping
- |eModifierTypeFlag_SupportsEditmode,
+ |eModifierTypeFlag_SupportsEditmode
+ |eModifierTypeFlag_UsesWMColPreview,
/* copyData */ copyData,
/* deformVerts */ NULL,
Modified: branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c
===================================================================
--- branches/vgroup_modifiers/source/blender/modifiers/intern/MOD_weightvgmix.c 2011-12-22 16:00:34 UTC (rev 42825)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list