Files
test/source/blender/editors/include/ED_outliner.hh
Christoph Lendenfeld fae19d7c92 Anim: Eyedropper for bone properties
This adds an eyedropper button to properties where you can choose a bone.

Clicking it activates the modal operation and you can pick:
* Bones from the Outliner
* Bones from the 3D Viewport if the Armature is in Pose Mode or Edit Mode

## Limitation

Picking from the 3D viewport while in Object Mode doesn't work due to technical reasons.
The selection buffer is only filled with pose bones if the armature is in pose mode.
Using the picker while in object mode gives you the Armature object, not its bones.

So you cannot use the bone picker to constrain an object to a bone.
UNLESS you pin the panel with the object, go to pose mode and then pick.

There is a warning printed for those cases to tell the user why this hasn't worked.

Pull Request: https://projects.blender.org/blender/blender/pulls/121523
2024-09-26 10:05:09 +02:00

61 lines
1.7 KiB
C++

/* SPDX-FileCopyrightText: 2015 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup editors
*/
#pragma once
struct Base;
struct ListBase;
struct SpaceOutliner;
struct bContext;
struct ID;
struct Bone;
struct PointerRNA;
bool ED_outliner_collections_editor_poll(bContext *C);
/**
* Populates the \param objects: ListBase with all the outliner selected objects
* We store it as (Object *)LinkData->data
* \param objects: expected to be empty
*/
void ED_outliner_selected_objects_get(const bContext *C, ListBase *objects);
/**
* Get base of object under cursor. Used for eyedropper tool.
*/
Base *ED_outliner_give_base_under_cursor(bContext *C, const int mval[2]);
/**
* Get the PointerRNA at the given coordinates. ONLY works for bone structs at the moment. Can be
* extended to work with other structs if the need arises.
*/
bool ED_outliner_give_rna_under_cursor(bContext *C, const int mval[2], PointerRNA *r_ptr);
/**
* Functions for tagging outliner selection syncing is dirty from operators.
*/
void ED_outliner_select_sync_from_object_tag(bContext *C);
void ED_outliner_select_sync_from_edit_bone_tag(bContext *C);
void ED_outliner_select_sync_from_pose_bone_tag(bContext *C);
void ED_outliner_select_sync_from_sequence_tag(bContext *C);
void ED_outliner_select_sync_from_all_tag(bContext *C);
bool ED_outliner_select_sync_is_dirty(const bContext *C);
/**
* Set clean outliner and mark other outliners for syncing.
*/
void ED_outliner_select_sync_from_outliner(bContext *C, SpaceOutliner *space_outliner);
/**
* Copy sync select dirty flag from window manager to all outliners to be synced lazily on draw.
*/
void ED_outliner_select_sync_flag_outliners(const bContext *C);
int ED_outliner_icon_from_id(const ID &id);