很多朋友对于CAD怎么自己编lisp程序和lisp中不建议用set不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
本文目录
CAD怎么自己编lisp程序
(setq#os1(getvar"osmode"));;得到cad里面的捕捉设置(setvar"osmode"0);;关闭捕捉绘图,否则会绘图不正确(command"PLINE"@p1@p2);;画多段线(setvar"osmode"#os1);;还原捕捉设置
编写lisp程序多条多段线连接成一条多段线
命令HB合并多段线(defunc:hb(/@myL@lpNum@etLst@@ent@ptLst)(setq@myL(ssgeti'((0.LINE,LWPOLYLINE)))) ;将创建已经选择的线(多段线或者直线)的选择集(setq@lpNum0) ;为循环计数参数赋值(repeat(sslength@myL) ;选择集包含几个对象就循环几次(setq@etLst(append@etLst(list(ssname@myL@lpNum))) ;逐个提取选择集中的图元名并储存到表@etLst中 @lpNum(1+@lpNum) ;每循环一次循环计数参数+1))(foreach@@lpet@etLst ;历遍表@etLst中每一个原子,以@@lpet代替原子(progn(setq@@ent(entget@@lpet)) ;将每个图元的详细列表赋值到@@ent中(foreach@@2lpe@@ent (if(=(car@@2lpe)10) ;如果子表中第一个原子为10 (setq@ptLst(append@ptLst(list@@2lpe)));将子表列入@ptLst ))(entdel@@lpet) ;删除已提取过点的对象))(entmake(append(list ;通过点表创建新的多段线 '(0.LWPOLYLINE) '(100.AcDbEntity) '(100.AcDbPolyline) (cons90(length@ptLst)) ) @ptLst ))(princ))=====分割线========================================顺带一说。。。你为何不用CAD自带的pedit命令?pedit(使用CAD原生的ACAD.PGP可简化为PE命令)→M→选择所有需要合并的线→(若有不含多段线的元素)按Y转换所有选择对象为多段线→J合并→空格或者回车或者ESC退出
lisp如何读取指定文件内容并赋值变量
;;文件读取样例(defunc:loadd()(vl-load-com);以读的方式打开文件"c:/lj.txt"lj.txt的内容“h:”(setqwjm"c:/lj.txt")(if(findfilewjm);如果文件存在,就打开文件并读出第一行内容之后关闭(progn;读取文件中的一行,将读出来的值赋予panfu(setqfff(openwjm"r")panfu(read-linefff));关闭文件(closefff)(if(/=panfunil)(progn;将变量panfu的内容与/cx/H7.dvb连接成一个字符串(setqzfc(strcatpanfu"/cx/H7.dvb"))
;加载VBA工程h:/cx/H7.dvb(command"_vbaload"zfc))));如果文件不存在就退出(vl-exit-with-error(alert"c:/lj.txt不存在,程序将结束!")))(princ))
cdr移除后面对象怎么不管用
cdr移除后面对象不起作用的原因可能是因为cdr只是返回cons的尾部列表,但并没有对该列表进行任何修改或删除操作。cdr是CommonLISP的函数,其作用是返回cons单元中的尾部(即第二个参数),并不会删除或修改任何列表对象。如果想要删除或修改列表中的元素,需要使用像delete、remove等函数来操作。另外,还有一些其他的LISP函数,例如subseq和splice等,可以用于修改列表对象。
OK,关于CAD怎么自己编lisp程序和lisp中不建议用set的内容到此结束了,希望对大家有所帮助。