[求LISP]求COPY和OFFSET新物体使之到当前层!
求COPY和OFFSET新物体使之到当前层!例如画室内的家具时(当前层为家具层),我OFFSET墙线600作为柜的边线,想新物体(在墙的层)直接为当前层:家具层.
谢谢! 我也很想知道 BBO你能不能发点有用的帖,一连串的都是废帖,版主应该管管,提高明经帖子的质量是提高明经声誉的重要组成部分。 (defun c:aa (/ clay dist en p2)<BR> (setq clay (getvar "clayer"))<BR> (initget 1)<BR> (setq dist (getreal "\n请输入偏移距离:"))<BR> (while (setq en (entsel "\n请选择图元:"))<BR> (if en<BR> (progn<BR> (setq p2 (getpoint (osnap (cadr en) "nea") "\n请指定方向:"))<BR> (command "_.offset" dist (car en) p2 "")<BR> (command "_.change" (entlast) "" "P" "la" clay "")<BR> )<BR> )<BR> )<BR> (princ)<BR>) 用of1代替offset命令,copy一样做...
(defun c:Of1()<BR> (setvar "cmdecho" 1)<BR> (command "_.offset")<BR> (while (= (getvar "cmdactive") 1)<BR> (command pause)<BR> )<BR> (setvar "cmdecho" 0)<BR> (command "_.change" (entlast) "" "p" "la" (getvar "clayer") "")<BR> (princ)<BR>)<BR> 我这有晓东CAD那帮我写的,简单明了!
;;;COPY物体到当前层<BR>(defun c:cv () <BR> (vl-load-com) <BR> (vl-cmdf "copy" pause pause pause pause) <BR> (setq obj (vlax-ename->vla-object (entlast))) <BR> (vla-put-layer obj (getvar "clayer")) <BR>) 我是一个不懂偏程的家伙、、要向懂的大侠看齐。
用了上面大侠偏的觉得如果能改一下就好啦。我是做建筑的这个我都经常用。所以嘛~~~~
如果4楼里面加上《在图上点选距离就好啦。
5楼的大哥只能一次一次的offse这样对工作量大的就有点烦啦。
如果可以做一个循环就完美了。
6楼的。我也试过啦。不过出错的频率很高。 offset命令本身就可以循环的,只是我的程序只将最后一个对象修改到当前层,以下进行了修正(defun c:Of2( / ent ents)
(setvar "cmdecho" 1)
(setq ent (entlast))
(command "_.offset" pause)
(while (= (getvar "cmdactive") 1)
(command pause)
(if (not (equal ent (entlast)))
(progn
(setq ents (entget (entlast)))
(setq ents (subst (cons 8 (getvar "clayer")) (assoc 8 ents) ents))
(entmod ents)
)
)
)
(princ)
) 谢了。 ;clone.lsp<BR>;复制所选对象到另一个层,不移动其原始位置。
(defun C:CF( / s l)<BR> (setvar "cmdecho" 0)<BR> (if<BR> (and<BR> (setq s (ssget))<BR> (not (zerop (sslength s)))<BR> (not (zerop (strlen (setq l (getstring "\n要复制到的层: "))))))<BR> (command "copy" s "" "@" "@" "change" s "" "p" "la" l "")<BR> (prompt "Invalid."))<BR> (progn)<BR>)
<BR>; copylay.lsp<BR>; 复制到当前层(copy_to_layer)。<BR>;本程序将复制一个实体到当前层无论它在哪个层。
(defun C:cpc ()<BR> (setvar "cmdecho" 0)<BR> (setq c_layer (getvar "clayer")<BR> sset (ssget)<BR> pt1 (getpoint "\n基点: ")<BR> count 0)<BR> (prompt "\n位移的第二点: ")<BR> (setq len (sslength sset))<BR> (while (< count len)<BR> (setq name (ssname sset count)<BR> ptlst (entget name)<BR> b (assoc 8 ptlst)<BR> b1 (cdr (assoc 8 ptlst))<BR> c (cons 8 c_layer)<BR> d (subst c b ptlst)<BR> count (1+ count))<BR> (entmod d)<BR> )<BR> (command "_copy" sset "" pt1 pause)<BR> (setq count 0)<BR> (while (< count len)<BR> (setq name (ssname sset count)<BR> ptlst (entget name)<BR> b (assoc 8 ptlst)<BR> c (cons 8 b1)<BR> d (subst c b ptlst)<BR> count (1+ count))<BR> (entmod d)<BR> )<BR> (princ)<BR> )<BR>我这有两个LISP,能否帮忙改改,让它们合并成:拷贝物体到当前层,不移动其原始位置。或者改第一个LISP,使的选层时能跳出选层的对话框(选项有:选当前层,选层列表中的任意层),免得有的层名太长不好记!
页:
[1]
2