コード例 #1
0
ファイル: bgl_utils.py プロジェクト: henrystewart/odc_public
def general_func_callback(self,context):
    aspect, mid = menu_utils.view3d_get_size_and_mid(context)
        # draw some text
    blf.position(0, mid[0], mid[1]+100, 0)
    blf.size(0, 20, 72)
    blf.draw(0, self.message)
    menu_utils.blf_text_wrap(self.help, self.wrap, 0, 12 , 76, 10, aspect[1]-30)
コード例 #2
0
def general_func_callback(self,context):
    aspect, mid = menu_utils.view3d_get_size_and_mid(context)
        # draw some text
    blf.position(0, mid[0], mid[1]+100, 0)
    blf.size(0, 20, 72)
    blf.draw(0, self.message)
    menu_utils.blf_text_wrap(self.help, self.wrap, 0, 12 , 76, 10, aspect[1]-30)
コード例 #3
0
    def invoke(self, context, event):
        settings = get_settings()
        dbg = settings.debug

        if context.space_data.region_3d.is_perspective:
            #context.space_data.region_3d.is_perspective = False
            bpy.ops.view3d.view_persportho()

        if context.space_data.type != 'VIEW_3D':
            self.report({'WARNING'}, "Active space must be a View3d")
            return {'CANCELLED'}

        #gather all the teeth in the scene TODO, keep better track

        self.target = 11
        self.message = "Set axis for " + str(self.target)

        if context.mode != 'OBJECT':
            bpy.ops.object.mode_set(mode='OBJECT')

        #check for an armature
        bpy.ops.object.select_all(action='DESELECT')

        help_txt = "Left click on the tooth indicated to label it. Right click skip a tooth \n Up or Dn Arrow to change label\n Enter to finish \n ESC to cancel"
        self.help_box = TextBox(context, 500, 500, 300, 200, 10, 20, help_txt)
        self.help_box.fit_box_width_to_text_lines()
        self.help_box.fit_box_height_to_text_lines()
        self.help_box.snap_to_corner(context, corner=[1, 1])

        aspect, mid = menu_utils.view3d_get_size_and_mid(context)
        self.target_box = TextBox(context, mid[0], aspect[1] - 20, 300, 200,
                                  10, 20, self.message)
        self.target_box.format_and_wrap_text()
        self.target_box.fit_box_width_to_text_lines()
        self.target_box.fit_box_height_to_text_lines()

        self.mode = 'main'
        context.window_manager.modal_handler_add(self)
        self._handle = bpy.types.SpaceView3D.draw_handler_add(
            rapid_label_teeth_callback, (self, context), 'WINDOW',
            'POST_PIXEL')
        return {'RUNNING_MODAL'}
コード例 #4
0
ファイル: bgl_utils.py プロジェクト: henrystewart/odc_public
def insertion_axis_callback(self,context):
    aspect, mid = menu_utils.view3d_get_size_and_mid(context)
    
    #place 50 pixel arrow at right edge
    path1 = menu_utils.transform_points(button_data.arrow_right, aspect[0]-20,mid[1],50,100,0)
    path2 = menu_utils.transform_points(button_data.arrow_left, 20,mid[1],50,100,0)
    
    bgl.glColor4f(*(1,1,1,1))
    menu_utils.draw_outline_or_region(bgl.GL_LINE_LOOP, path1)
    menu_utils.draw_outline_or_region(bgl.GL_LINE_LOOP, path2)
    
    #put words in the arrows
    blf.size(0,20,76)
    dimension = blf.dimensions(0,"Mesial")
    blf.position(0,aspect[0]-70-dimension[0]/2,mid[1]-dimension[1]/2,0)
    blf.draw(0,"Mesial")
    
    dimension = blf.dimensions(0,"Distal")
    blf.position(0,70-dimension[0]/2,mid[1]-dimension[1]/2,0)
    blf.draw(0,"Distal")
