用 DeepDraw 几何引擎开发建筑设计软件(五):创建选择工具
系列文章
- SketchUp 替代
- 下载DeepDraw
- 用代码绘制线段
- 用代码绘制面
- 创建选择工具(本文)
- 创建画线工具
- 创建矩形工具
- 创建删除工具
介绍
这一节开始介绍选择工具,引擎里提供了拾取对象的工具类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