找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 806|回复: 13
打印 上一主题 下一主题

十天学会Skill之第六天

  [复制链接]

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

跳转到指定楼层
1#
发表于 2015-12-22 18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 deargds 于 2015-12-22 18:10 编辑

十天学会Skill之第六天
By deargds
https://www.eda365.com
学习目的:了解Selection选择类函数及其使用。

一,基础知识

通常情况下,开发Skill主要是用来对设计中的元素进行编辑处理,比如移动,删除,高亮,旋转等,所以会经常使用到选择类函数,可以用来获取
我们需要操作的对象DBID,用来进行下一步的处理。
常用的选择类函数有以下几种:
1.点选类:获取用户鼠标点选位置的对象
axlSingleSelectPoint
2.框选类:获取用户鼠标框选区域的对象
axlSingleSelectBox
3.按名称选择类:获取符合给定名称的对象
axlSingleSelectName
4.全选类:
axlAddSelectAll

备注:如果需要进行多次选择操作,可以使用
对应的axlAdd*类函数,反之,如果需要在多选中进行反选操作,可以使用
axlSub*类函数。

在选择函数执行前,我们还需要执行过滤器设置,使用
axlSetFindFilter函数来完成,例如:
axlSetFindFilter( ?enabled list("all" ) ?onButtons list("noall" "PINS" "TEXT" "SHAPES"))
以上语句设置了过滤的对象类型为PINS TEXT SHAPES,这样在执行选择类函数时,就只会选择相应类型的设计对象,
PS:关于
axlSetFindFilter函数的详细使用,大家可以查看一下帮助文件algroskill.pdf,我们这里先了解如何简单使用即可。

