[Bf-blender-cvs] [1504083] temp_merge_gooseberry_hair: New debug element "circle" for simulations, which is quite useful for visualizing scalar fields.

Lukas Tönne noreply at git.blender.org
Mon Jan 19 20:50:32 CET 2015


Commit: 1504083c85b30ec58a107b84abc9d0b82364dcb3
Author: Lukas Tönne
Date:   Wed Nov 5 19:17:39 2014 +0100
Branches: temp_merge_gooseberry_hair
https://developer.blender.org/rB1504083c85b30ec58a107b84abc9d0b82364dcb3

New debug element "circle" for simulations, which is quite useful for
visualizing scalar fields.

===================================================================

M	source/blender/blenkernel/BKE_effect.h
M	source/blender/blenkernel/intern/effect.c
M	source/blender/editors/space_view3d/drawsimdebug.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 04853bb..6688cd3 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -150,6 +150,7 @@ typedef struct SimDebugElement {
 
 typedef enum eSimDebugElement_Type {
 	SIM_DEBUG_ELEM_DOT,
+	SIM_DEBUG_ELEM_CIRCLE,
 	SIM_DEBUG_ELEM_LINE,
 	SIM_DEBUG_ELEM_VECTOR,
 } eSimDebugElement_Type;
@@ -160,6 +161,7 @@ typedef struct SimDebugData {
 
 struct SimDebugData *BKE_sim_debug_data_new(void);
 void BKE_sim_debug_data_add_dot(struct SimDebugData *debug_data, const float p[3], float r, float g, float b, const char *category, int hash);
+void BKE_sim_debug_data_add_circle(struct SimDebugData *debug_data, const float p[3], const float radius, float r, float g, float b, const char *category, int hash);
 void BKE_sim_debug_data_add_line(struct SimDebugData *debug_data, const float p1[3], const float p2[3], float r, float g, float b, const char *category, int hash);
 void BKE_sim_debug_data_add_vector(struct SimDebugData *debug_data, const float p[3], const float d[3], float r, float g, float b, const char *category, int hash);
 void BKE_sim_debug_data_remove(struct SimDebugData *debug_data, int hash);
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index c18726e..b07d972 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -1089,6 +1089,27 @@ void BKE_sim_debug_data_add_dot(struct SimDebugData *debug_data, const float p[3
 	debug_data_insert(debug_data, elem);
 }
 
+void BKE_sim_debug_data_add_circle(struct SimDebugData *debug_data, const float p[3], float radius, float r, float g, float b, const char *category, int hash)
+{
+	int category_hash = (int)BLI_ghashutil_strhash_p(category);
+	SimDebugElement *elem;
+	if (!debug_data)
+		return;
+	
+	elem = MEM_callocN(sizeof(SimDebugElement), "sim debug data element");
+	elem->type = SIM_DEBUG_ELEM_CIRCLE;
+	elem->category_hash = category_hash;
+	elem->hash = hash;
+	elem->color[0] = r;
+	elem->color[1] = g;
+	elem->color[2] = b;
+	copy_v3_v3(elem->v1, p);
+	elem->v2[0] = radius;
+	elem->v2[1] = elem->v2[2] = 0.0f;
+	
+	debug_data_insert(debug_data, elem);
+}
+
 void BKE_sim_debug_data_add_line(struct SimDebugData *debug_data, const float p1[3], const float p2[3], float r, float g, float b, const char *category, int hash)
 {
 	int category_hash = (int)BLI_ghashutil_strhash_p(category);
diff --git a/source/blender/editors/space_view3d/drawsimdebug.c b/source/blender/editors/space_view3d/drawsimdebug.c
index 83fee94..5f3779d 100644
--- a/source/blender/editors/space_view3d/drawsimdebug.c
+++ b/source/blender/editors/space_view3d/drawsimdebug.c
@@ -52,7 +52,7 @@
 
 #include "UI_resources.h"
 
-static void draw_sim_debug_elements(SimDebugData *debug_data)
+static void draw_sim_debug_elements(SimDebugData *debug_data, float imat[4][4])
 {
 	GHashIterator iter;
 	
@@ -71,6 +71,38 @@ static void draw_sim_debug_elements(SimDebugData *debug_data)
 	glEnd();
 	glPointSize(1.0f);
 	
+	/**** circles ****/
+	
+	{
+		float circle[16][2] = {
+		    {0.000000, 1.000000}, {0.382683, 0.923880}, {0.707107, 0.707107}, {0.923880, 0.382683},
+		    {1.000000, -0.000000}, {0.923880, -0.382683}, {0.707107, -0.707107}, {0.382683, -0.923880},
+		    {-0.000000, -1.000000}, {-0.382683, -0.923880}, {-0.707107, -0.707107}, {-0.923879, -0.382684},
+		    {-1.000000, 0.000000}, {-0.923879, 0.382684}, {-0.707107, 0.707107}, {-0.382683, 0.923880} };
+		for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
+			SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
+			float radius = elem->v2[0];
+			float co[3];
+			int i;
+			
+			if (elem->type != SIM_DEBUG_ELEM_CIRCLE)
+				continue;
+			
+			glColor3f(elem->color[0], elem->color[1], elem->color[2]);
+			glBegin(GL_LINE_LOOP);
+			for (i = 0; i < 16; ++i) {
+				co[0] = radius * circle[i][0];
+				co[1] = radius * circle[i][1];
+				co[2] = 0.0f;
+				mul_mat3_m4_v3(imat, co);
+				add_v3_v3(co, elem->v1);
+				
+				glVertex3f(co[0], co[1], co[2]);
+			}
+			glEnd();
+		}
+	}
+	
 	/**** lines ****/
 	
 	glBegin(GL_LINES);
@@ -119,19 +151,20 @@ void draw_sim_debug_data(Scene *UNUSED(scene), View3D *UNUSED(v3d), ARegion *ar,
 {
 	RegionView3D *rv3d = ar->regiondata;
 	/*Object *ob = base->object;*/
-	/*float imat[4][4];*/
+	float imat[4][4];
+	
+	if (!debug_data)
+		return;
 	
-	/*invert_m4_m4(imat, rv3d->viewmatob);*/
+	invert_m4_m4(imat, rv3d->viewmatob);
 	
 //	glDepthMask(GL_FALSE);
 //	glEnable(GL_BLEND);
 	
 	glPushMatrix();
-	glLoadMatrixf(rv3d->viewmat);
 	
-	if (debug_data) {
-		draw_sim_debug_elements(debug_data);
-	}
+	glLoadMatrixf(rv3d->viewmat);
+	draw_sim_debug_elements(debug_data, imat);
 	
 	glPopMatrix();




More information about the Bf-blender-cvs mailing list