diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5a32b8f --- /dev/null +++ b/CHANGELOG.md @@ -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 \ No newline at end of file diff --git a/OP_depth_move.py b/OP_depth_move.py new file mode 100644 index 0000000..b64abfb --- /dev/null +++ b/OP_depth_move.py @@ -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) \ No newline at end of file diff --git a/OP_realign.py b/OP_realign.py index 8361078..eedf801 100644 --- a/OP_realign.py +++ b/OP_realign.py @@ -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 - + align_global(reproject=self.reproject) print(f'\nGlobal Realign ({time()-t0:.2f}s)') - + self.exit(context, oframe) return {"FINISHED"} diff --git a/README.md b/README.md index 82d451b..fe491fe 100644 --- a/README.md +++ b/README.md @@ -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 - + --- -## 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 \ No newline at end of file +Consult [Changelog here](CHANGELOG.md) \ No newline at end of file diff --git a/README_FR.md b/README_FR.md index 31c2bd4..a03668d 100644 --- a/README_FR.md +++ b/README_FR.md @@ -148,4 +148,8 @@ 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) \ No newline at end of file +- Meilleure table lumineuse (grosse réflexion et travail en perspective) + +--- + +[Liste des changements ici](CHANGELOG.md) \ No newline at end of file diff --git a/UI_tools.py b/UI_tools.py index 60a7f2b..5f6dbf7 100644 --- a/UI_tools.py +++ b/UI_tools.py @@ -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') diff --git a/__init__.py b/__init__.py index 47bf721..8a24d0f 100644 --- a/__init__.py +++ b/__init__.py @@ -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()