Commit: 275a26353e401e95cc477964de97013e51edc8b4
Author: Antony Riakiotakis
Date:   Mon Nov 17 17:27:45 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB275a26353e401e95cc477964de97013e51edc8b4

Add widget for focus of camera. There are some general issues with
widget scale that I'll fix later.

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

M       source/blender/editors/space_view3d/space_view3d.c

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

diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 60da4ec..9f03741 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -35,6 +35,7 @@
 #include "DNA_material_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_camera_types.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -694,6 +695,54 @@ static void view3d_dropboxes(void)
        WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", 
view3d_group_drop_poll, view3d_group_drop_copy);     
 }
 
+
+static bool WIDGETGROUP_camera_poll(struct wmWidgetGroup *UNUSED(wgroup), 
const struct bContext *C)
+{
+       Object *ob = CTX_data_active_object(C);
+
+       if (ob && ob->type == OB_CAMERA) {
+               return true;
+       }
+       return false;
+}
+
+static void WIDGETGROUP_camera_update(struct wmWidgetGroup *wgroup, const 
struct bContext *C)
+{
+       Object *ob = CTX_data_active_object(C);
+       Camera *ca = ob->data;
+       wmWidget *widget = WM_widgetgroup_widgets(wgroup)->first;
+       PointerRNA *cameraptr = WM_widgetgroup_customdata(wgroup);
+       float dir[3];
+
+       RNA_pointer_create(&ca->id, &RNA_Camera, ca, cameraptr);
+       WM_widget_set_origin(widget, ob->obmat[3]);
+       WM_widget_property(widget, cameraptr, "dof_distance");
+       negate_v3_v3(dir, ob->obmat[2]);
+       WIDGET_arrow_set_direction(widget, dir);
+}
+
+
+static void WIDGETGROUP_camera_free(struct wmWidgetGroup *wgroup)
+{
+       PointerRNA *cameraptr = WM_widgetgroup_customdata(wgroup);
+
+       MEM_freeN(cameraptr);
+}
+
+static void WIDGETGROUP_camera_create(struct wmWidgetGroup *wgroup)
+{
+       float color_camera[4] = {1.0f, 0.7f, 0.2f, 1.0f};
+       wmWidget *widget = NULL;
+       PointerRNA *cameraptr = MEM_callocN(sizeof(PointerRNA), 
"camerawidgetptr");
+
+       widget = WIDGET_arrow_new(UI_ARROW_STYLE_OFFSET_3D, NULL);
+       WM_widget_register(wgroup, widget);
+       WIDGET_arrow_set_color(widget, color_camera);
+
+       WM_widgetgroup_customdata_set(wgroup, cameraptr);
+}
+
+
 static void view3d_widgets(void)
 {
        struct wmWidgetMapType *wmaptype = WM_widgetmaptype_find("View3D", 
SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
@@ -706,8 +755,14 @@ static void view3d_widgets(void)
                                                                        
WIDGETGROUP_lamp_update,
                                                                        
WIDGETGROUP_lamp_free);
 
+       struct wmWidgetGroupType *wgroup_camera = 
WM_widgetgrouptype_new(WIDGETGROUP_camera_create,
+                                                                       
WIDGETGROUP_camera_poll,
+                                                                       
WIDGETGROUP_camera_update,
+                                                                       
WIDGETGROUP_camera_free);
+
        WM_widgetgrouptype_register(wmaptype, wgroup_manipulator);
        WM_widgetgrouptype_register(wmaptype, wgroup_light);
+       WM_widgetgrouptype_register(wmaptype, wgroup_camera);
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to