Virtuoso Layout Editor快捷键归纳

鼠标操作 单击左键:选中一个图形(如果两个图形交叠,单击选中其中一个,再单击选中另一个) 左键框选:选中一片图形,某个图形要被完全包围才会被选中 中键单击:调出常用菜单命令(很少用,要点两下。我们有快捷键的嘛) 右键点击拖放:放大。放大后经常配合F键使用,恢复到全部显示。配合Tab键使用,平移视图。右键还有"Strokes",就是点住右键画些图线,就能实现调用某些命令 Shift+左键:加选图形 Ctrl+左键:减选图形(Cadence菜单中大写表示+按Shift,Ctrl写成^) 快捷键 快捷键 功能 F1 显示帮助窗口 F2 保存 F3 控制在选取相应工具后是否显示相应属性对话框。比如在选取Path工具后,想控制Path的走向,可以按F3调出对话框进行设置 F4 Toggle Partial Select,控制是否可以部分选择一个图形 F5 打开 F8 Guided Path Create切换至L90XYFirst Ctrl+A 全选(和Windows下一样) Shift+B Return(等级升一级,升到上一级视图) B 去某一级(Go to Level) Ctrl+C 中断某个命令,不常用。一般多按几次Esc键取消某个命令 Shift+C 裁切(Chop)。首先调用命令,选中要裁切的图形,后画矩形裁切 C 复制某个图形 Ctrl+D 取消选择(也可用鼠标点击空白区域实现,和Photoshop中的取消选区快捷键一样)。Shift+D和D也是取消选择 Shift+E / E 控制用户预设的一些选项 Ctrl+F 显示上层等级Hierarchy Shift+F 显示所有等级 F 满工作区显示(显示所画的所有图形) Ctrl+G Zoom To Grid G 开关引力(Gravity)。Gravity和AutoCAD里的吸附Snap差不多,会吸附到某些节点上去。有时候Gravity很讨厌,总是乱吸附,这时可以点击G键关闭Gravity,操作完成后再打开 I 插入模块(Instance) Shift+K 清除所有标尺 K 标尺工具(Ruler) L 标签工具(Label)。标签要加在特定的text层上 Shift+M 合并工具(Merge) M 移动工具(Move)。点选Move工具后,选中要移动的图形,然后在屏幕上任意一处单击确定移动的参考点,然后自由移动。也可以通过鼠标先选中图形,移动鼠标当箭头变成十字方向时拖动 Ctrl+N 先横后竖(L90XFirst) Shift+N 直角正交(Orthogonal) N 斜45对角+正交(Diagonal) Shift+O 旋转工具(Rotate) O 插入接触孔(Create Contact) Ctrl+P 插入引脚(Pin) Shift+P 多边形工具(Polygon) P 插入Path(路径/管道)。这些最后都要Convert to Polygon Shift+Q 打开设计属性对话框(选中一个图形先) Q 图形对象属性。经常用来更改图形属性,先选中一个图形 Ctrl+R Redraw重画 Shift+R Reshape重定形。在原来的图形上再补上一块图形 R 矩形工具(Rectangle),应该是用的最多的工具 Ctrl+S Split(添加拐点),配合Stretch命令使原来直的Path打弯 Shift+S Search查找 S 拉伸工具(Stretch)。要求是框选要拉伸图形再拉伸。这是Virtuoso版图设计区别于其他绘图软件的精华所在,能在保持图形原有性质的前提下自由拉伸 Ctrl+T Zoom to Set Shift+T Tree(Hierarchy Tree) T Layer Tap(层切换)。按过T后点击一个图形,就自动切换到刚刚点击图形的层上去了,不必频繁点击LSW窗口 Shift+U 重复(Redo)。撤销命令后再反悔 U 撤销(Undo) Ctrl+V Type in CIW V 关联(Attach)。将一个子图形(child)关联到一个父图形(parent)后,若移动parent,child也将跟着移动;移动child,parent不会移动。可以将Label关联到Pad上 Ctrl+W 关闭窗口 Shift+W 下一个视图(Next View) W 前一视图(Previous View) Ctrl+X Fit Edit(适合编辑,感觉和F差不多) Shift+X 下降一等级(Descend) X Edit in Place(Hierarchy菜单下,比较难翻译) Ctrl+Y Cycle Select Shift+Y 粘贴(Paste),配合Yank使用 Y 区域复制(Yank)。和Copy有区别,Copy只能复制完整图形对象 Ctrl+Z 视图放大两倍(Zoom In by 2) Shift+Z 视图缩小两倍(Zoom Out by 2) Z 视图放大 ESC Cancel Tab 平移视图(Pan)。按Tab,用鼠标点击视图区中某点,视图就会移至以该点为中心 Delete 删除 BackSpace 撤销上一点。很有用,不用因为Path一点画错而删除重画 Enter 确定一个图形的最后一点,也可双击鼠标左键结束 Ctrl+方向键 移动Cell Shift+方向键 移动鼠标,每次半个格点的距离 方向键 移动视图 快捷键除了Cadence自带的以外,更多的还是自己写的。只要会写Skill程序,就可以自己定义快捷键,其中涉及到对 .cdsinit 文件的修改。 ...

