1
1

Compare commits

...

227 Commits

Author SHA1 Message Date
dd6d0aefcc Merge branch 'master' into asset-greasepencil 2022-06-21 19:09:54 +02:00
c27a395d8c Merge branch 'master' into asset-greasepencil 2022-06-16 20:07:02 +02:00
29d24182b7 Merge branch 'master' into asset-greasepencil 2022-05-31 16:53:48 +02:00
cf73cb5ca3 Merge branch 'master' into asset-greasepencil 2022-05-23 09:59:44 +02:00
8deaff79ad Merge branch 'master' into asset-greasepencil 2022-04-29 16:08:56 +02:00
ea286f3f8a Merge branch 'master' into asset-greasepencil 2022-04-14 10:05:55 +02:00
ef0e84afc6 Create custom Tooltip for GPencil 2022-04-07 19:18:07 +02:00
4b94d972ac Cleanup code 2022-04-07 18:02:57 +02:00
09bb0fffe5 Fix possible use of NULL pointer 2022-04-07 17:29:45 +02:00
618e48b657 Merge branch 'master' into asset-greasepencil 2022-04-07 17:00:52 +02:00
da71260803 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/blenkernel/intern/icons.cc
	source/blender/editors/gpencil/CMakeLists.txt
2022-04-05 11:40:24 +02:00
bde014efbf Merge branch 'master' into asset-greasepencil 2022-03-25 10:33:37 +01:00
64f6750fce GPencil: Fix compiler errors after merge
The event parameters have changed
2022-03-24 11:40:13 +01:00
7459cd7f11 Merge branch 'master' into asset-greasepencil 2022-03-24 11:31:51 +01:00
e6656713d3 Merge branch 'master' into asset-greasepencil 2022-03-17 11:06:45 +01:00
a7135857c5 GPencil: Change license header text
Use new SPDX license text.
2022-02-17 16:58:27 +01:00
ddd697cd28 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/makesdna/DNA_gpencil_types.h
2022-02-17 16:50:19 +01:00
70bf5618d7 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/blenkernel/intern/gpencil.c
        source/blender/makesdna/DNA_gpencil_types.h
2022-02-10 16:51:48 +01:00
c4d935de85 Merge branch 'master' into asset-greasepencil 2022-02-04 09:43:38 +01:00
8eab21729b Merge branch 'master' into asset-greasepencil 2022-01-30 11:24:31 +01:00
dd858bacbd Merge branch 'master' into asset-greasepencil 2022-01-25 15:44:55 +01:00
91a571c26a Merge branch 'master' into asset-greasepencil 2022-01-24 10:48:43 +01:00
88a61e16e1 Merge branch 'master' into asset-greasepencil 2022-01-23 10:59:04 +01:00
4ef5cd8c99 Cleanup comment 2022-01-22 17:29:21 +01:00
410ec3fb3a New Flip option
Using F key (Horizontal) or Shift+F (Vertical)  is possible to flip the asset.
2022-01-22 16:18:29 +01:00
4fd0c73984 Merge branch 'master' into asset-greasepencil 2022-01-22 10:46:45 +01:00
6f7eb0e62d Merge branch 'master' into asset-greasepencil 2022-01-21 16:36:28 +01:00
ed58689989 Merge branch 'master' into asset-greasepencil 2022-01-21 10:37:44 +01:00
Amélie Fondevilla
d10c0db7b2 Select Asset frames in target object
While importing a gpencil asset in the scene, all the corresponding frames are now selected.

Differential Revision: https://developer.blender.org/D13883
2022-01-20 18:28:13 +01:00
2393f9c41d Merge branch 'master' into asset-greasepencil 2022-01-20 17:08:19 +01:00
8dc02670d9 Merge branch 'master' into asset-greasepencil 2022-01-19 17:27:59 +01:00
531d0fa8e3 Cleanup code and avoid duplications
Also be sure the selection index is set as expected (this index is used in interpolation tools)
2022-01-19 16:58:29 +01:00
52798653bc Select always the strokes of the asset in any mode
Before only was selected if the asset was imported in Edit mode.
2022-01-19 16:41:13 +01:00
5e71067e32 Set Origin to Geomtry to ON by default
After some feedback, it's better set this by default to ON.
2022-01-19 11:16:05 +01:00
6062a14ff5 Merge branch 'master' into asset-greasepencil 2022-01-19 11:05:53 +01:00
539facea57 Merge branch 'master' into asset-greasepencil 2022-01-18 19:18:32 +01:00
4cd11f862f Merge branch 'master' into asset-greasepencil 2022-01-17 16:01:11 +01:00
93244ec336 Fix crash importing due wrong active frame pointer
The active frame was not NULL and this linked the frame with the asset frame instead of target frame.
2022-01-17 12:25:29 +01:00
883923173a Safe checking of pointers of material 2022-01-17 11:52:56 +01:00
4fcc9b146c Merge branch 'master' into asset-greasepencil 2022-01-17 10:38:29 +01:00
d8f6dc1688 Add missing menu options 2022-01-11 22:32:19 +01:00
b645c13ead Remove experimental flag check 2022-01-11 22:26:38 +01:00
8234ce5bd3 Cleanup C++ nullptr and compiler warning 2022-01-11 16:36:52 +01:00
da601f54db Fix C++ conversion of render_preview 2022-01-11 16:32:36 +01:00
cddd803ec0 Merge branch 'master' into asset-greasepencil 2022-01-11 16:12:39 +01:00
c7161379c2 Merge branch 'master' into asset-greasepencil 2022-01-07 16:05:22 +01:00
bc39b93ab9 Merge branch 'master' into asset-greasepencil 2021-12-30 15:32:26 +01:00
543b71a30b Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/editors/render/render_preview.cc
2021-12-27 19:30:48 +01:00
c80e43bb48 Merge branch 'master' into asset-greasepencil 2021-12-22 16:17:00 +01:00
ce02477e24 Merge branch 'master' into asset-greasepencil 2021-12-17 16:58:01 +01:00
1979c48ffc Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/blenkernel/intern/icons.cc
2021-12-15 18:38:10 +01:00
4bc705328a Merge branch 'master' into asset-greasepencil 2021-11-16 15:48:33 +01:00
43b2918fb5 Merge branch 'master' into asset-greasepencil 2021-11-15 18:54:39 +01:00
1dee511a23 Check Autokey Button
If the autokey is disabled, the asset try to use existing active frame, but if it's not found, a new frame is created.

