[Bf-blender-cvs] [a18e862] wiggly-widgets: Cleanup: Move View3D widgets into own file
Julian Eisel
noreply at git.blender.org
Sun Nov 15 18:34:08 CET 2015
Commit: a18e862f7b4e3132c29de3cf60c230ad510a58e3
Author: Julian Eisel
Date: Sun Nov 15 18:33:20 2015 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBa18e862f7b4e3132c29de3cf60c230ad510a58e3
Cleanup: Move View3D widgets into own file
===================================================================
M source/blender/editors/space_view3d/CMakeLists.txt
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_intern.h
A source/blender/editors/space_view3d/view3d_widgets.c
===================================================================
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index 059b384..6dce019 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -64,6 +64,7 @@ set(SRC
view3d_snap.c
view3d_toolbar.c
view3d_view.c
+ view3d_widgets.c
view3d_intern.h
)
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index b97a552..24a8721 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -730,310 +730,6 @@ static void view3d_dropboxes(void)
WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);
}
-
-static int WIDGETGROUP_camera_poll(const struct bContext *C, struct wmWidgetGroupType *UNUSED(wgrouptype))
-{
- Object *ob = CTX_data_active_object(C);
-
- return (ob && ob->type == OB_CAMERA);
-}
-
-static void WIDGETGROUP_camera_create(const struct bContext *C, struct wmWidgetGroup *wgroup)
-{
- Object *ob = CTX_data_active_object(C);
- Camera *ca = ob->data;
- wmWidget *widget;
- PointerRNA cameraptr;
- float dir[3];
- const bool focallen_widget = true; /* TODO make optional */
-
- RNA_pointer_create(&ca->id, &RNA_Camera, ca, &cameraptr);
- negate_v3_v3(dir, ob->obmat[2]);
-
- /* dof distance */
- if (ca->flag & CAM_SHOWLIMITS) {
- const float color[4] = {1.0f, 0.3f, 0.0f, 1.0f};
- const float color_hi[4] = {1.0f, 0.3f, 0.0f, 1.0f};
- const char *propname = "dof_distance";
-
- widget = WIDGET_arrow_new(wgroup, propname, WIDGET_ARROW_STYLE_CROSS);
- WIDGET_arrow_set_direction(widget, dir);
- WIDGET_arrow_set_up_vector(widget, ob->obmat[1]);
- WM_widget_set_flag(widget, WM_WIDGET_DRAW_HOVER, true);
- WM_widget_set_flag(widget, WM_WIDGET_SCALE_3D, false);
- WM_widget_set_colors(widget, color, color_hi);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &cameraptr, propname);
- WM_widget_set_scale(widget, ca->drawsize);
- }
-
- /* focal length
- * - logic/calculations are similar to BKE_camera_view_frame_ex, better keep in sync */
- if (focallen_widget) {
- const Scene *scene = CTX_data_scene(C);
- const bool is_ortho = (ca->type == CAM_ORTHO);
- const float scale_fac = ca->drawsize;
- const float half_sensor = 0.5f * ((ca->sensor_fit == CAMERA_SENSOR_FIT_VERT) ? ca->sensor_y : ca->sensor_x);
- const float scale[3] = {1.0f / len_v3(ob->obmat[0]), 1.0f / len_v3(ob->obmat[1]), 1.0f / len_v3(ob->obmat[2])};
- const float drawsize = is_ortho ? (0.5f * ca->ortho_scale) :
- (scale_fac / ((scale[0] + scale[1] + scale[2]) / 3.0f));
- const float aspx = (float)scene->r.xsch * scene->r.xasp;
- const float aspy = (float)scene->r.ysch * scene->r.yasp;
- const int sensor_fit = BKE_camera_sensor_fit(ca->sensor_fit, aspx, aspy);
- const char *propname = is_ortho ? "ortho_scale" : "lens";
- const bool fit_hor = (sensor_fit == CAMERA_SENSOR_FIT_HOR);
-
- const float color[4] = {1.0f, 1.0, 0.27f, 0.5f};
- const float color_hi[4] = {1.0f, 1.0, 0.27f, 1.0f};
-
- PropertyRNA *prop;
- float offset[3], asp[2];
- float min, max, range;
- float step, precision; /* dummys, unused */
-
-
- /* get aspect */
- asp[0] = fit_hor ? 1.0 : aspx / aspy;
- asp[1] = fit_hor ? aspy / aspx : 1.0f;
-
- /* account for lens shifting */
- offset[0] = ((ob->size[0] > 0.0f) ? -2.0f : 2.0f) * ca->shiftx;
- offset[1] = 2.0f * ca->shifty;
- offset[2] = 0.0f;
-
- /* get property range */
- prop = RNA_struct_find_property(&cameraptr, propname);
- RNA_property_float_ui_range(&cameraptr, prop, &min, &max, &step, &precision);
- range = max - min;
-
-
- /* *** actual widget stuff *** */
-
- widget = WIDGET_arrow_new(wgroup, propname, (WIDGET_ARROW_STYLE_CONE | WIDGET_ARROW_STYLE_CONSTRAINED));
-
- WIDGET_arrow_set_range_fac(widget, is_ortho ? (scale_fac * range) : (drawsize * range / half_sensor));
- WIDGET_arrow_set_direction(widget, dir);
- WIDGET_arrow_set_up_vector(widget, ob->obmat[1]);
- WIDGET_arrow_cone_set_aspect(widget, asp);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &cameraptr, propname);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_offset(widget, offset);
- WM_widget_set_scale(widget, drawsize);
- WM_widget_set_flag(widget, WM_WIDGET_SCALE_3D, false);
- WM_widget_set_colors(widget, color, color_hi);
-
- }
-}
-
-static int WIDGETGROUP_forcefield_poll(const struct bContext *C, struct wmWidgetGroupType *UNUSED(wgrouptype))
-{
- Object *ob = CTX_data_active_object(C);
-
- return ob && ob->pd && ob->pd->forcefield;
-}
-
-static void WIDGETGROUP_forcefield_create(const struct bContext *C, struct wmWidgetGroup *wgroup)
-{
- Object *ob = CTX_data_active_object(C);
- PartDeflect *pd = ob->pd;
- PointerRNA ptr;
- wmWidget *widget;
-
- const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
- const float ofs[3] = {0.0f, -size, 0.0f};
-
- const float col[4] = {0.8f, 0.8f, 0.45f, 0.5f};
- const float col_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
-
-
- /* only wind effector for now */
- if (pd->forcefield == PFIELD_WIND) {
- widget = WIDGET_arrow_new(wgroup, "field_strength", WIDGET_ARROW_STYLE_CONSTRAINED);
-
- RNA_pointer_create(&ob->id, &RNA_FieldSettings, pd, &ptr);
- WIDGET_arrow_set_direction(widget, ob->obmat[2]);
- WIDGET_arrow_set_ui_range(widget, -200.0f, 200.0f);
- WIDGET_arrow_set_range_fac(widget, 6.0f);
- WM_widget_set_colors(widget, col, col_hi);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_offset(widget, ofs);
- WM_widget_set_flag(widget, WM_WIDGET_SCALE_3D, false);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, "strength");
- }
-}
-
-#if 0
-static int WIDGETGROUP_shapekey_poll(const struct bContext *C, struct wmWidgetGroupType *UNUSED(wgrouptype))
-{
- Object *ob = CTX_data_active_object(C);
-
- if (ob && ob->type == OB_MESH) {
- Key *key = BKE_key_from_object(ob);
- KeyBlock *kb;
-
- if (key == NULL)
- return false;
-
- kb = BLI_findlink(&key->block, ob->shapenr - 1);
-
- if (kb)
- return true;
- }
- return false;
-}
-
-static void WIDGETGROUP_shapekey_draw(const struct bContext *C, struct wmWidgetGroup *wgroup)
-{
- float color_shape[4] = {1.0f, 0.3f, 0.0f, 1.0f};
- Object *ob = CTX_data_active_object(C);
- Key *key = BKE_key_from_object(ob);
- KeyBlock *kb = BLI_findlink(&key->block, ob->shapenr - 1);
- wmWidget *widget;
- PointerRNA shapeptr;
- float dir[3];
-
- widget = WIDGET_arrow_new(wgroup, WIDGET_ARROW_STYLE_NORMAL);
- WM_widget_set_3d_scale(widget, false);
- WIDGET_arrow_set_color(widget, color_shape);
- RNA_pointer_create(&key->id, &RNA_ShapeKey, kb, &shapeptr);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &shapeptr, "value");
- negate_v3_v3(dir, ob->obmat[2]);
- WIDGET_arrow_set_direction(widget, dir);
-}
-#endif
-
-/* draw facemaps depending on the selected bone in pose mode */
-#define USE_FACEMAP_FROM_BONE
-
-static int WIDGETGROUP_armature_facemaps_poll(const struct bContext *C, struct wmWidgetGroupType *UNUSED(wgrouptype))
-{
- Object *ob = CTX_data_active_object(C);
-
-#ifdef USE_FACEMAP_FROM_BONE
- if (ob && BKE_object_pose_context_check(ob)) {
- bPoseChannel *pchan;
- for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
- if (pchan->fmap_object && pchan->fmap) {
- return true;
- }
- }
- }
-#else
- if (ob && ob->type == OB_MESH && ob->fmaps.first) {
- ModifierData *md;
- VirtualModifierData virtualModifierData;
-
- md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
-
- /* exception for shape keys because we can edit those */
- for (; md; md = md->next) {
- if (modifier_isEnabled(CTX_data_scene(C), md, eModifierMode_Realtime) &&
- md->type == eModifierType_Armature)
- {
- ArmatureModifierData *amd = (ArmatureModifierData *) md;
- if (amd->object && (amd->deformflag & ARM_DEF_FACEMAPS))
- return true;
- }
- }
- }
-#endif
-
- return false;
-}
-
-static void WIDGET_armature_facemaps_select(bContext *C, wmWidget *widget, const int action)
-{
- Object *ob = CTX_data_active_object(C);
- bPoseChannel *pchan;
-
- switch (action) {
- case SEL_SELECT:
- for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
- if (pchan->fmap == WIDGET_facemap_get_fmap(widget)) {
- ED_pose_bone_select(ob, pchan, true);
- }
- }
- break;
- default:
- BLI_assert(0);
- }
-}
-
-static void WIDGETGROUP_armature_facemaps_create(const struct bContext *C, struct wmWidgetGroup *wgroup)
-{
- Object *ob = CTX_data_active_object(C);
- bArmature *arm = (bArmature *)ob->data;
- wmWidget *widget;
- PointerRNA famapptr;
- PropertyRNA *prop;
-
- const float color_shape[4] = {1.0f, 0.3f, 0.0f, 1.0f};
-
-
-#ifdef USE_FACEMAP_FROM_BONE
- bPoseChannel *pchan;
-
- for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
- if (pchan->fmap && (pchan->bone->layer & arm->layer)) {
- Object *fmap_ob = pchan->fmap_object;
- bFaceMap *fmap = pchan->fmap;
- PointerRNA *opptr;
-
- widget = WIDGET_facemap_new(wgroup, fmap->name, 0, fmap_ob, BLI_findindex(&fmap_ob->fmaps, fmap));
-
- RNA_pointer_create(&fmap_ob->id, &RNA_FaceMap, fmap, &famapptr);
- WM_widget_set_operator(widget, "TRANSFORM_OT_translate");
- WM_widget_set_colors(widget, color_shape, color_shape);
- WM_widget_set_flag(widget, WM_WIDGET_DRAW_HOVER, true);
- WM_widget_set_func_select(widget, WIDGET_armature_facemaps_select);
- opptr = WM_widget_set_operator(widget, "TRANSFORM_OT_translate");
- if ((prop = RNA_struct_find_property(opptr, "release_confirm"))) {
- RNA_property_boolean_set(opptr, prop, true);
- }
- }
- }
-#else
- Object *armature;
- ModifierData *md;
- VirtualModifierData virtualModifierData;
- int index = 0;
- bFaceMap *fmap = ob->fmaps.first;
-
-
- md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
-
- /* exception for shape keys because we can edit those */
- for (; md; md = md->next) {
- if (modifier_isEnabled(CTX_data_scene(C), md, eModifierMode_Realtime) && md->type == eModi
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list