[Bf-blender-cvs] [20721ed] hair_immediate_fixes: Support for sim_debug drawing in hair edit mode (dev feature).
Lukas Tönne
noreply at git.blender.org
Sat Dec 27 11:32:52 CET 2014
Commit: 20721edaefdf4bd081d0ff1339694a58d62b2d29
Author: Lukas Tönne
Date: Sun Dec 7 13:12:48 2014 +0100
Branches: hair_immediate_fixes
https://developer.blender.org/rB20721edaefdf4bd081d0ff1339694a58d62b2d29
Support for sim_debug drawing in hair edit mode (dev feature).
===================================================================
M release/scripts/startup/bl_ui/space_view3d_toolbar.py
M source/blender/blenkernel/BKE_editstrands.h
M source/blender/blenkernel/intern/editstrands.c
M source/blender/editors/space_view3d/drawobject.c
M source/blender/editors/space_view3d/drawstrands.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_sculpt_paint.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 9967da9..c9f4c69 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1826,6 +1826,22 @@ class VIEW3D_PT_tools_particlemode(View3DPanel, Panel):
sub.prop(pe, "fade_frames", slider=True)
+class VIEW3D_PT_tools_hairmode(View3DPanel, Panel):
+ """Tools for hair mode"""
+ bl_context = "hairmode"
+ bl_label = "Options"
+ bl_category = "Tools"
+
+ def draw(self, context):
+ layout = self.layout
+
+ settings = context.tool_settings.hair_edit
+ ob = context.active_object
+
+ col = layout.column(align=True)
+ col.prop(settings, "show_debug_data", text="Debug")
+
+
# Grease Pencil drawing tools
class VIEW3D_PT_tools_grease_pencil_draw(GreasePencilDrawingToolsPanel, Panel):
bl_space_type = 'VIEW_3D'
diff --git a/source/blender/blenkernel/BKE_editstrands.h b/source/blender/blenkernel/BKE_editstrands.h
index 309e94c..2768e86 100644
--- a/source/blender/blenkernel/BKE_editstrands.h
+++ b/source/blender/blenkernel/BKE_editstrands.h
@@ -59,6 +59,8 @@ typedef struct BMEditStrands {
unsigned int vertex_glbuf;
unsigned int elem_glbuf;
unsigned int dot_glbuf;
+
+ struct SimDebugData *debug_data;
} BMEditStrands;
/* BMEditStrands->flag */
diff --git a/source/blender/blenkernel/intern/editstrands.c b/source/blender/blenkernel/intern/editstrands.c
index 0edd9a7..6227161 100644
--- a/source/blender/blenkernel/intern/editstrands.c
+++ b/source/blender/blenkernel/intern/editstrands.c
@@ -42,8 +42,9 @@
#include "BKE_bvhutils.h"
#include "BKE_customdata.h"
#include "BKE_cdderivedmesh.h"
-#include "BKE_editstrands.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_editstrands.h"
+#include "BKE_effect.h"
#include "BKE_mesh_sample.h"
#include "BKE_particle.h"
@@ -66,6 +67,7 @@ BMEditStrands *BKE_editstrands_copy(BMEditStrands *es)
es_copy->bm = BM_mesh_copy(es->bm);
es_copy->root_dm = CDDM_copy(es->root_dm);
+ es_copy->debug_data = NULL;
return es_copy;
}
@@ -97,6 +99,8 @@ void BKE_editstrands_free(BMEditStrands *es)
BM_mesh_free(es->bm);
if (es->root_dm)
es->root_dm->release(es->root_dm);
+ if (es->debug_data)
+ BKE_sim_debug_data_free(es->debug_data);
}
/* === constraints === */
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 3b5effc..ecec6c5 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -7730,7 +7730,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if (ob->mode & OB_MODE_HAIR_EDIT && is_obact) {
BMEditStrands *edit = BKE_editstrands_from_object(ob);
if (edit) {
- draw_strands_edit_hair(scene, v3d, edit);
+ draw_strands_edit_hair(scene, v3d, ar, edit);
}
}
}
diff --git a/source/blender/editors/space_view3d/drawstrands.c b/source/blender/editors/space_view3d/drawstrands.c
index 45331bb..dc7c9a3 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -354,7 +354,7 @@ static void draw_dots(BMEditStrands *edit, const StrandsDrawInfo *info, bool sel
glDrawArrays(GL_POINTS, 0, totelem);
}
-void draw_strands_edit_hair(Scene *scene, View3D *v3d, BMEditStrands *edit)
+void draw_strands_edit_hair(Scene *scene, View3D *v3d, ARegion *ar, BMEditStrands *edit)
{
HairEditSettings *settings = &scene->toolsettings->hair_edit;
@@ -376,4 +376,10 @@ void draw_strands_edit_hair(Scene *scene, View3D *v3d, BMEditStrands *edit)
unbind_gpu_buffers_dots();
restore_opengl_state(&info);
+
+ /* debugging */
+ if (edit->debug_data) {
+ Base *base = BASACT;
+ draw_sim_debug_data(scene, v3d, ar, base, edit->debug_data);
+ }
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 3b9ae75..6024523 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -185,7 +185,7 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
void draw_sim_debug_data(Scene *scene, View3D *v3d, ARegion *ar, Base *base, struct SimDebugData *debug_data);
/* drawstrands.c */
-void draw_strands_edit_hair(Scene *scene, View3D *v3d, struct BMEditStrands *edit);
+void draw_strands_edit_hair(Scene *scene, View3D *v3d, ARegion *ar, struct BMEditStrands *edit);
/* view3d_draw.c */
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index c5fac47..890fb50 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -889,12 +889,18 @@ typedef struct ParticleEditSettings {
/* ------------------------------------------- */
/* Hair Edit */
+/* HairEditSettings->select_mode */
typedef enum HairEditSelectMode {
HAIR_SELECT_STRAND = 0,
HAIR_SELECT_VERTEX = 1,
HAIR_SELECT_TIP = 2,
} HairEditSelectMode;
+/* HairEditSettings->flag */
+typedef enum HairEditFlag {
+ HAIR_EDIT_SHOW_DEBUG = (1 << 16),
+} HairEditFlag;
+
typedef struct HairEditSettings {
int flag;
int select_mode;
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 896a2a1..4e31045 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -77,6 +77,8 @@ EnumPropertyItem symmetrize_direction_items[] = {
#include "BKE_context.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_editstrands.h"
+#include "BKE_effect.h"
#include "BKE_pointcache.h"
#include "BKE_particle.h"
#include "BKE_depsgraph.h"
@@ -372,7 +374,30 @@ static void rna_HairEdit_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *U
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
-static void rna_Hair_brush_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_HairEdit_show_debug_data_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ HairEditSettings *settings = ptr->data;
+ Object *ob = OBACT;
+
+ if (ob) {
+ BMEditStrands *edit = BKE_editstrands_from_object(ob);
+ if (edit) {
+ if (edit->debug_data) {
+ /* always free debug data, that way resetting acts as a forced clear */
+ BKE_sim_debug_data_free(edit->debug_data);
+ edit->debug_data = NULL;
+ }
+
+ if (settings->flag & HAIR_EDIT_SHOW_DEBUG) {
+ edit->debug_data = BKE_sim_debug_data_new();
+ }
+ }
+ }
+
+ rna_HairEdit_update(bmain, scene, ptr);
+}
+
+static void rna_HairEdit_brush_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
HairEditSettings *settings = ptr->data;
Brush *brush = settings->brush;
@@ -984,7 +1009,7 @@ static void rna_def_hair_edit(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Brush_mode_poll");
RNA_def_property_ui_text(prop, "Brush", "Active Brush");
- RNA_def_property_update(prop, 0, "rna_Hair_brush_update");
+ RNA_def_property_update(prop, 0, "rna_HairEdit_brush_update");
prop = RNA_def_property(srna, "select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "select_mode");
@@ -996,6 +1021,11 @@ static void rna_def_hair_edit(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Shape Object", "Outer shape to use for tools");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_HairEdit_update");
+
+ prop = RNA_def_property(srna, "show_debug_data", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", HAIR_EDIT_SHOW_DEBUG);
+ RNA_def_property_ui_text(prop, "Show Debug Data", "");
+ RNA_def_property_update(prop, 0, "rna_HairEdit_show_debug_data_update");
}
void RNA_def_sculpt_paint(BlenderRNA *brna)
More information about the Bf-blender-cvs
mailing list