用 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

相关推荐
M--Y5 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
岁月宁静5 小时前
DeepSeek Harness 实战与架构解析:让 Agent 从“会聊”到“能交付”
人工智能·python·agent
LiaoWL1235 小时前
NumPy 入门实战(二):向量化与余弦相似度——从 ndarray 到 Embedding
python·numpy·embedding
forest_096 小时前
多 Agent 协作第二课:交叉验证≠独立验证
人工智能·python·算法·机器学习·prompt·agi
databook9 小时前
时间序列数据,先拆规律还是先查异常
python·数据挖掘·数据分析
Solange__9 小时前
Blender 3D模型优化:普通复制、共享网格、实例、合并怎么选?
人工智能·3d·ai·自然语言处理·编辑器·blender·材质
师夷长技以自愈10 小时前
手搓 AI Agent 第 8 篇:从手写循环到画流程图——LangGraph 封装
人工智能·python
aifannihao11 小时前
Rust 1.100 的 DropGuard:用 Python 实测失败回滚与吞异常
python·rust·异常处理·标准库·contextlib
用户0190275816112 小时前
天勤 tqsdk 能做 A 股行情吗?期货强项与股票数据选型
python
2601_9679791214 小时前
pip在Python中的9个必须知道的用法
python·pip·版本控制·包管理工具·requirements.txt