找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1640|回复: 15

[原创]:一个块的代换的程序,可以把所选的块改为统一的。

[复制链接]
发表于 2004-5-12 09:38:44 | 显示全部楼层 |阅读模式

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

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

×
加载下面的lsp
命令行:输入ck
然后选者需要代换的对象
再选者参考对象。

[PHP]
(defun c:ck()
  (princ "\n选者需要修改的对象:<块>")
  (setq ss (ssget))
  (setq en_new (entsel "\n改为对象<块>: "))
  (setq n 0)
  (repeat (sslength ss)
    (setq en_old (ssname ss n))
    (setq en_old_data (entget en_old))
    (if (= (cdr (assoc 0 en_old_data)) "INSERT")
      (progn
        (setq na_old (assoc 2 en_old_data))
        (setq en_new_data (entget (car en_new)))
        (setq na_new (assoc 2 en_new_data))
        (setq en_old_data (subst na_new na_old en_old_data))
        (entmod en_old_data)
        )
      )
    (setq n (+ n 1))
      )
  )
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-17 01:47:41 | 显示全部楼层
不错,挺有用的,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-17 10:40:11 | 显示全部楼层
程序合理,只是商榷一下:setq似乎多了些,不需要调用的中间变量如能省略些最好
另,ET工具已有这个功能的命令:blockreplace
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-17 20:40:06 | 显示全部楼层
哈哈,我还真的没有在意到ET中已经有了,我对ET用的不多。
感谢楼上的建议,的确可以省略一些中间变量。但是因为我学lisp时间不长,所以写的时候不敢有太大的跳跃,那样比较容易出错。关于这个在我慢慢熟悉以后可以改进的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-25 21:46:14 | 显示全部楼层
所说的blockreplace效果怎么像是像是删除啊,被替换的块在屏幕上消失了,rengen也没有,我要替换物体啊,只好试试楼上的程序了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-25 21:52:23 | 显示全部楼层
不会吧,检查一下替换与被替换两种块的定义插入点是否一致
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-25 22:24:51 | 显示全部楼层
插入点应该是一样的,因为我的程序中只是改了块的名字,插入点没有动呀!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-25 22:58:30 | 显示全部楼层
我也做了一个这种程序,我觉得你应该设置一下图层,否则插入的块和原来的块可能不在同一个图层上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-25 23:24:38 | 显示全部楼层
个人认为没有必要修改图层,我是保留原块的图层,但是关于块的特性中可以知道块内的图元不一定是跟着块的图层变化的,看你的值是怎么设置的。只要内部的图元不在0层上,他就不会跟随块所在层变化,这个可以看cad帮助。
所以我当初没有设置图层,因为我的做法是把内部图元的层都不设置为0这样我的块无论在那个层中,块还是自己的颜色线形粗细都不变,这样也不会影像打印。
不过要是想加出这个功能也不难,只要把群码为8的拿出代换就好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-23 10:39:16 | 显示全部楼层
ET只能单个块操作,本程序可以一批操作。哈哈。太谢谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-23 12:51:24 | 显示全部楼层
请教大虾,为什么偶用了替换后,被替换后的块怎么移动到其他的位置了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-23 13:13:19 | 显示全部楼层
在第一行下加上如下語句:
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setvar "osmode" 0)

在倒數第二行和倒數第一行之間加上:
(setvar "osmode" os)
(setvar "cmdecho" 1)
(prin1)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-23 15:24:27 | 显示全部楼层
同名块替换的情况可能更多或更方便实用:
[php](load "xyp_lib");加载通用函数
;|
如果已经下载xyp_lib并放到搜索路径下可以不再下载!
利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
1.在acad.lsp中增加(load"xyp_lib")
2.在每个程序内增加(load"xyp_lib")
3.在command下,输入(load"xyp_lib")
4.在菜单.mnl中增加(load"xyp_lib")
通用函数下载地址:http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
|;

;;;图块替换
(defun c:test115 ()
  (cmdla0)
  (princ "\n选择旧样块 : ")
  (setq        e1    (usel 0 "INSERT")
        name1 (dxf 2 (entget (car e1)))
  )
  (princ "\n选择新样块 : ")
  (setq        e2    (usel 0 "INSERT")
        name2 (dxf 2 (entget (car e2)))
  )
  (princ "\n窗口选择被替换的块实体范围 : ")
  (setq        ss (ssget (list (cons 0 "INSERT") (cons 2 name1)))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (sub_upd s1 2 name2)
  )
  (cmdla1)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-5-23 19:09:43 | 显示全部楼层
最初由 txzjtxzj 发布
[B]请教大虾,为什么偶用了替换后,被替换后的块怎么移动到其他的位置了? [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 23:44 , Processed in 0.340013 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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