Whe Autokey is enabled, the new frame is always created if not existing frame.
2021-11-15 18:52:51 +01:00
263cf6a8b8 Merge branch 'asset-greasepencil' of ssh://git.blender.org/blender into asset-greasepencil 2021-11-15 18:13:44 +01:00
0abe882cfe GPencil: Asset Manager support
This operator creates an asset base on one of the next option:

* Active Layer
* Active Frame
* Active Frame All Layers
* Selected Strokes

Also new asset preview for Grease Pencil has been added.

Note: Still pending how manage layers order and how use temp datablocks.

Differential Revision: https://developer.blender.org/D13193
2021-11-11 18:19:56 +01:00
1fe44b93bc Merge branch 'master' into asset-greasepencil 2021-11-11 17:11:59 +01:00
d7a20a339a Merge branch 'master' into asset-greasepencil 2021-11-04 20:01:23 +01:00
0ce5a6b723 Fix errors after merge 2021-11-04 20:01:04 +01:00
8a5b59ce3c Merge master into asset-greasepencil 2021-11-04 19:54:05 +01:00
31be976148 Merge branch 'master' into asset-greasepencil 2021-11-03 20:07:31 +01:00
8eafb03ea3 Merge branch 'master' into asset-greasepencil 2021-10-27 13:31:45 +02:00
2e37ed5940 GPencil: Fix problems after merge
Some functions have changed and the icons was not displayed as expected.
2021-10-26 17:23:59 +02:00
ed71663485 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/blenkernel/intern/icons.cc
2021-10-26 16:55:23 +02:00
7dddb66037 Merge branch 'master' into asset-greasepencil 2021-10-22 17:01:37 +02:00
d37949f4fd Merge branch 'master' into asset-greasepencil 2021-10-18 10:12:37 +02:00
c310004511 Merge branch 'master' into asset-greasepencil 2021-10-16 12:51:20 +02:00
1b47d768c7 Merge branch 'master' into asset-greasepencil 2021-10-12 12:50:30 +02:00
da7e623db3 Merge branch 'master' into asset-greasepencil 2021-10-08 17:27:09 +02:00
900a4965b1 Merge branch 'master' into asset-greasepencil 2021-10-07 16:15:52 +02:00
55640c6773 Merge branch 'master' into asset-greasepencil 2021-10-04 16:43:30 +02:00
74a4df6803 Merge branch 'master' into asset-greasepencil 2021-10-01 19:30:35 +02:00
6e01f7b492 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/makesrna/intern/rna_space.c
2021-09-30 20:00:30 +02:00
fb68cf70fe Merge branch 'master' into asset-greasepencil 2021-09-28 10:10:30 +02:00
9fa197da40 Merge branch 'master' into asset-greasepencil 2021-09-27 16:13:29 +02:00
dacc3627ee Merge branch 'master' into asset-greasepencil 2021-09-22 17:05:50 +02:00
d1a8ca02a0 Merge branch 'master' into asset-greasepencil 2021-09-22 15:57:14 +02:00
cdc9239dcf Merge branch 'master' into asset-greasepencil 2021-09-19 19:32:18 +02:00
55c9bbd7f9 Merge branch 'master' into asset-greasepencil 2021-09-17 17:05:43 +02:00
2ba33bf384 Merge branch 'master' into asset-greasepencil 2021-09-15 15:20:41 +02:00
8154298128 Merge branch 'master' into asset-greasepencil 2021-09-10 16:21:00 +02:00
c6cf4b26a7 Merge branch 'master' into asset-greasepencil 2021-09-08 19:05:01 +02:00
20d6b6acb0 Merge branch 'master' into asset-greasepencil 2021-09-07 15:51:41 +02:00
b8aa63dd40 Merge branch 'master' into asset-greasepencil 2021-09-06 18:57:08 +02:00
af781f4001 Merge branch 'master' into asset-greasepencil 2021-09-03 15:31:57 +02:00
43f34e420b Merge branch 'master' into asset-greasepencil 2021-08-31 15:03:49 +02:00
21ff1fc21c Merge branch 'master' into asset-greasepencil 2021-08-31 12:19:10 +02:00
2c6a1cbe96 GPencil: Fix merge conflict 2021-08-30 17:37:11 +02:00
9824c45386 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/editors/gpencil/gpencil_data.c
2021-08-30 17:35:45 +02:00
00898c183b Merge branch 'master' into asset-greasepencil 2021-08-30 15:27:07 +02:00
f07be2204a Merge branch 'master' into asset-greasepencil 2021-08-30 15:12:19 +02:00
b864b15f4b Merge branch 'master' into asset-greasepencil 2021-08-26 22:00:53 +02:00
333c8157ad GPencil: Split poll function to enable only in Edit mode
The asset creation must work only in edit mode, but the import in any mode.
2021-08-26 18:45:58 +02:00
d46edf6861 Merge branch 'master' into asset-greasepencil 2021-08-26 15:42:34 +02:00
0f357910c2 Merge branch 'master' into asset-greasepencil 2021-08-25 16:01:25 +02:00
c7007295f7 Merge branch 'master' into asset-greasepencil 2021-08-23 22:30:04 +02:00
5df6121d17 Merge branch 'master' into asset-greasepencil 2021-08-21 14:59:50 +02:00
e5b55eddec Merge branch 'master' into asset-greasepencil 2021-08-19 19:23:30 +02:00
648e8bfb82 Merge branch 'master' into asset-greasepencil 2021-08-19 17:08:05 +02:00
8e08d49723 Merge branch 'master' into asset-greasepencil 2021-08-19 11:25:21 +02:00
527e6440c3 Merge branch 'master' into asset-greasepencil 2021-08-18 16:18:24 +02:00
722323503b Merge branch 'master' into asset-greasepencil 2021-08-17 11:42:59 +02:00
0f156813bc Merge branch 'master' into asset-greasepencil 2021-08-16 22:45:28 +02:00
6fb0c2aa28 Merge branch 'master' into asset-greasepencil 2021-08-15 16:09:00 +02:00
828cd5ba9d Merge branch 'master' into asset-greasepencil 2021-08-13 10:38:18 +02:00
ad7c0e4cd9 GPencil: Remove tags creation
Remove the creation of automatic tags.
2021-08-11 16:57:38 +02:00
eaf02c997d GPencil: Fix extended experimental in python script 2021-08-11 15:18:46 +02:00
99ca8f2b14 GPencil: Replace to use_extended_asset_browser
Some features have been moved to extended asset browser.
2021-08-11 15:09:03 +02:00
eb7cba0bc1 Merge branch 'master' into asset-greasepencil 2021-08-11 15:07:20 +02:00
4c43438fcc Merge branch 'master' into asset-greasepencil 2021-08-10 23:11:52 +02:00
a7338751ab Merge branch 'master' into asset-greasepencil 2021-08-09 15:29:49 +02:00
d73d0a1817 Merge branch 'master' into asset-greasepencil 2021-08-08 15:09:58 +02:00
36da47d7d6 Merge branch 'master' into asset-greasepencil 2021-08-08 14:59:08 +02:00
7f06c62183 Merge branch 'master' into asset-greasepencil 2021-08-06 15:30:41 +02:00
d3b41c6b67 Merge branch 'master' into asset-greasepencil 2021-08-05 17:23:43 +02:00
ee21ad8ef6 Merge branch 'master' into asset-greasepencil 2021-08-05 10:48:48 +02:00
b5fd23c4f2 Merge branch 'master' into asset-greasepencil 2021-08-04 16:05:00 +02:00
2cdfb4b9f6 GPencil: Fix problems after merge
The operator was not executed because the general poll for data import was true and always was executed instead of GPencil import operator.
2021-08-03 11:12:36 +02:00
fcad13b596 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/editors/space_view3d/space_view3d.c
2021-08-03 10:39:30 +02:00
5955d7ffd5 GPencil: Split tags
Add Animation tag separated of Grease Pencil Tag
2021-08-03 10:36:28 +02:00
49c73d4afc GPencil: Cleanup unselect code 2021-08-02 15:51:36 +02:00
68616ca754 GPencil: Tag animation or Strokes
Depending of number of frames the asset is tagged as static or animation.

