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

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

系列文章

  1. SketchUp 替代
  2. 下载DeepDraw
  3. 用代码绘制线段
  4. 用代码绘制面
  5. 创建选择工具(本文)
  6. 创建画线工具
  7. 创建矩形工具
  8. 创建删除工具

介绍

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

创建SelectTool

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

python 复制代码
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个线段和一个面),然后用鼠标选择面,终端里显示:

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

可以看到,通过点选不同的位置,可以选择对应的CEdge或者CFace

相关推荐
2601_9669496511 分钟前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
在世修行4 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885725 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI5 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
信誓旦旦的程序猿6 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫6 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
KeepRobots8 小时前
11-01 温哥华不回拨:用 60 行 Python 查你的工单系统会不会差一小时(KeepRobots 工程笔记)
python
xiao77mwq8 小时前
你以为 OCR 慢?实测 81.3 s 里全是故障代价:如何把「定格态」消掉,让耗时从 6.5 s 到 13 倍差距显出原形
python
深圳市益普科技有限公司8 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法
“AI国潮设计-小江”8 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc