一.背景:

做过CAM的人都用过Geneiss软件,由于处理资料强大,目前奥宝公司出品的Genesis占领整个PCB行业,整个行业无人不知呀,

而此软件有一个吐槽点Genesis 无滚轮缩放与TGZ拖放功,而用过其它图形编辑(CAD,3DMAX,Photoshop,UG)软件,鼠标对图形的操作

是非常的灵活的,确实没有对比就没有伤害,而奥宝这么多年来Genesis升级了N次也没有加入此功能。

正是如此,不得不自行开发此插件功能.

<鼠标滚轮缩放>此作品是2014年写使用易语言写的,但有一些坑没完善,直到今天把一些坑填上了,才有了今天的博客,呵呵。

原本是打算用C#重构,但时间精历有限,还是在原来代码的基础上打磨打磨吧。

二.实现基本原理

1.鼠标滚轮缩放

解答:1.注册WIN API 安装全局勾子,监控鼠标,监控键盘.

鼠标监控内容:中键滚动,中键按下,

键盘监控内容:Shift键按下,Ctrl键按下

2.在鼠标监控事件中,取鼠标所在窗口的标题

3.当窗口为标题为Graphic Editor并同时鼠标中键滚动时

4.执行zoom_to_cursor,zoom_to_cursor=yes命令,

5. 接着模拟按键PageUp键或PageDown键

2.鼠标平移

解答:1.注册WIN API 安装全局勾子,监控鼠标,监控键盘.

鼠标监控内容:中键滚动,中键按下,

键盘监控内容:Shift键按下,Ctrl键按下

2. 时时读取XY坐标,G9.7b2   XY基址=25E093C

2.在鼠标监控事件中,取鼠标所在窗口的标题

3.当窗口为标题为Graphic Editor并同时鼠标中键按下时

4.记录鼠标按下:屏蔽坐标与Genesis坐标

5.当窗口为标题为Graphic Editor并同时鼠标中键放开时

6.记录鼠标放开:屏蔽坐标与Genesis坐标

7.通过屏幕像素差值与实际genesis坐标差值,换算出需要平移X与Y值

8.再通过平移X与Y值,求出真实中心点X与Y

9.然后再执行COM pan_center 执行即可

开发小结::

实际操作时,鼠标按下与放开,屏幕2个相素点差值太小时,可以设置为忽略值

因为没有必要平移了,这边跟据实际经验值按15个像素点差值,直接忽略了平移

3.TGZ拖放

解答:

1.注册WIN API 安装全局勾子,监控鼠标移动事件

2.在鼠标监控事件中,取鼠标所在窗口的标题

3.当窗口为标题为Engineering,即为此窗口的句柄注册拖动放事件(TGZ文件拖放在窗口上即完成了注册)

4.注册成功,文件拖放到Engineering窗口鼠标而为加号+图标了。

5.在拖放事件中获取到TGZ路径后,然后通过gateway实现了。

使用gateway技巧:

正常使用gateway,每次发送COM指令都是启动新的进程实现发送COM指令的,然后此gateway进程关闭了,

下次再发送COM指令时又得启动新的进程了,这样一来效率太低了,

建议采用需采用管道对gateway操作,可以实现启动一次进程,可以多次发送COM指令到genesis。

开发小结:

1.拖放的文件可能不是TGZ文件,需排除并提示用户

2.拖放的TGZ文件可能Geneiss软件已存在了,需提示用户是否覆盖还是不导入,交给用户确认

3.拖放TGZ默认DB设置

4.当拖放一个TGZ时,设置一个可以直接打开Step进入图形编辑界面

5.与公司文控TGZ对接,直接输入生产型号即可导入Genesis

二.滚轮缩放使用说明

三.滚轮缩放主界面