Also fixed empty frames issue when create asset.
2021-08-02 15:34:18 +02:00
19e2a949ea GPencil: Add a Tag to asset 2021-08-02 12:27:36 +02:00
a25883dbf7 Merge branch 'master' into asset-greasepencil 2021-08-02 11:06:48 +02:00
74102b0782 Merge branch 'master' into asset-greasepencil 2021-07-30 16:12:50 +02:00
7dc728e197 GPencil: Keep selected asset if working in Edit mode
In this way, after import the asset it can be transformed if it's in Edit mode.

For other modes the strokes are unselected.
2021-07-29 23:18:00 +02:00
6c54545194 Merge branch 'master' into asset-greasepencil 2021-07-29 22:31:33 +02:00
cda41db33b Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/editors/render/render_preview.c
2021-07-29 15:14:25 +02:00
bd02ab3e54 Merge branch 'master' into asset-greasepencil 2021-07-28 22:09:40 +02:00
7ac041d515 GPencil: Avoid import empty assets 2021-07-26 17:46:28 +02:00
ca66dfff19 GPencil: Cleanup include files 2021-07-26 17:39:16 +02:00
d2a5bc2852 Merge branch 'master' into asset-greasepencil 2021-07-26 17:26:38 +02:00
7f51a126d0 GPencil: Fix merge error 2021-07-26 17:25:13 +02:00
004f964ce3 Merge branch 'master' into asset-greasepencil
Conflicts:
	source/blender/editors/gpencil/gpencil_data.c
