《ICC2 GUI交互编程技巧分享 -
GUI里面绘制Rect/Point并获得其坐标》
本文选自知识星球-随芯所欲:
星球原文链接:
https://t.zsxq.com/4Lmgv
有时候我们需要自己去编写一些脚本需要用户在GUI里面去一些交互获得用户GUI里面操作的一些数据,比如用户在GUI里面画一个矩形然后脚本获得这个矩形的四个点的坐标,我们甚至能根据这个去自己编写一些GUI的应用。那么如何去实现这个目的呢?下面一步一步进行讲解。
我们可以用命令gui_set_layout_user_command来实现这个目的,它可以让用户在GUI里面做一些交互,并且在GUI里面的操作结束之后将用户的输入结果反馈给User。
执行下面的命令,打开GUI,我们可以在里面左下角看到-status_text后边的信息“please draw one rect”,同时可以看到鼠标会变成一个带矩形框的十字标,我们可以在GUI里面去画一个矩形,apply_cmd就是等矩形画完之后工具会去调用的程序,且工具会把矩形的坐标去作为参数传递给它。这里可以先设置为空,后边会讲如何用它。
icc2_shell> gui_set_layout_user_command -apply_cmd {} -input_type rectangle -snap_type litho -status_text "please draw one rect"
执行完之后你会发现工具会报错:
icc2_shell> gui_set_layout_user_command -apply_cmd {} -input_type rectangle -snap_type litho -status_text "please draw one rect"
1
icc2_shell> Error: unknown command '{355.843 336.038} {430.285 376.469}' (CMD-005)
Extended error info:
while executing
"gui_eval_cmd -no_log -no_history -no_display -cmd "$cmd {$r}" "
-- End Extended Error Info
可以发现坐标其实就是apply_cmd的输入,因为它不是命令,所以报错了。可以在apply_cmd后边写上命令puts,它就可以在用户画完矩形之后返回矩形框的四个点坐标:
icc2_shell> gui_set_layout_user_command -apply_cmd {puts} -input_type rectangle -snap_type litho -status_text "please draw one rect"
1
icc2_shell> {363.343 338.224} {435.667 360.222}
那么如何将这个坐标传递给一个变量呢?
我们可以编写一个proc来把结果赋值给想要的变量(需要设置为全局变量global否则proc之外无法访问它),然后用gui_set_layout_user_command后边的-apply_cmd去调用它:
icc2_shell> proc return_coord {rect} {global win;set win $rect}
icc2_shell> gui_set_layout_user_command -apply_cmd {return_coord} -input_type rectangle -snap_type litho -status_text "please draw one rect"
1
icc2_shell> puts $win
{361.062 341.568} {461.619 380.070}
可以看到结果已经传递给了变量win。
类似的方式,我们可以指定input type为point这样就能通过在GUI里面用鼠标点击一个点来获得它的坐标了:
icc2_shell> gui_set_layout_user_command -apply_cmd {return_coord} -input_type point -snap_type litho -status_text "please click one point"
1
icc2_shell> puts $win
287.615 323.953
也可以直接gui_set_layout_user_command -apply_cmd {puts} -input_type point -snap_type litho -status_text "please click one point"
gui_set_layout_user_command
描述:
此命令用于帮助创建用户定义的工具,以扩展布局视图标准功能。该命令将布局视图设置为给定的输入模式,并在输入完成时执行用户回调过程。输入点作为参数传递给用户回调。
ARGUMENTS
-apply_cmd TclCmd
The user procedure to be called when input completed. The coor-
dinates will be passed as an argument to this procedure. The
options is mutually exclusive with -clear.
-clear Cancel all pending input and return layout to default mouse
mode. The options is mutually exclusive with -apply_cmd.
-input_type InputType
The desired input type: rectangle | line | polygon | point.
Default is rectangle
-snap_type SnapType
The desired snap type: litho | site | midsite | wiretrack | mid-
wiretrack | user Default is litho
-status_text string
The help string to be shown in layout window status bar.
-cancel_cmd TclCmd
The user procedure to be called when input is canceled.
示例:
Cut the object shape with user specified rectangle
proc my_cut_object_shape_proc { rect } {
change_selection [cut_objects [get_selection] -bbox {$rect}]
}
gui_set_layout_user_command -apply_cmd {my_cut_object_shape_proc} -status_text "Drag the rectangle to cut selected objects" -input_type rectangle
1
那么你知道Innovus中如何实现同样的功能么?
详细推文见下文:
星球链接:https://t.zsxq.com/vESsg
星球简介
低功耗设计技术总结 - 3万字,129页 IR drop的分析与修复总结 - 4.3千字,20页 数字后端理论及实践-ICC干货笔记 - 11万字,423页 数字后端理论及实践-Innouvs教程(第4版)- 5.7万字,316页 ICC2教程-星球精编版 - 2万字,125页 数字后端理论及实践-Innouvs教程(第5版)- 11.8万字,635页 面试笔试题整理 面试笔试经验分享(第1版)- 1.6万字,48页 面试笔试题整理 面试笔试经验分享(第2版)- 2.3万字,87页 ICC2 ICC与Innovus的命令对照(第1版) Tcl与DesignCompiler教程(第1版)- 6.1万字,183页 DRC规则讲解、DRC的检查与修复(第1版)- 7.3千字,26页 Congestion的分析与修复专题(第1版)- 1.2万字,41页 Perl-Tk教程(第1版)- 1.6万字 73页 星球精华推文分类整理合集(第1版)- 1.8万字,75页 星球精华推文分类整理合集(第2版)- 4.4万字,160页 面试笔试题整理 面试笔试经验分享(第3版)- 2.7万字,96页 星球精华推文分类整理合集(第3版)- 6.6万字,240页 时序分析与sdc专题笔记(第1版) - 3.1万字,115页 星球精华推文分类整理合集(第4版)- 8.4万字,296页 面试笔试题整理 面试笔试经验分享(第4版)- 3.2万字,103页 更多教程、笔记持续更新中。。。