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 readmegpv2
parent
bf85582f28
commit
3594c4812d
|
@ -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
|
|
@ -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)
|
|
@ -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
279
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
|
||||
|
||||
|
||||
<!--
|
||||
## 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)
|
|
@ -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)
|
28
UI_tools.py
28
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')
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue