用 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

相关推荐
Metaphor6921 小时前
使用 Python 设置 Excel 行列自适应 【代码示例】
python·excel
花酒锄作田10 小时前
FastAPI 使用 session 认证
python·fastapi
lsswear10 小时前
Python 并发 线程
开发语言·python
Ivanqhz10 小时前
MLIR OpBuilder
开发语言·python·mlir
威联通安全存储12 小时前
TS-h2287XU-RP 在家电制造总装与质检数据场景的部署
python·制造
泡泡鱼(敲代码中)13 小时前
Python 字符串 str 完整学习笔记
python·学习
troy12813 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
微财经观圈13 小时前
AI 3D生成工具重拓扑后怎样检查UV、法线和材质是否正常?
人工智能·3d·重拓扑
我不会起名字32213 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