Ⅰ 有几个CAD中的LISP语言怎么编程
AutoLISP语言是在普通的LISP语言基础上,又扩充了许多适用于CAD应用的功能而形成的一种程序设计语言。它是一种解释性求值语言,速度较慢,难以保密,可用任何文字编辑软件编辑,用纯文本的格式保存。例如:
(setq i 1);就是代码i值是1
(command "CIRCLE" '(0 0) 100);命令在坐标原点绘制半径100的圆。
AutoLISP语言中的一切成分都是以函数形式给出的,它没有语句概念或其他语法结构。执行AutoLISP程序就是执行一些函数,再调用其它函数。例如:
(setq pt1 (getpoint "\n请选择圆心插入点"))
(command "CIRCLE" pt1 100);命令这个插入点绘制圆,半径为100
AutoLISP把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行。
例如:一条直线,起点坐标'(0 0),端点坐标'(1000 0),图层为0层,颜色为1【红色】这个是一条直线的一些数据,怎么执行变为程序代码如下:
(entmake (list '(0 . "LINE") '(8 . "0") '(62 . 1) '(10 0 0) '(11 1000 0)))
以上可以直观的看数据,也可以粘贴到AutoCAD的命令行,就绘制出以上要求的直线。
AutoLISP语言中程序运行过程就是对函数求值的过程,是在对函数求值的过程中实现函数的功能。在AutoCAD里面,所有的对象可以看成是由无数的点构成,每个点都有自己的坐标,函数的运行就是计算出这些点的数值,根据得到的数值进行判断。
AutoLISP语言的主要控制结构是采用递归方式。递归方式的使用,使得程序设计简单易懂。例如:
(setq &k1 (entsel));选择对象
(setq &k1 (car &k1));提取图元
(setq #g1 (entget &k1));取得属性列表
(setq c0 (cdr (assoc 0 #g1)));取得图元名称
以上是一个个的写下来,可以写成以下:
(setq c0 (cdr (assoc 0 (entget (car (entsel))))));简单易懂
由于autolisp简单,容易,所以上手很快。编写程序后,可以大大的提高绘图效率,有名的【天正】插件,就是绘图的好帮手。
autolisp程序也有不足的地方,如提取坐标,这个只能在图元属性里面提取,这样的话会有局限性,法向坐标1与-1的坐标值相同,但是图形的位置不同,造成计算坐标的困难,所以提取坐标值,最好使用VLAX函数来提取。
Ⅱ CAD做一个LISP程序,实现按属性块图框里的一个图号按从左到右排列
在这里说一下编程思路:
1、用过滤法,做一个选择集,选中图中所有的TK块
2、遍历这个选择集,得到每个图框的左下角坐标与右上角坐标,以及它里边的图号属性值
----同时得到坐标的最大Y值(用来找空的地方)
3、按属性值进行排序,将每个TK的坐标,排好顺序后,按先后次序,移动到“空”的地方
从左到右放置 ,间隔就是你所说的200
4、第3步中,要根据每个TK的坐标,选中TK内的所有实体,然后一起移动
5、唔。。。。差不多就是以上几步
Ⅲ Auto cad中的LISP语言是什么有怎样的用途
AutoLISP语言是在普通的LISP语言基础上,又扩充了许多适用于CAD应用的功能而形成的一种程序设计语言。它是一种解释性求值语言,速度较慢,难以保密,可用任何文字编辑软件编辑,用纯文本的格式保存。例如:
(setq i 1);就是代码i值是1
(command "CIRCLE" '(0 0) 100);命令在坐标原点绘制半径100的圆。
AutoLISP语言中的一切成分都是以函数形式给出的,它没有语句概念或其他语法结构。执行AutoLISP程序就是执行一些函数,再调用其它函数。例如:
(setq pt1 (getpoint "
请选择圆心插入点"))
(command "CIRCLE" pt1 100);命令这个插入点绘制圆,半径为100
AutoLISP把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行。
例如:一条直线,起点坐标'(0 0),端点坐标'(1000 0),图层为0层,颜色为1【红色】这个是一条直线的一些数据,怎么执行变为程序代码如下:
(entmake (list '(0 . "LINE") '(8 . "0") '(62 . 1) '(10 0 0) '(11 1000 0)))
以上可以直观的看数据,也可以粘贴到AutoCAD的命令行,就绘制出以上要求的直线。
AutoLISP语言中程序运行过程就是对函数求值的过程,是在对函数求值的过程中实现函数的功能。在AutoCAD里面,所有的对象可以看成是由无数的点构成,每个点都有自己的坐标,函数的运行就是计算出这些点的数值,根据得到的数值进行判断。
AutoLISP语言的主要控制结构是采用递归方式。递归方式的使用,使得程序设计简单易懂。例如:
(setq &k1 (entsel));选择对象
(setq &k1 (car &k1));提取图元
(setq #g1 (entget &k1));取得属性列表
(setq c0 (cdr (assoc 0 #g1)));取得图元名称
以上是一个个的写下来,可以写成以下:
(setq c0 (cdr (assoc 0 (entget (car (entsel))))));简单易懂
由于autolisp简单,容易,所以上手很快。编写程序后,可以大大的提高绘图效率,有名的【天正】插件,就是绘图的好帮手。
autolisp程序也有不足的地方,如提取坐标,这个只能在图元属性里面提取,这样的话会有局限性,法向坐标1与-1的坐标值相同,但是图形的位置不同,造成计算坐标的困难,所以提取坐标值,最好使用VLAX函数来提取。
Ⅳ cad里lisp程序编程求助:能够简单计算并显示出来。
你好,请您试一试下面的程序:
;小程序,实现个小功能——比如cad上面有三行文字:
;第一行为:小红年龄:18
;第二行为:小明年龄:9
;第三行为:小李年龄:5
;(这三行文字里年龄都是变的)
;然后调用lisp程序,程序提示选择这三行文字,确定。
;然后程序提示指定插入点。然后点插入点。
;这时候在插入点出现两行文字:
;第一行 小红比小明大:9
;第二行 小红比小李大:13
(defun c:nl ()
(setq sss (ssget)
nm0 (nm&nl 0)
nl0 (cadr nm0)
nm0 (car nm0)
nm1 (nm&nl 1)
nl1 (cadr nm1)
nm1 (car nm1)
nm2 (nm&nl 2)
nl2 (cadr nm2)
nm2 (car nm2)
nl20 (- nl2 nl0)
nl21 (- nl2 nl1)
)
(print (list nm0 nl0 nm1 nl1 nm2 nl2 nl20 nl21))
(command "text" pause "" "" (strcat nm2 "比" nm1 "大:" (rtos nl21 2 0))
"text" "" (strcat nm2 "比" nm0 "大:" (rtos nl20 2 0))
)
)
(defun nm&nl (i / nm nl)
(setq nm (ssname sss i)
nm (entget nm)
nm (cdr (assoc 1 nm))
nl (substr nm 11)
nm (substr nm 1 4)
nl (read nl)
)
(list nm nl)
)
Ⅳ CADlisp编程:如何用lisp处理一个dwg图形中的多个多线段
使用while函数就可以
首先选择集(setq &kw (ssget));得到
进入循环,由于要编辑图形,所以不能够使用repeat函数,要使用while函数。
首先,得到函数的图元:
(setq &k1 (ssname &kw 0))
(while &k1;进入循环
(setq &kw (ssdel &k1 &kw));在选择集里面去掉这个图元,这样才不会出现问题,使可以编辑图形
;;这个时候进入编辑图元&k1,直到编辑完成
(setq &k1 (ssname &kw 0));对下一个图元进行编辑
);循环结束
;以上是依次读取图元过程
Ⅵ CAD lisp语言编程!
转成特定测量数据格式就可以了导入cad