找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2248|回复: 17

(完成)[编程申请]:copy offset 实体到当前层

[复制链接]
发表于 2004-3-19 14:46:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
人总是越来越懒了,请求编程copy offset实体到当前层上,CAD原本的命令新生成的实体和源实体在一个层上,总是要多转换一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-3-19 16:25:41 | 显示全部楼层

Re: [编程申请]:copy offset 实体到当前层

最初由 doongs 发布
[B]人总是越来越懒了,请求编程copy offset实体到当前层上,CAD原本的命令新生成的实体和源实体在一个层上,总是要多转换一下 [/B]

用命令反应器好些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2004-3-19 17:51:00 | 显示全部楼层
是可以作个反应器,命令完成后给出提示是否修改到当前层,OK修改Cancel取消
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-19 20:13:05 | 显示全部楼层
我觉得用发应器完全实现不太可能,CAD的发应器不够完善,局限性也很大
比如COPY中使用多重拷贝或者OFFSET中多重偏移发应器就察觉不到
其只对开始和结果作用,至于中间是否使用了多重命令是无法生效的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-22 13:35:30 | 显示全部楼层

Re: Re: [编程申请]:copy offset 实体到当前层

最初由 eachy 发布
[B]
用命令反应器好些。 [/B]

怎么用?能具体一点吗?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-22 16:05:06 | 显示全部楼层

Re: Re: Re: [编程申请]:copy offset 实体到当前层

最初由 doongs 发布
[B]
怎么用?能具体一点吗?谢谢! [/B]

刚开始理解错了,想想倒是可以实现,先只用命令发应器实现一个,一会再试试另一种方法

  1. ;;;|偏移、拷贝物体自动转化到当前层程序
  2. ;;;|程序加载后在图形关闭前有效
  3. ;;;|snsj 2004.3.22
  4. (defun rev-ty-n (gx / i kj ent entity doc)
  5. (vl-load-com)(setq i 1)
  6. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  7. (if (= (vla-get-ActiveSpace doc) acModelSpace)
  8. (setq entity (vla-get-ModelSpace doc))
  9. (setq entity (vla-get-PaperSpace doc))
  10. )
  11.   (repeat gx
  12. (setq ent (vlax-vla-object->ename
  13. (vla-Item entity (- (vla-get-count entity) i))))
  14.     (setq kj (cons ent kj))
  15.     (setq i (1+ i))
  16.           )
  17.   kj
  18. )
  19. ;--------------------------------------------------------------------
  20. (vlr-command-reactor nil '((:vlr-commandWillStart . startCommand)))
  21. (vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))
  22. ;--------------------------------------------------------------------
  23. (defun startCommand (calling-reactor startcommandInfo /)
  24. (if(or(= (nth 0 startcommandInfo) "OFFSET")(= (nth 0 startcommandInfo) "COPY"))
  25.   (setq apple-qjbl-etlast (entlast))
  26.   )
  27.   )
  28. ;------------------------------------------------------------------------------
  29. (defun endCommand (calling-reactor endcommandInfo / lstleng i  x)
  30.   (cond((or(= (nth 0 endcommandInfo) "OFFSET")(= (nth 0 endcommandInfo) "COPY"))
  31. (setq i 1)
  32.   (while (=(length(vl-remove apple-qjbl-etlast (setq lstleng(rev-ty-n i))))(length lstleng))
  33.     (setq i (1+ i))
  34.     )        
  35.   (mapcar '(lambda (y)
  36.              (if (/=(vla-get-layer(vlax-ename->vla-object y))(getvar "clayer"))
  37.              (vla-put-layer(vlax-ename->vla-object y)(getvar "clayer"))
  38.              )
  39.              )
  40.           (rev-ty-n (- i 1))
  41.           )
  42.     ))
  43.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-22 18:53:05 | 显示全部楼层

Re: Re: Re: Re: [编程申请]:copy offset 实体到当前层