下面给出一个示例程序:实现获取框选的器件坐标列表并Report显示出来
  1. axlCmdRegister( "test" 'test)
  2. defun( test ()
  3. let(()
  4.         axlSetFindFilter( ?enabled list("noall" "COMPONENTS") ?onButtons list("noall" "COMPONENTS"));设置允许选择的对象类型COMPONENTS
  5.         axlClearSelSet();清除选择
  6.         while(axlAddSelectBox();用户开始多次框选器件操作
  7.                 lComps = axlGetSelSet();保存选择结果
  8.         )
  9.         axlClearSelSet();清除选择
  10.         
  11.         ;循环打印已选中器件的信息
  12.         sViewFile = axlTempFile()
  13.         pViewFile = axlDMOpenFile("TEMP" sViewFile "w")
  14.         foreach(p lComps
  15.                 fprintf(pViewFile "%s\t%s\t%L\n" p->name p->package p->symbol->xy)
  16.         )
  17.         axlDMClose(pViewFile)
  18.         axlUIWExpose(axlUIViewFileCreate(sViewFile "Demo" nil list(80 16)))
  19. )
  20. )
复制代码

二,高级选择模式

上面讲到的几种选择模式虽然可以满足我们日常的开发需求,但有时候我们希望有更加自由的选择方式,比如任意拖选,下面就简单介绍一下axlSelect函数
1.axlSelect函数支持以下三种选择方式
Single point select点选
■ Window select拖选
■ Group select组选

axlSelect(
?firstEventCallback //选择开始回调函数,在点下鼠标开始选择时响应,可以用来在选择前做一些操作,例如axlClearSelSet
?groupMode  //为nil时,选择操作完成后会立即执行下一命令,设置为t时,可以进行多次选择,在done或cancel命令后才会继续执行其它命令
?prompt  //自定义选择前的提示信息
)

PS:一般情况下,函数的三个参数都可以省略

下面分别给出两种情况完整的示例程序
[单次选择]
  1. axlCmdRegister( "test" 'axlSelectDemo)
  2. defun( axlSelectDemo ()
  3. let((lSelect)
  4.         axlClearSelSet()
  5.         axlSetFindFilter( ?enabled list("noall" "COMPONENTS") ?onButtons list("noall" "COMPONENTS"))
  6.         axlSelect(?firstEventCallback 'funcBegin ?groupMode nil ?prompt "Please Start axlSelect:")
  7.         println(axlGetSelSet()~>name)
  8. ))

  9. defun( funcBegin ()
  10.         axlClearSelSet()
  11.         axlMsgPut("Begin axlSelect:")
  12. )
复制代码
[多次选择]
  1. axlCmdRegister( "test" 'axlSelectDemo)
  2. defun( axlSelectDemo ()
  3. let((lSelect)
  4.         axlClearSelSet()
  5.         axlSetFindFilter( ?enabled list("noall" "COMPONENTS") ?onButtons list("noall" "COMPONENTS"))
  6.         axlSelect(?firstEventCallback 'funcBegin ?groupMode t ?prompt "Please Start axlSelect:")
  7.         case(axlUIGetUserData()->doneState //在Done 和 Cancel命令中分别响应不同的操作
  8.                 ('done
  9.                         println(axlGetSelSet()~>name)
  10.                         axlClearSelSet()
  11.                 )
  12.                 ('cancel
  13.                         axlClearSelSet()
  14.                 )
  15.         )
  16. ))

  17. defun( funcBegin ()
  18.         axlClearSelSet()
  19.         axlMsgPut("Begin axlSelect:")
  20. )
复制代码

结合以上两个Demo,大家可以发挥自己的想法,来实现一些简单的交互功能,例如任意替换VIA等。

另外在\Cadence\SPB_1X.X\share\pcb\examples\skill\select目录下有非常详细的文件示例,可以参考一下。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 支持!支持!1 反对!反对!
谁画出这天地 又画下我和你

41

主题

234

帖子

1569

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1569
2#
发表于 2015-12-24 19:36 | 只看该作者
请问一下,怎样查找text,例如“SILKSCREEN BOTTOM” 然后删除呢?谢谢

点评

axlDeleteObject  详情 回复 发表于 2015-12-24 19:58

8

主题

468

帖子

2639

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2639
3#
发表于 2015-12-24 19:58 | 只看该作者
墨客的秋天 发表于 2015-12-24 19:36
请问一下,怎样查找text,例如“SILKSCREEN BOTTOM” 然后删除呢?谢谢

axlDeleteObject

点评

请问,楼主给的是skill说明的文件目录么~  详情 回复 发表于 2016-4-23 17:04

28

主题

164

帖子

652

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
652
4#
发表于 2016-3-23 09:30 | 只看该作者
谢谢楼主

16

主题

111

帖子

325

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
325
5#
发表于 2016-3-31 16:56 | 只看该作者
支持支持

28

主题

164

帖子

652

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
652
6#
发表于 2016-4-19 11:13 | 只看该作者
版主,不是十天吗,有剩余的四天的吗,求共享。。。。。

0

主题

16

帖子

16

积分

二级会员(20)

Rank: 2Rank: 2

积分
16
7#
发表于 2016-4-19 21:45 | 只看该作者
谢谢!楼主辛苦了顶顶顶

0

主题

60

帖子

516

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
516
8#
发表于 2016-4-20 09:02 | 只看该作者
辛苦啦  谢谢分享              

41

主题

234

帖子

1569

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1569
9#
发表于 2016-4-20 17:05 | 只看该作者
楼主有时间继续分享啊。很好的学习资料

60

主题

280

帖子

342

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
342
10#
发表于 2016-4-23 17:04 | 只看该作者
附件select是skill的说明文件么~

60

主题

280

帖子

342

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
342
11#
发表于 2016-4-23 17:04 | 只看该作者

请问,楼主给的是skill说明的文件目录么~

60

主题

280

帖子

342

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
342
12#
发表于 2016-4-26 22:09 | 只看该作者
大哥,剩下的四天啥时候更新上啊~

3

主题

176

帖子

1573

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1573
13#
发表于 2016-8-16 16:36 | 只看该作者
支持。
正在看帮助文件,楼主写的这六天给的帮助很大,因为帮助文件的英文术语看的有点头大

7

主题

351

帖子

348

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
348
14#
发表于 2017-6-6 14:15 | 只看该作者
估计剩余四天被吃了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 06:44 , Processed in 0.068988 second(s), 34 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表