depth move - UI cahnge and changelog file

1.2.0:

- feat: New depth move operator that handle both perspective and orthographic cam
- feat: Realign, added drawing plane checkbox to autoset to Front after realign
- UI: Reorganised realign panel
- UI: Switched part of the sidebar items to columns intead of basic layout to gain space
- doc: Added changelog file (moved list from readme)
- doc: relative link to changelog and FR_readme in main readme
gpv2
Pullusb 2021-05-09 01:26:37 +02:00
parent bf85582f28
commit 3594c4812d
7 changed files with 467 additions and 301 deletions

281
CHANGELOG.md Normal file
View File

@ -0,0 +1,281 @@
# Changelog
1.2.0:
- feat: New depth move operator that handle both perspective and orthographic cam
- feat: Realign, added drawing plane checkbox to autoset to Front after realign
- UI: Reorganised realign panel
- UI: Switched part of the sidebar items to columns intead of basic layout to gain space
- doc: Added changelog file (moved list from readme)
- doc: relative link to changelog and FR_readme in main readme
1.1.0:
- Important change : Remap relative is now disabled by default in addon preferences
- feat: Add realign operator in sidebar with reproject as true by default
- UI: Batch reproject all frames is now in menus. Same places as native reproject
1.0.9:
- feat: Reproject all frames operator
1.0.8:
- feat: Keyframe jump filter added in UI to change general behavior. Keymap own jump filter can override this new global settings if specified
1.0.7:
- feat: Keyframe jump filter by type. User can now choose if the shortcut should jump on a specific keyframe type (All by default)
1.0.5:
- GP copy-paste : Pasted stroke are now selected (allow to use it to quickly rip/split strokes with cut/paste on the same layer)
1.0.4:
- UI: Better cam ref exposition in Toolbox panel
- Access to opacity
- merge activation bool with source type icon
- feat: Added a clear active frame operator (`gp.clear_active_frame` to add manually in keymaps)
1.0.3:
- feat: add "Append Materials To Selected" to material submenu. Append materials to other selected GP objects if there aren't there.
1.0.2:
- pref: Added option to disable always remap relative on save in addon-preference
1.0.1:
- fix: copy paste problems
- Get points uv_properties (used for brushed points)
- Trigger an update on each pasted strokes, recalculate badly drawn uv and fills (works in 2.93+)
1.0.0:
- Compatible with official grease pencil tools
- removed box deform and rotate canvas that existed in other
0.9.3:
- feat: keyframe jump keys are now auto-binded
- UI: added keyframe jump customisation in addon pref
- code: split keyframe jump in a separate file with his new key updater
0.9.2:
- doc: Correct download link (important, bugged the addon install) + update
- code: added tracker url
- updater: remove updater temp file, reset minimum version, turn off verbose mode
0.9.1:
- Public release
- prefs: added fps as part of project settings
- check file use pref fps value (previously used harcoded 24fps value)
- cleanup: Remove wip GMIC-bridge tools that need to be done separately (if needed)
- update: apply changes in integrated copy-paste from the last version of standalone addon
- doc: Added fully-detailed french readme
0.8.0:
- feat: Added background_rendering playblast, derivating from Tonton's playblaster
- stripped associated properties from properties.py and passed as wm props.
0.7.2:
- fix: Palette importer bug
0.7.0:
- feat: auto create empty frame on color layer
0.6.3:
- shortcut: added 1,2,3 to change sculpt mask mode (like native edit mode shortcut)
0.6.2:
- feat: colorisation, Option to change stop lines length
- Change behavior of `cursor_snap` ops when a non-GP object is selected to mode: `surface project`
- Minor refactor for submodule register
0.6.1:
- feat: render objects grouped, one anim render with all ticked object using manual output name
0.6.0:
- feat: Include GP clipoard's "In place" custom cut/copy/paste using OS clipboard
0.5.9:
- feat: render exporter
- Render a selection of GP object isolated from the rest
- added exclusions names for GP object listing
- setup settings and output according to a name
- open render folder
- check file: set onion skin keyframe filter to 'All_type' on all GP datablock
- check file: set scene resolution to settings in prefs (default 2048x1080)
0.5.8:
- feat: GP material append on active object from single blend file
0.5.7:
- Added warning message for cursor snapping
0.5.5 - 0.5.6:
- check file: added check for placement an projection mode for Gpencil.
- add a slider to change edit_lines_opacity globally for all GP data at once
- check file: auto-check additive drawing (to avoid empty frame with "only selected channel" in Dopesheet)
0.5.4:
- feat: anim manager in his own GP_toolbox submenu:
- button to list disabled anim (allow to quickly check state of the scene)
- disable/enable all fcurve in for GP object or other object separately to paint
- shift clic to target selection only
- check file: added disabled fcurved counter alert with detail in console
0.5.3:
- fix: broken obj cam (add custom prop on objcam to track wich was main cam)
- check file option: change select active tool (choice added in addon preferences)
0.5.2:
- Revert back obj_cam operator for following object (native lock view follow only translation)
- Changed method for canvas rotation to more robust rotate axis.
- Add operators on link checker to open containing folder/file of link
- Refactor: file checkers in their own file
0.5.1:
- fix: error when empty material slot on GP object.
- fix: cursor snap on GP canvas when GP is parented
- change: Deleted obj cam (and related set view) operator
- change: blacker note background for playblast (stamp_background)
- feat: Always playblast from main camera (if in draw_cam)
- feat: Handler added to Remap relative on save (pre)
- ops: Check for broken links with porposition to find missing files
- ops: Added basic hardcoded file checker
- Lock main cam
- set scene percentage at 100
- set show slider and sync range
- set fps to 24
0.4.6:
- feat: basic Palette manager with base material check and warning
0.4.5:
- open blender config folder from addon preference
- fix: obj cam parent on selected object
- added wip rotate canvas axis file. still not ready to replace current canvas rotate:
- freeview : bug when rotating free viewfrom cardianl views
- camview: potential bug when cam is parented with some specific angle (could not reproduce)
0.4.4:
- feat: added cursor follow handlers and UI toggle
0.4.3:
- change playblast out to 'images' and add playblast as name prefix
0.4.2:
- feat: GP canvas cursor snap wiht new `view3d.cusor_snap` operator
- fix: canvas rotate works with parented camera !
- wip: added an attmpt to replicate camera rotate modal with view matrix but no luck.
0.4.1:
- feat: Alternative cameras: parent to main cam (roll without affecting main cam), parent to active object at current view (follow current Grease pencil object)
0.4.0:
- Added a standalone working version of box_deform (stripped preferences keeping only best configuration with autoswap)
0.3.8:
- UI: expose onion skin in interface
- UI: expose autolock in interface
- UI : putted tint layers in a submenu
- code: refactor, pushed most of class register in their owner file
- tool: tool to rename current or all grease pencil datablock with different name than container object
0.3.7:
- UI: new interface with tabs for addon preferences
- UI: possible to disable color panel from preference (might be deleted if unusable)
- docs: change readme changelog format and correct doc
0.3.6:
- UI: Stoplines : add a button for quickly set stoplines visibility.
0.3.5:
- Fix : No more camera rotation undo when ctrl+Z on next stroke (canvas rotate push and undo)
- Fix: Enter key added to valid object-breakdown modal.
0.3.3:
- version 1 beta (stable) of line gap closing tools for better bucket fill tool performance with UI
0.3.3:
- version 1 beta of gmic colorize
- variant of `screen.gp_keyframe_jump` through keymap seetings
0.3.0:
- new homemade [breakdowner operator for object](https://blenderartists.org/t/pose-mode-animation-tools-for-object-mode/1221322) mode with auto keymap : Shift + E
- GP cutter shortcut ops to map with `wm.temp_cutter` (with "Any" as press mode) or `wm.sticky_cutter` (Modal sticky-key version)
0.2.3:
- add operator to `screen.gp_keyframe_jump`
- add shortcut to rotate canvas
- fix duplicate class
0.2.2:
- separated props resolution_percentage parameter
- playblast options for launching folder and opening folder
0.2.1:
- playblast feature
- Button to go zoom 100% or fit screen
- display scene resolution with res indicator
- Fix reference panel : works with video and display in a box layout.
- close pseudo-color panel by default (plan to move it to Gpencil tab)
0.2.0:
- UI: Toggle camera background images from Toolbox panel
- UI: quick access to passepartout
- Feature: option to use namespace for pseudo color
0.1.5:
- added CGC-auto-updater
0.1.3:
- flip cam x
- inital stage of overlay toggle (need pref/multiple pref)
0.1.2:
- subpanel of GP data (instead of direct append)
- initial commit with GP pseudo color

120
OP_depth_move.py Normal file
View File

@ -0,0 +1,120 @@
import bpy
from mathutils import Vector
class ODM_OT_depth_move(bpy.types.Operator):
bl_idname = "object.depth_proportional_move"
bl_label = "Depth move"
bl_description = "Move object in the depth from camera POV while retaining same size in framing"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
return context.object and context.object.type != 'CAMERA' # and context.scene.camera
def invoke(self, context, event):
self.init_mouse_x = event.mouse_x
self.cam = bpy.context.scene.camera
if not self.cam:
self.report({'ERROR'}, 'No active camera')
return {"CANCELLED"}
self.cam_pos = self.cam.matrix_world.translation
self.mode = 'distance'
self.objects = [o for o in context.selected_objects if o.type != 'CAMERA']
self.init_mats = [o.matrix_world.copy() for o in self.objects]
if self.cam.data.type == 'ORTHO':
context.area.header_text_set(f'Move factor: 0.00')
# distance is view vector based
self.view_vector = Vector((0,0,-1))
self.view_vector.rotate(self.cam.matrix_world)
else:
self.init_vecs = [o.matrix_world.translation - self.cam_pos for o in self.objects]
self.init_dists = [v.length for v in self.init_vecs]
context.area.header_text_set(f'Move factor: 0.00 | Mode: {self.mode} (M to switch)')
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
def modal(self, context, event):
if self.mode == 'distance':
factor = 0.1
if event.shift:
factor = 0.01
else:
# Smaller factor for proportional dist
factor = 0.01
if event.shift:
factor = 0.001
if event.type in {'MOUSEMOVE'}:
diff = (event.mouse_x - self.init_mouse_x) * factor
if self.cam.data.type == 'ORTHO':
# just push in view vector direction
context.area.header_text_set(f'Move factor: {diff:.2f}')
for i, obj in enumerate(self.objects):
new_vec = self.init_mats[i].translation + (self.view_vector * diff)
obj.matrix_world.translation = new_vec
else:
# Push from camera point and scale accordingly
context.area.header_text_set(f'Move factor: {diff:.2f} | Mode: {self.mode} (M to switch)')
for i, obj in enumerate(self.objects):
if self.mode == 'distance':
## move with the same length for everyone
new_vec = self.init_vecs[i] + (self.init_vecs[i].normalized() * diff)
else:
## move with proportional factor from individual distance vector to camera
new_vec = self.init_vecs[i] + (self.init_vecs[i] * diff)
obj.matrix_world.translation = self.cam_pos + new_vec
dist_percentage = new_vec.length / self.init_dists[i]
obj.scale = self.init_mats[i].to_scale() * dist_percentage
if event.type in {'M'} and event.value == 'PRESS':
# Switch mode
self.mode = 'distance' if self.mode == 'proportional' else 'proportional'
if event.type in {'LEFTMOUSE'} and event.value == 'PRESS':
context.area.header_text_set(None)
return {"FINISHED"}
if event.type in {'RIGHTMOUSE', 'ESC'} and event.value == 'PRESS':
for i, obj in enumerate(self.objects):
obj.matrix_world = self.init_mats[i]
context.area.header_text_set(None)
return {"CANCELLED"}
return {"RUNNING_MODAL"}
""" # Own standalone panel
class ODM_PT_sudden_depth_panel(bpy.types.Panel):
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Gpencil"
bl_label = "Depth move"
def draw(self, context):
layout = self.layout
row = layout.row()
row.operator('object.depth_proportional_move', text='Depth move', icon='TRANSFORM_ORIGINS')
"""
### --- REGISTER ---
classes=(
ODM_OT_depth_move,
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)

View File

@ -225,6 +225,9 @@ class GPTB_OT_realign(bpy.types.Operator):
name='All Strokes', default=True,
description='Hided and locked layer will also be reprojected')
set_draw_axis : bpy.props.BoolProperty(
name='Set draw axis to Front', default=True,
description='Set the gpencil draw plane axis to Front')
## add option to bake strokes if rotation anim is not constant ? might generate too many Keyframes
def invoke(self, context, event):
@ -248,17 +251,41 @@ class GPTB_OT_realign(bpy.types.Operator):
def draw(self, context):
layout = self.layout
layout.label(text='Realign the GP : Front axis facing active camera')
layout.label(text='Realign the GP object : Front axis facing active camera')
if self.alert:
layout.label(text=self.alert, icon='ERROR')
layout.label(text='(rotations key will be overwritten to face camera)')
layout.separator()
layout.prop(self, "reproject")
# layout.separator()
box = layout.box()
box.prop(self, "reproject")
if self.reproject:
layout.label(text='After Realigning, reproject each frames on front axis')
box.label(text='After Realigning, reproject each frames on front axis')
if not context.region_data.view_perspective == 'CAMERA':
layout.label(text='Not in camera ! (reprojection is made from view)', icon='ERROR')
layout.prop(self, "all_strokes")
box.label(text='Not in camera ! (reprojection is made from view)', icon='ERROR')
box.prop(self, "all_strokes")
if not self.all_strokes:
box.label(text='Only visible and unlocked layers will be reprojected', icon='INFO')
axis = context.scene.tool_settings.gpencil_sculpt.lock_axis
if axis != 'AXIS_Y':
orient = {
'VIEW' : ['View', 'RESTRICT_VIEW_ON'],
# 'AXIS_Y': ['front (X-Z)', 'AXIS_FRONT'], #
'AXIS_X': ['side (Y-Z)', 'AXIS_SIDE'],
'AXIS_Z': ['top (X-Y)', 'AXIS_TOP'],
'CURSOR': ['Cursor', 'PIVOT_CURSOR'],
}
box = layout.box()
box.label(text=f'Current drawing plane : {orient[axis][0]}', icon=orient[axis][1])
box.prop(self, "set_draw_axis")
def exit(self, context, frame):
context.scene.frame_current = frame
if context.scene.tool_settings.gpencil_sculpt.lock_axis != 'AXIS_Y' and self.set_draw_axis:
context.scene.tool_settings.gpencil_sculpt.lock_axis = 'AXIS_Y'
def execute(self, context):
t0 = time()
@ -268,17 +295,13 @@ class GPTB_OT_realign(bpy.types.Operator):
if o.animation_data and o.animation_data.action:
if o.animation_data.action.fcurves.find('rotation_euler') or o.animation_data.action.fcurves.find('rotation_quaternion'):
align_all_frames(reproject=self.reproject)
bpy.context.scene.frame_current = oframe
print(f'\nAnim realign ({time()-t0:.2f}s)')
self.exit(context, oframe)
return
align_global(reproject=self.reproject)
context.scene.frame_current = oframe
print(f'\nGlobal Realign ({time()-t0:.2f}s)')
self.exit(context, oframe)
return {"FINISHED"}