2015年4月4日 · 1 分钟 · Jid

Vim 关闭自动备份文件

问题 Vim 默认在保存文件时会生成 ~ 后缀的备份文件(如 config.yml~),污染目录。 解决 在 Vim 中执行 :e $MYVIMRC 打开配置文件,添加: set nobackup " 关闭备份文件(file~) set nowritebackup " 关闭写入时的临时备份 set noswapfile " 关闭交换文件(.file.swp)(可选) 如果只想对特定目录关闭备份: set backupskip=/tmp/*,/private/tmp/*

2015年4月3日 · 1 分钟 · Jid

怀旧:Turbo C 经典版本回顾

Turbo C 的历史 Turbo C 是 Borland 公司推出的 C 语言集成开发环境,在 DOS 时代是学习 C 语言的标准工具。 版本 年份 主要特性 Turbo C 1.0 1987 全新集成开发环境,编辑/编译/运行一体化 Turbo C 1.5 1988 增加图形库和文本窗口函数库 Turbo C 2.0 1989 增加查错功能,Tiny 模式生成 .COM 文件 Turbo C 2.01 1989 Bug 修复版 Turbo C++ 3.0 1992 面向对象,C++ 支持 Borland C++ 1991 Windows 3.0 支持,新一代产品 Turbo C 2.0 因性能稳定,在教育领域使用了近二十年,是很多人的 C 语言启蒙工具。 使用方式 安装版:运行 INSTALL.EXE,会自动设置目录结构 免安装版:解压后直接运行 TC.EXE,建议放在 D:\TURBOC2(路径不能有中文和空格) 下载地址 Turbo C 2.01 英文原版:CSDN Turbo C 2.0 免安装版:CSDN 或 SkyDrive ⚠️ 链接为 2015 年上传,可能已失效。 ...

2015年4月2日 · 1 分钟 · Jid

RHEL 将光盘镜像设为 YUM 源

适用场景 RHEL 服务器无法联网,需要从光盘安装软件包。 步骤 1. 挂载光盘镜像 mount -o loop rhel-5-server-dvd.iso /media/rhel 2. 创建 YUM 源配置 编辑 /etc/yum.repos.d/rhel-local.repo: [Server] name=Red Hat Enterprise Linux $releasever - Server baseurl=file:///media/rhel/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [Cluster] name=Red Hat Enterprise Linux $releasever - Cluster baseurl=file:///media/rhel/Cluster enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ClusterStorage] name=Red Hat Enterprise Linux $releasever - ClusterStorage baseurl=file:///media/rhel/ClusterStorage enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [VT] name=Red Hat Enterprise Linux $releasever - VT baseurl=file:///media/rhel/VT enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 3. 生成 repodata(如需要) createrepo -o /var/rhel/Server -g /media/rhel/Server/repodata/comps-rhel5-server-core.xml /media/rhel/Server # 绑定生成的 repodata mount --bind /var/rhel/Server/repodata /media/rhel/Server/repodata 4. 清除缓存 yum clean all 验证 yum list available

2015年4月1日 · 1 分钟 · Jid

计算点集或多边形的最佳法向量

