在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8311|回复: 24

[求助] skill中geGetSelSet()~>??可以输出所有选中的prop,但要怎么看到他的输出呢?

[复制链接]
发表于 2019-10-18 10:12:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
在学习skill,其中看到可以用~>?或者~>??提取所有property,学习的资料中写道这样可以返回所有属性,但是他会在哪里返回呢?
我想知道但geGetSelSet()一个mos的时候,他的各个属性的name,比如cellName ,cellType等等在返回值里是怎么写的。
这样就可以在需要用某个prop时直接用geGetSelSet()~>cellName 这个样子来制定提取了。

我试过下面的指令
procedure(test()
let((cv prop)
when (geGetEditCellView()~>mode=="a"
cv=geGetSelSet()
prop=car(cv~>prop)
prop~>?
);end when
);end let
);end procedure
正常来说这样可以用prop~>?来提取出选中object的所有属性的,
但是他不会显示在CIW窗口啊,我还是看不到他的属性的名字都是怎么定义的。
之后我又加了一句prinf("prop=%L" prop) 希望能在CIW窗口看到返回值,但提示我的format illegal,就是 %L是非法格式,我也不清楚这个属性算是什么格式的。

发表于 2019-10-18 10:54:56 | 显示全部楼层
println
 楼主| 发表于 2019-10-18 11:10:16 | 显示全部楼层


println我看了资料介绍,似乎是println(“AA”) 打印出的就是AA,似乎是“”里面写什么就输出什么呀。
println用在我这里要怎么写?
发表于 2019-10-18 14:43:19 | 显示全部楼层
不要指定格式输出,直接printf(prop)
发表于 2019-10-18 19:33:30 | 显示全部楼层
你的函数在 let() 里面的最后一句是 when() , 所以它返回的就是 t 或者 nil. 你要把输出的那个变量放到最后一句,就可以返回。别忘了SKILL跟人工智能语言LISP差不多,排列到最后一句就是返回!
发表于 2019-10-18 19:36:40 | 显示全部楼层
你可以简单的改成:

procedure(test()
let((cv prop)
when (geGetEditCellView()~>mode=="a"
cv=geGetSelSet()
prop=car(cv~>prop)
prop~>?
);end when
prop
);end let
);end procedure


它可以返回prop属性指针所指的object,也可以返回nil,就是cellview打开的模式为非可编辑模式。
 楼主| 发表于 2019-10-21 14:32:25 | 显示全部楼层


amodaman 发表于 2019-10-18 19:36
你可以简单的改成:

procedure(test()


无敌!NB!果然闭门造车不可取。
我最初的想法是想知道一颗mos的所有属性的name,方便通过~>直接提取。
用你改过的可以返回prop的值,prop都是一堆db:******* db:*****的东西。
我改为下面的样子,可以获取更多东西。
procedure(test()
let((cv prop)
when (geGetEditCellView()~>mode=="a"
cv=geGetSelSet()
prop=cv~>??
);end when
prop
);end let
);end procedure
发表于 2021-6-24 17:31:48 | 显示全部楼层


chinarml 发表于 2019-10-21 14:32
无敌!NB!果然闭门造车不可取。
我最初的想法是想知道一颗mos的所有属性的name,方便通过~>直接提取。
用 ...


我按上面的代码 load进去 为什么返回是nil
发表于 2021-6-24 18:32:18 | 显示全部楼层


amodaman 发表于 2019-10-18 19:36
你可以简单的改成:

procedure(test()


大神 有个问题一直没搞定 请教一下
想用Skill实现一个功能:在两层金属交叠的区域自动生成另外一层金属
image.png
这是代码 麻烦了 谢谢

发表于 2021-6-27 07:31:13 | 显示全部楼层
本帖最后由 amodaman 于 2021-6-27 07:35 编辑



newLpp     = list( "M4" "drawing")
sourceLpp1 = list( "AA" "drawing")
sourceLpp2 = list( "NW" "drawing")

procedure(createOverlappedRect()
  let( ( (selectedFigs geGetSelectedSet()) fig1 fig2)
      fig1 = car( selectedFigs )
      fig2 = cadr( selectedFigs )
      if( fig1~>lpp == sourceLpp1 && fig2~>lpp ==sourceLpp2
      then
        printf("*** Found figures matching source lpps ...\n")
        leLayerAnd( getCurrentWindow()~>cellView fig1~>lpp fig2~>lpp newLpp)
        printf("*** New figure of %L created at overlap area.\n" newLpp)
        dbSave(getCurrentWindow()~>cellView)
      else
        printf("Matching figures not found.\n")
       ) ;; if
  ) ;; let

) ;; procedure

hiSetBindKey("Layout" "Ctrl<Key>O" "createOverlappedRect()")


捕获.PNG
捕获.PNG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 22:49 , Processed in 0.027850 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表