279
README.md
View File

@ -6,7 +6,7 @@ Blender addon - Various tool to help with grease pencil in animation productions
**[Demo video](https://www.youtube.com/watch?v=Htgao_uPWNs)**
**[Readme Doc in French (Documentation en Français et plus détaillée)](https://gitlab.com/autour-de-minuit/blender/gp_toolbox/-/blob/master/README_FR.md)**
**[Readme Doc in French (Documentation en Français et plus détaillée)](README_FR.md)**
---
@ -88,7 +88,7 @@ In material submenu you have mutliple new entry:
Panel in sidebar : 3D view > sidebar 'N' > Gpencil
<!--
## Todo:
- Allow to render resolution from cam name
@ -105,280 +105,9 @@ Panel in sidebar : 3D view > sidebar 'N' > Gpencil
- Move automatically view to match GP Front (depending on Gpencil view settings)
- move GP keyframes selection and Object keyframe selection simultaneouly (Already Done by Tom Viguier at [Andarta](https://gitlab.com/andarta-pictures)
- move GP keyframes selection and Object keyframe selection simultaneouly (Already Done by Tom Viguier at [Andarta](https://gitlab.com/andarta-pictures) -->
---
## Changelog:
1.1.0:
- Important change : Remap relative is now disabled by default in addon preferences
- feat: Add realign operator in sidebar with reproject as true by default
- UI: Batch reproject all frames is now in menus. Same places as native reproject
1.0.9:
- feat: Reproject all frames operator
1.0.8:
- feat: Keyframe jump filter added in UI to change general behavior. Keymap own jump filter can override this new global settings if specified
1.0.7:
- feat: Keyframe jump filter by type. User can now choose if the shortcut should jump on a specific keyframe type (All by default)
1.0.5:
- GP copy-paste : Pasted stroke are now selected (allow to use it to quickly rip/split strokes with cut/paste on the same layer)
1.0.4:
- UI: Better cam ref exposition in Toolbox panel
- Access to opacity
- merge activation bool with source type icon
- feat: Added a clear active frame operator (`gp.clear_active_frame` to add manually in keymaps)
1.0.3:
- feat: add "Append Materials To Selected" to material submenu. Append materials to other selected GP objects if there aren't there.
1.0.2:
- pref: Added option to disable always remap relative on save in addon-preference
1.0.1:
- fix: copy paste problems
- Get points uv_properties (used for brushed points)
- Trigger an update on each pasted strokes, recalculate badly drawn uv and fills (works in 2.93+)
1.0.0:
- Compatible with official grease pencil tools
- removed box deform and rotate canvas that existed in other
0.9.3:
- feat: keyframe jump keys are now auto-binded
- UI: added keyframe jump customisation in addon pref
- code: split keyframe jump in a separate file with his new key updater
0.9.2:
- doc: Correct download link (important, bugged the addon install) + update
- code: added tracker url
- updater: remove updater temp file, reset minimum version, turn off verbose mode
0.9.1:
- Public release
- prefs: added fps as part of project settings
- check file use pref fps value (previously used harcoded 24fps value)
- cleanup: Remove wip GMIC-bridge tools that need to be done separately (if needed)
- update: apply changes in integrated copy-paste from the last version of standalone addon
- doc: Added fully-detailed french readme
0.8.0:
- feat: Added background_rendering playblast, derivating from Tonton's playblaster
- stripped associated properties from properties.py and passed as wm props.
0.7.2:
- fix: Palette importer bug
0.7.0:
- feat: auto create empty frame on color layer
0.6.3:
- shortcut: added 1,2,3 to change sculpt mask mode (like native edit mode shortcut)
0.6.2:
- feat: colorisation, Option to change stop lines length
- Change behavior of `cursor_snap` ops when a non-GP object is selected to mode: `surface project`
- Minor refactor for submodule register
0.6.1:
- feat: render objects grouped, one anim render with all ticked object using manual output name
0.6.0:
- feat: Include GP clipoard's "In place" custom cut/copy/paste using OS clipboard
0.5.9:
- feat: render exporter
- Render a selection of GP object isolated from the rest
- added exclusions names for GP object listing
- setup settings and output according to a name
- open render folder
- check file: set onion skin keyframe filter to 'All_type' on all GP datablock
- check file: set scene resolution to settings in prefs (default 2048x1080)
0.5.8:
- feat: GP material append on active object from single blend file
0.5.7:
- Added warning message for cursor snapping
0.5.5 - 0.5.6:
- check file: added check for placement an projection mode for Gpencil.
- add a slider to change edit_lines_opacity globally for all GP data at once
- check file: auto-check additive drawing (to avoid empty frame with "only selected channel" in Dopesheet)
0.5.4:
- feat: anim manager in his own GP_toolbox submenu:
- button to list disabled anim (allow to quickly check state of the scene)
- disable/enable all fcurve in for GP object or other object separately to paint
- shift clic to target selection only
- check file: added disabled fcurved counter alert with detail in console
0.5.3:
- fix: broken obj cam (add custom prop on objcam to track wich was main cam)
- check file option: change select active tool (choice added in addon preferences)
0.5.2:
- Revert back obj_cam operator for following object (native lock view follow only translation)
- Changed method for canvas rotation to more robust rotate axis.
- Add operators on link checker to open containing folder/file of link
- Refactor: file checkers in their own file
0.5.1:
- fix: error when empty material slot on GP object.
- fix: cursor snap on GP canvas when GP is parented
- change: Deleted obj cam (and related set view) operator
- change: blacker note background for playblast (stamp_background)
- feat: Always playblast from main camera (if in draw_cam)
- feat: Handler added to Remap relative on save (pre)
- ops: Check for broken links with porposition to find missing files
- ops: Added basic hardcoded file checker
- Lock main cam
- set scene percentage at 100
- set show slider and sync range
- set fps to 24
0.4.6:
- feat: basic Palette manager with base material check and warning
0.4.5:
- open blender config folder from addon preference
- fix: obj cam parent on selected object
- added wip rotate canvas axis file. still not ready to replace current canvas rotate:
- freeview : bug when rotating free viewfrom cardianl views
- camview: potential bug when cam is parented with some specific angle (could not reproduce)
0.4.4:
- feat: added cursor follow handlers and UI toggle
0.4.3:
- change playblast out to 'images' and add playblast as name prefix
0.4.2:
- feat: GP canvas cursor snap wiht new `view3d.cusor_snap` operator
- fix: canvas rotate works with parented camera !
- wip: added an attmpt to replicate camera rotate modal with view matrix but no luck.
0.4.1:
- feat: Alternative cameras: parent to main cam (roll without affecting main cam), parent to active object at current view (follow current Grease pencil object)
0.4.0:
- Added a standalone working version of box_deform (stripped preferences keeping only best configuration with autoswap)
0.3.8:
- UI: expose onion skin in interface
- UI: expose autolock in interface
- UI : putted tint layers in a submenu
- code: refactor, pushed most of class register in their owner file
- tool: tool to rename current or all grease pencil datablock with different name than container object
0.3.7:
- UI: new interface with tabs for addon preferences
- UI: possible to disable color panel from preference (might be deleted if unusable)
- docs: change readme changelog format and correct doc
0.3.6:
- UI: Stoplines : add a button for quickly set stoplines visibility.
0.3.5:
- Fix : No more camera rotation undo when ctrl+Z on next stroke (canvas rotate push and undo)
- Fix: Enter key added to valid object-breakdown modal.
0.3.3:
- version 1 beta (stable) of line gap closing tools for better bucket fill tool performance with UI
0.3.3:
- version 1 beta of gmic colorize
- variant of `screen.gp_keyframe_jump` through keymap seetings
0.3.0:
- new homemade [breakdowner operator for object](https://blenderartists.org/t/pose-mode-animation-tools-for-object-mode/1221322) mode with auto keymap : Shift + E
- GP cutter shortcut ops to map with `wm.temp_cutter` (with "Any" as press mode) or `wm.sticky_cutter` (Modal sticky-key version)
0.2.3:
- add operator to `screen.gp_keyframe_jump`
- add shortcut to rotate canvas
- fix duplicate class
0.2.2:
- separated props resolution_percentage parameter
- playblast options for launching folder and opening folder
0.2.1:
- playblast feature
- Button to go zoom 100% or fit screen
- display scene resolution with res indicator
- Fix reference panel : works with video and display in a box layout.
- close pseudo-color panel by default (plan to move it to Gpencil tab)
0.2.0:
- UI: Toggle camera background images from Toolbox panel
- UI: quick access to passepartout
- Feature: option to use namespace for pseudo color
0.1.5:
- added CGC-auto-updater
0.1.3:
- flip cam x
- inital stage of overlay toggle (need pref/multiple pref)
0.1.2:
- subpanel of GP data (instead of direct append)
- initial commit with GP pseudo color
Consult [Changelog here](CHANGELOG.md)

View File

@ -149,3 +149,7 @@ pour set : Résolution du film, dossier palette, render settings
- Déplacer les clés de dopesheet en même temps que les clés de GP (Déjà Créer par Tom Viguier sur [Andarta](https://gitlab.com/andarta-pictures)
- Meilleure table lumineuse (grosse réflexion et travail en perspective)
---
[Liste des changements ici](CHANGELOG.md)

View File

@ -139,17 +139,19 @@ class GPTB_PT_sidebar_panel(bpy.types.Panel):
# row = layout.row(align=False)
## maybe remove cursor_follow icon that look like
text, icon = ('Cursor Follow On', 'PIVOT_CURSOR') if context.scene.gptoolprops.cursor_follow else ('Cursor Follow Off', 'CURSOR')
layout.prop(context.scene.gptoolprops, 'cursor_follow', text=text, icon=icon)
layout.prop(context.space_data.overlay, 'use_gpencil_onion_skin')
col = layout.column()
col.prop(context.space_data.overlay, 'use_gpencil_onion_skin')
if context.object and context.object.type == 'GPENCIL':
layout.prop(context.object.data, 'use_autolock_layers')
layout.prop(context.object, 'show_in_front', text='X-ray')#default text "In Front"
col.prop(context.object.data, 'use_autolock_layers')
col.prop(context.object, 'show_in_front', text='X-ray')#default text "In Front"
## rename datablock temporary layout
if context.object.name != context.object.data.name:
box = layout.box()
box = col.box()
box.label(text='different name for object and data:', icon='INFO')
row = box.row(align=False)
row.operator('gp.rename_data_from_obj').rename_all = False
@ -157,24 +159,28 @@ class GPTB_PT_sidebar_panel(bpy.types.Panel):
## Check base palette
if not all(x in [m.name for m in context.object.data.materials if m] for x in ("line", "invisible")):
box = layout.box()
box = col.box()
box.label(text='Missing base material setup', icon='INFO')
box.operator('gp.load_default_palette')
else:
layout.label(text='No GP object selected')
col.label(text='No GP object selected')
layout.prop(context.scene.gptoolprops, 'edit_lines_opacity')
col.prop(context.scene.gptoolprops, 'edit_lines_opacity')
row = col.row(align=True)
## realign / reproject
layout.operator('gp.realign')
# layout.operator('gp.batch_reproject_all_frames') # text=Batch Reproject
row.operator('gp.realign', icon='AXIS_FRONT')
## move in depth
row.operator('object.depth_proportional_move', text='Depth move', icon='TRANSFORM_ORIGINS')
## col.operator('gp.batch_reproject_all_frames') # text=Batch Reproject # added to context menu
## Create empty frame on layer (ops stored under GP_colorize... might be best to separate in another panel )
layout.operator('gp.create_empty_frames', icon='DECORATE_KEYFRAME')
col.operator('gp.create_empty_frames', icon='DECORATE_KEYFRAME')
## File checker
row = layout.row(align=True)
row = col.row(align=True)
row.operator('gp.file_checker', text = 'Check file', icon = 'SCENE_DATA')
row.operator('gp.links_checker', text = 'Check links', icon = 'UNLINKED')

View File

@ -15,7 +15,7 @@ bl_info = {
"name": "GP toolbox",
"description": "Set of tools for Grease Pencil in animation production",
"author": "Samuel Bernou",
"version": (1, 1, 0),
"version": (1, 2, 0),
"blender": (2, 91, 0),
"location": "sidebar (N menu) > Gpencil > Toolbox / Gpencil properties",
"warning": "",
@ -45,6 +45,7 @@ from . import OP_file_checker
from . import OP_render
from . import OP_copy_paste
from . import OP_realign
from . import OP_depth_move
from . import keymaps
from .OP_pseudo_tint import GPT_OT_auto_tint_gp_layers
@ -444,6 +445,7 @@ def register():
OP_render.register()
OP_copy_paste.register()
OP_realign.register()
OP_depth_move.register()
UI_tools.register()
keymaps.register()
bpy.types.Scene.gptoolprops = bpy.props.PointerProperty(type = GP_PG_ToolsSettings)
@ -465,6 +467,7 @@ def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
UI_tools.unregister()
OP_depth_move.unregister()
OP_realign.unregister()
OP_copy_paste.unregister()
OP_render.unregister()