2026-04-13 修正错误 有时,我们希望从一组三个以上的点集求出平面方程,这种点集最常见的例子就是多边形顶点。在这种情况下,这些顶点绕多边形顺指针或逆时针地列出。(顺序很重要,因为要依据它决定哪边是"正面"哪边是"反面"。) 一种糟糕的方式是任选三个连续的点并用这三个点计算平面方程。毕竟所选的三个点可能共线,或接近共线。因为数值精度的问题,这将非常糟糕。或者,多边形可能是凹的,所选的点恰好在凹处,从而构成了逆时针(将导致法向量方向错误)。又或者,多边形上的顶点可能不是共面的,这可能是由数值上的不精确,或错误的生成多边形的方法所引起的。我们真正想要的是从点集中求出"最佳"平面的方法,该平面综合考虑了所有的点。 这里提供一个通用且效率较高的算法,计算一组有序点集(顺时针或逆时针)的最佳法向量。 计算公式,其中Pn+1== P1 : 算法实现代码(C++实现): #include <cstdio> #include <cmath> #include <vector> using std::vector; struct point { double x; double y; double z; point():x(0),y(0),z(0) {} point(double i, double j, double k):x(i),y(j),z(k) {} void normalize() { double len = sqrt(x*x + y*y + z*z); x /= len; y /= len; z /= len; } void display() { printf("x=%5.2f, y=%5.2f, z=%5.2f\n",x,y,z); } }; int main() { vector<point> pts; pts.push_back(point(0,100,0)); pts.push_back(point(10,100,10)); pts.push_back(point(20,100,100)); pts.push_back(point(0,100,100)); if(pts.size()<=3) { printf("oops\n exit!\n"); return 0; } point pre = *(pts.end()-1); point ans = point(); vector<point>::iterator itr = pts.begin(); while(itr!=pts.end()) { point cur = *itr; ans.x += (pre.z+cur.z)*(pre.y-cur.y); ans.y += (pre.x+cur.x)*(pre.z-cur.z); ans.z += (pre.y+cur.y)*(pre.x-cur.x); pre = cur; ++itr; } ans.normalize(); ans.display(); return 0; } PS:本算法的通用性较高,甚至可以用于不共面的点集。 ...

2015年3月31日 · 1 分钟 · Jid

二分法查找C语言实现

在对线性表的操作中,经常需要查找一个元素在表中的位置。通常最坏的办法是遍历整个线性表,以找到某元素的位置或者不在表中。 但是如果线性表是有序的,比如由小到大递增(完全可以是自定义的比较方法),那么在这种情况下使用二分查找法会是首选。当然,这么重要的函数,一般的库都会提供,比如: C provides bsearch() in its standard library. C++’s STL provides algorithm functions binary_search, lower_bound and upper_bound. Java offers a set of overloaded binarySearch() static methods in the classes Arrays and Collections in the standard > java.util package for performing binary searches on Java arrays and on Lists, respectively. They must be arrays of > primitives, or the arrays or Lists must be of a type that implements the Comparable interface, or you must specify a > custom Comparator object. ...

2015年3月30日 · 3 分钟 · Jid

向map中添加或更新元素的高效方法

向map中添加或更新元素通常有两个办法:map::operator[] 和 成员函数map::insert()。在数据量很小和元素比较简单的情况的情况下,通常两种方法不会有效率上的差异,但是,一旦数据量很大,或元素很复杂(自定义的比较复杂的类)时,就会出现效率上的差异。因此向map中添加元素通常有这么一个原则: 当向map中添加元素时,应优先选用insert(), 而不是operator[]; 当更新已经在map中的元素时,应优先选用operator[]. 首先解决一个问题:insert()更新元素?怎么用啊?确实可以用,就是看着很别扭而且效率不高。看下面的代码 map<int,double> m; m[1]=10.0; //赋值 m[2]=11.0; //赋值 m[3]=12.0; //赋值 m[2]=18.0; //更新 map<int, double> m2; m2.insert(make_pair(1,10.0)); //赋值 m2.insert(make_pair(2,11.0)); //赋值 m2.insert(make_pair(3,12.0)); //赋值 m2.insert(make_pair(2,18.0)).first->second = 18.0; //更新 其次,有必要定义一个函数,实现向map中高效的添加或更新元素. template<typename MapType,typename KeyArgType,typename ValueArgType> typename MapType::iterator effecient_add_update(MapType &m, KeyArgType const& k, ValueArgType const & v) { typename MapType::iterator itrLB = m.lower_bound(k); if (itrLB != m.end() && !(m.key_comp()(k,itrLB->first)) ){ itrLB->second = v; return itrLB; } else{ return m.insert(itrLB,make_pair(k,v)); } } 这个算法真的很有趣, 首先是算法的高效性, 其次是形式上的优美. 参考资料: Effective STL : item24 The C++ Standard Libary

