明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1846|回复: 1

图块替换 组码取值稳定性(找到些眉目,还请大神再劳心看看)

[复制链接]
发表于 2012-5-22 23:00:00 | 显示全部楼层 |阅读模式
本帖最后由 海洋闹饥荒 于 2012-5-25 11:35 编辑

闲话少说,直接上源码
(defun c:kth (/)
(prompt "\n请选择要更改的块")
  (setq lb (ssget '((0 . "insert"))))
  
  (setq new_name (getstring "想要更换的块的名称:"))
  (prompt "\n请选择所有要更换的块")
  (setq xzj (ssget '((0 . "INSERT"))))
  (ssadd (ssname lb 0) xzj)
  (setq i 0 n (sslength xzj))

  (while (< i n)
    (setq shuju (entget (ssname xzj i)))
  (setq old (assoc 2 shuju))
    (if (equal (assoc 2 (entget (ssname lb 0))) old)
      (progn
  (setq new (cons 2 new_name))
  (setq shuju (subst new old shuju))
  (entmod shuju)
  )
  );;;;if
    (setq i (+ i 1))
    );;;while
)
以及:
(defun c:kth1 (/)
(prompt "\n请选择要更改的块")
  (setq lb (ssget '((0 . "insert"))))
  (prompt "\n请从图中选择更改后的块")
  (setq new_name (assoc 2 (entget (ssname (ssget '((0 . "insert"))) 0))))
  (prompt "\n请选择所有要更换的块")
  (setq xzj (ssget '((0 . "INSERT"))))
  (ssadd (ssname lb 0) xzj)
  (setq i 0 n (sslength xzj))

  (while (< i n)
    (setq shuju (entget (ssname xzj i)))
  (setq old (assoc 2 shuju))
    (if (equal (assoc 2 (entget (ssname lb 0))) old)
      (progn

  (setq shuju (subst new_name old shuju))
  (entmod shuju)
  )
  );;;;if
    (setq i (+ i 1))
    );;;while
)
在07运行时,kth1中的块有时不能全部替换,还请高手指教。
请接着看一楼。


 楼主| 发表于 2012-5-23 07:33:51 | 显示全部楼层
昨天晚上那两个程序我又调试了下,发现图块不能完美替换的问题是由选择集引起的,kth由于比kth1少建了一次选择集,所以感觉上要好一些。
另外发现,如果建立xzj这一个选择集时,如果不包含lb指向的对象,图块可以完美替换(这句话是从kth1测试得到,想来kth也一样)。
我现在解决方案是强制选择集建立时不包含lb。
还请高手指教一二,讲解一下原因或提出其他解决思路。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-25 10:34 , Processed in 0.152340 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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