Commit: 0993af54842ad9ad43a45fded7e397c6eaafb9a0
Author: Clément Foucault
Date:   Sat Jun 17 01:55:49 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB0993af54842ad9ad43a45fded7e397c6eaafb9a0

Planar Probe: Add UI, 3d view Display and change defaults.

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

M       release/scripts/startup/bl_ui/properties_data_lightprobe.py
M       source/blender/draw/modes/object_mode.c
M       source/blender/editors/object/object_add.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_lightprobe.py 
b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
index 603e7b4741b..af6a1affd69 100644
--- a/release/scripts/startup/bl_ui/properties_data_lightprobe.py
+++ b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
@@ -76,6 +76,11 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel):
             col.label("Influence:")
             col.prop(probe, "influence_distance", "Distance")
             col.prop(probe, "falloff")
+        elif probe.type == "PLANAR":
+            col = split.column(align=True)
+            col.label("Influence:")
+            col.prop(probe, "influence_distance", "Distance")
+            col.prop(probe, "falloff")
         else:
             col = split.column(align=True)
             col.label("Influence:")
@@ -91,7 +96,8 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel):
         col = split.column(align=True)
         col.label("Clipping:")
         col.prop(probe, "clip_start", text="Start")
-        col.prop(probe, "clip_end", text="End")
+        if probe.type != "PLANAR":
+            col.prop(probe, "clip_end", text="End")
 
 
 class DATA_PT_lightprobe_parallax(DataButtonsPanel, Panel):
@@ -132,6 +138,7 @@ class DATA_PT_lightprobe_display(DataButtonsPanel, Panel):
 
         ob = context.object
         probe = context.lightprobe
+        is_planar = (probe.type is "PLANAR")
 
         split = layout.split()
 
@@ -139,14 +146,19 @@ class DATA_PT_lightprobe_display(DataButtonsPanel, Panel):
         col.prop(probe, "show_influence")
 
         col = split.column()
+        col.active = is_planar
         col.prop(probe, "show_parallax")
 
         col = split.column()
+        col.active = is_planar
         col.prop(probe, "show_clip")
 
         row = layout.row()
         row.prop(probe, "show_data")
-        row.prop(probe, "data_draw_size")
+        if probe.type != "PLANAR":
+            row.prop(probe, "data_draw_size")
+        else:
+            row.prop(ob, "empty_draw_size", text="Arrow Size")
 
 
 classes = (
diff --git a/source/blender/draw/modes/object_mode.c 
b/source/blender/draw/modes/object_mode.c
index c7d3bedb712..3262e863106 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1411,12 +1411,34 @@ static void DRW_shgroup_speaker(OBJECT_StorageList 
*stl, Object *ob, SceneLayer
 static void DRW_shgroup_lightprobe(OBJECT_StorageList *stl, Object *ob, 
SceneLayer *sl)
 {
        float *color;
+       static float one = 1.0f;
        LightProbe *prb = (LightProbe *)ob->data;
        DRW_object_wire_theme_get(ob, sl, &color);
 
-
        DRW_shgroup_call_dynamic_add(stl->g_data->probe, ob->obmat[3], color);
 
+       float **prb_mats = (float **)DRW_object_engine_data_get(ob, 
&draw_engine_object_type, NULL);
+       if (*prb_mats == NULL) {
+               /* we need 6 matrices */
+               *prb_mats = MEM_mallocN(sizeof(float) * 16 * 6, "Probe Clip 
distances Matrices");
+       }
+
+       if (prb->type == LIGHTPROBE_TYPE_PLANAR) {
+               float (*mat)[4];
+               mat = (float (*)[4])(*prb_mats);
+               copy_m4_m4(mat, ob->obmat);
+               normalize_m4(mat);
+
+               DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow, color, 
&ob->empty_drawsize, mat);
+               DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow_line, 
color, &ob->empty_drawsize, mat);
+
+               mat = (float (*)[4])(*prb_mats + 16);
+               copy_m4_m4(mat, ob->obmat);
+               zero_v3(mat[2]);
+
+               DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &one, 
mat);
+       }
+
        if ((prb->flag & LIGHTPROBE_FLAG_SHOW_INFLUENCE) != 0) {
 
                prb->distfalloff = (1.0f - prb->falloff) * prb->distinf;
@@ -1433,6 +1455,22 @@ static void DRW_shgroup_lightprobe(OBJECT_StorageList 
*stl, Object *ob, SceneLay
                        DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, 
&prb->distgridinf, ob->obmat);
                        DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, 
&prb->distfalloff, ob->obmat);
                }
