Bentley Communities
Bentley Communities
  • Site
  • User
  • Site
  • Search
  • User
  • Welcome
  • Products
  • Support
  • About
  • More
  • Cancel
中国BDN社区
  • Welcome to Bentley Communities
  • Bentley's Communities
  • 中国BDN社区
  • Cancel
中国BDN社区
中国BDN社区-威客 LearnDgnTool-01_DgnTool介绍
    • Sign In
    • 中国BDN社区-威客
    • +iTwin.js编程
    • +MicroStation CONNECT版SDK的新变化
    • +MicroStation编程技巧
    • +OpenRoads中国版平台开发指南
    • +ORD SDK二次开发编程
    • +一步步学习ABD-CE开发
    • +一步步学习MicroStation CE Addin开发
    • 一步步学习MicroStation CE MDL开发
    • +一步步学习ProjectWise编程
    • 中国优先社区二次开发精华帖汇总
    • -学习Microstation交互式工具开发
      • LearnDgnTool-01_DgnTool介绍
      • LearnDgnTool-02_DgnPrimitiveTool的使用_交互式放置圆
      • LearnDgnTool-03_DgnPrimitiveTool的使用_交互式放置线串
      • LearnDgnTool-04_DgnPrimitiveTool的使用_交互式放置三棱柱
      • LearnDgnTool-05_DgnElementSetTool详解
      • LearnDgnTool-06_DgnElementSetTool的使用_修改元素颜色
      • LearnDgnTool-07_DgnElementSetTool的使用_移动元素
      • LearnDgnTool-08_ToolSetting窗口
      • LearnDgnTool-09_DgnElementSetTool经典样例
      • 求Geopak场地开挖的线条压平工具
    • +过期帖,留存仅供参考
    • +非Bentley社区分享的文章
    • C#、C/C++相关的编程知识汇总
    • C#如何实现元素关联Link Set?有做过相关需求的老师指教一下吗

     
     Questions about this article, topic, or product? Click here. 

    LearnDgnTool-01_DgnTool介绍

    MicroStation(以下简称Mstn)中超过一半的功能都是以交互式工具的形式而存在的,可见在Mstn的二次开发中交互式工具的开发是多么的重要。以前的SDK中,我们使用mdlState_XXX系列函数通过设置对应的事件处理回调函数来实现交互式工具。当我们的鼠标或键盘在视图中产生交互操作时,不同的动作会调用不同的回调函数。这种方式是“面向过程”编程思想的产物,在“面向对象”的编程思想下,SDK封装了DgnTool、DgnPrimitiveTool、DgnElementSetTool等类(Class)来供编程人员使用。我们只要从相应的类派生一个我们自己的类,根据交互式工具的不同功能,重写一些基类的成员函数很容易就能实现我们的交互式工具。这种方式下我们的事件处理函数就变成类的成员函数了。有关“面向过程”和“面向对象”之间的优缺点这里不再一一赘述,读者可自行上网搜索。本文主要以DgnElementSetTool为重点,讲解DgnTool相关类的用法。

    上图是我们从MicroStationAPI.chm中截取的DgnElementSetTool在整个DgnTool工具类中的层次关系。我们可以看到DgnTool是所有工具类最顶层的基类,它定义了交互式工具使用过程中大部分的鼠标和键盘相关的事件处理函数。从SDK的头文件中我们可以查到这些函数都被定义为了虚函数,这样我们从DgnTool直接或间接派生了我们自己的类,重写了某一事件对应的虚函数时,如果对应事件被触发,系统后台会通过DgnTool的指针调用我们重写的虚函数。例如如果我们重写了_OnDataButton函数的话,当我们在视图中单击鼠标左键时,重写的这个_OnDataButton函数就会被调用。除了单击鼠标左键事件以外,还有单击鼠标右键、Ctrl/Shift/Alt键按下等事件,甚至当我们的鼠标在视图中移动以及停止移动时都会触发一个事件,这些事件都对应有相关的事件处理函数。我们的交互式工具就是在这些事件处理函数中根据用户输入的信息,而完成各种复杂的交互功能。DgnTool中常用的事件相关的成员虚函数如下表所示:

    _OnDataButton

    视图中单击鼠标左键触发

    _OnResetButton

    视图中单击鼠标右键触发

    _OnModelMotion

    鼠标在视图中移动时触发

    _OnModelNoMotion

    鼠标在视图中停留一定时间后触发

    _OnModelMotionStopped

    鼠标在视图中停止移动时触发

    _OnModelStartDrag

    视图中开始拖拽时触发

    _OnModelEndDrag

    视图中停止拖拽时触发

    _OnModifierKeyTransition

    按下Control、Shift或Alt时触发

    _OnUndoPreviousStep

    启用撤销后按下“Ctrl+Z”时触发

    有用户在讨论DgnTool的工作原理。请参考如下帖子:

    为什么我的dgnElementSetTool对象在调用了InstallTool方法后并没有暂停程序等待选择元素呢?

    • MDL
    • msce
    • Share
    • History
    • More
    • Cancel
    • HongQiang Guo Created by Bentley Colleague HongQiang Guo
    • When: Mon, Sep 23 2019 10:29 PM
    • Yongan.Fu Last revision by Bentley Colleague Yongan.Fu
    • When: Sat, May 28 2022 6:00 AM
    • Revisions: 6
    • Comments: 0
    Recommended
    Related
    Communities
    • Home
    • Getting Started
    • Community Central
    • Products
    • Support
    • Secure File Upload
    • Feedback
    Support and Services
    • Home
    • Product Support
    • Downloads
    • Subscription Services Portal
    Training and Learning
    • Home
    • About Bentley Institute
    • My Learning History
    • Reference Books
    Social Media
    •    LinkedIn
    •    Facebook
    •    Twitter
    •    YouTube
    •    RSS Feed
    •    Email

    © 2023 Bentley Systems, Incorporated  |  Contact Us  |  Privacy |  Terms of Use  |  Cookies