明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3649|回复: 16

[求LISP]求COPY和OFFSET新物体使之到当前层!

  [复制链接]
发表于 2004-10-18 10:45 | 显示全部楼层 |阅读模式
求COPY和OFFSET新物体使之到当前层!



例如画室内的家具时(当前层为家具层),我OFFSET墙线600作为柜的边线,想新物体(在墙的层)直接为当前层:家具层.


谢谢!
发表于 2004-10-28 17:56 | 显示全部楼层
我也很想知道
发表于 2004-10-29 17:03 | 显示全部楼层
BBO你能不能发点有用的帖,一连串的都是废帖,版主应该管管,提高明经帖子的质量是提高明经声誉的重要组成部分。
发表于 2004-10-29 17:39 | 显示全部楼层
(defun c:aa (/ clay dist en p2)
(setq clay (getvar "clayer"))
(initget 1)
(setq dist (getreal "\n请输入偏移距离:"))
(while (setq en (entsel "\n请选择图元:"))
(if en
(progn
(setq p2 (getpoint (osnap (cadr en) "nea") "\n请指定方向:"))
(command "_.offset" dist (car en) p2 "")
(command "_.change" (entlast) "" "P" "la" clay "")
)
)
)
(princ)
)
发表于 2004-10-29 17:40 | 显示全部楼层
用of1代替offset命令,copy一样做... (defun c:Of1()
(setvar "cmdecho" 1)
(command "_.offset")
(while (= (getvar "cmdactive") 1)
(command pause)
)
(setvar "cmdecho" 0)
(command "_.change" (entlast) "" "p" "la" (getvar "clayer") "")
(princ)
)
 楼主| 发表于 2004-10-30 10:52 | 显示全部楼层
我这有晓东CAD那帮我写的,简单明了! ;;;COPY物体到当前层
(defun c:cv ()
(vl-load-com)
(vl-cmdf "copy" pause pause pause pause)
(setq obj (vlax-ename->vla-object (entlast)))
(vla-put-layer obj (getvar "clayer"))
)
发表于 2004-11-3 23:36 | 显示全部楼层
我是一个不懂偏程的家伙、、要向懂的大侠看齐。


用了上面大侠偏的觉得如果能改一下就好啦。我是做建筑的这个我都经常用。所以嘛~~~~


如果4楼里面加上《在图上点选距离就好啦。


5楼的大哥只能一次一次的offse这样对工作量大的就有点烦啦。


如果可以做一个循环就完美了。


6楼的。我也试过啦。不过出错的频率很高。
发表于 2004-11-4 08:35 | 显示全部楼层
offset命令本身就可以循环的,只是我的程序只将最后一个对象修改到当前层,以下进行了修正
  1. (defun c:Of2( / ent ents)
  2.    (setvar "cmdecho" 1)
  3.    (setq ent (entlast))
  4.    (command "_.offset" pause)
  5.    (while (= (getvar "cmdactive") 1)
  6.        (command pause)
  7.        (if (not (equal ent (entlast)))
  8.            (progn
  9.   (setq ents (entget (entlast)))
  10.   (setq ents (subst (cons 8 (getvar "clayer")) (assoc 8 ents) ents))
  11.   (entmod ents)
  12.            )
  13.        )
  14.    )
  15.    (princ)
  16. )
发表于 2004-11-6 01:41 | 显示全部楼层
谢了。
 楼主| 发表于 2004-12-2 11:34 | 显示全部楼层
;clone.lsp
;复制所选对象到另一个层,不移动其原始位置。 (defun C:CF( / s l)
(setvar "cmdecho" 0)
(if
(and
(setq s (ssget))
(not (zerop (sslength s)))
(not (zerop (strlen (setq l (getstring "\n要复制到的层: "))))))
(command "copy" s "" "@" "@" "change" s "" "p" "la" l "")
(prompt "Invalid."))
(progn)
)
; copylay.lsp
; 复制到当前层(copy_to_layer)。
;本程序将复制一个实体到当前层无论它在哪个层。 (defun C:cpc ()
(setvar "cmdecho" 0)
(setq c_layer (getvar "clayer")
sset (ssget)
pt1 (getpoint "\n基点: ")
count 0)
(prompt "\n位移的第二点: ")
(setq len (sslength sset))
(while (< count len)
(setq name (ssname sset count)
ptlst (entget name)
b (assoc 8 ptlst)
b1 (cdr (assoc 8 ptlst))
c (cons 8 c_layer)
d (subst c b ptlst)
count (1+ count))
(entmod d)
)
(command "_copy" sset "" pt1 pause)
(setq count 0)
(while (< count len)
(setq name (ssname sset count)
ptlst (entget name)
b (assoc 8 ptlst)
c (cons 8 b1)
d (subst c b ptlst)
count (1+ count))
(entmod d)
)
(princ)
)
我这有两个LISP,能否帮忙改改,让它们合并成:拷贝物体到当前层,不移动其原始位置。或者改第一个LISP,使的选层时能跳出选层的对话框(选项有:选当前层,选层列表中的任意层),免得有的层名太长不好记!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 05:48 , Processed in 0.200916 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表