2015年3月25日 · 1 分钟 · Jid

PHP 启用 Gzip 压缩加速网页加载

为什么启用 Gzip Gzip 压缩可将 HTML/CSS/JS 等文本内容压缩 60%-80%,显著减少传输量,加快页面加载速度。 方法一:WordPress 插件 在插件市场搜索 gzip,安装 Gzip Compression 相关插件即可。最简单但会多一个插件。 方法二:修改主题 functions.php(无需插件) 在 wp-content/themes/你的主题/functions.php 末尾添加: /* 启用 Gzip 压缩 */ add_action('init', 'enable_gzip'); function enable_gzip() { ob_start('ob_gzhandler'); } 原理:ob_gzhandler 是 PHP 内置的输出缓冲回调函数,会自动检测浏览器是否支持 Gzip 并启用压缩。 方法三:Apache 配置(推荐) 如果服务器启用了 mod_deflate,直接在 .htaccess 中添加: <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml AddOutputFilterByType DEFLATE text/css application/javascript AddOutputFilterByType DEFLATE application/json </IfModule> 这是最高效的方式,压缩在 Web 服务器层完成,不经过 PHP。 验证效果 Firefox + Firebug(Network 标签)查看响应头中的 Content-Encoding: gzip 或使用 PageSpeed Insights 检测

2015年3月23日 · 1 分钟 · Jid

判断质数的小算法

2026-04-13 修正错误 质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为包含1和本身的因子等于2个)。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。(From wikipedia) 下面提供判断一个整数是否是质数的简单C实现: #include <stdio.h> #include <stdlib.h> #include <math.h> int Prime(int num) { num = abs(num); if ((num==0)||(num==1)) return 0; /*int k = num/2;*/ int k =(int)sqrt(num); while((k>1)&&(num%k)) { --k; } return 1==k; } int main() { int num; printf("Please input an integer (Ctrl-Z to exit) : "); while(scanf("%d",&num)) { if (Prime(num)){ printf("\n%d is a Prime.\n",num); } else printf("\n%d is not a Prime.\n",num); printf("\nPlease input an integer (Ctrl-Z to exit) : "); } } 算法逻辑: Prime函数用来判断某个整数num是否是质数,是则返回非零整数,否则返回零。 Prime函数内部,首先定义一个num的中间数k,可以是num的一半,可以是num的平方根,当然也可以是原数,这里选取平方根,因为这样做效率更高。然后拿这个数k 与 num相除,同时k递减。如果num是质数,那么k在递减的过程中都不会整除num,直到k==1 ; 而如果num不是质数,那么就会找到num的一个非1的因数。

2015年3月22日 · 1 分钟 · Jid

修改 Thunderbird 回复邮件格式

问题 Thunderbird 默认回复邮件时,回复内容在引用原文的下方,不符合国内邮件习惯。 解决步骤 1. 回复内容置于最上方 中文界面: 工具 → 选项 → 高级 → 常规 → 配置编辑器 → 搜索 mail.identity.default.reply_on_top,将值从 0 改为 1。 英文界面: Edit → Preferences → Advanced → Config Editor → 搜索同上。 2. 自定义回复头部格式 安装 SmartTemplate 扩展(工具 → 附加组件 → 搜索安装),然后在扩展选项中配置回复模板: -------- 原始信息 -------- <b>发件人</b>: %from% <b>日期</b>: %date% <b>收件人</b>: %to% <b>抄送</b>: %cc% <b>主题</b>: %subject% 3. 常用宏 宏 含义 %from% 发件人完整信息 %from(name)% 发件人姓名 %from(mail)% 发件人邮箱 %date% 原始邮件日期 %to% 收件人 %cc% 抄送人 %subject% 主题 %Y%-%m%-%d% 年-月-日格式 用 {...} 包裹的内容只在宏有值时显示,例如 {抄送: %cc%} 只在有抄送时出现。 ...

2015年3月21日 · 1 分钟 · Jid