[Bf-blender-cvs] [275a263] wiggly-widgets: Add widget for focus of camera. There are some general issues with widget scale that I'll fix later.
Antony Riakiotakis
noreply at git.blender.org
Mon Nov 17 17:27:59 CET 2014
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);
}
More information about the Bf-blender-cvs
mailing list