A. 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));左下角坐标
你的代码主要是没有包围框代码有了代码就可以方便的写出你的程序了。
B. 求大神帮忙写一个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)]")
)
C. 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图层;