2021-07-26 17:21:28 +02:00
b6a8d21be8 GPencil: Remove Hash tables and use arrays
Simplify the code and use an array instead to use several hash tables. This is faster and the code is more simple.
2021-07-26 16:38:21 +02:00
93ea208a86 Merge branch 'master' into asset-greasepencil 2021-07-26 12:02:00 +02:00
91e5bb737b Merge branch 'master' into asset-greasepencil 2021-07-25 18:34:21 +02:00
59101ffecd GPencil: Remove Retime parameter
As this must be done 99,9999% of times, it's better to remove the parameter and keep UI simple.
2021-07-24 15:36:34 +02:00
4b10e08778 GPencil: Cleanup comment 2021-07-24 12:38:08 +02:00
f1f09b565e GPencil: Select visible frame for preview image
The datablock must be in a frame inside the range to get a visible thumbnail.
2021-07-24 12:12:25 +02:00
9c773fdb7e GPencil: Ensure preview is done with first frame 2021-07-24 00:00:50 +02:00
60aa4fffa1 GPencil: New option to retime frame number 2021-07-23 23:52:30 +02:00
5528d57602 GPencil: Change text 2021-07-23 15:30:03 +02:00
8303d0cf21 GPencil: Rename Merge to Flatten 2021-07-23 15:09:30 +02:00
4f406c1bc8 GPencil: Cleanup comments 2021-07-23 13:38:52 +02:00
073d8ef31a GPencil: Organize code and comments
Full cleanup
2021-07-23 13:34:27 +02:00
1c5fa23256 GPencil: Add warning for non supported features
Some features as modifiers are part of the object and this asset type is datablock only and canot support them.

Now the user receives a warning about these features because they are not included in the final asset. 

