2023-05-31 16:19:06 +02:00
|
|
|
/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2012-02-17 19:59:41 +01:00
|
|
|
#pragma once
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2019-02-17 22:08:12 +01:00
|
|
|
/** \file
|
|
|
|
* \ingroup bke
|
2011-02-18 14:05:18 +01:00
|
|
|
*/
|
|
|
|
|
2021-07-08 23:20:26 +02:00
|
|
|
/* XXX temporary, until AssetHandle is designed properly and queries can return a pointer to it. */
|
|
|
|
#include "DNA_asset_types.h"
|
|
|
|
|
2023-11-16 11:41:55 +01:00
|
|
|
#include "BLI_string_ref.hh"
|
2022-04-26 22:23:52 +02:00
|
|
|
#include "BLI_utildefines.h"
|
2023-11-16 11:41:55 +01:00
|
|
|
#include "BLI_vector.hh"
|
2022-04-26 22:23:52 +02:00
|
|
|
|
2010-10-05 02:05:14 +02:00
|
|
|
#include "DNA_listBase.h"
|
2020-05-08 18:16:39 +02:00
|
|
|
#include "DNA_object_enums.h"
|
2023-08-10 22:40:27 +02:00
|
|
|
#include "RNA_types.hh"
|
2010-10-05 02:05:14 +02:00
|
|
|
|
2008-12-18 03:56:48 +01:00
|
|
|
struct ARegion;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct Base;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct bGPdata;
|
|
|
|
struct bGPDframe;
|
|
|
|
struct bGPDlayer;
|
|
|
|
struct bPoseChannel;
|
|
|
|
struct bScreen;
|
Basic Alembic support
All in all, this patch adds an Alembic importer, an Alembic exporter,
and a new CacheFile data block which, for now, wraps around an Alembic
archive. This data block is made available through a new modifier ("Mesh
Sequence Cache") as well as a new constraint ("Transform Cache") to
somewhat properly support respectively geometric and transformation data
streaming from alembic caches.
A more in-depth documentation is to be found on the wiki, as well as a
guide to compile alembic: https://wiki.blender.org/index.php/
User:Kevindietrich/AlembicBasicIo.
Many thanks to everyone involved in this little project, and huge shout
out to "cgstrive" for the thorough testings with Maya, 3ds Max, Houdini
and Realflow as well as @fjuhec, @jensverwiebe and @jasperge for the
custom builds and compile fixes.
Reviewers: sergey, campbellbarton, mont29
Reviewed By: sergey, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D2060
2016-08-06 06:20:37 +02:00
|
|
|
struct CacheFile;
|
Collections and groups unification
OVERVIEW
* In 2.7 terminology, all layers and groups are now collection datablocks.
* These collections are nestable, linkable, instanceable, overrideable, ..
which opens up new ways to set up scenes and link + override data.
* Viewport/render visibility and selectability are now a part of the collection
and shared across all view layers and linkable.
* View layers define which subset of the scene collection hierarchy is excluded
for each. For many workflows one view layer can be used, these are more of an
advanced feature now.
OUTLINER
* The outliner now has a "View Layer" display mode instead of "Collections",
which can display the collections and/or objects in the view layer.
* In this display mode, collections can be excluded with the right click menu.
These will then be greyed out and their objects will be excluded.
* To view collections not linked to any scene, the "Blender File" display mode
can be used, with the new filtering option to just see Colleciton datablocks.
* The outliner right click menus for collections and objects were reorganized.
* Drag and drop still needs to be improved. Like before, dragging the icon or
text gives different results, we'll unify this later.
LINKING AND OVERRIDES
* Collections can now be linked into the scene without creating an instance,
with the link/append operator or from the collections view in the outliner.
* Collections can get static overrides with the right click menu in the outliner,
but this is rather unreliable and not clearly communicated at the moment.
* We still need to improve the make override operator to turn collection instances
into collections with overrides directly in the scene.
PERFORMANCE
* We tried to make performance not worse than before and improve it in some
cases. The main thing that's still a bit slower is multiple scenes, we have to
change the layer syncing to only updated affected scenes.
* Collections keep a list of their parent collections for faster incremental
updates in syncing and caching.
* View layer bases are now in a object -> base hash to avoid quadratic time
lookups internally and in API functions like visible_get().
VERSIONING
* Compatibility with 2.7 files should be improved due to the new visibility
controls. Of course users may not want to set up their scenes differently
now to avoid having separate layers and groups.
* Compatibility with 2.8 is mostly there, and was tested on Eevee demo and Hero
files. There's a few things which are know to be not quite compatible, like
nested layer collections inside groups.
* The versioning code for 2.8 files is quite complicated, and isolated behind
#ifdef so it can be removed at the end of the release cycle.
KNOWN ISSUES
* The G-key group operators in the 3D viewport were left mostly as is, they
need to be modified still to fit better.
* Same for the groups panel in the object properties. This needs to be updated
still, or perhaps replaced by something better.
* Collections must all have a unique name. Less restrictive namespacing is to
be done later, we'll have to see how important this is as all objects within
the collections must also have a unique name anyway.
* Full scene copy and delete scene are exactly doing the right thing yet.
Differential Revision: https://developer.blender.org/D3383
https://code.blender.org/2018/05/collections-and-groups/
2018-04-30 15:57:22 +02:00
|
|
|
struct Collection;
|
2017-04-04 13:07:41 +02:00
|
|
|
struct Depsgraph;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct EditBone;
|
|
|
|
struct ID;
|
|
|
|
struct Image;
|
Render Layers and Collections (merge from render-layers)
Design Documents
----------------
* https://wiki.blender.org/index.php/Dev:2.8/Source/Layers
* https://wiki.blender.org/index.php/Dev:2.8/Source/DataDesignRevised
User Commit Log
---------------
* New Layer and Collection system to replace render layers and viewport layers.
* A layer is a set of collections of objects (and their drawing options) required for specific tasks.
* A collection is a set of objects, equivalent of the old layers in Blender. A collection can be shared across multiple layers.
* All Scenes have a master collection that all other collections are children of.
* New collection "context" tab (in Properties Editor)
* New temporary viewport "collections" panel to control per-collection
visibility
Missing User Features
---------------------
* Collection "Filter"
Option to add objects based on their names
* Collection Manager operators
The existing buttons are placeholders
* Collection Manager drawing
The editor main region is empty
* Collection Override
* Per-Collection engine settings
This will come as a separate commit, as part of the clay-engine branch
Dev Commit Log
--------------
* New DNA file (DNA_layer_types.h) with the new structs
We are replacing Base by a new extended Base while keeping it backward
compatible with some legacy settings (i.e., lay, flag_legacy).
Renamed all Base to BaseLegacy to make it clear the areas of code that
still need to be converted
Note: manual changes were required on - deg_builder_nodes.h, rna_object.c, KX_Light.cpp
* Unittesting for main syncronization requirements
- read, write, add/copy/remove objects, copy scene, collection
link/unlinking, context)
* New Editor: Collection Manager
Based on patch by Julian Eisel
This is extracted from the layer-manager branch. With the following changes:
- Renamed references of layer manager to collections manager
- I doesn't include the editors/space_collections/ draw and util files
- The drawing code itself will be implemented separately by Julian
* Base / Object:
A little note about them. Original Blender code would try to keep them
in sync through the code, juggling flags back and forth. This will now
be handled by Depsgraph, keeping Object and Bases more separated
throughout the non-rendering code.
Scene.base is being cleared in doversion, and the old viewport drawing
code was poorly converted to use the new bases while the new viewport
code doesn't get merged and replace the old one.
Python API Changes
------------------
```
- scene.layers
+ # no longer exists
- scene.objects
+ scene.scene_layers.active.objects
- scene.objects.active
+ scene.render_layers.active.objects.active
- bpy.context.scene.objects.link()
+ bpy.context.scene_collection.objects.link()
- bpy_extras.object_utils.object_data_add(context, obdata, operator=None, use_active_layer=True, name=None)
+ bpy_extras.object_utils.object_data_add(context, obdata, operator=None, name=None)
- bpy.context.object.select
+ bpy.context.object.select = True
+ bpy.context.object.select = False
+ bpy.context.object.select_get()
+ bpy.context.object.select_set(action='SELECT')
+ bpy.context.object.select_set(action='DESELECT')
-AddObjectHelper.layers
+ # no longer exists
```
2017-02-07 10:18:38 +01:00
|
|
|
struct LayerCollection;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct ListBase;
|
|
|
|
struct Main;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct Mask;
|
|
|
|
struct MovieClip;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct Object;
|
|
|
|
struct PointerRNA;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct RegionView3D;
|
|
|
|
struct RenderEngineType;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct ReportList;
|
|
|
|
struct Scene;
|
|
|
|
struct ScrArea;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct SpaceAction;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct SpaceClip;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct SpaceClip;
|
|
|
|
struct SpaceConsole;
|
|
|
|
struct SpaceFile;
|
|
|
|
struct SpaceGraph;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct SpaceImage;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct SpaceInfo;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct SpaceLink;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct SpaceNla;
|
|
|
|
struct SpaceNode;
|
|
|
|
struct SpaceOutliner;
|
|
|
|
struct SpaceProperties;
|
|
|
|
struct SpaceSeq;
|
|
|
|
struct SpaceSpreadsheet;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct SpaceText;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct SpaceTopBar;
|
|
|
|
struct SpaceUserPref;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct StructRNA;
|
2.5: Text Editor back.
There was very little structure in this code, using many globals
and duplicated code. Now it should be better structured. Most
things should work, the main parts that are not back yet are the
python plugins and markers. Notes:
* Blenfont is used for drawing the text, nicely anti-aliased.
* A monospace truetype font was added, since that is needed for
the text editor. It's Bitstream Vera Sans Mono. This is the
default gnome terminal font, but it doesn't fit entirely well
with the other font I think, can be changed easily of course.
* Clipboard copy/cut/paste now always uses the system clipboard,
the code for the own cut buffer was removed.
* The interface buttons should support copy/cut/paste again now
as well.
* WM_clipboard_text_get/WM_clipboard_text_set were added to the
windowmanager code.
* Find panel is now a kind of second header, instead of a panel.
This needs especially a way to start editing the text field
immediately on open still.
* Operators are independent of the actual space when possible,
was a bit of puzzling but got it solved nice with notifiers,
and some lazy init for syntax highlight in the drawing code.
* RNA was created for the text editor space and used for buttons.
* Operators:
* New, Open, Reload, Save, Save As, Make Internal
* Run Script, Refresh Pyconstraints
* Copy, Cut, Paste
* Convert Whitespace, Uncomment, Comment, Indent, Unindent
* Line Break, Insert
* Next Marker, Previous Marker, Clear All Markers, Mark All
* Select Line, Select All
* Jump, Move, Move Select, Delete, Toggle Overwrite
* Scroll, Scroll Bar, Set Cursor, Line Number
* Find and Replace, Find, Replace, Find Set Selected,
Replace Set Selected
* To 3D Object
* Resolve Conflict
2009-03-01 00:33:35 +01:00
|
|
|
struct Text;
|
2019-01-28 11:08:24 +01:00
|
|
|
struct ToolSettings;
|
|
|
|
struct View3D;
|
|
|
|
struct ViewLayer;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct wmGizmoGroup;
|
|
|
|
struct wmMsgBus;
|
2008-12-18 03:56:48 +01:00
|
|
|
struct wmWindow;
|
|
|
|
struct wmWindowManager;
|
2023-11-16 12:00:12 +01:00
|
|
|
struct WorkSpace;
|
2008-12-18 03:56:48 +01:00
|
|
|
|
|
|
|
/* Structs */
|
|
|
|
|
|
|
|
struct bContext;
|
|
|
|
|
2008-12-23 03:07:13 +01:00
|
|
|
struct bContextDataResult;
|
2008-12-18 03:56:48 +01:00
|
|
|
|
Cleanup: Use enum for return values in context callbacks
Define enum `eContextResult` and use its values for returns, instead of
just returning 1, 0, or -1 (and always having some comment that explains
what -1 means).
This also cleans up the mixup between returning `0` and `false`, and `1`
and `true`. An inconsistency was discovered during this cleanup, and
marked with `TODO(sybren)`. It's not fixed here, as it would consititute
a functional change.
The enum isn't used everywhere, as enums in C and C++ can have different
storage sizes. To prevent issues, callback functions are still declared
as returning`int`. To at least make things easier to understand for
humans, I marked those with `int /*eContextResult*/`.
This is a followup of D9090, and is intended to unify how context
callbacks return values. This will make it easier to extend the approach
in D9090 to those functions.
No functional changes.
Differential Revision: https://developer.blender.org/D9095
2020-10-02 18:56:25 +02:00
|
|
|
/* Result of context lookups.
|
|
|
|
* The specific values are important, and used implicitly in ctx_data_get(). Some functions also
|
|
|
|
* still accept/return `int` instead, to ensure that the compiler uses the correct storage size
|
|
|
|
* when mixing C/C++ code. */
|
2023-11-16 12:00:12 +01:00
|
|
|
enum eContextResult {
|
Cleanup: Use enum for return values in context callbacks
Define enum `eContextResult` and use its values for returns, instead of
just returning 1, 0, or -1 (and always having some comment that explains
what -1 means).
This also cleans up the mixup between returning `0` and `false`, and `1`
and `true`. An inconsistency was discovered during this cleanup, and
marked with `TODO(sybren)`. It's not fixed here, as it would consititute
a functional change.
The enum isn't used everywhere, as enums in C and C++ can have different
storage sizes. To prevent issues, callback functions are still declared
as returning`int`. To at least make things easier to understand for
humans, I marked those with `int /*eContextResult*/`.
This is a followup of D9090, and is intended to unify how context
callbacks return values. This will make it easier to extend the approach
in D9090 to those functions.
No functional changes.
Differential Revision: https://developer.blender.org/D9095
2020-10-02 18:56:25 +02:00
|
|
|
/* The context member was found, and its data is available. */
|
|
|
|
CTX_RESULT_OK = 1,
|
|
|
|
|
|
|
|
/* The context member was not found. */
|
|
|
|
CTX_RESULT_MEMBER_NOT_FOUND = 0,
|
|
|
|
|
|
|
|
/* The context member was found, but its data is not available.
|
|
|
|
* For example, "active_bone" is a valid context member, but has not data in Object mode. */
|
|
|
|
CTX_RESULT_NO_DATA = -1,
|
2023-11-16 12:00:12 +01:00
|
|
|
};
|
Cleanup: Use enum for return values in context callbacks
Define enum `eContextResult` and use its values for returns, instead of
just returning 1, 0, or -1 (and always having some comment that explains
what -1 means).
This also cleans up the mixup between returning `0` and `false`, and `1`
and `true`. An inconsistency was discovered during this cleanup, and
marked with `TODO(sybren)`. It's not fixed here, as it would consititute
a functional change.
The enum isn't used everywhere, as enums in C and C++ can have different
storage sizes. To prevent issues, callback functions are still declared
as returning`int`. To at least make things easier to understand for
humans, I marked those with `int /*eContextResult*/`.
This is a followup of D9090, and is intended to unify how context
callbacks return values. This will make it easier to extend the approach
in D9090 to those functions.
No functional changes.
Differential Revision: https://developer.blender.org/D9095
2020-10-02 18:56:25 +02:00
|
|
|
|
|
|
|
/* Function mapping a context member name to its value. */
|
2023-11-16 12:00:12 +01:00
|
|
|
using bContextDataCallback = int /*eContextResult*/ (*)(const bContext *C,
|
|
|
|
const char *member,
|
|
|
|
bContextDataResult *result);
|
2009-05-29 01:13:42 +02:00
|
|
|
|
2022-12-19 02:13:15 +01:00
|
|
|
struct bContextStoreEntry {
|
|
|
|
std::string name;
|
2009-05-29 01:13:42 +02:00
|
|
|
PointerRNA ptr;
|
2022-12-19 02:13:15 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct bContextStore {
|
|
|
|
blender::Vector<bContextStoreEntry> entries;
|
|
|
|
bool used = false;
|
|
|
|
};
|
2009-05-29 01:13:42 +02:00
|
|
|
|
2023-07-04 14:46:19 +02:00
|
|
|
namespace blender::asset_system {
|
|
|
|
class AssetRepresentation;
|
|
|
|
}
|
|
|
|
|
2012-08-24 07:12:05 +02:00
|
|
|
/* for the context's rna mode enum
|
2022-12-18 21:40:30 +01:00
|
|
|
* keep aligned with data_mode_strings in context.cc */
|
2023-11-16 12:00:12 +01:00
|
|
|
enum eContextObjectMode {
|
2009-08-16 05:40:00 +02:00
|
|
|
CTX_MODE_EDIT_MESH = 0,
|
|
|
|
CTX_MODE_EDIT_CURVE,
|
|
|
|
CTX_MODE_EDIT_SURFACE,
|
|
|
|
CTX_MODE_EDIT_TEXT,
|
|
|
|
CTX_MODE_EDIT_ARMATURE,
|
|
|
|
CTX_MODE_EDIT_METABALL,
|
|
|
|
CTX_MODE_EDIT_LATTICE,
|
2022-02-18 11:16:02 +01:00
|
|
|
CTX_MODE_EDIT_CURVES,
|
2023-06-21 16:47:18 +02:00
|
|
|
CTX_MODE_EDIT_GREASE_PENCIL,
|
2023-06-28 18:52:45 +02:00
|
|
|
CTX_MODE_EDIT_POINT_CLOUD,
|
2009-08-16 05:40:00 +02:00
|
|
|
CTX_MODE_POSE,
|
|
|
|
CTX_MODE_SCULPT,
|
|
|
|
CTX_MODE_PAINT_WEIGHT,
|
|
|
|
CTX_MODE_PAINT_VERTEX,
|
|
|
|
CTX_MODE_PAINT_TEXTURE,
|
2016-12-28 17:30:58 +01:00
|
|
|
CTX_MODE_PARTICLE,
|
2018-01-03 14:10:42 +01:00
|
|
|
CTX_MODE_OBJECT,
|
2023-07-03 15:15:54 +02:00
|
|
|
CTX_MODE_PAINT_GPENCIL_LEGACY,
|
2023-06-21 16:47:18 +02:00
|
|
|
CTX_MODE_EDIT_GPENCIL_LEGACY,
|
2023-07-03 15:15:54 +02:00
|
|
|
CTX_MODE_SCULPT_GPENCIL_LEGACY,
|
|
|
|
CTX_MODE_WEIGHT_GPENCIL_LEGACY,
|
|
|
|
CTX_MODE_VERTEX_GPENCIL_LEGACY,
|
2022-02-15 12:32:15 +01:00
|
|
|
CTX_MODE_SCULPT_CURVES,
|
2023-07-03 16:34:30 +02:00
|
|
|
CTX_MODE_PAINT_GREASE_PENCIL,
|
2023-11-16 12:00:12 +01:00
|
|
|
};
|
2023-07-03 16:34:30 +02:00
|
|
|
#define CTX_MODE_NUM (CTX_MODE_PAINT_GREASE_PENCIL + 1)
|
2009-08-16 05:40:00 +02:00
|
|
|
|
2008-12-18 03:56:48 +01:00
|
|
|
/* Context */
|
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
bContext *CTX_create();
|
2008-12-18 03:56:48 +01:00
|
|
|
void CTX_free(bContext *C);
|
|
|
|
|
2009-03-25 21:49:15 +01:00
|
|
|
bContext *CTX_copy(const bContext *C);
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2009-05-29 01:13:42 +02:00
|
|
|
/* Stored Context */
|
|
|
|
|
2023-08-31 16:46:53 +02:00
|
|
|
bContextStore *CTX_store_add(blender::Vector<std::unique_ptr<bContextStore>> &contexts,
|
2022-12-19 02:13:15 +01:00
|
|
|
blender::StringRefNull name,
|
|
|
|
const PointerRNA *ptr);
|
2023-08-31 16:46:53 +02:00
|
|
|
bContextStore *CTX_store_add_all(blender::Vector<std::unique_ptr<bContextStore>> &contexts,
|
2023-08-31 17:59:58 +02:00
|
|
|
const bContextStore *context);
|
|
|
|
const bContextStore *CTX_store_get(const bContext *C);
|
|
|
|
void CTX_store_set(bContext *C, const bContextStore *store);
|
2022-04-26 22:23:52 +02:00
|
|
|
const PointerRNA *CTX_store_ptr_lookup(const bContextStore *store,
|
2022-12-19 02:13:15 +01:00
|
|
|
blender::StringRefNull name,
|
|
|
|
const StructRNA *type = nullptr);
|
|
|
|
|
2009-07-18 21:40:26 +02:00
|
|
|
/* need to store if python is initialized or not */
|
2019-08-15 20:54:10 +02:00
|
|
|
bool CTX_py_init_get(bContext *C);
|
|
|
|
void CTX_py_init_set(bContext *C, bool value);
|
2009-07-18 21:40:26 +02:00
|
|
|
|
2010-12-07 05:12:15 +01:00
|
|
|
void *CTX_py_dict_get(const bContext *C);
|
2020-09-17 10:23:12 +02:00
|
|
|
void *CTX_py_dict_get_orig(const bContext *C);
|
|
|
|
|
|
|
|
struct bContext_PyState {
|
|
|
|
void *py_context;
|
|
|
|
void *py_context_orig;
|
|
|
|
};
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_py_state_push(bContext *C, bContext_PyState *pystate, void *value);
|
|
|
|
void CTX_py_state_pop(bContext *C, bContext_PyState *pystate);
|
2009-10-29 10:25:11 +01:00
|
|
|
|
2008-12-18 03:56:48 +01:00
|
|
|
/* Window Manager Context */
|
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
wmWindowManager *CTX_wm_manager(const bContext *C);
|
|
|
|
wmWindow *CTX_wm_window(const bContext *C);
|
|
|
|
WorkSpace *CTX_wm_workspace(const bContext *C);
|
|
|
|
bScreen *CTX_wm_screen(const bContext *C);
|
|
|
|
ScrArea *CTX_wm_area(const bContext *C);
|
|
|
|
SpaceLink *CTX_wm_space_data(const bContext *C);
|
|
|
|
ARegion *CTX_wm_region(const bContext *C);
|
2008-12-18 03:56:48 +01:00
|
|
|
void *CTX_wm_region_data(const bContext *C);
|
2023-11-16 12:00:12 +01:00
|
|
|
ARegion *CTX_wm_menu(const bContext *C);
|
|
|
|
wmGizmoGroup *CTX_wm_gizmo_group(const bContext *C);
|
|
|
|
wmMsgBus *CTX_wm_message_bus(const bContext *C);
|
|
|
|
ReportList *CTX_wm_reports(const bContext *C);
|
|
|
|
|
|
|
|
View3D *CTX_wm_view3d(const bContext *C);
|
|
|
|
RegionView3D *CTX_wm_region_view3d(const bContext *C);
|
|
|
|
SpaceText *CTX_wm_space_text(const bContext *C);
|
|
|
|
SpaceImage *CTX_wm_space_image(const bContext *C);
|
|
|
|
SpaceConsole *CTX_wm_space_console(const bContext *C);
|
|
|
|
SpaceProperties *CTX_wm_space_properties(const bContext *C);
|
|
|
|
SpaceFile *CTX_wm_space_file(const bContext *C);
|
|
|
|
SpaceSeq *CTX_wm_space_seq(const bContext *C);
|
|
|
|
SpaceOutliner *CTX_wm_space_outliner(const bContext *C);
|
|
|
|
SpaceNla *CTX_wm_space_nla(const bContext *C);
|
|
|
|
SpaceNode *CTX_wm_space_node(const bContext *C);
|
|
|
|
SpaceGraph *CTX_wm_space_graph(const bContext *C);
|
|
|
|
SpaceAction *CTX_wm_space_action(const bContext *C);
|
|
|
|
SpaceInfo *CTX_wm_space_info(const bContext *C);
|
|
|
|
SpaceUserPref *CTX_wm_space_userpref(const bContext *C);
|
|
|
|
SpaceClip *CTX_wm_space_clip(const bContext *C);
|
|
|
|
SpaceTopBar *CTX_wm_space_topbar(const bContext *C);
|
|
|
|
SpaceSpreadsheet *CTX_wm_space_spreadsheet(const bContext *C);
|
|
|
|
|
|
|
|
void CTX_wm_manager_set(bContext *C, wmWindowManager *wm);
|
|
|
|
void CTX_wm_window_set(bContext *C, wmWindow *win);
|
|
|
|
void CTX_wm_screen_set(bContext *C, bScreen *screen); /* to be removed */
|
|
|
|
void CTX_wm_area_set(bContext *C, ScrArea *area);
|
|
|
|
void CTX_wm_region_set(bContext *C, ARegion *region);
|
|
|
|
void CTX_wm_menu_set(bContext *C, ARegion *menu);
|
|
|
|
void CTX_wm_gizmo_group_set(bContext *C, wmGizmoGroup *gzgroup);
|
2021-04-20 03:57:28 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Values to create the message that describes the reason poll failed.
|
|
|
|
*
|
|
|
|
* \note This must be called in the same context as the poll function that created it.
|
|
|
|
*/
|
|
|
|
struct bContextPollMsgDyn_Params {
|
2023-09-14 05:25:24 +02:00
|
|
|
/** The result is allocated. */
|
2021-04-20 03:57:28 +02:00
|
|
|
char *(*get_fn)(bContext *C, void *user_data);
|
|
|
|
/** Optionally free the user-data. */
|
|
|
|
void (*free_fn)(bContext *C, void *user_data);
|
|
|
|
void *user_data;
|
|
|
|
};
|
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
const char *CTX_wm_operator_poll_msg_get(bContext *C, bool *r_free);
|
|
|
|
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg);
|
|
|
|
void CTX_wm_operator_poll_msg_set_dynamic(bContext *C, const bContextPollMsgDyn_Params *params);
|
|
|
|
void CTX_wm_operator_poll_msg_clear(bContext *C);
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2008-12-23 03:07:13 +01:00
|
|
|
/* Data Context
|
2012-03-03 21:19:11 +01:00
|
|
|
*
|
2022-06-03 05:39:37 +02:00
|
|
|
* - #ListBase consists of #CollectionPointerLink items and must be
|
|
|
|
* freed with #BLI_freelistN!
|
|
|
|
* - The dir #ListBase consists of #LinkData items.
|
|
|
|
*/
|
2008-12-23 03:07:13 +01:00
|
|
|
|
2010-04-24 21:26:05 +02:00
|
|
|
/* data type, needed so we can tell between a NULL pointer and an empty list */
|
|
|
|
enum {
|
|
|
|
CTX_DATA_TYPE_POINTER = 0,
|
2019-02-03 04:01:45 +01:00
|
|
|
CTX_DATA_TYPE_COLLECTION,
|
2023-04-30 05:31:27 +02:00
|
|
|
CTX_DATA_TYPE_PROPERTY,
|
2010-04-24 21:26:05 +02:00
|
|
|
};
|
|
|
|
|
2009-06-20 16:55:28 +02:00
|
|
|
PointerRNA CTX_data_pointer_get(const bContext *C, const char *member);
|
2009-06-24 16:03:55 +02:00
|
|
|
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type);
|
2019-11-16 18:50:59 +01:00
|
|
|
PointerRNA CTX_data_pointer_get_type_silent(const bContext *C,
|
|
|
|
const char *member,
|
|
|
|
StructRNA *type);
|
2009-06-20 16:55:28 +02:00
|
|
|
ListBase CTX_data_collection_get(const bContext *C, const char *member);
|
Anim: move bone colors from bone groups to individual bones
Move control over the color of bones from bone groups to the bones
themselves. Instead of using bone groups (which are defined on the pose,
and thus owned by the object), the color is stored on:
- the bone (`struct Bone`, or RNA `armature.bones['bone_name'].color`)
- a possible override on the pose bone (`struct bPoseChannel`, or RNA
`ob.pose.bones['bone_name'].color`).
When the pose bone is set to its default color, the color is determined
by the armature bone. In armature edit mode, the armature bone colors
are always used, as then the pose data is unavailable.
Versioning code converts bone group colors to bone colors. If the
Armature has a single user, the group color is stored on the bones
directly. If it has multiple users, the group colors will be stored on
the pose bones instead.
The bone group color is not removed from DNA for forward compatibility,
that is, to avoid immediate dataloss when saving a 3.6 file with 4.0.
This is part of the replacement of bone groups & armature layers with
bone collections. See the design task at #108941.
Pull request: https://projects.blender.org/blender/blender/pulls/109976
2023-08-22 11:11:52 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* For each pointer in collection_pointers, remap it to point to `ptr->propname`.
|
|
|
|
*
|
|
|
|
* Example:
|
|
|
|
*
|
|
|
|
* lb = CTX_data_collection_get(C, "selected_pose_bones"); // lb contains pose bones.
|
|
|
|
* CTX_data_collection_remap_property(lb, "color"); // lb now contains bone colors.
|
|
|
|
*
|
|
|
|
* NOTE: this alters the items contained in the given listbase.
|
|
|
|
* It does not change the listbase itself.
|
|
|
|
*/
|
|
|
|
void CTX_data_collection_remap_property(ListBase /*CollectionPointerLink*/ collection_pointers,
|
|
|
|
const char *propname);
|
|
|
|
|
2021-12-07 07:19:15 +01:00
|
|
|
/**
|
|
|
|
* \param C: Context.
|
|
|
|
* \param use_store: Use 'C->wm.store'.
|
|
|
|
* \param use_rna: Use Include the properties from 'RNA_Context'.
|
|
|
|
* \param use_all: Don't skip values (currently only "scene").
|
|
|
|
*/
|
2022-01-07 01:38:08 +01:00
|
|
|
ListBase CTX_data_dir_get_ex(const bContext *C, bool use_store, bool use_rna, bool use_all);
|
2009-06-20 16:55:28 +02:00
|
|
|
ListBase CTX_data_dir_get(const bContext *C);
|
2023-05-27 07:10:56 +02:00
|
|
|
int /*eContextResult*/ CTX_data_get(const bContext *C,
|
|
|
|
const char *member,
|
|
|
|
PointerRNA *r_ptr,
|
|
|
|
ListBase *r_lb,
|
|
|
|
PropertyRNA **r_prop,
|
|
|
|
int *r_index,
|
|
|
|
short *r_type);
|
2009-03-19 20:03:38 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_id_pointer_set(bContextDataResult *result, ID *id);
|
2021-08-31 04:45:45 +02:00
|
|
|
void CTX_data_pointer_set_ptr(bContextDataResult *result, const PointerRNA *ptr);
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_pointer_set(bContextDataResult *result, ID *id, StructRNA *type, void *data);
|
2009-03-19 20:03:38 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_id_list_add(bContextDataResult *result, ID *id);
|
2021-08-31 04:45:45 +02:00
|
|
|
void CTX_data_list_add_ptr(bContextDataResult *result, const PointerRNA *ptr);
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_list_add(bContextDataResult *result, ID *id, StructRNA *type, void *data);
|
2009-03-19 20:03:38 +01:00
|
|
|
|
2023-04-30 05:31:27 +02:00
|
|
|
/**
|
2023-05-27 07:10:56 +02:00
|
|
|
* Stores a property in a result. Make sure to also call
|
|
|
|
* `CTX_data_type_set(result, CTX_DATA_TYPE_PROPERTY)`.
|
2023-04-30 05:31:27 +02:00
|
|
|
* \param result: The result to store the property in.
|
|
|
|
* \param prop: The property to store.
|
|
|
|
* \param index: The particular index in the property to store.
|
|
|
|
*/
|
|
|
|
void CTX_data_prop_set(bContextDataResult *result, PropertyRNA *prop, int index);
|
|
|
|
|
2020-09-04 20:59:13 +02:00
|
|
|
void CTX_data_dir_set(bContextDataResult *result, const char **dir);
|
2009-06-20 16:55:28 +02:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_type_set(bContextDataResult *result, short type);
|
|
|
|
short CTX_data_type_get(bContextDataResult *result);
|
2010-04-24 21:26:05 +02:00
|
|
|
|
2013-07-27 12:32:27 +02:00
|
|
|
bool CTX_data_equals(const char *member, const char *str);
|
|
|
|
bool CTX_data_dir(const char *member);
|
2009-03-19 20:03:38 +01:00
|
|
|
|
2011-11-05 06:44:52 +01:00
|
|
|
#define CTX_DATA_BEGIN(C, Type, instance, member) \
|
|
|
|
{ \
|
|
|
|
ListBase ctx_data_list; \
|
|
|
|
CollectionPointerLink *ctx_link; \
|
|
|
|
CTX_data_##member(C, &ctx_data_list); \
|
2021-12-27 17:26:09 +01:00
|
|
|
for (ctx_link = (CollectionPointerLink *)ctx_data_list.first; ctx_link; \
|
|
|
|
ctx_link = ctx_link->next) { \
|
|
|
|
Type instance = (Type)ctx_link->ptr.data;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-11-05 06:44:52 +01:00
|
|
|
#define CTX_DATA_END \
|
|
|
|
} \
|
|
|
|
BLI_freelistN(&ctx_data_list); \
|
2012-08-08 23:20:10 +02:00
|
|
|
} \
|
|
|
|
(void)0
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-16 16:19:16 +02:00
|
|
|
#define CTX_DATA_BEGIN_WITH_ID(C, Type, instance, member, Type_id, instance_id) \
|
|
|
|
CTX_DATA_BEGIN (C, Type, instance, member) \
|
2019-08-23 09:52:12 +02:00
|
|
|
Type_id instance_id = (Type_id)ctx_link->ptr.owner_id;
|
2018-04-16 16:19:16 +02:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
int ctx_data_list_count(const bContext *C, bool (*func)(const bContext *, ListBase *));
|
2009-01-17 01:51:42 +01:00
|
|
|
|
|
|
|
#define CTX_DATA_COUNT(C, member) ctx_data_list_count(C, CTX_data_##member)
|
2009-01-03 00:58:03 +01:00
|
|
|
|
2008-12-23 03:07:13 +01:00
|
|
|
/* Data Context Members */
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
Main *CTX_data_main(const bContext *C);
|
|
|
|
Scene *CTX_data_scene(const bContext *C);
|
2021-12-07 07:19:15 +01:00
|
|
|
/**
|
|
|
|
* This is tricky. Sometimes the user overrides the render_layer
|
|
|
|
* but not the scene_collection. In this case what to do?
|
|
|
|
*
|
|
|
|
* If the scene_collection is linked to the #ViewLayer we use it.
|
|
|
|
* Otherwise we fallback to the active one of the #ViewLayer.
|
|
|
|
*/
|
2023-11-16 12:00:12 +01:00
|
|
|
LayerCollection *CTX_data_layer_collection(const bContext *C);
|
|
|
|
Collection *CTX_data_collection(const bContext *C);
|
|
|
|
ViewLayer *CTX_data_view_layer(const bContext *C);
|
|
|
|
RenderEngineType *CTX_data_engine_type(const bContext *C);
|
|
|
|
ToolSettings *CTX_data_tool_settings(const bContext *C);
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2010-12-03 18:05:21 +01:00
|
|
|
const char *CTX_data_mode_string(const bContext *C);
|
2023-11-16 12:00:12 +01:00
|
|
|
enum eContextObjectMode CTX_data_mode_enum_ex(const Object *obedit,
|
|
|
|
const Object *ob,
|
2022-01-07 01:38:08 +01:00
|
|
|
eObjectMode object_mode);
|
2019-03-19 03:42:54 +01:00
|
|
|
enum eContextObjectMode CTX_data_mode_enum(const bContext *C);
|
2009-08-15 21:40:09 +02:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
void CTX_data_main_set(bContext *C, Main *bmain);
|
|
|
|
void CTX_data_scene_set(bContext *C, Scene *scene);
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2020-12-11 21:54:10 +01:00
|
|
|
/* Only Outliner currently! */
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_ids(const bContext *C, ListBase *list);
|
2020-12-11 21:54:10 +01:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_editable_objects(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_selected_editable_bases(const bContext *C, ListBase *list);
|
2009-01-17 19:35:33 +01:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_editable_objects(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_editable_bases(const bContext *C, ListBase *list);
|
2016-02-06 00:59:03 +01:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_objects(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_selected_bases(const bContext *C, ListBase *list);
|
2008-12-23 03:07:13 +01:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_visible_objects(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_visible_bases(const bContext *C, ListBase *list);
|
2008-12-28 19:10:24 +01:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selectable_objects(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_selectable_bases(const bContext *C, ListBase *list);
|
2009-07-11 13:31:49 +02:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
Object *CTX_data_active_object(const bContext *C);
|
|
|
|
Base *CTX_data_active_base(const bContext *C);
|
|
|
|
Object *CTX_data_edit_object(const bContext *C);
|
2008-12-18 03:56:48 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
Image *CTX_data_edit_image(const bContext *C);
|
2.5: Space Image ported back
Organized as follows:
uvedit/
uv editing related code
uvedit_draw.c: drawing code
uvedit_ops.c: operators, just a few done
uvedit_unwrap_ops.c: will be operators for unwrapping
uvedit_paramatrizer.c: lscm/abf/stretch/pack
space_image/
space_image.c: registration and common getter/setters
image_draw.c: drawing code, mostly functional
image_panels.c: panels, all commented out
image_render.c: render callbacks, non functional
image_ops.c: operators, only view navigation done
image_header.c: header, menus mostly done but missing buttons
Notes:
* Header menus consist only of Operator and RNA buttons, if they
are not implemented they're displayed grayed out. Ideally the full
header could work like this, but std_libbuttons looks problematic.
* Started using view2d code more than the old code, but for now it
still does own view2d management due to some very specific
requirements that the image window has. The drawing code however
is more clear hopefully, it only uses view2d, and there is no
switching between 'p' and 'f' view2d's anymore, it is always 'f'.
* In order to make uvedit operators more independent I move some
image space settings to scene toolsettings, and the current image
and its buffer is in the context. Especially sync selection and
select mode belonged there anyway as this cannot work correct with
different spaces having different settings anyway.
* Image paint is not back yet, did not want to put that together with
uvedit because there's really no code sharing.. perhaps vertex paint,
image paint and sculpt would be good to have in one module to share
brush code, partial redraw, etc better.
2009-01-15 05:38:18 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
Text *CTX_data_edit_text(const bContext *C);
|
|
|
|
MovieClip *CTX_data_edit_movieclip(const bContext *C);
|
|
|
|
Mask *CTX_data_edit_mask(const bContext *C);
|
2.5: Text Editor back.
There was very little structure in this code, using many globals
and duplicated code. Now it should be better structured. Most
things should work, the main parts that are not back yet are the
python plugins and markers. Notes:
* Blenfont is used for drawing the text, nicely anti-aliased.
* A monospace truetype font was added, since that is needed for
the text editor. It's Bitstream Vera Sans Mono. This is the
default gnome terminal font, but it doesn't fit entirely well
with the other font I think, can be changed easily of course.
* Clipboard copy/cut/paste now always uses the system clipboard,
the code for the own cut buffer was removed.
* The interface buttons should support copy/cut/paste again now
as well.
* WM_clipboard_text_get/WM_clipboard_text_set were added to the
windowmanager code.
* Find panel is now a kind of second header, instead of a panel.
This needs especially a way to start editing the text field
immediately on open still.
* Operators are independent of the actual space when possible,
was a bit of puzzling but got it solved nice with notifiers,
and some lazy init for syntax highlight in the drawing code.
* RNA was created for the text editor space and used for buttons.
* Operators:
* New, Open, Reload, Save, Save As, Make Internal
* Run Script, Refresh Pyconstraints
* Copy, Cut, Paste
* Convert Whitespace, Uncomment, Comment, Indent, Unindent
* Line Break, Insert
* Next Marker, Previous Marker, Clear All Markers, Mark All
* Select Line, Select All
* Jump, Move, Move Select, Delete, Toggle Overwrite
* Scroll, Scroll Bar, Set Cursor, Line Number
* Find and Replace, Find, Replace, Find Set Selected,
Replace Set Selected
* To 3D Object
* Resolve Conflict
2009-03-01 00:33:35 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
CacheFile *CTX_data_edit_cachefile(const bContext *C);
|
Basic Alembic support
All in all, this patch adds an Alembic importer, an Alembic exporter,
and a new CacheFile data block which, for now, wraps around an Alembic
archive. This data block is made available through a new modifier ("Mesh
Sequence Cache") as well as a new constraint ("Transform Cache") to
somewhat properly support respectively geometric and transformation data
streaming from alembic caches.
A more in-depth documentation is to be found on the wiki, as well as a
guide to compile alembic: https://wiki.blender.org/index.php/
User:Kevindietrich/AlembicBasicIo.
Many thanks to everyone involved in this little project, and huge shout
out to "cgstrive" for the thorough testings with Maya, 3ds Max, Houdini
and Realflow as well as @fjuhec, @jensverwiebe and @jasperge for the
custom builds and compile fixes.
Reviewers: sergey, campbellbarton, mont29
Reviewed By: sergey, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D2060
2016-08-06 06:20:37 +02:00
|
|
|
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_nodes(const bContext *C, ListBase *list);
|
2009-01-03 00:58:03 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
EditBone *CTX_data_active_bone(const bContext *C);
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_bones(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_selected_editable_bones(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_visible_bones(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_editable_bones(const bContext *C, ListBase *list);
|
2009-02-05 04:28:07 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
bPoseChannel *CTX_data_active_pose_bone(const bContext *C);
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_selected_pose_bones(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_selected_pose_bones_from_active_object(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_visible_pose_bones(const bContext *C, ListBase *list);
|
2009-02-05 04:28:07 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
bGPdata *CTX_data_gpencil_data(const bContext *C);
|
|
|
|
bGPDlayer *CTX_data_active_gpencil_layer(const bContext *C);
|
|
|
|
bGPDframe *CTX_data_active_gpencil_frame(const bContext *C);
|
2022-11-01 15:18:53 +01:00
|
|
|
bool CTX_data_visible_gpencil_layers(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_editable_gpencil_layers(const bContext *C, ListBase *list);
|
|
|
|
bool CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list);
|
Grease Pencil - Storyboarding Features (merge from GPencil_EditStrokes branch)
This merge-commit brings in a number of new features and workflow/UI improvements for
working with Grease Pencil. While these were originally targetted at improving
the workflow for creating 3D storyboards in Blender using the Grease Pencil,
many of these changes should also prove useful in other workflows too.
The main highlights here are:
1) It is now possible to edit Grease Pencil strokes
- Use D Tab, or toggle the "Enable Editing" toggles in the Toolbar/Properties regions
to enter "Stroke Edit Mode". In this mode, many common editing tools will
operate on Grease Pencil stroke points instead.
- Tools implemented include Select, Select All/Border/Circle/Linked/More/Less,
Grab, Rotate, Scale, Bend, Shear, To Sphere, Mirror, Duplicate, Delete.
- Proportional Editing works when using the transform tools
2) Grease Pencil stroke settings can now be animated
NOTE: Currently drivers don't work, but if time allows, this may still be
added before the release.
3) Strokes can be drawn with "filled" interiors, using a separate set of
colour/opacity settings to the ones used for the lines themselves.
This makes use of OpenGL filled polys, which has the limitation of only
being able to fill convex shapes. Some artifacts may be visible on concave
shapes (e.g. pacman's mouth will be overdrawn)
4) "Volumetric Strokes" - An alternative drawing technique for stroke drawing
has been added which draws strokes as a series of screen-aligned discs.
While this was originally a partial experimental technique at getting better
quality 3D lines, the effects possible using this technique were interesting
enough to warrant making this a dedicated feature. Best results when partial
opacity and large stroke widths are used.
5) Improved Onion Skinning Support
- Different colours can be selected for the before/after ghosts. To do so,
enable the "colour wheel" toggle beside the Onion Skinning toggle, and set
the colours accordingly.
- Different numbers of ghosts can be shown before/after the current frame
6) Grease Pencil datablocks are now attached to the scene by default instead of
the active object.
- For a long time, the object-attachment has proved to be quite problematic
for users to keep track of. Now that this is done at scene level, it is
easier for most users to use.
- An exception for old files (and for any addons which may benefit from object
attachment instead), is that if the active object has a Grease Pencil datablock,
that will be used instead.
- It is not currently possible to choose object-attachment from the UI, but
it is simple to do this from the console instead, by doing:
context.active_object.grease_pencil = bpy.data.grease_pencil["blah"]
7) Various UI Cleanups
- The layers UI has been cleaned up to use a list instead of the nested-panels
design. Apart from saving space, this is also much nicer to look at now.
- The UI code is now all defined in Python. To support this, it has been necessary
to add some new context properties to make it easier to access these settings.
e.g. "gpencil_data" for the datablock
"active_gpencil_layer" and "active_gpencil_frame" for active data,
"editable_gpencil_strokes" for the strokes that can be edited
- The "stroke placement/alignment" settings (previously "Drawing Settings" at the
bottom of the Grease Pencil panel in the Properties Region) is now located in
the toolbar. These were more toolsettings than properties for how GPencil got drawn.
- "Use Sketching Sessions" has been renamed "Continuous Drawing", as per a
suggestion for an earlier discussion on developer.blender.org
- By default, the painting operator will wait for a mouse button to be pressed
before it starts creating the stroke. This is to make it easier to include
this operator in various toolbars/menus/etc. To get it immediately starting
(as when you hold down DKEy to draw), set "wait_for_input" to False.
- GPencil Layers can be rearranged in the "Grease Pencil" mode of the Action Editor
- Toolbar panels have been added to all the other editors which support these.
8) Pie menus for quick-access to tools
A set of experimental pie menus has been included for quick access to many
tools and settings. It is not necessary to use these to get things done,
but they have been designed to help make certain common tasks easier.
- Ctrl-D = The main pie menu. Reveals tools in a context sensitive and
spatially stable manner.
- D Q = "Quick Settings" pie. This allows quick access to the active
layer's settings. Notably, colours, thickness, and turning
onion skinning on/off.
2014-11-30 13:52:06 +01:00
|
|
|
|
2023-11-16 12:00:12 +01:00
|
|
|
const AssetLibraryReference *CTX_wm_asset_library_ref(const bContext *C);
|
2023-07-04 15:15:18 +02:00
|
|
|
class blender::asset_system::AssetRepresentation *CTX_wm_asset(const bContext *C);
|
2023-03-16 15:40:31 +01:00
|
|
|
|
2020-07-17 21:18:54 +02:00
|
|
|
bool CTX_wm_interface_locked(const bContext *C);
|
|
|
|
|
2021-12-07 07:19:15 +01:00
|
|
|
/**
|
|
|
|
* Gets pointer to the dependency graph.
|
Dependency graph API changes
Main goal here is to make it obvious and predictable about
what is going on.
Summary of changes.
- Access to dependency graph is now only possible to a fully evaluated
graph. This is now done via context.evaluated_depsgraph_get().
The call will ensure both relations and datablocks are updated.
This way we don't allow access to some known bad state of the graph,
and also making explicit that getting update dependency graph is not
cheap.
- Access to evaluated ID is now possible via id.evaluated_get().
It was already possible to get evaluated ID via dependency graph,
but that was a bit confusing why access to original is done via ID
and to evaluated via depsgraph.
If datablock is not covered by dependency graph it will be returned
as-is.
- Similarly, request for original from an ID which is not evaluated
will return ID as-is.
- Removed scene.update().
This is very expensive to update all the view layers.
- Added depsgraph.update().
Now when temporary changes to objects are to be done, this is to
happen on original object and then dependency graph is to be
updated.
- Changed object.to_mesh() to behave the following way:
* When is used for original object modifiers are ignored.
For meshes this acts similar to mesh-copy, not very useful but
allows to keep code paths similar (i.e. for exporter which has
Apply Modifiers option it's only matter choosing between original
and evaluated object, the to_mesh() part can stay the same).
For curves this gives a mesh which is constructed from displist
without taking own modifiers and modifiers of bevel/taper objects
into account.
For metaballs this gives empty mesh.
Polygonization of metaball is not possible from a single object.
* When is used for evaluated object modifiers are always applied.
In fact, no evaluation is happening, the mesh is either copied
as-is, or constructed from current state of curve cache.
Arguments to apply modifiers and calculate original coordinates (ORCO,
aka undeformed coordinates) are removed. The ORCO is to be calculated
as part of dependency graph evaluation.
File used to regression-test (a packed Python script into .blend):
{F7033464}
Patch to make addons tests to pass:
{F7033466}
NOTE: I've included changes to FBX exporter, and those are addressing
report T63689.
NOTE: All the enabled-by-default addons are to be ported still, but
first want to have agreement on this part of changes.
NOTE: Also need to work on documentation for Python API, but, again,
better be done after having agreement on this work.
Reviewers: brecht, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D4834
2019-05-09 11:26:49 +02:00
|
|
|
* If it doesn't exist yet, it will be allocated.
|
|
|
|
*
|
|
|
|
* The result dependency graph is NOT guaranteed to be up-to-date neither from relation nor from
|
|
|
|
* evaluated data points of view.
|
|
|
|
*
|
2021-12-07 07:19:15 +01:00
|
|
|
* \note Can not be used if access to a fully evaluated data-block is needed.
|
|
|
|
*/
|
2023-11-16 12:00:12 +01:00
|
|
|
Depsgraph *CTX_data_depsgraph_pointer(const bContext *C);
|
2019-07-25 16:36:22 +02:00
|
|
|
|
2021-12-07 07:19:15 +01:00
|
|
|
/**
|
|
|
|
* Get dependency graph which is expected to be fully evaluated.
|
2019-07-25 16:36:22 +02:00
|
|
|
*
|
|
|
|
* In the release builds it is the same as CTX_data_depsgraph_pointer(). In the debug builds extra
|
|
|
|
* sanity checks are done. Additionally, this provides more semantic meaning to what is exactly
|
2021-12-07 07:19:15 +01:00
|
|
|
* expected to happen.
|
|
|
|
*/
|
2023-11-16 12:00:12 +01:00
|
|
|
Depsgraph *CTX_data_expect_evaluated_depsgraph(const bContext *C);
|
Grease Pencil - Storyboarding Features (merge from GPencil_EditStrokes branch)
This merge-commit brings in a number of new features and workflow/UI improvements for
working with Grease Pencil. While these were originally targetted at improving
the workflow for creating 3D storyboards in Blender using the Grease Pencil,
many of these changes should also prove useful in other workflows too.
The main highlights here are:
1) It is now possible to edit Grease Pencil strokes
- Use D Tab, or toggle the "Enable Editing" toggles in the Toolbar/Properties regions
to enter "Stroke Edit Mode". In this mode, many common editing tools will
operate on Grease Pencil stroke points instead.
- Tools implemented include Select, Select All/Border/Circle/Linked/More/Less,
Grab, Rotate, Scale, Bend, Shear, To Sphere, Mirror, Duplicate, Delete.
- Proportional Editing works when using the transform tools
2) Grease Pencil stroke settings can now be animated
NOTE: Currently drivers don't work, but if time allows, this may still be
added before the release.
3) Strokes can be drawn with "filled" interiors, using a separate set of
colour/opacity settings to the ones used for the lines themselves.
This makes use of OpenGL filled polys, which has the limitation of only
being able to fill convex shapes. Some artifacts may be visible on concave
shapes (e.g. pacman's mouth will be overdrawn)
4) "Volumetric Strokes" - An alternative drawing technique for stroke drawing
has been added which draws strokes as a series of screen-aligned discs.
While this was originally a partial experimental technique at getting better
quality 3D lines, the effects possible using this technique were interesting
enough to warrant making this a dedicated feature. Best results when partial
opacity and large stroke widths are used.
5) Improved Onion Skinning Support
- Different colours can be selected for the before/after ghosts. To do so,
enable the "colour wheel" toggle beside the Onion Skinning toggle, and set
the colours accordingly.
- Different numbers of ghosts can be shown before/after the current frame
6) Grease Pencil datablocks are now attached to the scene by default instead of
the active object.
- For a long time, the object-attachment has proved to be quite problematic
for users to keep track of. Now that this is done at scene level, it is
easier for most users to use.
- An exception for old files (and for any addons which may benefit from object
attachment instead), is that if the active object has a Grease Pencil datablock,
that will be used instead.
- It is not currently possible to choose object-attachment from the UI, but
it is simple to do this from the console instead, by doing:
context.active_object.grease_pencil = bpy.data.grease_pencil["blah"]
7) Various UI Cleanups
- The layers UI has been cleaned up to use a list instead of the nested-panels
design. Apart from saving space, this is also much nicer to look at now.
- The UI code is now all defined in Python. To support this, it has been necessary
to add some new context properties to make it easier to access these settings.
e.g. "gpencil_data" for the datablock
"active_gpencil_layer" and "active_gpencil_frame" for active data,
"editable_gpencil_strokes" for the strokes that can be edited
- The "stroke placement/alignment" settings (previously "Drawing Settings" at the
bottom of the Grease Pencil panel in the Properties Region) is now located in
the toolbar. These were more toolsettings than properties for how GPencil got drawn.
- "Use Sketching Sessions" has been renamed "Continuous Drawing", as per a
suggestion for an earlier discussion on developer.blender.org
- By default, the painting operator will wait for a mouse button to be pressed
before it starts creating the stroke. This is to make it easier to include
this operator in various toolbars/menus/etc. To get it immediately starting
(as when you hold down DKEy to draw), set "wait_for_input" to False.
- GPencil Layers can be rearranged in the "Grease Pencil" mode of the Action Editor
- Toolbar panels have been added to all the other editors which support these.
8) Pie menus for quick-access to tools
A set of experimental pie menus has been included for quick access to many
tools and settings. It is not necessary to use these to get things done,
but they have been designed to help make certain common tasks easier.
- Ctrl-D = The main pie menu. Reveals tools in a context sensitive and
spatially stable manner.
- D Q = "Quick Settings" pie. This allows quick access to the active
layer's settings. Notably, colours, thickness, and turning
onion skinning on/off.
2014-11-30 13:52:06 +01:00
|
|
|
|
2021-12-07 07:19:15 +01:00
|
|
|
/**
|
|
|
|
* Gets fully updated and evaluated dependency graph.
|
Dependency graph API changes
Main goal here is to make it obvious and predictable about
what is going on.
Summary of changes.
- Access to dependency graph is now only possible to a fully evaluated
graph. This is now done via context.evaluated_depsgraph_get().
The call will ensure both relations and datablocks are updated.
This way we don't allow access to some known bad state of the graph,
and also making explicit that getting update dependency graph is not
cheap.
- Access to evaluated ID is now possible via id.evaluated_get().
It was already possible to get evaluated ID via dependency graph,
but that was a bit confusing why access to original is done via ID
and to evaluated via depsgraph.
If datablock is not covered by dependency graph it will be returned
as-is.
- Similarly, request for original from an ID which is not evaluated
will return ID as-is.
- Removed scene.update().
This is very expensive to update all the view layers.
- Added depsgraph.update().
Now when temporary changes to objects are to be done, this is to
happen on original object and then dependency graph is to be
updated.
- Changed object.to_mesh() to behave the following way:
* When is used for original object modifiers are ignored.
For meshes this acts similar to mesh-copy, not very useful but
allows to keep code paths similar (i.e. for exporter which has
Apply Modifiers option it's only matter choosing between original
and evaluated object, the to_mesh() part can stay the same).
For curves this gives a mesh which is constructed from displist
without taking own modifiers and modifiers of bevel/taper objects
into account.
For metaballs this gives empty mesh.
Polygonization of metaball is not possible from a single object.
* When is used for evaluated object modifiers are always applied.
In fact, no evaluation is happening, the mesh is either copied
as-is, or constructed from current state of curve cache.
Arguments to apply modifiers and calculate original coordinates (ORCO,
aka undeformed coordinates) are removed. The ORCO is to be calculated
as part of dependency graph evaluation.
File used to regression-test (a packed Python script into .blend):
{F7033464}
Patch to make addons tests to pass:
{F7033466}
NOTE: I've included changes to FBX exporter, and those are addressing
report T63689.
NOTE: All the enabled-by-default addons are to be ported still, but
first want to have agreement on this part of changes.
NOTE: Also need to work on documentation for Python API, but, again,
better be done after having agreement on this work.
Reviewers: brecht, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D4834
2019-05-09 11:26:49 +02:00
|
|
|
*
|
|
|
|
* All the relations and evaluated objects are guaranteed to be up to date.
|
|
|
|
*
|
2021-12-07 07:19:15 +01:00
|
|
|
* \note Will be expensive if there are relations or objects tagged for update.
|
|
|
|
* \note If there are pending updates depsgraph hooks will be invoked.
|
|
|
|
*/
|
2023-11-16 12:00:12 +01:00
|
|
|
Depsgraph *CTX_data_ensure_evaluated_depsgraph(const bContext *C);
|
Dependency graph API changes
Main goal here is to make it obvious and predictable about
what is going on.
Summary of changes.
- Access to dependency graph is now only possible to a fully evaluated
graph. This is now done via context.evaluated_depsgraph_get().
The call will ensure both relations and datablocks are updated.
This way we don't allow access to some known bad state of the graph,
and also making explicit that getting update dependency graph is not
cheap.
- Access to evaluated ID is now possible via id.evaluated_get().
It was already possible to get evaluated ID via dependency graph,
but that was a bit confusing why access to original is done via ID
and to evaluated via depsgraph.
If datablock is not covered by dependency graph it will be returned
as-is.
- Similarly, request for original from an ID which is not evaluated
will return ID as-is.
- Removed scene.update().
This is very expensive to update all the view layers.
- Added depsgraph.update().
Now when temporary changes to objects are to be done, this is to
happen on original object and then dependency graph is to be
updated.
- Changed object.to_mesh() to behave the following way:
* When is used for original object modifiers are ignored.
For meshes this acts similar to mesh-copy, not very useful but
allows to keep code paths similar (i.e. for exporter which has
Apply Modifiers option it's only matter choosing between original
and evaluated object, the to_mesh() part can stay the same).
For curves this gives a mesh which is constructed from displist
without taking own modifiers and modifiers of bevel/taper objects
into account.
For metaballs this gives empty mesh.
Polygonization of metaball is not possible from a single object.
* When is used for evaluated object modifiers are always applied.
In fact, no evaluation is happening, the mesh is either copied
as-is, or constructed from current state of curve cache.
Arguments to apply modifiers and calculate original coordinates (ORCO,
aka undeformed coordinates) are removed. The ORCO is to be calculated
as part of dependency graph evaluation.
File used to regression-test (a packed Python script into .blend):
{F7033464}
Patch to make addons tests to pass:
{F7033466}
NOTE: I've included changes to FBX exporter, and those are addressing
report T63689.
NOTE: All the enabled-by-default addons are to be ported still, but
first want to have agreement on this part of changes.
NOTE: Also need to work on documentation for Python API, but, again,
better be done after having agreement on this work.
Reviewers: brecht, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D4834
2019-05-09 11:26:49 +02:00
|
|
|
|
2018-05-01 10:14:20 +02:00
|
|
|
/* Will Return NULL if depsgraph is not allocated yet.
|
|
|
|
* Only used by handful of operators which are run on file load.
|
|
|
|
*/
|
2023-11-16 12:00:12 +01:00
|
|
|
Depsgraph *CTX_data_depsgraph_on_load(const bContext *C);
|