コード例 #5
0
def insertion_axis_callback(self,context):
    aspect, mid = menu_utils.view3d_get_size_and_mid(context)
    
    #place 50 pixel arrow at right edge
    path1 = menu_utils.transform_points(button_data.arrow_right, aspect[0]-20,mid[1],50,100,0)
    path2 = menu_utils.transform_points(button_data.arrow_left, 20,mid[1],50,100,0)
    
    bgl.glColor4f(*(1,1,1,1))
    menu_utils.draw_outline_or_region(bgl.GL_LINE_LOOP, path1)
    menu_utils.draw_outline_or_region(bgl.GL_LINE_LOOP, path2)
    
    #put words in the arrows
    blf.size(0,20,76)
    dimension = blf.dimensions(0,"Mesial")
    blf.position(0,aspect[0]-70-dimension[0]/2,mid[1]-dimension[1]/2,0)
    blf.draw(0,"Mesial")
    
    dimension = blf.dimensions(0,"Distal")
    blf.position(0,70-dimension[0]/2,mid[1]-dimension[1]/2,0)
    blf.draw(0,"Distal")
コード例 #6
0
    def invoke(self, context, event):
        settings = get_settings()
        dbg = settings.debug

        if context.space_data.region_3d.is_perspective:
            #context.space_data.region_3d.is_perspective = False
            bpy.ops.view3d.view_persportho()

        if context.space_data.type != 'VIEW_3D':
            self.report({'WARNING'}, "Active space must be a View3d")
            return {'CANCELLED'}

        #gather all the teeth in the scene TODO, keep better track
        self.units = []

        for i in TOOTH_NUMBERS:
            ob = context.scene.objects.get(str(i))
            if ob != None and not ob.hide:
                self.units.append(ob)

        if not len(self.units):
            self.report({
                'ERROR'
            }, "There are no teeth in the scene!, Teeth must be named 2 digits eg 11 or 46"
                        )
            return {'CANCELLED'}

        self.target = self.units[0]
        self.message = "Set axis for %s" % self.target.name

        #check for an armature
        bpy.ops.object.select_all(action='DESELECT')
        if context.mode != 'OBJECT':
            bpy.ops.object.mode_set(mode='OBJECT')

        if context.scene.objects.get('Roots'):
            root_arm = context.scene.objects.get('Roots')
            root_arm.select = True
            root_arm.hide = False
            context.scene.objects.active = root_arm
            bpy.ops.object.mode_set(mode='EDIT')

            for ob in self.units:
                if ob.name + 'root' not in root_arm.data.bones:
                    bpy.ops.armature.bone_primitive_add(name=ob.name + 'root')

        else:
            root_data = bpy.data.armatures.new('Roots')
            root_arm = bpy.data.objects.new('Roots', root_data)
            context.scene.objects.link(root_arm)

            root_arm.select = True
            context.scene.objects.active = root_arm
            bpy.ops.object.mode_set(mode='EDIT')

            for ob in self.units:
                bpy.ops.armature.bone_primitive_add(name=ob.name + 'root')

        bpy.ops.object.mode_set(mode='OBJECT')
        root_arm.select = False
        self.units[0].select = True

        help_txt = "Right click to select a tooth \n Align View with root, mes and distal\n Up Arrow and Dn Arrow to select different units \n Left click in middle of prep to set axis \n Enter to finish \n ESC to cancel"
        self.help_box = TextBox(context, 500, 500, 300, 200, 10, 20, help_txt)
        self.help_box.fit_box_width_to_text_lines()
        self.help_box.fit_box_height_to_text_lines()
        self.help_box.snap_to_corner(context, corner=[1, 1])

        aspect, mid = menu_utils.view3d_get_size_and_mid(context)
        self.target_box = TextBox(context, mid[0], aspect[1] - 20, 300, 200,
                                  10, 20, self.message)
        self.target_box.format_and_wrap_text()
        self.target_box.fit_box_width_to_text_lines()
        self.target_box.fit_box_height_to_text_lines()

        self.mode = 'main'
        context.window_manager.modal_handler_add(self)
        self._handle = bpy.types.SpaceView3D.draw_handler_add(
            insertion_axis_draw_callback, (self, context), 'WINDOW',
            'POST_PIXEL')
        return {'RUNNING_MODAL'}