加上拷贝过程用取消结束命令的情况
[php]
;;;|偏移、拷贝物体自动转化到当前层程序
;;;|程序加载后在图形关闭前有效
;;;|snsj 2004.3.22
---------------------------------------------------------------------------
;;;|修改数据通用函数
(defun rev-ty-n (gx / i kj ent entity doc)
(vl-load-com)(setq i 1)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (= (vla-get-ActiveSpace doc) acModelSpace)
(setq entity (vla-get-ModelSpace doc))
(setq entity (vla-get-PaperSpace doc))
)
  (repeat gx
(setq ent (vlax-vla-object->ename
(vla-Item entity (- (vla-get-count entity) i))))
    (setq kj (cons ent kj))
    (setq i (1+ i))
          )
  kj
)
(defun xg (/ i y)
(setq i 1)
  (while (null(member apple-qjbl-etlast (rev-ty-n i)))
    (setq i (1+ i))
    )        
  (mapcar '(lambda (y)
             (if (/=(vla-get-layer(vlax-ename->vla-object y))(getvar "clayer"))
             (vla-put-layer(vlax-ename->vla-object y)(getvar "clayer"))
             )
             )
          (rev-ty-n (- i 1))
          )
  )
;;;|建立发应器
(vlr-command-reactor nil '((:vlr-commandWillStart . startCommand)))
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))
(vlr-command-reactor nil '((:vlr-commandCancelled . cancelCommand)))
;;;|激活反应器
(defun startCommand (calling-reactor startcommandInfo /)
(if(or(= (nth 0 startcommandInfo) "OFFSET")(= (nth 0 startcommandInfo) "COPY"))
  (setq apple-qjbl-etlast (entlast))
    )
  );激活开始反应器
(defun endCommand (calling-reactor endcommandInfo /)
  (if(or(= (nth 0 endcommandInfo) "OFFSET")(= (nth 0 endcommandInfo) "COPY"))
        (xg))
  );激活结束反应器
(defun cancelCommand (calling-reactor cancelcommandInfo /)
(if(or(= (nth 0 cancelcommandInfo) "OFFSET")(= (nth 0 cancelcommandInfo) "COPY"))
        (xg))
  );激活取消反应器
   [/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-3-22 22:44:51 | 显示全部楼层

Re: Re: Re: Re: Re: [编程申请]:copy offset 实体到当前层

最初由 snsj 发布
[B]加上拷贝过程用取消结束命令的情况
;;;|偏移、拷贝物体自动转化到当前层程序
;;;|程序加载后在图形关闭前有效
;;;|snsj 2004.3.22
-------------------------------------------------------------... [/B]

把上面的修改了下

  1. [PHP]
  2. ;;;|建立发应器
  3. (vlr-command-reactor
  4.   nil
  5.   '((:vlr-commandWillStart . startCommand))
  6. )
  7. (vlr-command-reactor
  8.   nil
  9.   '((:vlr-commandEnded . endCommand))
  10. )
  11. (vlr-command-reactor
  12.   nil
  13.   '((:vlr-commandCancelled . cancelCommand))
  14. )
  15. ;;修改实体函数
  16. (defun change-copy-offset-object (/ apple-new-object-number obj space)
  17.   (setq        space (vlax-get-property
  18.                 (vla-get-activedocument
  19.                   (vlax-get-acad-object)
  20.                 )
  21.                 (if (= (getvar "tilemode") 1)
  22.                   'modelspace
  23.                   'paperspace
  24.                 )
  25.               )
  26.   )
  27.   ;;命令结束或取消时空间实体的数量
  28.   (setq apple-new-object-number (vla-get-count space))
  29.   (if (> apple-new-object-number apple-object-number);有新实体
  30.     (progn
  31.       (repeat (- apple-new-object-number apple-object-number)
  32.         (setq
  33.           obj (vla-item
  34.                 space
  35.                 (1- apple-new-object-number)
  36.               )
  37.         )
  38.         (if (/= (vla-get-layer obj) (getvar "clayer"))
  39.           (vla-put-layer obj (getvar "clayer"))
  40.         )
  41.         (setq apple-new-object-number (1- apple-new-object-number))
  42.       )
  43.     )
  44.   )
  45.   (setq apple-object-number nil)
  46. )
  47. ;;;|命令反应器回调函数
  48. (defun startCommand (calling-reactor startcommandInfo /)
  49.   (if (or (= (nth 0 startcommandInfo) "OFFSET")
  50.           (= (nth 0 startcommandInfo) "COPY")
  51.       )
  52.     ;;命令开始记录空间实体数量
  53.     (setq apple-object-number
  54.            (vla-get-count
  55.              (vlax-get-property
  56.                (vla-get-activedocument
  57.                  (vlax-get-acad-object)
  58.                )
  59.                (if (= (getvar "tilemode") 1)
  60.                  'modelspace
  61.                  'paperspace
  62.                )
  63.              )
  64.            )
  65.     )
  66.   )
  67. )
  68. ;;;命令结束回调
  69. (defun endCommand (calling-reactor endcommandInfo /)
  70.   (if (or (= (nth 0 endcommandInfo) "OFFSET")
  71.           (= (nth 0 endcommandInfo) "COPY")
  72.       )
  73.     (change-copy-offset-object)
  74.   )
  75. )
  76. ;;命令取消激活取消反应器
  77. (defun cancelCommand (calling-reactor cancelcommandInfo /)
  78.   (if (or (= (nth 0 cancelcommandInfo) "OFFSET")
  79.           (= (nth 0 cancelcommandInfo) "COPY")
  80.       )
  81.     (change-copy-offset-object)
  82.   )
  83. )[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-25 18:10:46 | 显示全部楼层
code该怎么使用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-3-25 18:19:34 | 显示全部楼层
最初由 hancebueg 发布
[B]code该怎么使用? [/B]

复制-〉到记事本粘贴-〉保存为Lsp文件,到CAD加载。详细使用到教学中心察看教程。

说明:上面的程序可以完成楼主的要求,但还是比较简单的,对比下 autolayer 就知道了,其中的反应器没有管理部分,慎用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-1 14:18:21 | 显示全部楼层
也真有和我一样的懒人,这是我一直想要的东东
试用了一下,当我完成了我需要的工作,想恢复正常拷贝时要怎么操作?想去卸载这个lisp程序,结果不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-1 14:19:39 | 显示全部楼层
搞个r14的
; 复制到当前层(copy_to_layer)。
;本程序将复制一个实体到当前层无论它在哪个层。

(defun C:test ()
    (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)
   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-2 01:36:23 | 显示全部楼层
楼上的实在是太强了
可是我是刚学的菜鸟,不太明白啊
郁闷
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-2 07:14:22 | 显示全部楼层
最初由 conn 发布
[B]搞个r14的
; 复制到当前层(copy_to_layer)。
;本程序将复制一个实体到当前层无论它在哪个层。

(defun C:test ()
    (setvar "cmdecho" 0)
    (setq c_layer (getvar "clayer")
          sset (ssget)
... [/B]

你看清楚,上面的程序是不用再拷贝的,只要使用COPY命令和OFFEST就会自动转的~~~~
用LISP命令实现非常简单见
http://www.xdcad.net/forum/showt ... d=866808#post866808
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-4-3 22:16:04 | 显示全部楼层
最初由 aeo 发布
[B]总觉得不是个事情!
改进:
 add-it,加入反应器,再重复命令,取消反应器 ......
     mirror ,array也加入
  上面的如果命令打成 .copy _offset好象不行,改进之.
    当然还可以加入pasteclip,自己加吧,多?.. [/B]

还可以改进,用一个全局变量控制新生成实体所要到的层,另外对反应器的管理上还有待完善,这方面的例子可见到的就是 autolayer 是比较全面的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-22 04:22 , Processed in 0.332417 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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