To get all these features in the asset, it's necessary create Object Asset type and not Datablock type as it's done in this operator.
2021-07-23 12:59:26 +02:00
58b30be65a GPencil: Rename enum values for better naming 2021-07-23 12:45:38 +02:00
c2100520d3 GPencil: Remove unused variable 2021-07-23 12:40:43 +02:00
ccf5835575 GPencil: Code cleanup 2021-07-23 12:38:43 +02:00
44c97e6d2a GPencil: Exclude hidden layers 2021-07-23 12:24:50 +02:00
f545a1499f GPencil: Use bool instead of int 2021-07-23 12:24:27 +02:00
7a46fafb97 Merge branch 'master' into asset-greasepencil 2021-07-23 11:08:03 +02:00
2bd3cb2620 Cleanup: Comments 2021-07-22 14:03:52 +02:00
19bd786f03 Merge branch 'master' into asset-greasepencil 2021-07-22 11:37:47 +02:00
8152882281 GPencil: Fix empty preview image
As the render preview uses a new scene, the active frame is set to 1, but grease pencil needs to have the current frame in the right place to display the strokes. Now the current frame number in the original frame is passes to scene creation function to set the same frame in the preview temporal scene.
2021-07-22 11:15:42 +02:00
dbcd451824 GPencil: Fix error in layers order
Before was inverted because a bug
2021-07-22 11:12:17 +02:00
6f2993e584 GPencil: Fix infinite loop when importing to new object 2021-07-22 10:38:14 +02:00
d4a5b6af76 GPencil: Avoid segment fault when material is NULL 2021-07-22 10:37:26 +02:00
4dc14fdbd3 GPencil: Fix error importing layers
The layer need to be duplicated in order to keep all details.
2021-07-21 21:04:38 +02:00
3e8c2efd58 GPencil: New option to create asset for selected frames 2021-07-21 20:59:38 +02:00
cea6ff78d7 GPencil: New options to create Asset for All layers and All layers splitted 2021-07-21 20:41:03 +02:00
a90b578d7d GPencil: Add option to merge layers in Asset creation 2021-07-21 20:19:26 +02:00
94b43f6368 GPencil: Move to function the layer merge logic
This will be used by asset creation.
2021-07-21 20:03:23 +02:00
97d52bba63 GPencil: Fix wrong comment 2021-07-21 17:36:10 +02:00
02c13cad05 GPencil: Use current frame to insert asset instead of absolute values 2021-07-21 17:30:00 +02:00
cdd7a00a50 Merge branch 'master' into asset-greasepencil 2021-07-21 15:52:47 +02:00
86363894b2 Merge branch 'master' into asset-greasepencil 2021-07-21 10:08:48 +02:00
60f8f8e884 GPencil: Add notifier to update material list 2021-07-20 18:49:27 +02:00
4aa147a966 GPencil: Rotate around transform center instead of cage center
The cage center can change during transformation
2021-07-20 18:43:04 +02:00
a41bef88ab GPencil: Cleanup of function names, variables and comments
Also some code reorganization.
2021-07-20 18:02:06 +02:00
17863303bc GPencil: Add Layers in inverse order
To keep strokes order, the layers must be added in inverse order to the destination object.
2021-07-20 17:32:47 +02:00
9838f7e639 GPencil: Remove materials added if the operator is canceled 2021-07-20 17:30:51 +02:00
d4fbb51932 GPencil: Cleanups 2021-07-20 16:59:49 +02:00
55b0f37d4b GPencil: Fix error for Pivot when object not in origin 2021-07-20 16:53:01 +02:00
a078e9f74f GPencil: Cleanup and simplify calculations 2021-07-20 16:39:57 +02:00
1623340339 GPencil: More cleanup 2021-07-19 17:10:34 +02:00
075e7a7348 GPencil: Comment clenaup 2021-07-19 16:58:56 +02:00
73435e36d4 GPencil: Remove parenting when the asset is created
The parent cannot be used in the asset.
2021-07-19 16:17:52 +02:00
352a63e479 GPencil: Use cage center as origin for rotation angle 2021-07-19 16:14:38 +02:00
216e0e3591 GPencil: More work with transformations 2021-07-19 13:47:00 +02:00
53ef7f4944 Merge branch 'master' into asset-greasepencil 2021-07-19 11:03:42 +02:00
56ee52c7eb GPencil: When click outside the area, the action is confirmed 2021-07-19 11:02:55 +02:00
9d0d000c08 GPencil: Remove rotation point from cage drawing 2021-07-18 23:09:12 +02:00
f2e88ba2ed GPencil: Rotate Asset 2021-07-18 23:06:51 +02:00
35c0ea7b93 GPencil: Use Shift key to keep pivot in Center for scale 2021-07-18 17:27:41 +02:00
e70395ac0e GPencil: Create missing materials
Still need more work to avoid duplications
2021-07-18 17:17:35 +02:00
53aa830b6c GPencil: More work on asset import
Remove strokes if cancel.
Cleanup code
2021-07-18 16:30:10 +02:00
6cb97cd1ff GPencil: New pivot for Scale and cage with rotation icon 2021-07-17 23:52:07 +02:00
c80e4f0dbd GPencil: Fix cage scale (pending pivot point) 2021-07-17 23:20:13 +02:00
19b2a84e80 GPencil: More work in Scale transform 2021-07-17 17:04:42 +02:00
f41d2db715 GPencil: Cleanup transformations 2021-07-16 23:35:17 +02:00
f222bc3ff7 GPencil: Add option to reset center of the asset 2021-07-16 20:18:30 +02:00
2efd744b53 GPencil: More work to import asset (WIP) 2021-07-16 19:38:54 +02:00
b956d03134 GPencil: Fix wrong array size and cleanup Hash code 2021-07-16 17:07:11 +02:00
fed66c4ec4 GPencil: Basic 2D cage drawing 2021-07-16 16:52:18 +02:00
8c9b6d1b52 Merge branch 'master' into asset-greasepencil 2021-07-15 21:05:54 +02:00
b50f74b3ae Merge branch 'master' into asset-greasepencil 2021-07-15 09:43:04 +02:00
92f9730788 GPencil: Preparation for transforms 2021-07-14 12:27:50 +02:00
77a968982a GPencil: Add more data to temp struct
Added mode and space conversion.
2021-07-14 12:04:20 +02:00
1c40b96c63 Merge branch 'master' into asset-greasepencil 2021-07-14 11:11:00 +02:00
675b3d5928 GPencil: Function to duplicate strokes (WIP) 2021-07-13 20:24:10 +02:00
d85d45807e GPencil: Add ToDo 2021-07-13 19:32:36 +02:00
add4e9b1bd GPencil: Use generic poll 2021-07-13 19:29:38 +02:00
c192af3f35 GPencil: Very basic structure of Asset Import (WIP)
This is the foundations for the new Import Datablock operator.
2021-07-13 19:28:21 +02:00
68d288857e Merge branch 'master' into asset-greasepencil 2021-07-13 16:54:18 +02:00
666e8f210a Merge branch 'master' into asset-greasepencil 2021-07-12 16:02:14 +02:00
f66f8d9393 Merge branch 'master' into asset-greasepencil 2021-07-11 18:55:58 +02:00
7ac66633ae GPencil: Fix memory leak
The id_copy free must be reviewed.
2021-07-09 20:23:03 +02:00
4769a733e7 GPencil: Duplicate material array to temp object
This is used to get a full color preview
2021-07-09 19:26:10 +02:00
e8743e6c8c GPencil: Remove add to collection
This was alreeady done in the object creation and it's the reason why is freezing.
2021-07-09 19:09:36 +02:00
8430908a98 GPencil: Use ID directly as parm 2021-07-09 18:21:35 +02:00
ecb61ec86e GPencil: Use ID instead of void 2021-07-09 17:42:36 +02:00
d0a1829368 GPencil: Disable Edit mode for new Assets 2021-07-09 17:16:35 +02:00
3ec678f125 Merge branch 'master' into asset-greasepencil 2021-07-09 16:54:02 +02:00
866d7a1dbd GPencil: Add missing preview handling 2021-07-08 20:56:42 +02:00
4073b682eb GPencil: Free preview 2021-07-08 20:37:34 +02:00
7ba2f11df8 GPencil: Replace cast 2021-07-08 17:19:09 +02:00
42ce5da09d GPencil: (WIP) First steps to implement datablock preview
The preview is not working and Blender keeps locked when closing.

Also, it looks the browser does not display this type.
2021-07-08 17:14:46 +02:00
77443901d6 GPencil: Change menu text 2021-07-08 17:11:17 +02:00
a7ff8575bc GPencil: Add preview var to bGPdata datablock
This preview will be used for assets
2021-07-08 16:09:11 +02:00
65dd471416 GPencil: Add new Asset menu in Edit mode
These options are also available in context menu
2021-07-08 15:38:01 +02:00
9d6eb0a517 Merge branch 'master' into asset-greasepencil 2021-07-08 15:01:04 +02:00
4b82a3486d Merge branch 'master' into asset-greasepencil 2021-07-07 20:29:46 +02:00
6670aa3e21 GPencil: Change Asset Browser filter
Include Grease Pencil in the same group of meshes.
2021-07-07 18:42:54 +02:00
7ce36dc079 GPencil: Remove unedeed notifiers 2021-07-07 18:42:26 +02:00
15af2d709e GPencil: Basic structure to create asset (WIP)
This operator creates an asset base on one of the next option:

