‘壹’ CAD lsp代码怎么写这个命令,用过,但没代码,求指导
框选对象图层L1
分析每个对象的坐标包围框,代码
(vl-load-com);加载VBA函数
(setq obj (vlax-ename->vla-object ent)) ;obj对象
(vla-GetBoundingBox obj '&p1 '&p2) ;得到包围框
(setq &p1 (vlax-safearray->list &p1));得到右下角含橡坐标
(setq &p2 (vlax-safearray->list &p2));得到左睁渗上角坐标
建立右下角点坐标集合ss,元素由点与对象构成(list &p1 &p2 ent)
(setq ss(vl-sort ss (function (lambda (x y) (< (caar x) (caar y))))));;X从小到大排序
提取SS里面的对象提取多段线坐标
(setq ss1(mapcar 'cdr (vl-remove-if '(lambda (X) (/= 10 (car x))) (entget ent))))
(setq &kw1 (ssget "wp" ss1));提取这个范围的对象,然后移动对象到你需要的地方
或(setq &kw1 (ssget "谈早旁w" &p1 &p2));这样选择对象也可以
移动对象&kw1按距离来移动。
左下角的坐标可以这样得到取得
(setq x1 (car &p2))
(setq y1 (cadr &p1))
(setq &p3 (list x1 y1));左下角坐标
你的代码主要是没有包围框代码有了代码就可以方便的写出你的程序了。
‘贰’ cad如何编lsp命令锁定除选定的图层外其他图层
(defun c:ff () (setvar "哗洞基cmdecho" 0) (command "layoff") (setvar "cmdecho" 1) (prin1) ) ;;选择需要关闭的图层
(defun c:qw () (setvar "cmdecho" 0) (command "layiso") (setvar "cmdecho" 1) (prin1) ) ;;选择需要隔离的图层;如果要锁定或关闭;输入这个命令的时候;→向下方向键来设乱谨置;设置好了就以后默认
(defun c:tc () (setvar "cmdecho" 0) (command "laymcur") (setvar "cmdecho" 1) (prin1) ) ;;选择对象为当前图层
;;Layer
;;输入要置为当前的图层名或 <选择对象>: AA输入选项 [?/生成(M)/设置(S)/新建(N)/重命名(R)/开(ON)/关(OFF)/颜色(C)/线型(L)/线宽(LW)/透明度(TR)/材质(MAT)/打印(P)/冻结(F)/解冻(T)/锁定(LO)/解锁(U)/状态(A)/说明(D)/协调(E)]:
如:(command "Layer" "ON" "AA" "");;打开颤贺AA图层;
(command "LAYER" "OFF" "AA" "");;关闭AA图层;
‘叁’ 怎么在cad命令行运行编写好的lisp命令
命令行不能够运行这个的,首先你把文字保存在记事本并以【.lsp】为后缀命名如【boxa.lsp】。然激判后把记事本复制了,在AutoCAD里面粘贴(消伍CTRL+V)【不要在命令行粘贴】,粘贴好了就可以使用命令【BOXA】了。
另外你的程序有问题,这个是子程序:(defun boxa ()
如果是主程序的话,应拿铅或当是:(defun C:boxa ()
【注意所有的字体都要英文打字】
‘肆’ cad中添加LSP软件,如何使用
具体以下。
acad.lsp是AutoCAD软件的Lisp脚本文件,当打开AutoCAD图形dwg文件时会自动运行相同文件夹歼袭让中的名为acad.lsp的脚禅迅本文件。不过现在一般是CAD病毒文件。只要将这文件放到CAD安装文件夹,或放在一个".DWG"文件的目录,打开这个目录的CAD文件,acad.lsp就能自动运行了(典型的病毒特征)。
打开一份图纸,直接把LSP文件拖入CAD界面内,或者命令AP加载,AP加载窗还可以设置成随CAD启动。再或者,用记事本打开CAD安装目录下Support文件夹内的acad(版本号).lsp文件,然后把你LSP内容复制到里面,这样也是随CAD启动。但首先你要氏局知道你的这个stx.lsp源码文件的内容是什么,快捷键设置的是什么,加载不等于自动使用。
‘伍’ 求编写个CAD用的LSP文件
(defun C:test nil
(setq pt (getpoint "\n指定矩形中心点:")
L (getreal "\n输入矩形的长度:")
W (getreal "\岩肢燃n输入矩形的宽度:")
)
(setq pt1 (list (- (car pt) (* 0.5 L)) (- (cadr pt) (* 0.5 W))))
(setq pt2 (list (+ (car pt) (* 0.5 L)) (+ (cadr pt) (* 0.5 W))))
(command ".RECTANG" "粗虚non" pt1 "饥脊non" pt2)
(setq str (strcat (rtos l 2 2) "*" (rtos W 2 2)))
(entmake
(list '(0 . "TEXT")
(cons 1 str)
(cons 10 pt)
(cons 11 pt)
(cons 40 5) ;字高
(cons 72 1)
(cons 73 2)
)
)
(princ)
)
;;;使用命令"test"
‘陆’ cad导出自定义的lsp 就是自己命令的lsp文件怎么做出来
输入Vlide,在编辑里面新建一个新LISP文件,把所有的LISP连接复制粘贴到里面,另存一个自己使用名字,否则先加载的无效! lsp文件在cad里有个support文件夹下比如acad2007.lsp文件(我世宽返用的是2007版本的),在后面加一行你写的这个程序名,在cad启动的时候让其搜饥自动加载。
自己命令也可以是PGP文件,如果想把自己命令调到另一下台电脑上使用,就只巧戚要把PGP文件里面的命令复制到另一台电脑上的PGP文件里面,然后输入reinit,点击PGP文件确定,命令就刷新了。希望对你有帮助
‘柒’ 你好,CAD LSP编程,请教你一下
getdist,用鼠标点选两个点得到拆枣亮距离
getreal,直接用键盘输入一个数值
上面两个是我暂时想到的。lisp是表语言,你的括号要成双成对才旅宽行岩慧。
‘捌’ autoCAD LSP编程
接在那一句后面写,加一个pause,就可以输入直径,输入完回车,命令会继续向下执行。
‘玖’ cad里面如何写一个lsp程序来cad的版本!
(defun checkver ( / ver arx )
(setq ver (getvar "acadver"))
(cond
((= (substr ver 1 5) "15.06") (setq arx "xxx")) ;;对应 AutoCAD 2002的arx文件
((= (substr ver 1 4) "16.0") (setq arx "xxx")) ;;对应 AutoCAD 2004的arx文件
((= (substr ver 1 4) "16.1") (setq arx "xxx")) ;;对应轿察 AutoCAD 2005的arx文件
((= (substr ver 1 4) "16.2") (setq arx "xxx")) ;;对应 AutoCAD 2006的arx文件
((= (substr ver 1 4) "17.0") (setq arx "xxx")) ;;对应 AutoCAD 2007的arx文件
((= (substr ver 1 4) "17.1") (setq arx "xxx")) ;;对应 AutoCAD 2008的arx文件扰帆哪
((= (substr ver 1 4) "17.2") (setq arx "xxx")) ;;对应 AutoCAD 2009的arx文件
((= (substr ver 1 4) "18.0") (setq arx "xxx")) ;;对应 AutoCAD 2010的arx文件
((= (substr ver 1 4) "18.1") (setq arx "xxx")) ;;对应 AutoCAD 2011的arx文件
)
(arxload arx)
)
(checkver)
新建一文本缓码文件,将以上代码复制进去,存为checkver.lsp后,将它加入到cad的启动加载程序列表中,即可. "xxx"为对应的arx文件,若文件不存在于cad的搜索路径中,则需将完整文件路径名也写上.
‘拾’ 求大神帮忙写一个CAD里面LSP命令,要求如下
;去掉多段线节点
(defunc:tes(/&kw1entnobjp1ss1ss5x)
(vl-load-com)
(if(and(setqent(entsel" 请选择多段线对象"))
岁历(setqent(carent))
(=(cdr(assoc0(entgetent)))"LWPOLYLINE")
)
(progn;;1
(sssetfirstnil(ssaddent))
(setqobj(vlax-ename->vla-objectent))
(setqss5(apply'append(mapcar'cdr(vl-remove-if'(lambda(X)(/=10(carx)))(entgetent)))))
(setqn(-(lengthss5)1)ss5(vlax-safearray-fill(vlax-make-safearrayvlax-vbDouble(cons0n))ss5));双精度表
(setqss5(listss5))
(while(setqp1(x1808262))
(if(=(typep1)'STR)
(progn;;2-1
(if(>(lengthss5)1)(setqss5(cdrss5)))
(setqss1(carss5))
(vla-put-Coordinatesobjss1)
);progn;2-1
(if(setqss1(x1808261entobjp1))(setqss5(consss1ss5)))
);if;2
);while
(sssetfirstnil)
);progn;1
);if
(princ)
);复制到记事本,以【.lsp】后缀命名,CAD命令悔雀基【appload】加载
;修改多段线节点
(defunx1808261(entobjp1/entnobjp1ss1xy)
(setqss1(mapcar碧谨'cdr(vl-remove-if'(lambda(X)(/=10(carx)))(entgetent)))n0)
(setqss1(mapcar'(lambda(x)(list(setqn(1+n))(distancep1x)x))ss1))
(setqss1(apply'append(mapcar'caddr(vl-sort(cdr(vl-sortss1'(lambda(xy)(<(cadrx)(cadry)))))'(lambda(xy)(<(carx)(cary)))))))
(setqn(-(lengthss1)1)ss1(vlax-safearray-fill(vlax-make-safearrayvlax-vbDouble(cons0n))ss1));双精度表
(vla-put-Coordinatesobjss1)
(if(>=n1)ss1nil)
)
(defunx1808262()
(initget"U")
(getpoint" 请选择要删除的点[返回上一步(U)]")
)