from bdx_work_shop.canvas import Canvas

class Artist(Canvas):
    def __init__(self, canvas: Canvas, x=None, y=None, z=None):
        '''
            Artist 的目的是将复杂而高级的操作从 canvas 抽离出来,
            避免 canvas 的成员函数过于复杂
            并允许用户自行定义复杂的操作
            可以看到Artist关联的canvas有两个，一个是目标工作区的，一个是自己的
            Artist 可以使用也可以不使用自己的画布
            但是，无论如何，都不应该修改工作区 canvas 的坐标
        '''
        super().__init__()
        self.target_canvas = canvas
        self.target_xyz = {'ox': x, 'oy': y, 'oz': z}

    def draw_cubic(self, block_name='air', block_val=0,
                   x=None, y=None, z=None,
                   ex=None, ey=None, ez=None):
        '''一个示例功能，此时是绘制在自己管理的canvas中'''
        self.fill(block_name, block_val, x, y, z, ex, ey, ez)
        return self

    def to_canvas(self):
        '''
        Artist 类应该提供一个 to_canvas 函数作为收尾
        这个函数用于使所有的操作实质性生效
        例如，将自己管理的canvas内容复制到目标canvas中
        '''
        self_host_ir = self.done()
        self.target_canvas.load_ir(self_host_ir, merge=True, **self.target_xyz)
        return self