* Active Layer
* Active FRame
* Active Frame All Layers
* Selected Strokes
2021-07-07 17:50:09 +02:00
11 changed files with 1755 additions and 5 deletions

View File

@@ -934,6 +934,7 @@ class VIEW3D_MT_editor_menus(Menu):
layout.menu("VIEW3D_MT_edit_gpencil")
layout.menu("VIEW3D_MT_edit_gpencil_stroke")
layout.menu("VIEW3D_MT_edit_gpencil_point")
layout.menu("VIEW3D_MT_edit_gpencil_asset")
elif obj and obj.mode == 'WEIGHT_GPENCIL':
layout.menu("VIEW3D_MT_weight_gpencil")
if obj and obj.mode == 'VERTEX_GPENCIL':
@@ -5167,6 +5168,21 @@ class VIEW3D_MT_edit_gpencil_point(Menu):
layout.menu("VIEW3D_MT_gpencil_vertex_group")
class VIEW3D_MT_edit_gpencil_asset(Menu):
bl_label = "Asset"
def draw(self, _context):
layout = self.layout
layout.operator("gpencil.asset_create", text="Active Layer").mode = 'LAYER'
layout.operator("gpencil.asset_create", text="All Layers").mode = 'LAYERS_ALL'
layout.operator("gpencil.asset_create", text="All Layers Separated").mode = 'LAYERS_SPLIT'
layout.operator("gpencil.asset_create", text="Active Frame (Active Layer)").mode = 'FRAME'
layout.operator("gpencil.asset_create", text="Active Frame (All Layers)").mode = 'FRAME_ALL'
layout.operator("gpencil.asset_create", text="Selected Frames").mode = 'FRAME_SELECTED'
layout.operator("gpencil.asset_create", text="Selected Strokes").mode = 'SELECTED'
class VIEW3D_MT_weight_gpencil(Menu):
bl_label = "Weights"
@@ -7299,6 +7315,10 @@ class VIEW3D_MT_gpencil_edit_context_menu(Menu):
col.operator("gpencil.reproject", text="Reproject")
# Assets
col.separator()
col.operator_menu_enum("gpencil.asset_create", "mode", text="Create Asset")
def draw_gpencil_layer_active(context, layout):
gpl = context.active_gpencil_layer
@@ -7826,6 +7846,7 @@ classes = (
VIEW3D_MT_edit_gpencil,
VIEW3D_MT_edit_gpencil_stroke,
VIEW3D_MT_edit_gpencil_point,
VIEW3D_MT_edit_gpencil_asset,
VIEW3D_MT_edit_gpencil_delete,
VIEW3D_MT_edit_gpencil_showhide,
VIEW3D_MT_weight_gpencil,

View File

@@ -329,6 +329,7 @@ struct bGPDcurve *BKE_gpencil_stroke_editcurve_new(int tot_curve_points);
* \return True if layer is editable
*/
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl);
void BKE_gpencil_frame_min_max(const struct bGPdata *gpd, int *r_min, int *r_max);
/* How gpencil_layer_getframe() should behave when there
* is no existing GP-Frame on the frame requested.

View File

@@ -62,7 +62,7 @@ static CLG_LogRef LOG = {"bke.gpencil"};
static void greasepencil_copy_data(Main *UNUSED(bmain),
ID *id_dst,
const ID *id_src,
const int UNUSED(flag))
const int flag)
{
bGPdata *gpd_dst = (bGPdata *)id_dst;
const bGPdata *gpd_src = (const bGPdata *)id_src;
@@ -110,6 +110,13 @@ static void greasepencil_copy_data(Main *UNUSED(bmain),
BLI_addtail(&gpd_dst->layers, gpl_dst);
}
if (flag & LIB_ID_COPY_NO_PREVIEW) {
gpd_dst->preview = NULL;
}
else {
BKE_previewimg_id_copy(&gpd_dst->id, &gpd_src->id);
}
}
static void greasepencil_free_data(ID *id)
@@ -179,6 +186,8 @@ static void greasepencil_blend_write(BlendWriter *writer, ID *id, const void *id
}
}
}
BKE_previewimg_blend_write(writer, gpd->preview);
}
}
@@ -193,6 +202,10 @@ void BKE_gpencil_blend_read_data(BlendDataReader *reader, bGPdata *gpd)
BLO_read_data_address(reader, &gpd->adt);
BKE_animdata_blend_read_data(reader, gpd->adt);
/* Preview. */
BLO_read_data_address(reader, &gpd->preview);
BKE_previewimg_blend_read(reader, gpd->preview);
/* Ensure full objectmode for linked grease pencil. */
if (ID_IS_LINKED(gpd)) {
gpd->flag &= ~GP_DATA_STROKE_PAINTMODE;
@@ -495,6 +508,8 @@ void BKE_gpencil_free_data(bGPdata *gpd, bool free_all)
/* clear cache */
BKE_gpencil_batch_cache_free(gpd);
}
/* Preview. */
BKE_previewimg_free(&gpd->preview);
}
void BKE_gpencil_eval_delete(bGPdata *gpd_eval)
@@ -2197,7 +2212,7 @@ int BKE_gpencil_object_material_index_get_by_name(Object *ob, const char *name)
for (short i = 0; i < *totcol; i++) {
read_ma = BKE_object_material_get(ob, i + 1);
/* Material names are like "MAMaterial.001" */
if (STREQ(name, &read_ma->id.name[2])) {
if ((read_ma) && (STREQ(name, &read_ma->id.name[2]))) {
return i;
}
}
@@ -3040,4 +3055,20 @@ void BKE_gpencil_update_on_write(bGPdata *gpd_orig, bGPdata *gpd_eval)
BKE_gpencil_free_update_cache(gpd_orig);
}
/* Get min and max frame number for all layers. */
void BKE_gpencil_frame_min_max(const bGPdata *gpd, int *r_min, int *r_max)
{
*r_min = INT_MAX;
*r_max = INT_MIN;
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
if (gpf->framenum < *r_min) {
*r_min = gpf->framenum;
}
if (gpf->framenum > *r_max) {
*r_max = gpf->framenum;
}
}
}
}
/** \} */

