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
diff options
context:
space:
mode:
authorLukas Tönne <lukas.toenne@gmail.com>2014-11-05 21:17:39 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-01-20 11:30:06 +0300
commitc37de3871664cc5b3baf48a4b423b7a08f77bbf1 (patch)
tree9a33057dcecf41bb889f791f206c277fbf9935d7
parent7dda1ea396fd584dc532faa0ff30a87c1e1a7629 (diff)
New debug element "circle" for simulations, which is quite useful for
visualizing scalar fields.
-rw-r--r--source/blender/blenkernel/BKE_effect.h2
-rw-r--r--source/blender/blenkernel/intern/effect.c21
-rw-r--r--source/blender/editors/space_view3d/drawsimdebug.c47
3 files changed, 63 insertions, 7 deletions
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 04853bbb163..6688cd33e84 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 c18726e5905..b07d972b770 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 83fee946c99..5f3779d540f 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();