想学习lsp的多多交流交流,本人对lsp稍稍有些了解。附件:AutoLisp入门篇.chm
想学习lsp的多多交流交流,本人对lsp稍稍有些了解。
附件:AutoLisp入门篇.chm
2楼
我是个lisp迷,自编程序一百余条,我现在以cad为平台,自主开发了一套自用的程序组,因此绘图速度暴快!周围朋友都不及,这也是我迷的原因。我的邮箱:waterzxr@163.com
回复
3楼
谢谢,下载了,有时间好好学学....
回复
4楼
欢迎将自己一些很好的lsp,经验贴出来大家学习学习。
回复
5楼
现传一条交流一下,请注意lsp文件与DCL文件的路径配合
回复
6楼
再看下面程序:
(defun c:nn(/)
(setq os0 (getvar "OSMODE"))
(setq ss(ssget)n 0 ptlist1 (list )ptlist2(list ) txtlist(list )
p 0 homept(list ))
(if(= pldist nil)
(setq pldist(getreal"\n喷头间距4400/3600/3400/3000/")))
(while (< n (sslength ss))
(setq st(ssname ss n))
(setq sn(entget(ssname ss n)))
(setq sd(cdr(assoc 0 sn)))
(if (= sd "LINE")(progn
(setq pt1(cdr(assoc 10 sn))pt2(cdr(assoc 11 sn)))
(if(and(>(distance pt1 pt2)50)(=(fix(/(cadr pt1)10))(fix(/(cadr pt1)10))))
(setq ptlist1(cons (list pt1 pt2)ptlist1)))
)) ;选水平直线
(if (= sd "LINE")(progn
(setq pt1(cdr(assoc 10 sn))pt2(cdr(assoc 11 sn)))
(if(and(> (distance pt1 pt2)50)(=(fix(/(car pt1)10))(fix(/(car pt1)10))))
(setq ptlist2(cons (list pt1 pt2)ptlist2)))
)) ;选竖立直线
(if (= sd "TEXT")(progn
(setq pt3(cdr(assoc 10 sn))text(cdr(assoc 1 sn))h(cdr(assoc 40 sn)))
(if(> (ascii text)127)(setq txtlist(cons (list text pt3)txtlist)))
)) ;选房间名
(setq n (+ n 1)))
;以上正确
(while (< p (length txtlist))
(setq ttt1(nth p txtlist)dilist1(list )dilist2(list )
m 0 q 0 dilist3(list )dilist4(list ))
(setq text(nth 0 ttt1)pt0(nth 1 ttt1))
(setq pt4(polar pt0 (/ pi 2)100000) ;文字上侧点
pt5(polar pt0 (/ pi -2)100000);文字下侧点
pt6(polar pt0 pi 100000) ;文字左侧点
pt7(polar pt0 0 100000)) ;文字右侧点
(while (< m (length ptlist1))
(setq ptt(nth m ptlist1))
(setq pt8(polar(nth 0 ptt)(angle(nth 1 ptt)(nth 0 ptt))100)
pt9(polar(nth 1 ptt)(angle(nth 0 ptt)(nth 1 ptt))100))
(setq p1(inters pt0 pt4 pt8 pt9))
(if(/= p1 nil)(setq di(distance p1 pt0)dilist1(cons di dilist1))
(progn(setq p1(inters pt0 pt5 pt8 pt9 ))
(if(/= p1 nil)(setq di(distance p1 pt0)
dilist2(cons di dilist2)))))
(setq m (+ 1 m)))
(setq dist1(apply ’min dilist1)) ;文字上半部距离
(setq dist2(apply ’min dilist2)) ;文字下半部距离
(setq ydist(fix(+ dist1 dist2 50)))
(while (< q (length ptlist2))
(setq ptt(nth q ptlist2))
(setq pt8(polar(nth 0 ptt)(angle(nth 1 ptt)(nth 0 ptt))100)
pt9(polar(nth 1 ptt)(angle(nth 0 ptt)(nth 1 ptt))100))
(setq p1(inters pt0 pt6 pt8 pt9))
(if(/= p1 nil)(setq di(distance p1 pt0)dilist3(cons di dilist3))
(progn(setq p1(inters pt0 pt7 pt8 pt9 ))
(if(/= p1 nil)(setq di(distance p1 pt0)
dilist4(cons di dilist4)))))
(setq q (+ 1 q)))
(setq dist3(apply ’min dilist3)) ;文字左半部距离
(setq dist4(apply ’min dilist4)) ;文字右半部距离
(setq ptx0(nth 0 pt0)pty0(nth 1 pt0))
(setq pt11(list(- ptx0 dist3)(+ pty0 dist1)0)
pt22(list(+ ptx0 dist4)(+ pty0 dist1)0)
pt33(list(- ptx0 dist3)(- pty0 dist2)0)
pt44(list(+ ptx0 dist4)(- pty0 dist2)0))
(setq homept(cons(list pt0 pt11 pt22 pt33 pt44)homept))
(setq p(+ 1 p)))
(c:pt1))
回复
7楼
还有:
(defun c:pt1(/)
(command "layer" "m" "x25" "c" 1 "" "")
(setvar "OSMODE" 0)
(setq n 0)
(while(< n(length homept))
(setq aa(nth n homept))
(setq pt11(nth 1 aa)pt22(nth 2 aa)
pt33(nth 3 aa)pt44(nth 4 aa))
(setq x(distance pt44 pt22)y(distance pt44 pt33))
(setq p(/ x pldist) q(/ y pldist))
(if(/= p(* 1.0(fix p)))(setq p(if(< p 1)1(+(fix p)1))))
(if(/= q(* 1.0(fix q)))(setq q(if(< p 1)1(+(fix q)1))))
(setq b1(/(- x(*(fix(+(/ x p 100)0.5))p 100))2)
a1(/(- y(*(fix(+(/ y q 100)0.5))q 100))2))
(setq plpt_x (list(+ a1(car pt33)(*(fix(+(/ y q 100)0.5))50))
(cadr pt33)))
(setq plpt_y (list(car pt33)
(+ b1(cadr pt33)(*(fix(+(/ x p 100)0.5))50))))
(setq plpt_x1(list(+ (car pt11)(*(fix(+(/ y q 100)0.5))50))
(cadr pt11)))
(setq plpt_y1(list(car pt44)
(+ (cadr pt44)(*(fix(+(/ x p 100)0.5))50))))
(setq m 0 )
(while (< m q)
(setq k 0)
(while (< k p)
(setq plpt(list(+ a1(car pt33)(*(fix(+(/ y q 100)0.5))50)(*(fix(+(/ y q 100)0.5))m 100))
(+ b1(cadr pt33)(*(fix(+(/ x p 100)0.5))50)(*(fix(+(/ x p 100)0.5))k 100))))
(if(and(= m 0)(= k 0))
(command"dimlinear"(polar plpt_x pi (*(/ y q)0.5))
(polar plpt pi (*(/ y q)0.5))
(polar plpt pi (+(*(/ y q)0.5)600))));y座标标注
(if(and(= m 0)(/= k 0))
(command"dimcontinue"(polar plpt pi (*(/ y q)0.5))""""))
(if(and(/= m 0)(= k 0))
(command"dimcontinue"(polar plpt(/ pi -2)(*(/ x p)0.5))""""))
(setq blin "zxr_2212")
(if(= nil(tblsearch "block" blin))
(command"insert"(strcat blin"="bldrive"\\tkzxr\\22\\2212")
plpt """""")
(command"insert" blin plpt """"""))
(setq k(+ 1 k)))
(setq plpt0(list(+ a1(car pt33)(*(fix(+(/ y q 100)0.5))50))
(+ b1(cadr pt33)(*(fix(+(/ x p 100)0.5))50))))
(if(= m 0)(progn
(command"dimcontinue"(polar plpt_x1 pi (*(/ y q)0.5))"""")
(command"dimlinear"(polar plpt_y (/ pi -2) (*(/ x p)0.5))
(polar plpt0 (/ pi -2) (*(/ x p)0.5))
(polar plpt0(/ pi -2)(+(*(/ x p)0.5)600)))))
(setq m(+ 1 m)))
(command"dimcontinue"(polar plpt_y1(/ pi -2)(*(/ x p)0.5))"""")
(setq n(+ 1 n)))
(setvar "OSMODE" os0))
回复
8楼
可以在开头介绍一下这个程序主要是用来做什么的.怎么使用。
回复
9楼
程序非常好,水力计算缺少slb.txt文件,当点计算公式时自动退出。
nn和pt1看样子是布置喷淋的可是不能使用。缺少图块(setq blin "zxr_2212")什么的.
回复
10楼
介绍DCL的资料共49页,下面是第一的内容:
<第一篇 基本知识>
定义档
BASE.DCL 预设在SUPPORT的目录中,它包含了各组件的原型定义,及各类型巳定义的其它基本组件;而所有自行开发的对话框定义文件,都可以使用在BASE.DCL定义文件中的各个组件
ACAD.DCL 预设在SUPPORT的目录中,它包含了AutoCAD中所有标准对话框的定义
参考定义档
可在自行开发的对话框定义文件中,经由include指令,取得指定DCL文件中所定义的组件;其语法如下:
@include "对话框定义档"
e.g. @include "david.dcl"
定义档名称要包含在双引号"中,可以在档名前加上定的目录路径
会先在当前的目录中搜寻该定义文件,然后是定义文件所在的目录;若有指定档案的路径,则只会在指定的目录内寻找
不可以参考ACAD.DCL所定义的对话框,即不可以使用@include "acad.dcl"
预视对话框
若在Visual LISP中开启一对话框定义文件,即可使用 :
工具 -- 接口工具 -- 预览编辑器DCL
在下拉式列示框中,选取该定义文件中所设定的对话框名称,即可预视对话框
亦可直接输入该对话框的名称(要注意大小写)
批注
// 表示其右边(至该行末端)的文字视为注释
/* */ 包括在两个批注符号中间的所有文字(可跨越多行)均视为注释
语义检核
提供4个等级的检核,该些检核会在对话框载入时完成;可以将下列语句放在定义文件中的任何位置,但不能在任何对话框的定义内.
回复
11楼
zxr_2212是定义的一个图块,是另一个程序自动定义的,你也可以按“\\tkzxr\\22\\2212"路径定义后使用,定义图块程序我曾作为软件上传过,可惜网络中心未于登出,不知何故
回复