View File

@@ -355,6 +355,7 @@ PreviewImage **BKE_previewimg_id_get_p(const ID *id)
ID_PRV_CASE(ID_LA, Light);
ID_PRV_CASE(ID_IM, Image);
ID_PRV_CASE(ID_BR, Brush);
ID_PRV_CASE(ID_GD, bGPdata);
ID_PRV_CASE(ID_GR, Collection);
ID_PRV_CASE(ID_SCE, Scene);
ID_PRV_CASE(ID_SCR, bScreen);
@@ -419,7 +420,7 @@ void BKE_previewimg_id_custom_set(ID *id, const char *filepath)
bool BKE_previewimg_id_supports_jobs(const ID *id)
{
return ELEM(GS(id->name), ID_OB, ID_MA, ID_TE, ID_LA, ID_WO, ID_IM, ID_BR, ID_GR);
return ELEM(GS(id->name), ID_OB, ID_MA, ID_TE, ID_LA, ID_WO, ID_IM, ID_BR, ID_GR, ID_GD);
}
void BKE_previewimg_deferred_release(PreviewImage *prv)

View File

@@ -28,6 +28,7 @@ set(SRC
gpencil_add_monkey.c
gpencil_add_stroke.c
gpencil_armature.c
gpencil_asset.c
gpencil_bake_animation.cc
gpencil_convert.c
gpencil_data.c

File diff suppressed because it is too large Load Diff

View File

@@ -667,6 +667,10 @@ void GPENCIL_OT_convert_old_files(struct wmOperatorType *ot);
/* armatures */
void GPENCIL_OT_generate_weights(struct wmOperatorType *ot);
/* Assets. */
void GPENCIL_OT_asset_create(struct wmOperatorType *ot);
void GPENCIL_OT_asset_import(struct wmOperatorType *ot);
/* ****************************************************** */
/* Stroke Iteration Utilities */

View File

@@ -685,6 +685,10 @@ void ED_operatortypes_gpencil(void)
/* armatures */
WM_operatortype_append(GPENCIL_OT_generate_weights);
/* Assets. */
WM_operatortype_append(GPENCIL_OT_asset_create);
WM_operatortype_append(GPENCIL_OT_asset_import);
}
void ED_operatormacros_gpencil(void)

View File