+               else if (prb->type == LIGHTPROBE_TYPE_PLANAR) {
+                       float (*rangemat)[4];
+                       rangemat = (float (*)[4])(*prb_mats + 32);
+                       copy_m4_m4(rangemat, ob->obmat);
+                       normalize_v3(rangemat[2]);
+                       mul_v3_fl(rangemat[2], prb->distinf);
+
+                       DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, 
&one, rangemat);
+
+                       rangemat = (float (*)[4])(*prb_mats + 64);
+                       copy_m4_m4(rangemat, ob->obmat);
+                       normalize_v3(rangemat[2]);
+                       mul_v3_fl(rangemat[2], prb->distfalloff);
+
+                       DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, 
&one, rangemat);
+               }
                else {
                        DRW_shgroup_call_dynamic_add(stl->g_data->sphere, 
color, &prb->distgridinf, ob->obmat);
                        DRW_shgroup_call_dynamic_add(stl->g_data->sphere, 
color, &prb->distfalloff, ob->obmat);
@@ -1440,59 +1478,58 @@ static void DRW_shgroup_lightprobe(OBJECT_StorageList 
*stl, Object *ob, SceneLay
        }
 
        if ((prb->flag & LIGHTPROBE_FLAG_SHOW_PARALLAX) != 0) {
-               float (*obmat)[4], *dist;
+               if (prb->type != LIGHTPROBE_TYPE_PLANAR) {
+                       float (*obmat)[4], *dist;
 
-               if ((prb->flag & LIGHTPROBE_FLAG_CUSTOM_PARALLAX) != 0) {
-                       dist = &prb->distpar;
-                       /* TODO object parallax */
-                       obmat = ob->obmat;
-               }
-               else {
-                       dist = &prb->distinf;
-                       obmat = ob->obmat;
-               }
+                       if ((prb->flag & LIGHTPROBE_FLAG_CUSTOM_PARALLAX) != 0) 
{
+                               dist = &prb->distpar;
+                               /* TODO object parallax */
+                               obmat = ob->obmat;
+                       }
+                       else {
+                               dist = &prb->distinf;
+                               obmat = ob->obmat;
+                       }
 
-               if (prb->parallax_type == LIGHTPROBE_SHAPE_BOX) {
-                       DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, 
&dist, obmat);
-               }
-               else {
-                       DRW_shgroup_call_dynamic_add(stl->g_data->sphere, 
color, &dist, obmat);
+                       if (prb->parallax_type == LIGHTPROBE_SHAPE_BOX) {
+                               DRW_shgroup_call_dynamic_add(stl->g_data->cube, 
color, &dist, obmat);
+                       }
+                       else {
+                               
DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &dist, obmat);
+                       }
                }
        }
 
        if ((prb->flag & LIGHTPROBE_FLAG_SHOW_CLIP_DIST) != 0) {
-               static const float cubefacemat[6][4][4] = {
-                       {{0.0, 0.0, -1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {-1.0, 
0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-                       {{0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {1.0, 
0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-                       {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 
1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-                       {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 
-1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-                       {{1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 
0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-                       {{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 
0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
-               };
-
-               float **prb_mats = (float **)DRW_object_engine_data_get(ob, 
&draw_engine_object_type, NULL);
-               if (*prb_mats == NULL) {
-                       /* we need 2 matrices */
-                       *prb_mats = MEM_mallocN(sizeof(float) * 16 * 6, "Probe 
Clip distances Matrices");
-               }
+               if (prb->type != LIGHTPROBE_TYPE_PLANAR) {
+                       static const float cubefacemat[6][4][4] = {
+                               {{0.0, 0.0, -1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, 
{-1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                               {{0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, 
{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                               {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, 
{0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                               {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, 
{0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                               {{1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, 
{0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                               {{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, 
{0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+                       };
 
-               for (int i = 0; i < 6; ++i) {
-                       float (*clipmat)[4];
-                       clipmat = (float (*)[4])(*prb_mats + 16 * i);
+                       for (int i = 0; i < 6; ++i) {
+                               float (*clipmat)[4];
+                               clipmat = (float (*)[4])(*prb_mats + 16 * i);
 
-                       normalize_m4_m4(clipmat, ob->obmat);
-                       // invert_m4(clipmat);
-                       mul_m4_m4m4(clipmat, clipmat, cubefacemat[i]);
+                               normalize_m4_m4(clipmat, ob->obmat);
+                               mul_m4_m4m4(clipmat, clipmat, cubefacemat[i]);
 
-                       
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit, color, &prb->clipsta, 
&prb->clipend, clipmat);
-                       
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit_points, color, 
&prb->clipsta, &prb->clipend, clipmat);
+                               
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit, color, &prb->clipsta, 
&prb->clipend, clipmat);
+                               
DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit_points, color, 
&prb->clipsta, &prb->clipend, clipmat);
+                       }
                }
        }
        DRW_shgroup_call_dynamic_add(stl->g_data->lamp_center_group, 
ob->obmat[3]);
 
        /* Line and point going to the ground */
-       DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundline, 
ob->obmat[3]);
-       DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundpoint, 
ob->obmat[3]);
+       if (prb->type == LIGHTPROBE_TYPE_CUBE) {
+               DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundline, 
ob->obmat[3]);
+               DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundpoint, 
ob->obmat[3]);
+       }
 }
 
 static void DRW_shgroup_relationship_lines(OBJECT_StorageList *stl, Object *ob)
diff --git a/source/blender/editors/object/object_add.c 
b/source/blender/editors/object/object_add.c
index 49bcdd3d5ae..0dc91f6d615 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -543,8 +543,10 @@ static int lightprobe_add_exec(bContext *C, wmOperator *op)
        }
        else if (type == 2) {
                probe->type = LIGHTPROBE_TYPE_PLANAR;
-               probe->distinf = 0.3f;
-               probe->falloff = 0.6f;
+               probe->distinf = 0.1f;
+               probe->falloff = 0.5f;
+               probe->clipsta = 0.001f;
+               ob->empty_drawsize = 0.5f;
        }
        else {
                probe->type = LIGHTPROBE_TYPE_CUBE;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to