[Bf-extensions-cvs] [0c494907] blender2.8: MeasureIt: More conversion of APIs (WIP)

Antonioya noreply at git.blender.org
Wed Dec 5 19:50:12 CET 2018


Commit: 0c494907cf799747fcd33171d1532839001dd729
Author: Antonioya
Date:   Wed Dec 5 19:49:59 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBA0c494907cf799747fcd33171d1532839001dd729

MeasureIt: More conversion of APIs (WIP)

Still the render is not working. The idea is replace the old system generating a image with alpha background and only the measures.

===================================================================

M	measureit/__init__.py
M	measureit/measureit_main.py
M	measureit/measureit_render.py

===================================================================

diff --git a/measureit/__init__.py b/measureit/__init__.py
index fc5252a3..2d248d9c 100644
--- a/measureit/__init__.py
+++ b/measureit/__init__.py
@@ -250,11 +250,8 @@ def register():
                                           description="Save an image with measures over"
                                                       " render image",
                                           default=False)
-    Scene.measureit_render_type = EnumProperty(items=(('1', "*Current", "Use current render"),
-                                                      ('2', "OpenGL", ""),
-                                                      ('3', "Animation OpenGL", ""),
-                                                      ('4', "Image", ""),
-                                                      ('5', "Animation", "")),
+    Scene.measureit_render_type = EnumProperty(items=(('1', "Frame", "Render current frame"),
+                                                      ('2', "Animation", "")),
                                                name="Render type",
                                                description="Type of render image")
     Scene.measureit_sum = EnumProperty(items=(('99', "-", "Select a group for sum"),
diff --git a/measureit/measureit_main.py b/measureit/measureit_main.py
index 82f269ac..aa5ded6d 100644
--- a/measureit/measureit_main.py
+++ b/measureit/measureit_main.py
@@ -1740,75 +1740,22 @@ class MEASUREIT_OT_RenderSegment(Operator):
             self.report({'ERROR'}, camera_msg)
             return {'FINISHED'}
         # -----------------------------
-        # Use default render
+        # Frame render
         # -----------------------------
         if scene.measureit_render_type == "1":
             # noinspection PyBroadException
-            try:
-                result = bpy.data.images['Render Result']
-                bpy.ops.render.render()
-            except:
-                bpy.ops.render.render()
-            print("MeasureIt: Using current render image on buffer")
             if render_main(self, context) is True:
                 self.report({'INFO'}, msg)
-
-        # -----------------------------
-        # OpenGL image
-        # -----------------------------
-        if scene.measureit_render_type == "2":
-            self.set_camera_view()
-            self.set_only_render(True)
-
-            print("MeasureIt: Rendering opengl image")
-            bpy.ops.render.opengl()
-            if render_main(self, context) is True:
-                self.report({'INFO'}, msg)
-
-            self.set_only_render(False)
-
-        # -----------------------------
-        # OpenGL Animation
-        # -----------------------------
-        if scene.measureit_render_type == "3":
-            oldframe = scene.frame_current
-            self.set_camera_view()
-            self.set_only_render(True)
-            flag = False
-            # loop frames
-            for frm in range(scene.frame_start, scene.frame_end + 1):
-                scene.frame_set(frm)
-                print("MeasureIt: Rendering opengl frame %04d" % frm)
-                bpy.ops.render.opengl()
-                flag = render_main(self, context, True)
-                if flag is False:
-                    break
-
-            self.set_only_render(False)
-            scene.frame_current = oldframe
-            if flag is True:
-                self.report({'INFO'}, msg)
-
-        # -----------------------------
-        # Image
-        # -----------------------------
-        if scene.measureit_render_type == "4":
-            print("MeasureIt: Rendering image")
-            bpy.ops.render.render()
-            if render_main(self, context) is True:
-                self.report({'INFO'}, msg)
-
         # -----------------------------
         # Animation
         # -----------------------------
-        if scene.measureit_render_type == "5":
+        if scene.measureit_render_type == "2":
             oldframe = scene.frame_current
             flag = False
             # loop frames
             for frm in range(scene.frame_start, scene.frame_end + 1):
                 scene.frame_set(frm)
                 print("MeasureIt: Rendering frame %04d" % frm)
-                bpy.ops.render.render()
                 flag = render_main(self, context, True)
                 if flag is False:
                     break
diff --git a/measureit/measureit_render.py b/measureit/measureit_render.py
index 491c0071..212d12be 100644
--- a/measureit/measureit_render.py
+++ b/measureit/measureit_render.py
@@ -25,7 +25,7 @@
 # ----------------------------------------------------------
 # noinspection PyUnresolvedReferences
 import bpy
-# noinspection PyUnresolvedReferences
+import gpu
 import bgl
 # noinspection PyUnresolvedReferences
 import blf
@@ -46,216 +46,108 @@ from .measureit_geometry import *
 #
 # -------------------------------------------------------------
 def render_main(self, context, animation=False):
-    # noinspection PyBroadException,PyBroadException
     # Save old info
     settings = bpy.context.scene.render.image_settings
     depth = settings.color_depth
     settings.color_depth = '8'
-    # noinspection PyBroadException
-    try:
-        scene = context.scene
-        # Get object list
-        objlist = context.scene.objects
-        # --------------------
-        # Get resolution
-        # --------------------
-        scene = bpy.context.scene
-        render_scale = scene.render.resolution_percentage / 100
 
-        width = int(scene.render.resolution_x * render_scale)
-        height = int(scene.render.resolution_y * render_scale)
-        # ---------------------------------------
-        # Get output path
-        # ---------------------------------------
-        temp_path = path.realpath(bpy.app.tempdir)
-        if len(temp_path) > 0:
-            outpath = path.join(temp_path, "measureit_tmp_render.png")
-        else:
-            self.report({'ERROR'},
-                        "MeasureIt: Unable to save temporary render image. Define a valid temp path")
-            settings.color_depth = depth
-            return False
-
-        # Get Render Image
-        img = get_render_image(outpath)
-        if img is None:
-            self.report({'ERROR'},
-                        "MeasureIt: Unable to save temporary render image. Define a valid temp path")
-            settings.color_depth = depth
-            return False
+    # Get object list
+    scene = context.scene
+    objlist = context.scene.objects
+    # --------------------
+    # Get resolution
+    # --------------------
+    render_scale = scene.render.resolution_percentage / 100
+    width = int(scene.render.resolution_x * render_scale)
+    height = int(scene.render.resolution_y * render_scale)
+
+    # --------------------------------------
+    # Loop to draw all lines in Offsecreen
+    # --------------------------------------
+    offscreen = gpu.types.GPUOffScreen(width, height)
+    view_matrix = scene.camera.matrix_world.inverted()
+    projection_matrix = scene.camera.calc_matrix_camera(context.depsgraph, x=width, y=height)
+
+    with offscreen.bind():
+        bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
+        gpu.matrix.reset()
+        gpu.matrix.load_matrix(view_matrix)
+        gpu.matrix.load_projection_matrix(projection_matrix)
 
         # -----------------------------
-        # Calculate rows and columns
+        # Loop to draw all objects
         # -----------------------------
-        tile_x = 240
-        tile_y = 216
-        row_num = ceil(height / tile_y)
-        col_num = ceil(width / tile_x)
-        print("MeasureIt: Image divided in " + str(row_num) + "x" + str(col_num) + " tiles")
-
-        # pixels out of visible area
-        cut4 = (col_num * tile_x * 4) - width * 4  # pixels aout of drawing area
-        totpixel4 = width * height * 4  # total pixels RGBA
-        viewport_info = bgl.Buffer(bgl.GL_INT, 4)
-        bgl.glGetIntegerv(bgl.GL_VIEWPORT, viewport_info)
-
-        # Load image on memory
-        img.gl_load(frame=0, filter=bgl.GL_NEAREST, mag=bgl.GL_NEAREST)
-        tex = img.bindcode
-
-        # --------------------------------------------
-        # Create output image (to apply texture)
-        # --------------------------------------------
-        if "measureit_output" in bpy.data.images:
-            out_img = bpy.data.images["measureit_output"]
-            if out_img is not None:
-                bpy.data.images.remove(out_img)
-
-        out = bpy.data.images.new("measureit_output", width, height)
-        tmp_pixels = [1] * totpixel4
-
-        # --------------------------------
-        # Loop for all tiles
-        # --------------------------------
-        for row in range(row_num):
-            for col in range(col_num):
-                buffer = bgl.Buffer(bgl.GL_FLOAT, width * height * 4)
-                bgl.glDisable(bgl.GL_SCISSOR_TEST)  # if remove this line, get blender screenshot not image
-                bgl.glViewport(0, 0, tile_x, tile_y)
-
-                bgl.glMatrixMode(bgl.GL_PROJECTION)
-                gpu.matrix.load_identity()
-
-                # defines ortographic view for single tile
-                x1 = tile_x * col
-                y1 = tile_y * row
-                bgl.gluOrtho2D(x1, x1 + tile_x, y1, y1 + tile_y)
-
-                # Clear
-                bgl.glClearColor(0.0, 0.0, 0.0, 0.0)
-                bgl.glClear(bgl.GL_COLOR_BUFFER_BIT | bgl.GL_DEPTH_BUFFER_BIT)
-
-                bgl.glEnable(bgl.GL_TEXTURE_2D)
-                bgl.glBindTexture(bgl.GL_TEXTURE_2D, tex)
-
-                # defines drawing area
-                bgl.glBegin(bgl.GL_QUADS)
-
-                bgl.glColor3f(1.0, 1.0, 1.0)
-                bgl.glTexCoord2f(0.0, 0.0)
-                bgl.glVertex2f(0.0, 0.0)
-
-                bgl.glTexCoord2f(1.0, 0.0)
-                bgl.glVertex2f(width, 0.0)
-
-                bgl.glTexCoord2f(1.0, 1.0)
-                bgl.glVertex2f(width, height)
-
-                bgl.glTexCoord2f(0.0, 1.0)
-                bgl.glVertex2f(0.0, height)
-
-                bgl.glEnd()
-
-                # -----------------------------
-                # Loop to draw all

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list