ICC2 GUI交互编程技巧分享 - GUI里面绘制Rect/Point并获得其坐标

科技   2024-08-26 18:18   上海  
封面选自:游戏黑神话:悟空 - 哪吒

本文选自知识星球,更多干货知识以及后端笔记、视频教程等,欢迎加入星球进行查看。
星球上线了基于GPT4和个人IC设计知识库的IC设计 AI机器人 ,且最近将模型升级为了GPT-4 128K模型,也加入了更多IC知识库,星球成员可以免费使用!!AI机器人24小时随时随地都能立刻回答用户的提问哦,效果非常棒!可以同时在电脑、手机、平板等多个平台上使用。
AI机器人还有绘图功能哦,最近几期的封面都是用AI机器人绘制的。
AI机器人的所有功能介绍如下:
基于GPT4和个人IC设计知识库的IC设计机器人v1.0正式上线

同时星球QQ群还有分享高达56万+字的个人数字后端设计笔记,更多后端以及IR和EM相关的内容见知识星球,欢迎加入。


《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


星球简介


目前星球中一共分享了20本+系统性的、整理成册的笔记,高达56万字+,2024年星球将分享更多私人笔记,逐步完善整个IC设计生态。
以后知识星球也会陆续会开放:
《Timing/DRV修复的专题笔记》 《ICC2 flow教程》 《Makefile在IC设计中的应用》和 《RedHawk教程笔记》 等等。
目前已上传的笔记有:
  • 低功耗设计技术总结 - 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页
  • 更多教程、笔记持续更新中。。。 


集成电路设计及EDA教程
知识 前端 后端 DFT 低功耗 验证 EDA 1rtl检查:LEDA 2仿真:VCS 3逻辑综合:DC 4形式验证:Formality 5布局布线:ICC 6STA:PT 7功耗分析:PTPX 8DRC LVS:Calibre
 最新文章