disable name for cams
1.3.2: - change: disable manip cam name drawing - code: add initial support for main cam frame draw within camera view
This commit is contained in:
		
							parent
							
								
									e22b91265b
								
							
						
					
					
						commit
						4b9cd20891
					
				| @ -1,5 +1,9 @@ | |||||||
| # Changelog | # Changelog | ||||||
| 
 | 
 | ||||||
|  | 1.3.2: | ||||||
|  | 
 | ||||||
|  | - change: disable manip cam name drawing | ||||||
|  | - code: add initial support for main cam frame draw within camera view | ||||||
| 
 | 
 | ||||||
| 1.3.1: | 1.3.1: | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -187,7 +187,7 @@ class GPTB_OT_draw_cam(bpy.types.Operator): | |||||||
|             if not drawcam: |             if not drawcam: | ||||||
|                 created=True |                 created=True | ||||||
|                 drawcam = bpy.data.objects.new(dcam_name, context.scene.camera.data) |                 drawcam = bpy.data.objects.new(dcam_name, context.scene.camera.data) | ||||||
|                 drawcam.show_name = True |                 # drawcam.show_name = True | ||||||
|                 set_collection(drawcam, 'manip_cams') |                 set_collection(drawcam, 'manip_cams') | ||||||
|              |              | ||||||
|             if dcam_name == 'draw_cam': |             if dcam_name == 'draw_cam': | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ bl_info = { | |||||||
| "name": "GP toolbox", | "name": "GP toolbox", | ||||||
| "description": "Set of tools for Grease Pencil in animation production", | "description": "Set of tools for Grease Pencil in animation production", | ||||||
| "author": "Samuel Bernou", | "author": "Samuel Bernou", | ||||||
| "version": (1, 3, 1), | "version": (1, 3, 2), | ||||||
| "blender": (2, 91, 0), | "blender": (2, 91, 0), | ||||||
| "location": "sidebar (N menu) > Gpencil > Toolbox / Gpencil properties", | "location": "sidebar (N menu) > Gpencil > Toolbox / Gpencil properties", | ||||||
| "warning": "", | "warning": "", | ||||||
| @ -47,6 +47,7 @@ from . import OP_copy_paste | |||||||
| from . import OP_realign | from . import OP_realign | ||||||
| from . import OP_depth_move | from . import OP_depth_move | ||||||
| from . import OP_key_duplicate_send | from . import OP_key_duplicate_send | ||||||
|  | from . import handler_draw_cam | ||||||
| from . import keymaps | from . import keymaps | ||||||
| 
 | 
 | ||||||
| from .OP_pseudo_tint import GPT_OT_auto_tint_gp_layers | from .OP_pseudo_tint import GPT_OT_auto_tint_gp_layers | ||||||
| @ -448,6 +449,7 @@ def register(): | |||||||
|     OP_realign.register() |     OP_realign.register() | ||||||
|     OP_depth_move.register() |     OP_depth_move.register() | ||||||
|     OP_key_duplicate_send.register() |     OP_key_duplicate_send.register() | ||||||
|  |     handler_draw_cam.register() | ||||||
|     UI_tools.register() |     UI_tools.register() | ||||||
|     keymaps.register() |     keymaps.register() | ||||||
|     bpy.types.Scene.gptoolprops = bpy.props.PointerProperty(type = GP_PG_ToolsSettings) |     bpy.types.Scene.gptoolprops = bpy.props.PointerProperty(type = GP_PG_ToolsSettings) | ||||||
| @ -469,6 +471,7 @@ def unregister(): | |||||||
|     for cls in reversed(classes): |     for cls in reversed(classes): | ||||||
|         bpy.utils.unregister_class(cls) |         bpy.utils.unregister_class(cls) | ||||||
|     UI_tools.unregister() |     UI_tools.unregister() | ||||||
|  |     handler_draw_cam.unregister() | ||||||
|     OP_key_duplicate_send.unregister() |     OP_key_duplicate_send.unregister() | ||||||
|     OP_depth_move.unregister() |     OP_depth_move.unregister() | ||||||
|     OP_realign.unregister() |     OP_realign.unregister() | ||||||
|  | |||||||
							
								
								
									
										139
									
								
								handler_draw_cam.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								handler_draw_cam.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | |||||||
|  | import bpy | ||||||
|  | import gpu | ||||||
|  | import bgl | ||||||
|  | # import blf | ||||||
|  | from gpu_extras.batch import batch_for_shader | ||||||
|  | from bpy_extras.view3d_utils import location_3d_to_region_2d | ||||||
|  | 
 | ||||||
|  | from bpy.app.handlers import persistent | ||||||
|  | 
 | ||||||
|  | def view3d_camera_border(context, cam): | ||||||
|  |     ## based on https://blender.stackexchange.com/questions/6377/coordinates-of-corners-of-camera-view-border | ||||||
|  |     # cam = context.scene.camera | ||||||
|  |     frame = cam.data.view_frame(scene=context.scene) | ||||||
|  |     # to world-space  | ||||||
|  |     frame = [cam.matrix_world @ v for v in frame] | ||||||
|  |     # to pixelspace | ||||||
|  |     region, rv3d = context.region, context.space_data.region_3d | ||||||
|  |     frame_px = [location_3d_to_region_2d(region, rv3d, v) for v in frame] | ||||||
|  |     return frame_px | ||||||
|  | 
 | ||||||
|  | def draw_cam_frame_callback(self, context): | ||||||
|  |     if context.region_data.view_perspective != 'CAMERA': | ||||||
|  |         return | ||||||
|  |     if context.scene.camera.name != 'draw_cam': | ||||||
|  |         return | ||||||
|  |      | ||||||
|  |     main_cam = context.scene.camera.parent | ||||||
|  |     if not main_cam: | ||||||
|  |         return | ||||||
|  |     # if context.area != self._draw_area: | ||||||
|  |     #     return | ||||||
|  |      | ||||||
|  |     # green -> (0.06, 0.4, 0.040, 0.6) | ||||||
|  |     # orange -> (0.45, 0.18, 0.03, 1.0) | ||||||
|  |     osd_color = (0.06, 0.4, 0.040, 0.4) | ||||||
|  |      | ||||||
|  |     frame_point = view3d_camera_border(context, main_cam) | ||||||
|  |     self.shader_2d = gpu.shader.from_builtin('2D_UNIFORM_COLOR') | ||||||
|  |     self.screen_framing = batch_for_shader( | ||||||
|  |     self.shader_2d, 'LINE_LOOP', {"pos": frame_point}) | ||||||
|  | 
 | ||||||
|  |     bgl.glLineWidth(1) | ||||||
|  |     self.shader_2d.bind() | ||||||
|  |     self.shader_2d.uniform_float("color", osd_color) | ||||||
|  |     self.screen_framing.draw(self.shader_2d) | ||||||
|  |      | ||||||
|  |     # Reset | ||||||
|  |     # bgl.glLineWidth(1) | ||||||
|  | 
 | ||||||
|  |     # # Display Text | ||||||
|  |     # if self.use_osd_text: | ||||||
|  |     #     font_id = 0 | ||||||
|  |     #     dpi = context.preferences.system.dpi | ||||||
|  |     #     # Display current frame text | ||||||
|  |     #     blf.color(font_id, *osd_color) # unpack color in argument | ||||||
|  |     #     blf.position(font_id, context.region.width/3, 15, 0) # context.region.height- | ||||||
|  |     #     blf.size(font_id, 16, dpi) | ||||||
|  |     #     blf.draw(font_id, f'Draw cam') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## As a modal for tests | ||||||
|  | class GPTB_OT_cam_frame_draw(bpy.types.Operator): | ||||||
|  |     bl_idname = "gp.draw_cam_frame" | ||||||
|  |     bl_label = "Draw Cam Frame" | ||||||
|  |     bl_description = "Draw the camera frame using a modal" | ||||||
|  |     bl_options = {"REGISTER"} # , "INTERNAL" | ||||||
|  | 
 | ||||||
|  |     # @classmethod | ||||||
|  |     # def poll(cls, context): | ||||||
|  |     #     return True | ||||||
|  | 
 | ||||||
|  |     def invoke(self, context, event): | ||||||
|  |         ## screen color frame | ||||||
|  |         # r = bpy.context.region | ||||||
|  |         # w = r.width | ||||||
|  |         # h = r.height | ||||||
|  | 
 | ||||||
|  |         # self.shader_2d = gpu.shader.from_builtin('2D_UNIFORM_COLOR') | ||||||
|  |         # self.screen_framing = batch_for_shader( | ||||||
|  |         # self.shader_2d, 'LINE_LOOP', {"pos": [(0,0), (0,h), (w,h), (w,0)]}) | ||||||
|  |          | ||||||
|  |         ## OpenGL handler | ||||||
|  |         self._draw_area = context.area | ||||||
|  |         args = (self, context) | ||||||
|  |         self._handle = bpy.types.SpaceView3D.draw_handler_add( | ||||||
|  |             draw_cam_frame_callback, args, "WINDOW", "POST_PIXEL") | ||||||
|  | 
 | ||||||
|  |         context.window_manager.modal_handler_add(self) | ||||||
|  |         return {'RUNNING_MODAL'} | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |     def exit(self, context): | ||||||
|  |         bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') | ||||||
|  |         context.area.tag_redraw() | ||||||
|  | 
 | ||||||
|  |     def modal(self, context, event): | ||||||
|  |         if event.type in {'ESC'}: | ||||||
|  |             self.exit(context) | ||||||
|  |             return {"CANCELLED"} | ||||||
|  |         return {'PASS_THROUGH'} | ||||||
|  |         # return {'RUNNING_MODAL'} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class DrawClass: | ||||||
|  |     def __init__(self, context): | ||||||
|  |         # print("INIT") | ||||||
|  |         self._handle = bpy.types.SpaceView3D.draw_handler_add( | ||||||
|  |             draw_cam_frame_callback, args, "WINDOW", "POST_PIXEL") | ||||||
|  | 
 | ||||||
|  |     def remove_handle(self): | ||||||
|  |         bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### --- REGISTER --- | ||||||
|  | 
 | ||||||
|  | def register(): | ||||||
|  |     if not bpy.app.background: | ||||||
|  |         bpy.utils.register_class(GPTB_OT_cam_frame_draw) | ||||||
|  |          | ||||||
|  |         # ha = DrawClass() | ||||||
|  | 
 | ||||||
|  |         # _handle = bpy.types.SpaceView3D.draw_handler_add( | ||||||
|  |         #     draw_cam_frame_callback, args, "WINDOW", "POST_PIXEL") | ||||||
|  | 
 | ||||||
|  | def unregister(): | ||||||
|  |     if not bpy.app.background: | ||||||
|  |         bpy.utils.unregister_class(GPTB_OT_cam_frame_draw) | ||||||
|  |          | ||||||
|  |         # ha.remove_handle() | ||||||
|  | 
 | ||||||
|  |         # bpy.types.SpaceView3D.draw_handler_remove(_handle, 'WINDOW') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         # if 'draw_cam_frame_callback' in [hand.__name__ for hand in bpy.app.handlers.save_pre]: | ||||||
|  |         # bpy.app.handlers.save_pre.remove(remap_relative) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     register() | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user