PCB Genesis 鼠标滚轮缩放与TGZ拖放 插件实现的更多相关文章

  1. SceneControl+AE+鼠标滚轮缩放

    要为SceneControl设置鼠标滚轮缩放必须定义委托,因为SceneControl没有Wheel事件,所以委托From的Wheel事件 public Form1() { InitializeCom ...

  2. js 禁止用户使用Ctrl+鼠标滚轮缩放网页

    为什么会有人会使用ctrl+鼠标滚轮缩放网页?坚决禁止! <html> <head> <title>测试</title> <script lang ...

  3. Engine中如何实现鼠标滚轮缩放反置?

    来自:http://zhihu.esrichina.com.cn/?/question/6666 [解决办法]:1,禁用IMapControl的默认鼠标滚轮事件.即设置IMapControl4.Aut ...

  4. Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  5. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果

    Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能.放大的图像可以显示在镜头本身或它的外部容器中.Magnifier.js 使 ...

  6. 关于 WebBrowser调用百度地图API 鼠标滚轮缩放地图级别失灵的解决办法

    在桌面程序下 百度地图API的鼠标缩放地图功能可能会失灵无效! 这个原因不是API的问题 小弟试了下在WEB上面是没有问题的 于是考虑可能是WebBrowser的获取焦点问题,于是在主窗体 添加了一个 ...

  7. PCB Genesis或Incam 右键导入TGZ 实现方法

    使用Genesis导入TGZ方式很多 的,比如有:写个脚本框选TGZ的的方式实现TGZ导入,将TGZ拖入脚本界面实现TGZ导入, 给Engineering Toolkit窗口句柄注册拖拽事件实现TGZ ...

  8. Qt无边框窗口的移动、拉伸边框、鼠标滚轮缩放大小

    主要是处理窗口上鼠标的几个事件,具体代码请看下面的截图, 完整代码的下载链接在此:http://download.csdn.net/detail/beyond0824/9657110, 本示例代码中, ...

  9. 【three.js练习程序】鼠标滚轮缩放

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. Pycharm:debug调试时使用参数

    一种操作方法: 文章链接:MAC下使用Pycharm,debug调试时怎样带参数 今天在网上找了一个例子敲代码,因为我使用的是PyCharm,例子运行时需要带参数,开始不知道怎么带参数,网上搜了大半天 ...

  2. 5.21leetcode练习

    目录 两数之和 题目 答案 整数反转 题目 思路及答案 回文数 题目 思路及答案 希望每天进步一点点 两数之和 题目 新手司机上路,光荣翻车,没想出来.借了别人的答案,自行领会 答案 整数反转 题目 ...

  3. std::vector遍历

    std::vector是我在标准库中实用最频繁的容器.总结一下在遍历和创建vector时需要注意的一些地方. 在不考虑线程安全问题的前提下,在C++11中有五种遍历方式. 方式一 for (size_ ...

  4. 6)STM32使用HAL库实现modbus的简单通讯

    1.判断地址.校验 2.读取本机数据并校验打包 3.发送数据包 4.本机数据长度比要读取的长度短怎么办 4.校验错误怎么办

  5. springcloud(三):Eureka服务端

    一. 因为使用一个注册中心服务器端,n个客户端:n个生产者客户端.n消费者客户端....,所有的客户端最好的方式就是通过对象传递参数,因此需要创建一个公共组件项目,为n个客户端传值提供方便 二.创建公 ...

  6. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  7. 【[Offer收割]编程练习赛14 C】可疑的记录

    [题目链接]:http://hihocoder.com/problemset/problem/1507 [题意] [题解] 如果多出来一个的话; 某个人的父亲节点就会变成两个 找到有两个父亲节点的人就 ...

  8. MFS搭建

    MooseFS是一个分布式存储的框架,其具有如下特性:     1.Free(GPL)     2.通用文件系统,不需要修改上层应用就可以使用     3.可以在线扩容,体系架构可伸缩性极强.     ...

  9. N天学习一个linux命令之diff

    用途 按行比较文件差异,也可以比较目录 用法 diff [OPTION]... FILES 常用选项 -i --ignore-case 忽略大小写 --ignore-file-name-case 忽略 ...

  10. Clojure:将两个list合并成一个map

    假设我们有两个list,分别是: (def a [“one” “two” “three”]) (def b [1 2 3]) 我们要把它们合为一个键值对应的map,做法很简单: 1. 先将a和b合为一 ...