《CAD二次开发教程(AUTOLISP).ppt》由会员分享,可在线阅读,更多相关《CAD二次开发教程(AUTOLISP).ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Cad二次开发-AUTOLISP 入门 一、一、LISP编程语言概述编程语言概述n nAutoLISPAutoLISP是由是由AutodeskAutodesk公司开发的一种公司开发的一种LISPLISP程序语言(程序语言(LISPLISP是是List List n n Processor Processor的缩写)。第一篇关于的缩写)。第一篇关于LISPLISP的参考文献是由的参考文献是由John McCarthy John McCarthy 在在19601960年年4 4月的月的ACMACM通讯通讯中发表的。中发表的。n n 除了除了FORTRANFORTRAN和和COBOLCOBOL,大多
2、数在六十年代早期开发出来的语大多数在六十年代早期开发出来的语言都过时了,可是言都过时了,可是 LISPLISP却生下来,并且已经成为人工智能(却生下来,并且已经成为人工智能(AIAI)的首)的首选选 程序序言。程序序言。AutoLISPAutoLISP解释程序位于解释程序位于AutoCADAutoCAD软件包中,软件包中,然而然而AutoCAD R2.17AutoCAD R2.17及更低版本中并不包含及更低版本中并不包含 AutoLISPAutoLISP解释程序,这样,解释程序,这样,只有通过只有通过AutoCAD AutoCAD 2.182.18及更高版本才可以使用及更高版本才可以使用Aut
3、oLISPAutoLISP语言。语言。n n AutoCADAutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,命令末被提供。例如,AutoCADAutoCAD中没有在图形文本对象内绘制矩形及中没有在图形文本对象内绘制矩形及作全局改变的命令。通过作全局改变的命令。通过AutoLISPAutoLISP,你可以使用,你可以使用AutoLISPAutoLISP程序语言编程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用上,可以用Aut
4、oLISPAutoLISP编制任编制任何何程序,或把它嵌入到菜单中,这样定制程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。你的系统会取得更高的效率。二、基本语法二、基本语法n n1 1、一个表达式必须使用配对的括号。、一个表达式必须使用配对的括号。n n2 2、数学运算、数学运算n n1.1.加法加法n n 格式格式(+num1 num2 num3.)(+num1 num2 num3.)n n 此函数()计算加号()右边所有数字的和此函数()计算加号()右边所有数字的和(+num1 num2 (+num1 num2 num3.)num3.)n n 2.2.减法减法n n 格式格式
5、(-num1 num2 num3.(-num1 num2 num3.)n n 此函数()从第一个数中减去第二个数(此函数()从第一个数中减去第二个数(num1-num2num1-num2)n n4.4.除法除法n n 格式(格式(/num1 num2 num3/num1 num2 num3)n n 此函数()用第一个数除以第二个数。如果多于两个数,就用此函数()用第一个数除以第二个数。如果多于两个数,就用第一个数除以其后所有数的乘积第一个数除以其后所有数的乘积num1/num1/(num2 num3 num2 num3 n n .)n n3 3、关系表达式、关系表达式、关系表达式、关系表达式n
6、 n1.1.等于等于n n 格式(格式(=atom1 atom2=atom1 atom2)n n 该函数(该函数(=)检查两个元素是否相等。若相等,条件为真,函数返)检查两个元素是否相等。若相等,条件为真,函数返回。同样,若指定的元素不相等,条件为假,函数返回回。同样,若指定的元素不相等,条件为假,函数返回nilniln n2.2.不等于不等于n n 格式(格式(=atom1 atom2=atom1 atom2)n n 该函数(该函数(=)检查两个元素是否不相等。若不相等,条件为真,)检查两个元素是否不相等。若不相等,条件为真,函数返回。同样,若指定的元素相等,条件为假,函数返回函数返回。同样
7、,若指定的元素相等,条件为假,函数返回nilnil。n n 3.3.小于小于n n 格式(格式(atom1 atom2atom1 atom2)n n 该函数()检查第一个元素(该函数()检查第一个元素(atomatom)是否小于第个元素)是否小于第个元素(atomatom)。若为真,函数返回,否则返回)。若为真,函数返回,否则返回nilnil。n n 4.4.小于等于小于等于n n 格式格式(=atom1 atom2.=atom1 atom2.)n n 该函数该函数(=)(=)(=)检查第一个元素(检查第一个元素(atom1atom1)的值是)的值是否大于等于第二个元素(否大于等于第二个元素(
8、atom2atom2)。若是,函数返)。若是,函数返回,否则返回回,否则返回nilnil。三、基本函数三、基本函数n n 1.defun 1.defun函数函数n n defundefun函数用于在函数用于在AutoLISPAutoLISP程序中定义函数,其格式为:程序中定义函数,其格式为:n n (defun name(defun nameargumentargument)n n 其中其中namename函数名函数名n n argumentargument参数列表参数列表n n 示例:示例:n n (defun ADNUM(defun ADNUM(),定义了一个函数(),定义了一个函数ADN
9、UMADNUM,此函数无参数,此函数无参数,也无局部变量(也无局部变量(Local Local n n symbols symbols)。这就意味着程序中用到所有变量均为全局变量。全局)。这就意味着程序中用到所有变量均为全局变量。全局变量的值在程序结束时不会丢失。变量的值在程序结束时不会丢失。n n(defun ADNUM(defun ADNUM(b c)b c),定义了一个含有三个参数、,定义了一个含有三个参数、和和c c的函数的函数ADNUMADNUM。变量、。变量、从程序外部获取它们的值。从程序外部获取它们的值。n n (defun ADNUM(defun ADNUM(/n n ),定义
10、了一个含有两个局部变量和的函数),定义了一个含有两个局部变量和的函数ADNUMADNUM。局部。局部变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。变量在程序的执行期间保留其值,而且只能在它所在的程序中使用。n n n(defun :ADNUM(),在函数名前加上:后,此函数就可以通n过在AutoCAD的Command:提示符后输入其函数名来执行。如果没有使用:,函数名则必须置于圆括号中。n注意 AutoLISP包含一些内置函数,不要使用其中的任一名称作为函数名或变量名,以下是一些AutoLISP内置函数的保留名称列表。n2.setq函数n setq函数用于给变量赋值,其格式如下:
11、n (setq name valueName value)n 其中Name变量名n value赋予变量的值n 赋予变量的值可以是任何表达式(数字表达式,字符串表达式或既含有字母又含有数字的表达式)。若该值为字符串,其长度不可超过100个字符。n Command:(setq 12)n Command:(setq 8.5 12)n n3 3、CommandCommand函数函数n n CommandCommand函数用于在函数用于在AutoLISPAutoLISP程序内部执行标准的程序内部执行标准的AutoCADAutoCAD命令。命令。AutoCADAutoCAD命令名及命令选项必须置于双引命令
12、名及命令选项必须置于双引号内。号内。CommandCommand函数的格式为:函数的格式为:n n (Command Command“CommandnameCommandname”)n n 其中其中CommandCommandAutoLISPAutoLISP函数函数n n CommandnameCommandnameAutoCADAutoCAD命令命令n n 示例:示例:n n n n(CommandCommand“lineline”Pt1 Pt2 Pt1 Pt2“”“”)n n “lineline”AutoCAD AutoCAD 命令命令n n Pt1Pt1第一点第一点n n Pt2Pt2第
13、二点第二点n n “”“”用于返回,相当于用于返回,相当于“回车回车”键键n n4.getpoint4.getpoint函数函数n n getpointgetpoint函数暂停程序的运行,允许用户输入一个点的、坐标函数暂停程序的运行,允许用户输入一个点的、坐标或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。或、坐标。该点的坐标可以由键盘或使用屏幕光标输入。getpointgetpoint函数的格式为:函数的格式为:n n (getPointgetPointPointPointPromptPrompt)n n 其中其中pointpoint输入一个点,或选择一个点输入一个点,或选择一个点n n
14、promptprompt将显示在屏幕上的提示将显示在屏幕上的提示n n 示例:示例:n n (setq Pt1setq Pt1(getpointgetpoint)n n (setq Pt1setq Pt1(getPointgetPoint“选择第一点选择第一点”)n n有上面几个函数就可以开始编程了:有上面几个函数就可以开始编程了:例例1 1 编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过编写一个程序,该程序将提示用户选择三角形的三个顶点,并通过它们绘出如三角形。它们绘出如三角形。本例中,程序的输入为三个点的坐标,期望的输出为一个三角形。用以本例中,程序的输入为三个点的坐标,期望的
15、输出为一个三角形。用以生成该三角形的处理过程为:由生成该三角形的处理过程为:由P1P1到到P2P2、由、由P2P2到到P3P3、到、到P3P3到到P1P1各画一各画一条直线。弄清这三部分就会使编程过程更清晰。条直线。弄清这三部分就会使编程过程更清晰。n n;该程序提示输入三点,该程序提示输入三点,1 1n n;提示选取点进可以是在屏幕上点取,也可以是输入坐标提示选取点进可以是在屏幕上点取,也可以是输入坐标 2 2n n;程序将依此三点画出一个三角形程序将依此三点画出一个三角形 3 3n n 4 4n n(defun(defun:triang1()triang1()5 5 n n (setq P
16、1setq P1(getPointgetPoint“选择第一点:选择第一点:”)6 6n n (setq setq 2 2(getPointgetPoint“选择第二点:选择第二点:”7 7n n (setq setq 3 3(getPointgetPoint“选择第三点:选择第三点:”)8 8n n (CommandCommand“lineline”P1 P2 P3 P1 P2 P3“”)9 9n n )1010n n说明说明n n 第第1 13 3行行n n 前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编前三行为注释行,用于描述程序中的函数。这几行很重要因为有它们,编辑程
17、序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都辑程序会变得简单一些。可以在任何必要的时候使用注释。所有的注释行都必须以分号(;)开头,当程序装入时这些行会被忽略。必须以分号(;)开头,当程序装入时这些行会被忽略。n n 第第4 4行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序行:行为空行,用于分隔程序与注释部分。空行还可以用来分隔程序的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。的不同模块。这样便于区分程序的不同部分。空行对程序没有影响。n n n n第第5 5行:(行:(defun C:triang1()defun C:triang1()n n 本
18、行中,本行中,defundefun为一个为一个AutoLISPAutoLISP函数,它定义了函数函数,它定义了函数TRIANG1TRIANG1。TRIANG1TRIANG1为该函数的函数名。由于此函数名前带有:,因此该函数可以像为该函数的函数名。由于此函数名前带有:,因此该函数可以像AutoCADAutoCAD命令一样被执行。若没有:命令一样被执行。若没有:,n n TRIANG1 TRIANG1命令只能置于圆括号中执行(命令只能置于圆括号中执行(TRIANG1TRIANG1)。此函数带有三个全)。此函数带有三个全局变量(局变量(n n P1,P2P1,P2,P3P3)。第一次编写)。第一次编
19、写AutoLISPAutoLISP程序时,保持变量为全局变量是个好程序时,保持变量为全局变量是个好习惯。这是因为装入并运行程序后,可以通过在习惯。这是因为装入并运行程序后,可以通过在AutoCADAutoCAD命令提示行中输人命令提示行中输人感叹号(!)并在其后输入变量名来检查变量的值(感叹号(!)并在其后输入变量名来检查变量的值(CommandCommand:!:!P1P1)。一)。一旦程序通过测试并运行正常,就应该使它们成为局部变量旦程序通过测试并运行正常,就应该使它们成为局部变量(defun(defun n n :TRIANG1TRIANG1(P1 P2 P3P1 P2 P3)n n第第
20、6 6行:(行:(setq P1setq P1(getpointgetpoint“Enter first Point Enter first Point triangletriangle:)n n 本行中,本行中,getpointgetpoint函数暂停程序的运行,允许用户输入三角形的第一个点。函数暂停程序的运行,允许用户输入三角形的第一个点。提示信息提示信息Enter first Point of Enter first Point of n n triangle triangle显示在屏幕的提示区内。可以通过键盘输入该点的坐标,也可以用显示在屏幕的提示区内。可以通过键盘输入该点的坐标,也可
21、以用屏幕光标选择该点。随后屏幕光标选择该点。随后setqsetq函数将这些坐标赋予变量函数将这些坐标赋予变量P1P1。的作用是回车,。的作用是回车,其后的表达式将被打印在下一行上(其后的表达式将被打印在下一行上(“”代表代表“)n n n n第行和第第行和第8 8行:(行:(setq setq 2 2(getpointgetpoint“Enter second Point of Enter second Point of triangletriangle:”)及()及(setq setq n n 3 3(getpointgetpoint“Enter third Point of triangl
22、eEnter third Point of triangle:”)n n 这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把这两行提示用户输入三角形的第二个顶点和第三个顶点,随后把这些坐标赋予这些坐标赋予2 2和和3 3。的作用是回车,因此输入提示显示在下。的作用是回车,因此输入提示显示在下一行中。一行中。n n 第第9 9行:(行:(CommandCommand“lineline”P1 P2 P3 P1 P2 P3“”)n n 本行中,本行中,CommandCommand函数用来输入函数用来输入AutoCADAutoCAD的的lineline命令,然后从命令,然后从P1P1到到P2P2
23、,P2P2到到P3P3各画一条直线。各画一条直线。“”(表示(表示“”选项)把最选项)把最后一点后一点3 3与第一点与第一点P1P1连接起来。所有的连接起来。所有的AutoCADAutoCAD命令及选项在命令及选项在AutoLISPAutoLISP程序中使用时都必须置于双引号内。变量程序中使用时都必须置于双引号内。变量P1P1、2.2.n n 3 3之间用空格分隔。之间用空格分隔。n n 第第1010行行n n 本行仅包含一个用于表明函数本行仅包含一个用于表明函数TRIANG1TRIANG1定义完成的右括号。该括定义完成的右括号。该括号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样
24、号也可以写在上一行中。把它单独放在一行是一个好习惯,因为这样做任何程序员都可以很容易的确定定义已结束。然而某些程序中,同做任何程序员都可以很容易的确定定义已结束。然而某些程序中,同一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确一程序内的多个定义及模块需要明确区分开。括号及空行有助于明确定义或程序段的起始和结束。定义或程序段的起始和结束。再增加几个函数再增加几个函数n nSSGETSSGETn n格式:格式:(ssget sel-method pt1 pt2 pt-list filter-list)(ssget sel-method pt1 pt2 pt-list filter-l
25、ist)n n格式解释:格式解释:n nsel-methodsel-method:n n字符串,字符串,指定对象选择方法指定对象选择方法n nPt1,pt2 Pt1,pt2 选择方法相关的点选择方法相关的点n nPt-list,Pt-list,点表点表n nfilter-listfilter-list,过滤器,过滤器n nSslengthSslengthn n用法:求出一个选择集中的对象(图元)数目,用法:求出一个选择集中的对象(图元)数目,并将其作为一个整数返回并将其作为一个整数返回n n格式:格式:(sslength ss)(sslength ss)n n格式说明:格式说明:ss ss,选
26、择集名称,选择集名称n nSsnameSsnamen n用法:提取选择集用法:提取选择集 中指定图元的图元名中指定图元的图元名n n格式:格式:(ssname ss index)(ssname ss index)n n格式说明:格式说明:ss ss 选择集名,选择集名,index:index:整数,表示选择集整数,表示选择集的第几个图元,第一个是(的第几个图元,第一个是(ssname ss 0),ssname ss 0),以此类推以此类推n nRepeatn n用法:对循环体中的每一个表达式进行指定次数的求值计算n n格式:(repeat int expr.)n n格式说明:n nInt:整数
27、,表示 循环的次数n nExpr:表达式,所要进行循环的表达式n n案例案例案例案例1 1:n n凤凰城凤凰城J J区,测量队送来的地籍图门墩没有填充,门墩数量区,测量队送来的地籍图门墩没有填充,门墩数量808808个,但做小宗地图门墩必个,但做小宗地图门墩必须用白色实心填充。须用白色实心填充。思路:构造算法,算法思路:构造算法,算法1 1、利用、利用CADCAD本身的命令建立选择集逐个填充本身的命令建立选择集逐个填充n n 算法算法2 2、利用图元组码生成填充、利用图元组码生成填充n n第一算法要简单一些,采用第一个第一算法要简单一些,采用第一个n n步骤:步骤:步骤:步骤:1 1、建立选择
28、集、建立选择集 n n 2 2、提取单个图元用命令进行填充、提取单个图元用命令进行填充n n(defun c:tch(/en n en_n)(defun c:tch(/en n en_n)n n (setq(setqen(ssget)en(ssget);建立选择集建立选择集n nn 0n 0 ;初始化计数器初始化计数器n n )n n (repeat(sslength en)(repeat(sslength en);进入循环进入循环 n n (setq en_n(ssname en n)(setq en_n(ssname en n);提取图元名提取图元名n n n (1+n)n (1+n);计
29、数器加计数器加1 1,为提取下一,为提取下一 选择对象做准备选择对象做准备 n n )n n (command-bhatch p solid s en_n )(command-bhatch p solid s en_n );调入调入CADCAD命令命令,执行操作执行操作n n );退出循环退出循环n n)更高一层:图元组码更高一层:图元组码n n一、组码概述:n n组码也就是DXF码,是以数据形式标记CAD图形的一种形式。任何CAD图元都由特定的组码来标记。n n对组码的详细说明CAD开发者帮助有详细的说明n n二、常用图元组码:n n0 图元类型 n n5 句柄 n n8 图层名 n n6
30、线型名称 (如果线型不为“BYLAYER”,此群码值会出现)n n48 线型比例(选择性)n n60 对象可见性,0=可见,1=不可见n 67 值为空或0时即指对象在模型空间,如果为1指在图形空间“text”文字图元组码文字图元组码nTEXT 组码组码n(-1.)(0.TEXT)(330.)(5.n88)(100.AcDbEntity)(67.0)(410.Model)(8.0)(100.AcDbText)(10 n526.763 238.788 0.0)(40.2.5)(1.abc)(50.0.0)(41.1.0)(51.0.0)(7.nStandard)(71.0)(72.0)(11 0.
31、0 0.0 0.0)(210 0.0 0.0 1.0)(100.AcDbText)n(73.0)n说明:说明:n 39 线宽,默认值=0 n10 第一对齐点n40 文字高度n1 文字内容n50 文字旋转角度 (默认值=0)n41 宽度比例 系数(默认值=1)n51 倾斜角度 (默认值=0)n7 文字字型名称(默认值=STANDARD)n71 文字产生标志(默认值=0)n2 文字是反向的(即在X方向镜射)n4 文字是上下颠倒(即在Y方向镜射)n72 水平文字对正类型(默认值=0)整数码(非位码)n0 左n1 中心n2 右n3 对齐(如果垂直对齐=0)n4 中央(如果垂直对齐=0)n5 拟合(如果
32、垂直对齐=0)n0 与群码73组合对齐 方式请参考下表n73 垂直文字对正类型(默认值=0)为整数值非位码n0 基准线n1 下n2 中央n3 下n0 与群码72组合对齐方式请参考下表n n;LISP;LISP实例详解实例详解n n;2009;2009年年1 1月月1313日日n n ;对字符串加前缀对字符串加前缀n n(defun c:jqz(/str ss1)(defun c:jqz(/str ss1)n n (setq str(getstring t n (setq str(getstring t n请输入要增加的前缀请输入要增加的前缀:):)n n;引入前缀字符串引入前缀字符串n n (
33、setq(setqss1(ssget(list(cons 0*text)ss1(ssget(list(cons 0*text)n n;建立选择集建立选择集,加过滤器加过滤器n n )n n )n n )n n (en_jqj ss1)(en_jqj ss1)n n ;调入转换函数调入转换函数n n (princ n(princ n转换成功转换成功)n n;成功提示成功提示 n n)n n;获取图元组码并进行加前缀操作获取图元组码并进行加前缀操作n n(defun en_jqj(ss1/n en_n data tex1 tex2)(defun en_jqj(ss1/n en_n data tex
34、1 tex2)n n (setq n 0)(setq n 0);初始化初始化n nn n (repeat(sslength ss1)(repeat(sslength ss1);开始选择集循环开始选择集循环n n (setq en_n(ssname ss1 n)(setq en_n(ssname ss1 n);提取第一个选择集图元名提取第一个选择集图元名n n data(entget en_n)data(entget en_n);获取文字图元组码获取文字图元组码n n )n n (setq tex1(assoc 1 data)(setq tex1(assoc 1 data);查找文字的内容查找文
35、字的内容n ntex2(cons 1(strcat str(cdr tex1)tex2(cons 1(strcat str(cdr tex1);建立替代的文字内容建立替代的文字内容 n n n (1+n)n (1+n);选择集计数器加选择集计数器加1 1,为循环做,为循环做准备准备n n )n n (setq data(subst tex2 tex1 data)(setq data(subst tex2 tex1 data);替换原来的文字内容,达到增加前替换原来的文字内容,达到增加前缀的目的缀的目的n n (entmod data)(entmod data);更新图元显示,使结果能在屏幕在看
36、到更新图元显示,使结果能在屏幕在看到n n)n n)编辑器的使用编辑器的使用n n编辑器的功能:n n1、编辑代码n n“检查编辑器中的文字”,用于检查基本的语法错误。n n“设置编辑器中的文字格式”,用于整理格式,使代码更易于阅读与修改主。n n编辑器的调试功能:编辑器的调试功能:n n1 1、加载(工具、加载(工具加载编辑器中的文字加载编辑器中的文字)n n调试调试”工具栏中包含了几个工具。默认情况下,该工具栏工具栏中包含了几个工具。默认情况下,该工具栏附着在附着在“视图视图”和和“工具工具”工具栏上,看起来就象一个工具栏上,看起来就象一个 VLISP VLISP 工具栏。工具栏。n n“
37、调试调试”工具栏包括最左边的那几个图标。该工具栏上的工具栏包括最左边的那几个图标。该工具栏上的大多数项目在平时都处于禁用状态,只有在调试模式(例大多数项目在平时都处于禁用状态,只有在调试模式(例如定义了一个或几个断点)下运行程序时它们才会变为可如定义了一个或几个断点)下运行程序时它们才会变为可用状态。用状态。n n如果您尚未将如果您尚未将“调试调试”工具栏从屏幕顶部拖下来,那您现工具栏从屏幕顶部拖下来,那您现在可以试试。要拖动它,只需用鼠标点中工具栏最左边的在可以试试。要拖动它,只需用鼠标点中工具栏最左边的两个竖条并拖动即可。用这种拖动方法可以将两个竖条并拖动即可。用这种拖动方法可以将 VLI
38、SP VLISP 的任的任何工具栏拖到屏幕的任意位置,以满足工作的需要。何工具栏拖到屏幕的任意位置,以满足工作的需要。n n“调试调试”工具栏上的按钮分为三组,每组包括三个按钮。工具栏上的按钮分为三组,每组包括三个按钮。在调试模式下运行程序时,该工具栏如下图所示:在调试模式下运行程序时,该工具栏如下图所示:n n n n前面三个按钮让您单步执行程序代码。前面三个按钮让您单步执行程序代码。n n接下来的三个按钮用来确定在断点处暂停或因错误而暂停接下来的三个按钮用来确定在断点处暂停或因错误而暂停时,下一步该如何继续。时,下一步该如何继续。n n接下来的三个按钮用来设置或删除断点、添加监视以及跳接下来的三个按钮用来设置或删除断点、添加监视以及跳转到程序代码中的最近一次运行暂停处。转到程序代码中的最近一次运行暂停处。n n“调试调试”工具栏上的最后一个按钮是工具栏上的最后一个按钮是“单步调试指示器单步调试指示器”。它不执行任何操作,但提供了一个直观的指示器,用于在它不执行任何操作,但提供了一个直观的指示器,用于在单步执行代码时指示光标的位置。不是运行在调试模式下单步执行代码时指示光标的位置。不是运行在调试模式下时,该按钮显示为空白时,该按钮显示为空白.THE ENDTHE ENDTHANKS!