云计算百科
云计算领域专业知识百科平台

用 DeepDraw 几何引擎开发建筑设计软件(五):创建选择工具

用 DeepDraw 几何引擎开发建筑设计软件(五):创建选择工具

系列文章

  • SketchUp 替代
  • 下载DeepDraw
  • 用代码绘制线段
  • 用代码绘制面
  • [创建选择工具](本文)
  • 读取模型文件
  • 待续…
  • 介绍

    这一节开始介绍选择工具,引擎里提供了拾取对象的工具类CPickHelper,通过鼠标点击屏幕上的坐标,这个类遍历场景中的全部对象,包括组件中,返回一个列表,包含了所有左边点周围(9×9)像素内所有碰到的对象,并且通过面遮挡,排序等方式,得到最佳的拾取对象(BestPick)

    创建SelectTool

    直接上源代码,这是最简单的一个工具类,目的是演示,如何使用CPickHelper

    import core

    class SelectTool(core.IBaseTool):
    def __init__(self, view):
    super().__init__(view.view_proxy)
    self.view = view
    self.activate()

    def activate(self):
    self.pick_helper = core.CPickHelper(self.view.view_proxy)

    def draw(self, gl):
    pass

    def draw_2d(self, painter):
    pass

    def on_left_button_down(self, pos, mod):
    self.pos_x = pos.x()
    self.pos_y = pos.y()

    picker = self.pick_helper
    picker.Reset()

    picker.SinglePick(self.pos_x, self.pos_y, 9, None)

    best = picker.BestPick()

    print("select:")
    if best:
    print(best.e)

    def on_left_button_up(self, pos):
    pass

    def on_mouse_move(self, pos, modifiers):
    pass

    运行结果

    运行后,创建一个矩形,这相当于给场景添加了5个对象(4个线段和一个面),然后用鼠标选择面,可以看到,点选面,终端显示的select是CFace,点选线,显示CEdge,当同时选中时,CEdge的优先级要高于CFace

    [python3.8]
    >>> select:
    <editor2.CEdge object at 0x0000028B018491F0>
    select:
    <editor2.CFace object at 0x0000028B01892130>
    select:
    <editor2.CEdge object at 0x0000028B0181C030>

    高亮选中效果

    现在已经可以知道CPickHelper返回的是什么了,那么把选中的高亮显示,基本的选择工具就有,其实只要使用SetSelection和ClearSelection,引擎的渲染模块,就会自动显示高亮效果

    def on_left_button_down(self, pos, mod):
    self.pos_x = pos.x()
    self.pos_y = pos.y()

    model = core.active_model()

    picker = self.pick_helper
    picker.Reset()

    picker.SinglePick(self.pos_x, self.pos_y, 9, None)

    best = picker.BestPick()

    print("select:")
    if best:
    print(best.e)
    model.SetSelection([best.e])
    else:
    model.ClearSelection()

    运行起来,交互效果非常好 在这里插入图片描述

    再测试细节更丰富的模型

    这里导入个复杂点的模型,要用到下一节讲到的读取dim文件,其实只要在程序初始化的时候加入一小段:

    model = core.CModel()
    binfile.load_sketchup_model(model, "test3_triangle.dim")
    model.Activate()
    core.set_active_model(model)

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 用 DeepDraw 几何引擎开发建筑设计软件(五):创建选择工具
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!