@@ -30,6 +30,7 @@
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_collection_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_light_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
@@ -47,6 +48,7 @@
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "BKE_icons.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
@@ -365,6 +367,7 @@ static ID *duplicate_ids(ID *id, const bool allow_failure)
case ID_MA:
case ID_TE:
case ID_LA:
case ID_GD:
case ID_WO: {
BLI_assert(BKE_previewimg_id_supports_jobs(id));
ID *id_copy = BKE_id_copy_ex(nullptr,
@@ -763,6 +766,8 @@ struct ObjectPreviewData {
/* Copy of the object to create the preview for. The copy is for thread safety (and to insert
* it into its own main). */
Object *object;
/* Datablock copy. Can be nullptr. */
ID *datablock;
/* Current frame. */
int cfra;
int sizex;
@@ -851,7 +856,7 @@ static void object_preview_render(IconPreview *preview, IconPreviewSize *preview
preview_data.pr_main = preview_main;
/* Act on a copy. */
preview_data.object = (Object *)preview->id_copy;
preview_data.cfra = preview->scene->r.cfra;
preview_data.datablock = nullptr;
preview_data.sizex = preview_sized->sizex;
preview_data.sizey = preview_sized->sizey;
@@ -1030,6 +1035,119 @@ static void action_preview_render(IconPreview *preview, IconPreviewSize *preview
/** \} */
/* -------------------------------------------------------------------- */
/** \name Grease Pencil Preview
* \{ */
static Scene *gpencil_preview_scene_create(const struct ObjectPreviewData *preview_data,
Depsgraph **r_depsgraph)
{
Scene *scene = BKE_scene_add(preview_data->pr_main, "Object preview scene");
/* Grease pencil needs to set the scene to the current frame or the strokes
* will not be visible in the preview. */
CFRA = preview_data->cfra;
ViewLayer *view_layer = (ViewLayer *)scene->view_layers.first;
Depsgraph *depsgraph = DEG_graph_new(
preview_data->pr_main, scene, view_layer, DAG_EVAL_VIEWPORT);
/* Grease pencil draw engine needs an object to draw the datablock. */
Object *ob_temp = BKE_object_add_for_data(preview_data->pr_main,
view_layer,
OB_GPENCIL,
"preview_object",
preview_data->datablock,
true);
BLI_assert(ob_temp != nullptr);
/* Copy the materials to get full color previews. */
const short *materials_len_p = BKE_id_material_len_p(preview_data->datablock);
if (materials_len_p && *materials_len_p > 0) {
BKE_object_materials_test(preview_data->pr_main, ob_temp, preview_data->datablock);
}
Object *camera_object = object_preview_camera_create(preview_data->pr_main, view_layer, ob_temp);
scene->camera = camera_object;
scene->r.xsch = preview_data->sizex;
scene->r.ysch = preview_data->sizey;
scene->r.size = 100;
Base *preview_base = BKE_view_layer_base_find(view_layer, ob_temp);
/* For 'view selected' below. */
preview_base->flag |= BASE_SELECTED;
DEG_graph_build_from_view_layer(depsgraph);
DEG_evaluate_on_refresh(depsgraph);
ED_view3d_camera_to_view_selected(preview_data->pr_main, depsgraph, scene, camera_object);
BKE_scene_graph_update_tagged(depsgraph, preview_data->pr_main);
*r_depsgraph = depsgraph;
return scene;
}
/* Render a grease pencil datablock. As the Draw Engine needs an object, the datablock is assigned
* to a temporary object, just for render. */
static void gpencil_preview_render(IconPreview *preview, IconPreviewSize *preview_sized)
{
Main *preview_main = BKE_main_new();
const float pixelsize_old = U.pixelsize;
char err_out[256] = "unknown";
BLI_assert(preview->id_copy && (preview->id_copy != preview->id));
/* Find the frame number to make preview visible. */
int f_min, f_max;
bGPdata *gpd = (bGPdata *)preview->id_copy;
BKE_gpencil_frame_min_max(gpd, &f_min, &f_max);
const int framenum = ((preview->scene->r.cfra < f_min) || (preview->scene->r.cfra > f_max)) ?
f_min :
preview->scene->r.cfra;
struct ObjectPreviewData preview_data = {};
preview_data.pr_main = preview_main;
/* Act on a copy. */
preview_data.object = nullptr;
preview_data.datablock = (ID *)preview->id_copy;
preview_data.cfra = framenum;
preview_data.sizex = preview_sized->sizex;
preview_data.sizey = preview_sized->sizey;
Depsgraph *depsgraph;
Scene *scene = gpencil_preview_scene_create(&preview_data, &depsgraph);
U.pixelsize = 2.0f;
View3DShading shading;
BKE_screen_view3d_shading_init(&shading);
ImBuf *ibuf = ED_view3d_draw_offscreen_imbuf_simple(
depsgraph,
DEG_get_evaluated_scene(depsgraph),
&shading,
OB_TEXTURE,
DEG_get_evaluated_object(depsgraph, scene->camera),
preview_sized->sizex,
preview_sized->sizey,
IB_rect,
V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS,
R_ALPHAPREMUL,
nullptr,
nullptr,
err_out);
U.pixelsize = pixelsize_old;
if (ibuf) {
icon_copy_rect(ibuf, preview_sized->sizex, preview_sized->sizey, preview_sized->rect);
IMB_freeImBuf(ibuf);
}
DEG_graph_free(depsgraph);
BKE_main_free(preview_main);
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name New Shader Preview System
* \{ */
@@ -1634,6 +1752,9 @@ static void icon_preview_startjob_all_sizes(void *customdata,
case ID_AC:
action_preview_render(ip, cur_size);
continue;
case ID_GD:
gpencil_preview_render(ip, cur_size);
continue;
default:
/* Fall through to the same code as the `ip->id == nullptr` case. */
break;

View File

@@ -609,12 +609,17 @@ static bool view3d_world_drop_poll(bContext *C, wmDrag *drag, const wmEvent *eve
static bool view3d_object_data_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
{
ID_Type id_type = view3d_drop_id_in_main_region_poll_get_id_type(C, drag, event);
if (id_type && OB_DATA_SUPPORT_ID(id_type)) {
if (id_type && OB_DATA_SUPPORT_ID(id_type) && (id_type != ID_GD)) {
return true;
}
return false;
}
static bool view3d_gpencil_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
{
return view3d_drop_id_in_main_region_poll(C, drag, event, ID_GD);
}
static char *view3d_object_data_drop_tooltip(bContext *UNUSED(C),
wmDrag *UNUSED(drag),
const int UNUSED(xy[2]),
@@ -623,6 +628,14 @@ static char *view3d_object_data_drop_tooltip(bContext *UNUSED(C),
return BLI_strdup(TIP_("Create object instance from object-data"));
}
static char *view3d_gpencil_data_drop_tooltip(bContext *UNUSED(C),
wmDrag *UNUSED(drag),
const int UNUSED(xy[2]),
wmDropBox *UNUSED(drop))
{
return BLI_strdup(TIP_("Add strokes to active object"));
}
static bool view3d_ima_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
{
if (ED_region_overlap_isect_any_xy(CTX_wm_area(C), event->xy)) {
@@ -945,6 +958,14 @@ static void view3d_dropboxes(void)
view3d_id_drop_copy,
WM_drag_free_imported_drag_ID,
NULL);
/* TODO(@antoniov): Change to use a temp copy using BLO_library_temp_load_id (). */
WM_dropbox_add(lb,
"GPENCIL_OT_asset_import",
view3d_gpencil_drop_poll,
view3d_id_drop_copy_with_type,
WM_drag_free_imported_drag_ID,
view3d_gpencil_data_drop_tooltip);
}
static void view3d_widgets(void)

View File

@@ -751,6 +751,9 @@ typedef struct bGPdata {
/* NOTE: When adding new members, make sure to add them to BKE_gpencil_data_copy_settings as
* well! */
/** Preview image for assets. */
struct PreviewImage *preview;
bGPdata_Runtime runtime;
} bGPdata;