2012年6月28日木曜日

blender - 2.6 - pythonで3DViewにお絵かきin3Dその2

ray_castとかいう関数があったので、その1で得たベクトルを適当に加工して突っ込んでみたところ、
少し怪しいけど、だいたいいけてる。

この調子で複数オブジェクトにも対応してみたい。

    def unproject_to_object(self, context, x, y):
        px = x - self.viewport[0]
        py = y - self.viewport[1]
        
        coord = (px, py)
        region = context.region
        region_3d = context.space_data.region_3d
        
        vec = bpy_extras.view3d_utils.region_2d_to_vector_3d(\
                region, region_3d, coord)
                
        start = bpy_extras.view3d_utils.region_2d_to_location_3d(\
                region, region_3d, coord, vec * -100)
        
        end = bpy_extras.view3d_utils.region_2d_to_location_3d(\
                region, region_3d, coord, vec * 100)
        
        if context.object != None:
            start = context.object.matrix_world.inverted() * start
            end = context.object.matrix_world.inverted() * end
            loc, nor, index = context.object.ray_cast(start, end)
            return (loc.x, loc.y, loc.z)

        return None

0 件のコメント: