From 383a270b29c44dfa1a8265864624d6d59d039315 Mon Sep 17 00:00:00 2001 From: Mark McKay Date: Wed, 27 Jan 2021 09:15:51 -0500 Subject: [PATCH] Rearranging directory for building. --- __init__.py => build/__init__.py | 0 build/icons/normalTool.png | Bin 0 -> 590 bytes build/ops/modalDraw.py | 154 +++++++ {ops => build/ops}/normalTool.py | 0 build/ops/openGlTestHandler.py | 279 ++++++++++++ deploy/normalTool.zip | Bin 1971 -> 11827 bytes makeDeploy.py | 48 +- source/__init__.py | 49 +++ source/icons/normalTool.png | Bin 0 -> 590 bytes source/icons/normalTool.psd | Bin 0 -> 2351 bytes source/ops/modalDraw.py | 154 +++++++ source/ops/normalTool.py | 729 +++++++++++++++++++++++++++++++ source/ops/openGlTestHandler.py | 279 ++++++++++++ test/scriptTest.blend | Bin 1089028 -> 1132884 bytes 14 files changed, 1687 insertions(+), 5 deletions(-) rename __init__.py => build/__init__.py (100%) create mode 100644 build/icons/normalTool.png create mode 100644 build/ops/modalDraw.py rename {ops => build/ops}/normalTool.py (100%) create mode 100644 build/ops/openGlTestHandler.py create mode 100644 source/__init__.py create mode 100644 source/icons/normalTool.png create mode 100644 source/icons/normalTool.psd create mode 100644 source/ops/modalDraw.py create mode 100644 source/ops/normalTool.py create mode 100644 source/ops/openGlTestHandler.py diff --git a/__init__.py b/build/__init__.py similarity index 100% rename from __init__.py rename to build/__init__.py diff --git a/build/icons/normalTool.png b/build/icons/normalTool.png new file mode 100644 index 0000000000000000000000000000000000000000..676219d11f4a804ac5d2ce3a06366478a1cc05b4 GIT binary patch literal 590 zcmV-U0z>%8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0005m zNkl}{FE_P%d_Qig2&{Zu^H!aMo6z}twB5b zFpfP!%H=WQ68eSoq?Qyd#Q?tHkdVGs#tS%!%R+ir9gxQsT)<*<3+cme|C@j9fw=)w zDY#hKj=e&9G@EI&1E!XL7VB|ZNcU#D=-C3Nuo-W^tX#}8H_(8i zLK>>&s+a~IK4|SKm9kqQloxew{P?0!C?62g<67^cY2f;`)oo2prRT+B!@Snz6JIuU zjR5t+L4llVqIM}r9TPpnMSX*pcvvzE>en1{G#Npw_?L)(jU0b$}?5)Q;Agk-E c;(q`?0VAr`(Q%AD4FCWD07*qoM6N<$g4P=k0ssI2 literal 0 HcmV?d00001 diff --git a/build/ops/modalDraw.py b/build/ops/modalDraw.py new file mode 100644 index 0000000..0392383 --- /dev/null +++ b/build/ops/modalDraw.py @@ -0,0 +1,154 @@ +import bpy +import bgl +import blf +import gpu +import numpy as np + + +g_vertSrc = ''' +uniform mat4 viewproj; + +in vec3 pos; + +void main() +{ + gl_Position = viewproj * vec4(pos, 1.0); +} + +''' + +g_fragSrc = ''' +uniform vec4 color; + +out vec4 fragColor; + +void main() +{ + fragColor = color; +} +''' +g_plane_vertices = np.array([ ([0.5, 0.5, 0]),], [('pos', 'f4', 3)]) + +class SnapDrawn(): + def __init__(self): + self._format = gpu.types.GPUVertFormat() + self._pos_id = self._format.attr_add( + id = "pos", + comp_type = "F32", + len = 3, + fetch_mode = "FLOAT") + + self.shader = gpu.types.GPUShader(g_vertSrc, g_fragSrc) + self.unif_color = self.shader.uniform_from_name("color") + self.color = np.array([1.0, 0.8, 0.0, 0.5], 'f') + + self.per_mat = self.shader.uniform_from_name("viewproj") + + + def batch_line_strip_create(self, coords): + global g_plane_vertices + vbo = gpu.types.GPUVertBuf(len = len(g_plane_vertices), format = self._format) + vbo.fill(id = self._pos_id, data = g_plane_vertices) + + batch_lines = gpu.types.GPUBatch(type = "POINTS", buf = vbo) + #batch_lines.program_set_builtin(id = "2D_UNIFORM_COLOR") + batch_lines.program_set(self.shader) + + return batch_lines + + + def draw(self, list_verts_co, rv3d): + + + batch = self.batch_line_strip_create(list_verts_co) + + #batch.uniform_f32("color", 1.0, 0.8, 0.0, 0.5) + self.shader.uniform_vector_float(self.unif_color, self.color, 4) + + + + viewproj = np.array(rv3d.perspective_matrix.transposed(), 'f') + self.shader.bind() + self.shader.uniform_vector_float(self.per_mat, viewproj, 16) + + batch.draw() + del batch + + +def draw_callback_px(self, context): + print("mouse points", len(self.mouse_path)) + + font_id = 0 # XXX, need to find out how best to get this. + + # draw some text + blf.position(font_id, 15, 30, 0) + blf.size(font_id, 20, 72) + blf.draw(font_id, "Hello Word " + str(len(self.mouse_path))) + + # 50% alpha, 2 pixel width line + bgl.glEnable(bgl.GL_BLEND) + bgl.glLineWidth(2.0) + + self.snap_draw.draw(self.mouse_path, self.rv3d) + + #restore opengl defaults + bgl.glLineWidth(1) + bgl.glDisable(bgl.GL_BLEND) + + +class ModalDrawOperator(bpy.types.Operator): + """Draw a line with the mouse""" + bl_idname = "view3d.modal_operator" + bl_label = "Simple Modal View3D Operator" + + global_shader = None + unif_viewproj = -1 + + def modal(self, context, event): + context.area.tag_redraw() + + if event.type == 'MOUSEMOVE': + self.mouse_path.append((event.mouse_region_x, event.mouse_region_y)) + + elif event.type == 'LEFTMOUSE': + del self.snap_draw + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'FINISHED'} + + elif event.type in {'RIGHTMOUSE', 'ESC'}: + del self.snap_draw + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'CANCELLED'} + + return {'PASS_THROUGH'} + + def invoke(self, context, event): + if context.area.type == 'VIEW_3D': + self.rv3d = context.region_data + + # the arguments we pass the the callback + args = (self, context) + # Add the region OpenGL drawing callback + # draw in view space with 'POST_VIEW' and 'PRE_VIEW' + self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL') + + self.mouse_path = [] + self.snap_draw = SnapDrawn() + + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + else: + self.report({'WARNING'}, "View3D not found, cannot run operator") + return {'CANCELLED'} + + +def register(): + bpy.utils.register_class(ModalDrawOperator) + + +def unregister(): + bpy.utils.unregister_class(ModalDrawOperator) + + +if __name__ == "__main__": + register() \ No newline at end of file diff --git a/ops/normalTool.py b/build/ops/normalTool.py similarity index 100% rename from ops/normalTool.py rename to build/ops/normalTool.py diff --git a/build/ops/openGlTestHandler.py b/build/ops/openGlTestHandler.py new file mode 100644 index 0000000..a27bc9f --- /dev/null +++ b/build/ops/openGlTestHandler.py @@ -0,0 +1,279 @@ +import bpy +import bgl +import blf + +import math + + +# I am using the driver namespace as a quick method of global persistent storage. +namespace = bpy.app.driver_namespace + + +def scribble(text, x, y, px=12, pivot=(0.5, 0.0), rotation=0.0): + blf.enable(0, blf.ROTATION) + + blf.size(0, px, 72) + + dimensions = blf.dimensions(0, text) + + sin = math.sin(rotation) + cos = math.cos(rotation) + + offset = ( + dimensions[0] * pivot[0] * cos - dimensions[1] * pivot[1] * sin, + dimensions[0] * pivot[0] * sin + dimensions[1] * pivot[1] * cos + ) + + position = (x - offset[0], y - offset[1]) + + blf.position(0, position[0], position[1], 0.0) + blf.rotation(0, rotation) + + blf.draw(0, text) + + blf.disable(0, blf.ROTATION) + + +vertex_shader_source = """ + #version 330 + + in vec3 point; + in vec4 color; + + uniform mat4 perspective; + + out VertexOut + { + vec4 color; + } vs_out; + + void main() + { + gl_Position = perspective * vec4(point, 1.0); + vs_out.color = color; + } +""" + +fragment_shader_source = """ + #version 330 + + in VertexOut + { + vec4 color; + } fs_in; + + out vec4 fragColor; + + void main() + { + fragColor = fs_in.color; + } +""" + +def draw_pixel(): + scribble("This is text in 2D space.", 100, 100) + + +def draw_view(): + + ###################### + ######## BIND ######## + ###################### + + first_time = not bgl.glIsVertexArray(namespace['vao'][0]) + + if first_time: + namespace['uniform_set'] = False + + # Unlike VBOs, a VAO has to be generated and deleted from within the draw callback in which it will be bound. + bgl.glGenVertexArrays(1, namespace['vao']) + bgl.glBindVertexArray(namespace['vao'][0]) + + float_byte_count = 4 + + # Attribute: "point", 3D float vector + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_point'][0]) + bgl.glBufferData(bgl.GL_ARRAY_BUFFER, len(namespace['data_point']) * float_byte_count, namespace['data_point'], bgl.GL_DYNAMIC_DRAW) + + bgl.glVertexAttribPointer(0, 3, bgl.GL_FLOAT, bgl.GL_FALSE, 0, None) + bgl.glEnableVertexAttribArray(0) + + # Attribute: "color", 4D float vector + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_color'][0]) + bgl.glBufferData(bgl.GL_ARRAY_BUFFER, len(namespace['data_color']) * float_byte_count, namespace['data_color'], bgl.GL_DYNAMIC_DRAW) + + bgl.glVertexAttribPointer(1, 4, bgl.GL_FLOAT, bgl.GL_FALSE, 0, None) + bgl.glEnableVertexAttribArray(1) + + bgl.glBindVertexArray(0) + + ###################### + ######## DRAW ######## + ###################### + + bgl.glEnable(bgl.GL_BLEND) + + bgl.glUseProgram(namespace['shader_program']) + + if not namespace['uniform_set']: + bgl.glUniformMatrix4fv( + namespace['perspective_uniform_location'], + 1, + bgl.GL_TRUE, # Matrices in Blender are row-major while matrices in OpenGL are column-major, so Blender's perspective matrix has to be transposed for OpenGL. + namespace['projection_matrix']) + + # In this case I only want to update the uniform once, even though namespace['projection_matrix'] is being updated constantly. + namespace['uniform_set'] = True + + bgl.glBindVertexArray(namespace['vao'][0]) + bgl.glDrawArrays(bgl.GL_TRIANGLES, 0, 3) + + bgl.glUseProgram(0) + bgl.glBindVertexArray(0) + + bgl.glDisable(bgl.GL_BLEND) + + +class WM_OT_opengl_test(bpy.types.Operator): + """To use this operator, run this script and type "OpenGL Test" into Blender's search menu.""" + + bl_label = "OpenGL Test" + bl_idname = 'wm.opengl_test' + bl_options = {'REGISTER'} + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + namespace['projection_matrix'] = bgl.Buffer(bgl.GL_FLOAT, (4, 4)) + + namespace['points'] = ( + -0.5, -0.5, 0.0, + 0.5, -0.5, 0.0, + 0.0, 0.5, 0.0 + ) + + namespace['colors'] = ( + 0.0, 1.0, 0.0, 0.5, + 1.0, 1.0, 0.0, 0.5, + 1.0, 0.0, 1.0, 0.5 + ) + + namespace['data_point'] = bgl.Buffer(bgl.GL_FLOAT, len(namespace['points']), namespace['points']) + namespace['data_color'] = bgl.Buffer(bgl.GL_FLOAT, len(namespace['colors']), namespace['colors']) + + namespace['vertex_shader_info'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['fragment_shader_info'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['shader_program_info'] = bgl.Buffer(bgl.GL_INT, 1) + + namespace['vao'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['vbo_point'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['vbo_color'] = bgl.Buffer(bgl.GL_INT, 1) + + bgl.glGenBuffers(1, namespace['vbo_point']) + bgl.glGenBuffers(1, namespace['vbo_color']) + + # Shaders + namespace['shader_program'] = bgl.glCreateProgram() + + namespace['vertex_shader'] = bgl.glCreateShader(bgl.GL_VERTEX_SHADER) + namespace['fragment_shader'] = bgl.glCreateShader(bgl.GL_FRAGMENT_SHADER) + + bgl.glShaderSource(namespace['vertex_shader'], vertex_shader_source) + bgl.glShaderSource(namespace['fragment_shader'], fragment_shader_source) + + bgl.glCompileShader(namespace['vertex_shader']) + bgl.glCompileShader(namespace['fragment_shader']) + + bgl.glGetShaderiv(namespace['vertex_shader'], bgl.GL_COMPILE_STATUS, namespace['vertex_shader_info']) + bgl.glGetShaderiv(namespace['fragment_shader'], bgl.GL_COMPILE_STATUS, namespace['fragment_shader_info']) + + if namespace['vertex_shader_info'][0] == bgl.GL_TRUE: + print("Vertex shader compiled successfully.") + elif namespace['vertex_shader_info'][0] == bgl.GL_FALSE: + print("Vertex shader failed to compile.") + + if namespace['fragment_shader_info'][0] == bgl.GL_TRUE: + print("Fragment shader compiled successfully.") + elif namespace['fragment_shader_info'][0] == bgl.GL_FALSE: + print("Fragment shader failed to compile.") + + bgl.glAttachShader(namespace['shader_program'], namespace['vertex_shader']) + bgl.glAttachShader(namespace['shader_program'], namespace['fragment_shader']) + + bgl.glLinkProgram(namespace['shader_program']) + + bgl.glGetProgramiv(namespace['shader_program'], bgl.GL_LINK_STATUS, namespace['shader_program_info']) + + if namespace['shader_program_info'][0] == bgl.GL_TRUE: + print("Shader program linked successfully.") + elif namespace['shader_program_info'][0] == bgl.GL_FALSE: + print("Shader program failed to link.") + + # glGetUniformLocation can only be used after the shader program is linked, as stated in the OpenGL Specification. + namespace['perspective_uniform_location'] = bgl.glGetUniformLocation(namespace['shader_program'], "perspective") + + bgl.glValidateProgram(namespace['shader_program']) + + bgl.glGetProgramiv(namespace['shader_program'], bgl.GL_VALIDATE_STATUS, namespace['shader_program_info']) + + if namespace['shader_program_info'][0] == bgl.GL_TRUE: + print("Shader program validated successfully.") + elif namespace['shader_program_info'][0] == bgl.GL_FALSE: + print("Shader program failed to validate.") + + draw_handler_add() + + namespace['timer'] = context.window_manager.event_timer_add(time_step=0.01, window=context.window) + namespace['data_timer'] = bgl.Buffer(bgl.GL_FLOAT, 2, [math.sin(namespace['timer'].time_duration), math.sin(namespace['timer'].time_duration) * 2]) + + context.window_manager.modal_handler_add(self) + + return {'RUNNING_MODAL'} + + def modal(self, context, event): + if not context.area or not context.region: + return {'PASS_THROUGH'} + + namespace['data_timer'][0] = math.sin(namespace['timer'].time_duration) + namespace['data_timer'][1] = math.sin(namespace['timer'].time_duration) * 2 + + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_point'][0]) + + # Inserts data from the timer into the Y and Z coordinates of the 3rd vertex, starting at index 7, its Y coordinate. + index = 7 + float_byte_count = 4 + insertion_size = float_byte_count * 2 # 2 floats are being edited right now: Y position and Z position. + bgl.glBufferSubData(bgl.GL_ARRAY_BUFFER, index * float_byte_count, insertion_size, namespace['data_timer']) + + if event.type == 'ESC' and event.value == 'PRESS': + context.area.tag_redraw() + context.window_manager.event_timer_remove(namespace['timer']) + draw_handler_remove() + + return {'FINISHED'} + + namespace['projection_matrix'][:] = context.region_data.perspective_matrix + + context.area.tag_redraw() + + return {'RUNNING_MODAL'} + + +def draw_handler_add(): + namespace['OPENGL_TEST_HANDLER_2D'] = bpy.types.SpaceView3D.draw_handler_add(draw_pixel, (), 'WINDOW', 'POST_PIXEL') + namespace['OPENGL_TEST_HANDLER_3D'] = bpy.types.SpaceView3D.draw_handler_add(draw_view, (), 'WINDOW', 'POST_VIEW') + + +def draw_handler_remove(): + if namespace.get('OPENGL_TEST_HANDLER_2D') is not None: + bpy.types.SpaceView3D.draw_handler_remove(namespace['OPENGL_TEST_HANDLER_2D'], 'WINDOW') + namespace['OPENGL_TEST_HANDLER_2D'] = None + + if namespace.get('OPENGL_TEST_HANDLER_3D') is not None: + bpy.types.SpaceView3D.draw_handler_remove(namespace['OPENGL_TEST_HANDLER_3D'], 'WINDOW') + namespace['OPENGL_TEST_HANDLER_3D'] = None + + +bpy.utils.register_class(WM_OT_opengl_test) \ No newline at end of file diff --git a/deploy/normalTool.zip b/deploy/normalTool.zip index 2104a157ce7ed6797e3798ca1b3f2282cd552000..ecbb8c0426761427f6c9b47cc857a23c0bf02030 100644 GIT binary patch delta 11123 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 K^J4l-_@6aWAK2mlK(h*7ar3_FyYD zx-SGRoosFt$&%C@cj$lLQIg-1bVxDTkZj#^ch7ToI-Oi;v$kTf^zi!p)z5Ip?O$-0 zedK@Zq&Q_~c!fUpPwu>{_Al=#R@MQ` z91Ad7$~cp*MNoc^7nKX$51q{gm1_~I|3YG=v1ARolG@EB3RiJ-GyLOj z%&0#hAiKz;?#{(nZ9@IXHSye1(-|>l8#Zy|Emw}_wM?w0;ln4+39+GPiMD}f{6U0Z z@3{=ysJ*1N!pA<^3MBldueX2WtNv~0G037s?vPP}LfDdkO{fFGNy+I!eqeL%>fF?g z_RdOMnJ3Lmim#Z*-9twy6tb1bX~|u}#pAG^gnkBCxKRxTsmbA=e zz0fb=RdU|jo}P*G7`z{`?x>}C4RonRO~3Z1%wj=nXZig(d+FTlW%+*}W!`)mY75%6 zXyXkXV`)?%j!sV}ttkwAvmL^6*xNmuVGC=l@;@jRzjmO+)rC8~-QmCCw1U6uL|W%pa-4`|y(e7U+OK0l_< zVo5KYC;CJIjD-cySXdxy5o0Ai-;71A(4F$*qkjQVO928D02BZK00;mJFo;o;?<^Vt z0Fw$W8cao%h*2%*h%(><006fL000yK0000000000006du5CZ@JXK8wEZ*wnhZ*py6 hY*cS=Y%XwlP)h{{000000ssO4djJ3cA_o8f008W2ARGVy diff --git a/makeDeploy.py b/makeDeploy.py index 8b05831..fa09b12 100644 --- a/makeDeploy.py +++ b/makeDeploy.py @@ -1,5 +1,7 @@ #!/usr/bin/env python import os +import glob +import shutil import zipfile def zipdir(path, ziph): @@ -8,15 +10,51 @@ def zipdir(path, ziph): for file in files: ziph.write(os.path.join(root, file)) +def copytree(src, dst): + for item in os.listdir(src): + + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isdir(s): + #destDir = os.path.join(dst, item) + os.mkdir(d) + copytree(s, d) + else: + filename, extn = os.path.splitext(item) + print ("file " + filename + " extn " + extn) + if (extn != ".py" and extn != ".png"): + continue + + shutil.copy(s, d) + + +# s = os.path.join("source", item) +# d = os.path.join("build", item) + # if os.path.isdir(s): + # shutil.copytree( + if __name__ == '__main__': curPath = os.getcwd() - if not os.path.exists('deploy'): - os.mkdir('deploy') + if os.path.exists('build'): + shutil.rmtree('build') + os.mkdir('build') + + if os.path.exists('deploy'): + shutil.rmtree('deploy') + os.mkdir('deploy') + + copytree("source", "build"); + + shutil.make_archive("deploy/normalTool", "zip", "build") + + +# zipf = zipfile.ZipFile('deploy/normalTool.zip', 'w', zipfile.ZIP_DEFLATED) - zipf = zipfile.ZipFile('deploy/normalTool.zip', 'w', zipfile.ZIP_DEFLATED) +# zipdir('source/', zipf) - zipf.write('__init__.py') - zipdir('gizmos/', zipf) +# zipf.write('__init__.py') +# zipdir('ops/', zipf) + #zipdir('icons/', zipf) zipf.close() diff --git a/source/__init__.py b/source/__init__.py new file mode 100644 index 0000000..313c4ed --- /dev/null +++ b/source/__init__.py @@ -0,0 +1,49 @@ +# Copyright 2019 Mark McKay +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +bl_info = { + "name": "Tool for adjusting normals", + "description": "Provides gizmo so you can interactively adjust normals. Also provides some useful operators.", + "author": "Mark McKay", + "version": (1, 0), + "blender": (2, 80, 0), + "location": "View3D > Add > Mesh", + "wiki_url": "https://github.com/blackears/blenderNormalTool", + "tracker_url": "https://github.com/blackears/blenderNormalTool", + "support": "COMMUNITY", + "category": "Add Mesh" +} + +if "bpy" in locals(): + import importlib + if "normalTool" in locals(): + importlib.reload(normalTool) +# if "kitfoxStairsCurved" in locals(): +# importlib.reload(kitfoxStairs) +else: + from .gizmos import normalTool +# from .operators import kitfoxStairsCurved + +import bpy + +def register(): + normalTool.register() +# kitfoxStairsCurved.register() + + +def unregister(): + normalTool.unregister() +# kitfoxStairsCurved.unregister() + diff --git a/source/icons/normalTool.png b/source/icons/normalTool.png new file mode 100644 index 0000000000000000000000000000000000000000..676219d11f4a804ac5d2ce3a06366478a1cc05b4 GIT binary patch literal 590 zcmV-U0z>%8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0005m zNkl}{FE_P%d_Qig2&{Zu^H!aMo6z}twB5b zFpfP!%H=WQ68eSoq?Qyd#Q?tHkdVGs#tS%!%R+ir9gxQsT)<*<3+cme|C@j9fw=)w zDY#hKj=e&9G@EI&1E!XL7VB|ZNcU#D=-C3Nuo-W^tX#}8H_(8i zLK>>&s+a~IK4|SKm9kqQloxew{P?0!C?62g<67^cY2f;`)oo2prRT+B!@Snz6JIuU zjR5t+L4llVqIM}r9TPpnMSX*pcvvzE>en1{G#Npw_?L)(jU0b$}?5)Q;Agk-E c;(q`?0VAr`(Q%AD4FCWD07*qoM6N<$g4P=k0ssI2 literal 0 HcmV?d00001 diff --git a/source/icons/normalTool.psd b/source/icons/normalTool.psd new file mode 100644 index 0000000000000000000000000000000000000000..4cf8219e42e5318db7608cab851299457ccab42f GIT binary patch literal 2351 zcmds%Urby@6vof)y?1AU7EOhQXhN&d6sl=#+7P1A2cj|7($E+hHH|4K*qVw2C<#7j zqdsWT#1|9eAKDT^8fnD_Eks%@sisC#B^YBh8;v|DK`bo$e|PSk<2Q3zP#-M#=uYO& zcV^Da{e5?5rnau(Q3{a%v(S{88YZpvZ&z*I!}Zp6qi+sAh8EfR){M=YG1A&D^)*qb z5;aJ{e2ms#*=B}rHvP@!&CMpOSyurbL zRX|0w4yACZEkI8gMYnk!CK07TfMR479U3f2kYjgVnT`~uNQBy^ejNG!11C-4!rpIA z??3;}yEj2szO;SE*zxMVTay&pGIX3u`m2y!Ioxkk_|#4$lno86BeGsC&yZF6{wHM~ z1xhGOR=9V(CPz84tk*9;n1u+w{6%AiBn6+o{A`+Bvi4nlEs!RUtb4wEFPI`l)*TZg zwj`vCrEONvYe*Oa!sM1NFnwZM^SMG0#2B-5ZZX;XSOS@JwQ-dP-q+ zXJYJAmm%y^!+jGBZ2oy@;5%S5M@Iewwv@n@z?Q(4z+SGvmY_xKNsTRmErBg1u%*F< z0yYMKjXYrMY&;FN)Y#da!s^cW=!J}guuq&jIWB=MBWL=jfGy>{#?xSnB>wxbUfe0)R2~)(c6CKn zxd64;P`Py@sD&uG9n}7h4fMoL9|KEau7Q-!8x`(ygI=W84z)HeG!8X+q`^{L(JDNUd*bf zR*Sp`~IA9mTav#aAxn} zLs1h&Uio%%clWjCUyaX5V>izo{J~6$>^mqq{nXbcZKmkKK3H`0TBF%lJH3`-1QD%DvBc#^+BD)c;|8{<64tcf|Po{O*dH atH$Sab=9`4@!7QXuHSs0sllVZ&p!dGH2e4f literal 0 HcmV?d00001 diff --git a/source/ops/modalDraw.py b/source/ops/modalDraw.py new file mode 100644 index 0000000..0392383 --- /dev/null +++ b/source/ops/modalDraw.py @@ -0,0 +1,154 @@ +import bpy +import bgl +import blf +import gpu +import numpy as np + + +g_vertSrc = ''' +uniform mat4 viewproj; + +in vec3 pos; + +void main() +{ + gl_Position = viewproj * vec4(pos, 1.0); +} + +''' + +g_fragSrc = ''' +uniform vec4 color; + +out vec4 fragColor; + +void main() +{ + fragColor = color; +} +''' +g_plane_vertices = np.array([ ([0.5, 0.5, 0]),], [('pos', 'f4', 3)]) + +class SnapDrawn(): + def __init__(self): + self._format = gpu.types.GPUVertFormat() + self._pos_id = self._format.attr_add( + id = "pos", + comp_type = "F32", + len = 3, + fetch_mode = "FLOAT") + + self.shader = gpu.types.GPUShader(g_vertSrc, g_fragSrc) + self.unif_color = self.shader.uniform_from_name("color") + self.color = np.array([1.0, 0.8, 0.0, 0.5], 'f') + + self.per_mat = self.shader.uniform_from_name("viewproj") + + + def batch_line_strip_create(self, coords): + global g_plane_vertices + vbo = gpu.types.GPUVertBuf(len = len(g_plane_vertices), format = self._format) + vbo.fill(id = self._pos_id, data = g_plane_vertices) + + batch_lines = gpu.types.GPUBatch(type = "POINTS", buf = vbo) + #batch_lines.program_set_builtin(id = "2D_UNIFORM_COLOR") + batch_lines.program_set(self.shader) + + return batch_lines + + + def draw(self, list_verts_co, rv3d): + + + batch = self.batch_line_strip_create(list_verts_co) + + #batch.uniform_f32("color", 1.0, 0.8, 0.0, 0.5) + self.shader.uniform_vector_float(self.unif_color, self.color, 4) + + + + viewproj = np.array(rv3d.perspective_matrix.transposed(), 'f') + self.shader.bind() + self.shader.uniform_vector_float(self.per_mat, viewproj, 16) + + batch.draw() + del batch + + +def draw_callback_px(self, context): + print("mouse points", len(self.mouse_path)) + + font_id = 0 # XXX, need to find out how best to get this. + + # draw some text + blf.position(font_id, 15, 30, 0) + blf.size(font_id, 20, 72) + blf.draw(font_id, "Hello Word " + str(len(self.mouse_path))) + + # 50% alpha, 2 pixel width line + bgl.glEnable(bgl.GL_BLEND) + bgl.glLineWidth(2.0) + + self.snap_draw.draw(self.mouse_path, self.rv3d) + + #restore opengl defaults + bgl.glLineWidth(1) + bgl.glDisable(bgl.GL_BLEND) + + +class ModalDrawOperator(bpy.types.Operator): + """Draw a line with the mouse""" + bl_idname = "view3d.modal_operator" + bl_label = "Simple Modal View3D Operator" + + global_shader = None + unif_viewproj = -1 + + def modal(self, context, event): + context.area.tag_redraw() + + if event.type == 'MOUSEMOVE': + self.mouse_path.append((event.mouse_region_x, event.mouse_region_y)) + + elif event.type == 'LEFTMOUSE': + del self.snap_draw + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'FINISHED'} + + elif event.type in {'RIGHTMOUSE', 'ESC'}: + del self.snap_draw + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'CANCELLED'} + + return {'PASS_THROUGH'} + + def invoke(self, context, event): + if context.area.type == 'VIEW_3D': + self.rv3d = context.region_data + + # the arguments we pass the the callback + args = (self, context) + # Add the region OpenGL drawing callback + # draw in view space with 'POST_VIEW' and 'PRE_VIEW' + self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, args, 'WINDOW', 'POST_PIXEL') + + self.mouse_path = [] + self.snap_draw = SnapDrawn() + + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + else: + self.report({'WARNING'}, "View3D not found, cannot run operator") + return {'CANCELLED'} + + +def register(): + bpy.utils.register_class(ModalDrawOperator) + + +def unregister(): + bpy.utils.unregister_class(ModalDrawOperator) + + +if __name__ == "__main__": + register() \ No newline at end of file diff --git a/source/ops/normalTool.py b/source/ops/normalTool.py new file mode 100644 index 0000000..a051821 --- /dev/null +++ b/source/ops/normalTool.py @@ -0,0 +1,729 @@ +import bpy +import bpy.utils.previews +import os +#import bmesh +import bgl +import blf +import gpu +import mathutils +import math +from gpu_extras.batch import batch_for_shader +from bpy_extras import view3d_utils + +#def normal_update(self, context): +# #Set a flag when the normal is changed to get around not receiving a +# # mouse up event when interacting with the panel +# print ("Callback") + +# #I really hate python +# tool = context.scene.my_tool +# +# ox = tool.old_normal.x +# oy = tool.old_normal.y +# oz = tool.old_normal.z +# nx = tool.normal.x +# ny = tool.normal.y +# nz = tool.normal.z +# +# if ox != nx and oy != ny and oz != nz: +# print ("Callback - CHANGED!") +# print ("old norm " + str(tool.old_normal)) +# print ("norm " + str(tool.normal)) + +## print ("old norm x:" + str(tool.old_normal.x)) + +# tool.normal_changed = True +# tool.old_normal = (nx, ny, nz) + + +class NormalToolSettings(bpy.types.PropertyGroup): + brush_type : bpy.props.EnumProperty( + items=( + ('FIXED', "Fixed", "Normals are in a fixed direction"), + ('ATTRACT', "Attract", "Normals point toward target object"), + ('REPEL', "Repel", "Normals point away from target object"), + ('VERTEX', "Vertex", "Get normal values from mesh vertices") + ), + default='FIXED' + ) + + radius : bpy.props.FloatProperty( + name="Radius", description="Radius of brush", default = 1, min=0, soft_max = 4 + ) + + strength : bpy.props.FloatProperty( + name="Strength", description="Amount to adjust mesh normal", default = 1, min=0, max = 1 + ) + + normal_length : bpy.props.FloatProperty( + name="Normal Length", description="Display length of normal", default = 1, min=0, soft_max = 1 + ) + + selected_only : bpy.props.BoolProperty( + name="Selected Only", description="If true, affect only selected vertices", default = True + ) + + normal : bpy.props.FloatVectorProperty( + name="Normal", + description="Direction of normal in Fixed mode", + default = (1, 0, 0), + subtype="DIRECTION" +# update=normal_update + ) + + normal_exact : bpy.props.BoolProperty( + name="Exact normal", description="Display normal as exact coordinates", default = True + ) + + + front_faces_only : bpy.props.BoolProperty( + name="Front Faces Only", description="Only affect normals on front facing faces", default = True + ) + + target : bpy.props.PointerProperty(name="Target", description="Object Attract and Repel mode reference", type=bpy.types.Object) + + +# normal_changed = False +# normal_changed : bpy.props.BoolProperty(default=False) +# old_normal : bpy.props.FloatVectorProperty(subtype="DIRECTION") +# + +#--------------------------- + + +circleSegs = 64 +coordsCircle = [(math.sin(((2 * math.pi * i) / circleSegs)), math.cos((math.pi * 2 * i) / circleSegs), 0) for i in range(circleSegs + 1)] + +coordsNormal = [(0, 0, 0), (0, 0, 1)] + +vecZ = mathutils.Vector((0, 0, 1)) +vecX = mathutils.Vector((1, 0, 0)) + + +#Find matrix that will rotate Z axis to point along normal +#coord - point in world space +#normal - normal in world space +def calc_vertex_transform_world(pos, norm): + axis = norm.cross(vecZ) + if axis.length_squared < .0001: + axis = mathutils.Vector(vecX) + else: + axis.normalize() + angle = -math.acos(norm.dot(vecZ)) + + quat = mathutils.Quaternion(axis, angle) +# print (quat) + mR = quat.to_matrix() +# print (mR) + mR.resize_4x4() +# print (mR) + + mT = mathutils.Matrix.Translation(pos) +# print (mT) + + m = mT @ mR + return m + +#Calc matrix that maps from world space to a particular vertex on mesh +#coord - vertex position in local space +#normal - vertex normal in local space +def calc_vertex_transform(obj, coord, normal): + pos = obj.matrix_world @ coord + + #Transform normal into world space + norm = normal.copy() + norm.resize_4d() + norm.w = 0 + mIT = obj.matrix_world.copy() + mIT.invert() + mIT.transpose() + norm = mIT @ norm + norm.resize_3d() + norm.normalize() + + return calc_vertex_transform_world(pos, norm) + + +def calc_gizmo_transform(obj, coord, normal, ray_origin): + mV = calc_vertex_transform(obj, coord, normal) + + pos = obj.matrix_world @ coord + + eye_offset = pos - ray_origin + radius = eye_offset.length / 5 + mS = mathutils.Matrix.Scale(radius, 4) + + m = mV @ mS + return m + + +def draw_callback(self, context): + ctx = bpy.context + + region = context.region + rv3d = context.region_data + + viewport_center = (region.x + region.width / 2, region.y + region.height / 2) + view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, viewport_center) + ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, viewport_center) + + + shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR') + batchLine = batch_for_shader(shader, 'LINES', {"pos": coordsNormal}) + batchCircle = batch_for_shader(shader, 'LINE_STRIP', {"pos": coordsCircle}) + + shader.bind(); + + bgl.glEnable(bgl.GL_DEPTH_TEST) + + #Draw cursor + if self.show_cursor: + brush_radius = context.scene.my_tool.radius + + m = calc_vertex_transform_world(self.cursor_pos, self.cursor_normal); + mS = mathutils.Matrix.Scale(brush_radius, 4) + m = m @ mS + + #Tangent to mesh + gpu.matrix.push() + + gpu.matrix.multiply_matrix(m) +# shader.uniform_float("color", (1, 0, 1, 1)) +# batchLine.draw(shader) + + shader.uniform_float("color", (1, 0, 1, 1)) + batchCircle.draw(shader) + + gpu.matrix.pop() + + + #Brush normal direction + gpu.matrix.push() + + brush_normal = context.scene.my_tool.normal + m = calc_vertex_transform_world(self.cursor_pos, brush_normal); + gpu.matrix.multiply_matrix(m) + + shader.uniform_float("color", (0, 1, 1, 1)) + batchLine.draw(shader) + + gpu.matrix.pop() + + + #Draw editable normals + shader.uniform_float("color", (1, 1, 0, 1)) + + + selOnly = context.scene.my_tool.selected_only + + normLength = context.scene.my_tool.normal_length + mS = mathutils.Matrix.Scale(normLength, 4) + + for obj in ctx.selected_objects: + if obj.type == 'MESH': + success = obj.update_from_editmode() + mesh = obj.data + + + mesh.calc_normals_split() + + for l in mesh.loops: + + if not (selOnly and not v.select): + + v = mesh.vertices[l.vertex_index] + m = calc_vertex_transform(obj, v.co, l.normal) + m = m @ mS + + + gpu.matrix.push() + + gpu.matrix.multiply_matrix(m) + shader.uniform_float("color", (1, 1, 0, 1)) + batchLine.draw(shader) + + gpu.matrix.pop() + + bgl.glDisable(bgl.GL_DEPTH_TEST) + + + +#--------------------------- + +class ModalDrawOperator(bpy.types.Operator): + """Adjust normals""" + bl_idname = "kitfox.normal_tool" + bl_label = "Normal Tool Kitfox" + + dragging = False + + cursor_pos = None + show_cursor = False + + bm = None + + def dab_brush(self, context, event): + mouse_pos = (event.mouse_region_x, event.mouse_region_y) + + targetObj = context.scene.my_tool.target +# if targetObj != None: +# print("^^^Tool property target: " + targetObj.name) +# else: +# print("^^^Tool property target: None") + + ctx = bpy.context + + region = context.region + rv3d = context.region_data + # coord = event.mouse_region_x, event.mouse_region_y + +# viewport_center = (region.x + region.width / 2, region.y + region.height / 2) + view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, mouse_pos) + ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, mouse_pos) + + viewlayer = bpy.context.view_layer + result, location, normal, index, object, matrix = context.scene.ray_cast(viewlayer.depsgraph, ray_origin, view_vector) +# print("location " + str(location)) + + center = None + center_count = 0 + + selOnly = context.scene.my_tool.selected_only + radius = context.scene.my_tool.radius + strength = context.scene.my_tool.strength + brush_type = context.scene.my_tool.brush_type + brush_normal = context.scene.my_tool.normal + target = context.scene.my_tool.target + front_faces_only = context.scene.my_tool.front_faces_only + + +# if target != None: +# print ("Target " + target.name) +# brush_normal.normalize() +# print("brush_normal " + str(brush_normal)) + + if result: + + #--- + #This works, but only in object mode +# success = obj.update_from_editmode() + + for obj in ctx.selected_objects: + if obj.type == 'MESH': + # print("Updating mesh " + obj.name) + mesh = obj.data + mesh.use_auto_smooth = True + + mesh.calc_normals_split() + +# print("num mesh loops: " + str(len(mesh.loops)) + normals = [] + + for p in mesh.polygons: + for loop_idx in p.loop_indices: + l = mesh.loops[loop_idx] + # normals.append(brush_normal) + + v = mesh.vertices[l.vertex_index] + pos = mathutils.Vector(v.co) + wpos = obj.matrix_world @ pos + + # print ("---") + # print ("mtx wrld " + str(obj.matrix_world)) + # print ("pos " + str(pos)) + # print ("wpos " + str(wpos)) + + #Normal transform is (l2w ^ -1) ^ -1 ^ T + w2ln = obj.matrix_world.copy() + w2ln.transpose() + + nLocal = None + if brush_type == "FIXED": + nLocal = brush_normal.to_4d() + nLocal.w = 0 + nLocal = w2ln @ nLocal + nLocal = nLocal.to_3d() + nLocal.normalize() + elif brush_type == "ATTRACT": + if target != None: + m = obj.matrix_world.copy() + m.invert() + targetLoc = m @ target.matrix_world.translation + + nLocal = targetLoc - pos + nLocal.normalize() + elif brush_type == "REPEL": + if target != None: + m = obj.matrix_world.copy() + m.invert() + targetLoc = m @ target.matrix_world.translation + + nLocal = pos - targetLoc + nLocal.normalize() + + # print("Setting nLocal") + + # nLocal = mathutils.Vector(v.normal) + elif brush_type == "VERTEX": + nLocal = mathutils.Vector(v.normal) + # print("brush norm local " + str(nLocal)) + + # print("l2w " + str(obj.matrix_world)) + # print("w2ln " + str(w2ln)) + + # print("nLocal " + str(nLocal)) + + + offset = location - wpos + # print ("offset " + str(offset)) + + # offset.length_squared / radius * radius + t = 1 - offset.length / radius + # print ("t " + str(t)) + + view_local = w2ln @ view_vector +# if p.normal.dot(view_local) < 0 && front_faces_only: +# pass + + + # print("loop norm " + str(l.normal)) + if t <= 0 or nLocal == None or (p.normal.dot(view_local) > 0 and front_faces_only): + normals.append(l.normal) + else: + axis = l.normal.cross(nLocal) + angle = nLocal.angle(l.normal) + + # print("->axis " + str(axis)) + # print("->angle " + str(math.degrees(angle))) + + q = mathutils.Quaternion(axis, angle * t * strength) + m = q.to_matrix() + + newNorm = m @ l.normal + # print("->new norm " + str(newNorm)) + + normals.append(newNorm) + + mesh.normals_split_custom_set(normals) + + + def mouse_move(self, context, event): + mouse_pos = (event.mouse_region_x, event.mouse_region_y) + + ctx = bpy.context + + region = context.region + rv3d = context.region_data + + view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, mouse_pos) + ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, mouse_pos) + + viewlayer = bpy.context.view_layer + result, location, normal, index, object, matrix = context.scene.ray_cast(viewlayer.depsgraph, ray_origin, view_vector) + + #Brush cursor display + if result: + self.show_cursor = True + self.cursor_pos = location + self.cursor_normal = normal + self.cursor_object = object + self.cursor_matrix = matrix + else: + self.show_cursor = False + +# print ("dragging: " + str(self.dragging)); + if self.dragging: + self.dab_brush(context, event) + + + def mouse_down(self, context, event): + if event.value == "PRESS": +# print ("m DOWN") + self.dragging = True + self.dab_brush(context, event) + elif event.value == "RELEASE": +# print ("m UP") + self.dragging = False + return; + + + def modal(self, context, event): + + #We are not receiving a mouse up event after editing the normal, + # so check for it here +# print ("modal normal_changed: " + str(context.scene.my_tool.normal_changed)) +# if context.scene.my_tool.normal_changed: +# print ("reactng to normal chagne!!!: ") +# self.dragging = False +# context.scene.my_tool.normal_changed = False; +# + context.area.tag_redraw() + + if event.type in {'MIDDLEMOUSE', 'WHEELUPMOUSE', 'WHEELDOWNMOUSE'}: + # allow navigation + return {'PASS_THROUGH'} + + elif event.type == 'MOUSEMOVE': + self.mouse_move(context, event) + + if self.dragging: + return {'RUNNING_MODAL'} + else: + return {'PASS_THROUGH'} + + elif event.type == 'LEFTMOUSE': + self.mouse_down(context, event) + return {'PASS_THROUGH'} +# return {'RUNNING_MODAL'} + + elif event.type in {'Z'}: + #Kludge to get around FloatVectorProperty(subtype='DIRECTION') error + self.dragging = False + return {'RUNNING_MODAL'} + + elif event.type in {'RET'}: + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'FINISHED'} + + elif event.type in {'PAGE_UP', 'RIGHT_BRACKET'}: + if event.value == "PRESS": + brush_radius = context.scene.my_tool.radius + brush_radius = brush_radius + .1 + context.scene.my_tool.radius = brush_radius + return {'RUNNING_MODAL'} + + elif event.type in {'PAGE_DOWN', 'LEFT_BRACKET'}: + if event.value == "PRESS": + brush_radius = context.scene.my_tool.radius + brush_radius = max(brush_radius - .1, .1) + context.scene.my_tool.radius = brush_radius + return {'RUNNING_MODAL'} + + elif event.type in {'RIGHTMOUSE', 'ESC'}: + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') +# print("norm tool cancelled") + return {'CANCELLED'} + + return {'PASS_THROUGH'} +# return {'RUNNING_MODAL'} + + def invoke(self, context, event): + if context.area.type == 'VIEW_3D': + # the arguments we pass the the callback + args = (self, context) + # Add the region OpenGL drawing callback + # draw in view space with 'POST_VIEW' and 'PRE_VIEW' + self._context = context + self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback, args, 'WINDOW', 'POST_VIEW') + +# self.mouse_path = [] + + context.area.tag_redraw() + + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + else: + self.report({'WARNING'}, "View3D not found, cannot run operator") + return {'CANCELLED'} + +#--------------------------- + +class NormalPickerOperator(bpy.types.Operator): + """Pick normal""" + bl_idname = "kitfox.nt_pick_normal" + bl_label = " Pick Normal" + + def mouse_down(self, context, event): + mouse_pos = (event.mouse_region_x, event.mouse_region_y) + + ctx = bpy.context + + region = context.region + rv3d = context.region_data + + view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, mouse_pos) + ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, mouse_pos) + + + viewlayer = bpy.context.view_layer + result, location, normal, index, object, matrix = context.scene.ray_cast(viewlayer.depsgraph, ray_origin, view_vector) + + if result: + print("--picked " + str(normal)) + context.scene.my_tool.normal = normal + context.area.tag_redraw() + + + def modal(self, context, event): + if event.type == 'LEFTMOUSE': + self.mouse_down(context, event) + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'FINISHED'} + + elif event.type in {'RIGHTMOUSE', 'ESC'}: + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + print("pick target object cancelled") + return {'CANCELLED'} + else: + return {'PASS_THROUGH'} + + def invoke(self, context, event): + if context.area.type == 'VIEW_3D': + args = (self, context) + + # Add the region OpenGL drawing callback + # draw in view space with 'POST_VIEW' and 'PRE_VIEW' + self._context = context + self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback, args, 'WINDOW', 'POST_VIEW') + + context.window_manager.modal_handler_add(self) + return {'RUNNING_MODAL'} + else: + self.report({'WARNING'}, "View3D not found, cannot run operator") + return {'CANCELLED'} + +#--------------------------- + +class NormalToolPanel(bpy.types.Panel): + + """Panel for the Normal Tool on tool shelf""" + bl_label = "Normal Tool Panel" + bl_idname = "OBJECT_PT_normal_tool" + bl_space_type = 'VIEW_3D' + bl_region_type = 'TOOLS' +# bl_context = "object" + + def draw(self, context): + layout = self.layout + + obj = context.object + + row = layout.row() + row.operator("kitfox.normal_tool") + +#--------------------------- + + +#class NormalToolTool(bpy.types.WorkSpaceTool): +# bl_space_type = 'VIEW_3D' +# bl_context_mode = 'OBJECT' + +# # The prefix of the idname should be your add-on name. +# bl_idname = "kitfox.normal_tool_tool" +# bl_label = "Normal Tool" +# bl_description = ( +# "Adjust the normals of the selected object" +# ) +# bl_icon = "ops.generic.select_circle" +# bl_widget = None +## bl_keymap = ( +## ("view3d.select_circle", {"type": 'LEFTMOUSE', "value": 'PRESS'}, +## {"properties": [("wait_for_input", False)]}), +## ("view3d.select_circle", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, +## {"properties": [("mode", 'SUB'), ("wait_for_input", False)]}), +## ) +# bl_keymap = ( +# ("kitfox.normal_tool", {"type": 'LEFTMOUSE', "value": 'PRESS'}, +# {"properties": [("wait_for_input", False)]}), +# ) + +# def draw_settings(context, layout, tool): +# props = tool.operator_properties("kitfox.normal_tool") +## layout.prop(props, "mode") +# +#--------------------------- + +class NormalToolPropsPanel(bpy.types.Panel): + + """Properties Panel for the Normal Tool on tool shelf""" + bl_label = "Normal Tool Properties Panel" + bl_idname = "OBJECT_PT_normal_tool_props" + bl_space_type = 'VIEW_3D' +# bl_region_type = 'TOOL_PROPS' + bl_region_type = 'UI' +# bl_context = "object" + bl_category = "Kitfox" + + + + def draw(self, context): + layout = self.layout + + scene = context.scene + settings = scene.my_tool + + pcoll = preview_collections["main"] + + + col = layout.column(); + col.operator("kitfox.normal_tool", text="Start Normal Tool", icon_value = pcoll["normalTool"].icon_id) + + col.prop(settings, "strength") + col.prop(settings, "normal_length") + col.prop(settings, "radius") + col.prop(settings, "front_faces_only") +# col.prop(settings, "selected_only") + + row = layout.row(); + row.prop(settings, "brush_type", expand = True) + + col = layout.column(); +# context.scene.my_tool.normal = normal + brush_type = context.scene.my_tool.brush_type + + if brush_type == "FIXED": + if not context.scene.my_tool.normal_exact: + col.label(text="Normal:") + col.prop(settings, "normal", text="") + else: + col.prop(settings, "normal", expand = True) + col.prop(settings, "normal_exact") + col.operator("kitfox.nt_pick_normal", icon="EYEDROPPER") + elif brush_type == "ATTRACT" or brush_type == "REPEL": + col.prop(settings, "target") + + +#--------------------------- + +preview_collections = {} + +def register(): + + bpy.utils.register_class(NormalToolSettings) + bpy.utils.register_class(NormalPickerOperator) + bpy.utils.register_class(ModalDrawOperator) +# bpy.utils.register_class(NormalToolPanel) + bpy.utils.register_class(NormalToolPropsPanel) +# bpy.utils.register_tool(NormalToolTool) + + bpy.types.Scene.my_tool = bpy.props.PointerProperty(type=NormalToolSettings) + + #Load icons + icons_dir = os.path.join(os.path.dirname(__file__), "../../icons") + + print("icons dir: " + str(icons_dir)) + + pcoll = bpy.utils.previews.new() + pcoll.load("normalTool", os.path.join(icons_dir, "normalTool.png"), 'IMAGE') + preview_collections["main"] = pcoll + + +def unregister(): + bpy.utils.unregister_class(NormalToolSettings) + bpy.utils.unregister_class(NormalPickerOperator) + bpy.utils.unregister_class(ModalDrawOperator) +# bpy.utils.unregister_class(NormalToolPanel) + bpy.utils.unregister_class(NormalToolPropsPanel) +# bpy.utils.unregister_tool(NormalToolTool) + + del bpy.types.Scene.my_tool + + #Unload icons + for pcoll in preview_collections.values(): + bpy.utils.previews.remove(pcoll) + preview_collections.clear() + + + +if __name__ == "__main__": + register() diff --git a/source/ops/openGlTestHandler.py b/source/ops/openGlTestHandler.py new file mode 100644 index 0000000..a27bc9f --- /dev/null +++ b/source/ops/openGlTestHandler.py @@ -0,0 +1,279 @@ +import bpy +import bgl +import blf + +import math + + +# I am using the driver namespace as a quick method of global persistent storage. +namespace = bpy.app.driver_namespace + + +def scribble(text, x, y, px=12, pivot=(0.5, 0.0), rotation=0.0): + blf.enable(0, blf.ROTATION) + + blf.size(0, px, 72) + + dimensions = blf.dimensions(0, text) + + sin = math.sin(rotation) + cos = math.cos(rotation) + + offset = ( + dimensions[0] * pivot[0] * cos - dimensions[1] * pivot[1] * sin, + dimensions[0] * pivot[0] * sin + dimensions[1] * pivot[1] * cos + ) + + position = (x - offset[0], y - offset[1]) + + blf.position(0, position[0], position[1], 0.0) + blf.rotation(0, rotation) + + blf.draw(0, text) + + blf.disable(0, blf.ROTATION) + + +vertex_shader_source = """ + #version 330 + + in vec3 point; + in vec4 color; + + uniform mat4 perspective; + + out VertexOut + { + vec4 color; + } vs_out; + + void main() + { + gl_Position = perspective * vec4(point, 1.0); + vs_out.color = color; + } +""" + +fragment_shader_source = """ + #version 330 + + in VertexOut + { + vec4 color; + } fs_in; + + out vec4 fragColor; + + void main() + { + fragColor = fs_in.color; + } +""" + +def draw_pixel(): + scribble("This is text in 2D space.", 100, 100) + + +def draw_view(): + + ###################### + ######## BIND ######## + ###################### + + first_time = not bgl.glIsVertexArray(namespace['vao'][0]) + + if first_time: + namespace['uniform_set'] = False + + # Unlike VBOs, a VAO has to be generated and deleted from within the draw callback in which it will be bound. + bgl.glGenVertexArrays(1, namespace['vao']) + bgl.glBindVertexArray(namespace['vao'][0]) + + float_byte_count = 4 + + # Attribute: "point", 3D float vector + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_point'][0]) + bgl.glBufferData(bgl.GL_ARRAY_BUFFER, len(namespace['data_point']) * float_byte_count, namespace['data_point'], bgl.GL_DYNAMIC_DRAW) + + bgl.glVertexAttribPointer(0, 3, bgl.GL_FLOAT, bgl.GL_FALSE, 0, None) + bgl.glEnableVertexAttribArray(0) + + # Attribute: "color", 4D float vector + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_color'][0]) + bgl.glBufferData(bgl.GL_ARRAY_BUFFER, len(namespace['data_color']) * float_byte_count, namespace['data_color'], bgl.GL_DYNAMIC_DRAW) + + bgl.glVertexAttribPointer(1, 4, bgl.GL_FLOAT, bgl.GL_FALSE, 0, None) + bgl.glEnableVertexAttribArray(1) + + bgl.glBindVertexArray(0) + + ###################### + ######## DRAW ######## + ###################### + + bgl.glEnable(bgl.GL_BLEND) + + bgl.glUseProgram(namespace['shader_program']) + + if not namespace['uniform_set']: + bgl.glUniformMatrix4fv( + namespace['perspective_uniform_location'], + 1, + bgl.GL_TRUE, # Matrices in Blender are row-major while matrices in OpenGL are column-major, so Blender's perspective matrix has to be transposed for OpenGL. + namespace['projection_matrix']) + + # In this case I only want to update the uniform once, even though namespace['projection_matrix'] is being updated constantly. + namespace['uniform_set'] = True + + bgl.glBindVertexArray(namespace['vao'][0]) + bgl.glDrawArrays(bgl.GL_TRIANGLES, 0, 3) + + bgl.glUseProgram(0) + bgl.glBindVertexArray(0) + + bgl.glDisable(bgl.GL_BLEND) + + +class WM_OT_opengl_test(bpy.types.Operator): + """To use this operator, run this script and type "OpenGL Test" into Blender's search menu.""" + + bl_label = "OpenGL Test" + bl_idname = 'wm.opengl_test' + bl_options = {'REGISTER'} + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + namespace['projection_matrix'] = bgl.Buffer(bgl.GL_FLOAT, (4, 4)) + + namespace['points'] = ( + -0.5, -0.5, 0.0, + 0.5, -0.5, 0.0, + 0.0, 0.5, 0.0 + ) + + namespace['colors'] = ( + 0.0, 1.0, 0.0, 0.5, + 1.0, 1.0, 0.0, 0.5, + 1.0, 0.0, 1.0, 0.5 + ) + + namespace['data_point'] = bgl.Buffer(bgl.GL_FLOAT, len(namespace['points']), namespace['points']) + namespace['data_color'] = bgl.Buffer(bgl.GL_FLOAT, len(namespace['colors']), namespace['colors']) + + namespace['vertex_shader_info'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['fragment_shader_info'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['shader_program_info'] = bgl.Buffer(bgl.GL_INT, 1) + + namespace['vao'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['vbo_point'] = bgl.Buffer(bgl.GL_INT, 1) + namespace['vbo_color'] = bgl.Buffer(bgl.GL_INT, 1) + + bgl.glGenBuffers(1, namespace['vbo_point']) + bgl.glGenBuffers(1, namespace['vbo_color']) + + # Shaders + namespace['shader_program'] = bgl.glCreateProgram() + + namespace['vertex_shader'] = bgl.glCreateShader(bgl.GL_VERTEX_SHADER) + namespace['fragment_shader'] = bgl.glCreateShader(bgl.GL_FRAGMENT_SHADER) + + bgl.glShaderSource(namespace['vertex_shader'], vertex_shader_source) + bgl.glShaderSource(namespace['fragment_shader'], fragment_shader_source) + + bgl.glCompileShader(namespace['vertex_shader']) + bgl.glCompileShader(namespace['fragment_shader']) + + bgl.glGetShaderiv(namespace['vertex_shader'], bgl.GL_COMPILE_STATUS, namespace['vertex_shader_info']) + bgl.glGetShaderiv(namespace['fragment_shader'], bgl.GL_COMPILE_STATUS, namespace['fragment_shader_info']) + + if namespace['vertex_shader_info'][0] == bgl.GL_TRUE: + print("Vertex shader compiled successfully.") + elif namespace['vertex_shader_info'][0] == bgl.GL_FALSE: + print("Vertex shader failed to compile.") + + if namespace['fragment_shader_info'][0] == bgl.GL_TRUE: + print("Fragment shader compiled successfully.") + elif namespace['fragment_shader_info'][0] == bgl.GL_FALSE: + print("Fragment shader failed to compile.") + + bgl.glAttachShader(namespace['shader_program'], namespace['vertex_shader']) + bgl.glAttachShader(namespace['shader_program'], namespace['fragment_shader']) + + bgl.glLinkProgram(namespace['shader_program']) + + bgl.glGetProgramiv(namespace['shader_program'], bgl.GL_LINK_STATUS, namespace['shader_program_info']) + + if namespace['shader_program_info'][0] == bgl.GL_TRUE: + print("Shader program linked successfully.") + elif namespace['shader_program_info'][0] == bgl.GL_FALSE: + print("Shader program failed to link.") + + # glGetUniformLocation can only be used after the shader program is linked, as stated in the OpenGL Specification. + namespace['perspective_uniform_location'] = bgl.glGetUniformLocation(namespace['shader_program'], "perspective") + + bgl.glValidateProgram(namespace['shader_program']) + + bgl.glGetProgramiv(namespace['shader_program'], bgl.GL_VALIDATE_STATUS, namespace['shader_program_info']) + + if namespace['shader_program_info'][0] == bgl.GL_TRUE: + print("Shader program validated successfully.") + elif namespace['shader_program_info'][0] == bgl.GL_FALSE: + print("Shader program failed to validate.") + + draw_handler_add() + + namespace['timer'] = context.window_manager.event_timer_add(time_step=0.01, window=context.window) + namespace['data_timer'] = bgl.Buffer(bgl.GL_FLOAT, 2, [math.sin(namespace['timer'].time_duration), math.sin(namespace['timer'].time_duration) * 2]) + + context.window_manager.modal_handler_add(self) + + return {'RUNNING_MODAL'} + + def modal(self, context, event): + if not context.area or not context.region: + return {'PASS_THROUGH'} + + namespace['data_timer'][0] = math.sin(namespace['timer'].time_duration) + namespace['data_timer'][1] = math.sin(namespace['timer'].time_duration) * 2 + + bgl.glBindBuffer(bgl.GL_ARRAY_BUFFER, namespace['vbo_point'][0]) + + # Inserts data from the timer into the Y and Z coordinates of the 3rd vertex, starting at index 7, its Y coordinate. + index = 7 + float_byte_count = 4 + insertion_size = float_byte_count * 2 # 2 floats are being edited right now: Y position and Z position. + bgl.glBufferSubData(bgl.GL_ARRAY_BUFFER, index * float_byte_count, insertion_size, namespace['data_timer']) + + if event.type == 'ESC' and event.value == 'PRESS': + context.area.tag_redraw() + context.window_manager.event_timer_remove(namespace['timer']) + draw_handler_remove() + + return {'FINISHED'} + + namespace['projection_matrix'][:] = context.region_data.perspective_matrix + + context.area.tag_redraw() + + return {'RUNNING_MODAL'} + + +def draw_handler_add(): + namespace['OPENGL_TEST_HANDLER_2D'] = bpy.types.SpaceView3D.draw_handler_add(draw_pixel, (), 'WINDOW', 'POST_PIXEL') + namespace['OPENGL_TEST_HANDLER_3D'] = bpy.types.SpaceView3D.draw_handler_add(draw_view, (), 'WINDOW', 'POST_VIEW') + + +def draw_handler_remove(): + if namespace.get('OPENGL_TEST_HANDLER_2D') is not None: + bpy.types.SpaceView3D.draw_handler_remove(namespace['OPENGL_TEST_HANDLER_2D'], 'WINDOW') + namespace['OPENGL_TEST_HANDLER_2D'] = None + + if namespace.get('OPENGL_TEST_HANDLER_3D') is not None: + bpy.types.SpaceView3D.draw_handler_remove(namespace['OPENGL_TEST_HANDLER_3D'], 'WINDOW') + namespace['OPENGL_TEST_HANDLER_3D'] = None + + +bpy.utils.register_class(WM_OT_opengl_test) \ No newline at end of file diff --git a/test/scriptTest.blend b/test/scriptTest.blend index 9f0a59b3c4e40a65d5e88e1fd821cbb3924725ba..33d88eac789375dcdab123b7abc009658fe1b187 100644 GIT binary patch delta 203016 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⊥lABQI^TUv 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 QIXR16pe~DDaBa^20jN@?j{pDw delta 195176 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

8SE@mrbCPb9Rs@Ak_Meex%o~< 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%0D{EA35c6sOS2;__d-r;tpKiG@2Vav?e3KW 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