明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1659|回复: 8

求高手帮忙编一个可以刷块的LISP

[复制链接]
发表于 2011-8-15 10:33:50 | 显示全部楼层 |阅读模式
工作中经常遇到块会发生镜像,一个一个的改太麻烦,请高手帮忙给编一个可以刷块的LISP  谢谢。
发表于 2011-8-15 13:16:46 | 显示全部楼层
  1. ;;;未考虑属性快
  2. (defun c:BlkBrush(/ ENT ENL P0 $KD KD SS P1 EL NEWL)
  3.   (setq ent (car (entsel "\n源图块:"))
  4.         enl (entget ent)
  5.         )
  6.   (redraw ent 3)
  7.   (setq p0 (vlax-3d-point (cdr (assoc 10 enl))))
  8.   (initget 7 "Yes No  ")
  9.   (if (not (or (= "Yes" $kd) (= "No" $kd))) (setq $kd "Yes"))
  10.   (setq kd (getkword (strcat "\n 是否刷新比例尺 [Yes/No]<" $kd ">:")))
  11.   (if (= "" kd) (setq kd $kd))
  12.   (setq $kd kd)
  13.   (while (setq ss (ssget (list (assoc 0 enl))))
  14.     (repeat (setq n (sslength ss))
  15.       ((lambda (x / p1 el NewL ppl obj)
  16.              (setq el (entget x)
  17.                    p1 (vlax-3d-point (cdr (assoc 10 el)))
  18.                    NewL (subst (assoc -1 el) (assoc -1 enl) enl)
  19.                    Newl (subst (assoc 330 el) (assoc 330 enl) Newl)
  20.                    Newl (subst (assoc 5 el) (assoc 5 enl) Newl)
  21.                    Newl (subst (assoc 8 el) (assoc 8 enl) Newl)
  22.                    )
  23.              (if (assoc 6 el) (setq Newl (subst (assoc 6 el) (assoc 6 enl) Newl)))
  24.              (if (assoc 62 el) (setq Newl (subst (assoc 62 el) (assoc 62 enl) Newl)))
  25.              (if (= kd "No")
  26.                (setq Newl (subst (assoc 41 el) (assoc 41 enl) Newl)
  27.                        Newl (subst (assoc 42 el) (assoc 42 enl) Newl)
  28.                        Newl (subst (assoc 43 el) (assoc 43 enl) Newl)
  29.                        )
  30.                )
  31.              (entmod Newl)
  32.              (vla-move (setq obj (vlax-ename->vla-object x)) p0 p1)
  33.              
  34.              )
  35.         (ssname ss (setq n (1- n)))
  36.         )
  37.       )
  38.     )
  39.   (redraw ent 4)
  40. (princ)
  41.   )

评分

参与人数 1金钱 +20 收起 理由
gbhsu + 20 实用!

查看全部评分

发表于 2011-8-16 03:09:16 | 显示全部楼层
顶一个!!!
发表于 2011-8-16 08:24:08 | 显示全部楼层
赞一个!
发表于 2011-8-16 08:41:24 | 显示全部楼层
为什么要刷块呢
直接复制不行吗?
直接块替换不是更快吗?
发表于 2011-8-16 09:48:46 | 显示全部楼层
请教G版,能否增加捕捉功能,使目标块保持原有位置不变?
 楼主| 发表于 2011-8-16 12:46:54 | 显示全部楼层
首先感谢版主的帮助,还有一个疑问向版主请教,为什么刷的块都找不到了?
发表于 2011-8-16 22:17:46 | 显示全部楼层
看看下面程序也是捕捉的问题,替换的图块也经常不见
;图块替换
(vl-load-com)
(defun substblk (newblkname      oldblk    / box
boxmax    boxmin    insp      newblk newblkname
newbox    newmax    newmin    oldblk scx
scy
)
  (vla-GetBoundingBox
    (vlax-ename->vla-object oldblk)
    'boxmin
    'boxmax
  )
  (setq boxmin (vlax-safearray->list boxmin)
boxmax (vlax-safearray->list boxmax)
box    (mapcar '- boxmax boxmin)
  )
  (entmake
    (list
      '(0 . "INSERT")
      '(100 . "AcDbEntity")
      '(100 . "AcDbBlockReference")
      (cons 2 newblkname)
      '(10 0.0 0.0 0.0)
      '(41 . 1.0)
      '(42 . 1.0)
      '(43 . 1.0)
    )
  )
  (setq newblk (entlast))
  (vla-GetBoundingBox
    (vlax-ename->vla-object newblk)
    'newmin
    'newmax
  )
  (setq newmin (vlax-safearray->list newmin)
newmax (vlax-safearray->list newmax)
newbox (mapcar '- newmax newmin)
  )
  (setq scx  (/ (car box) (car newbox))
scy  (/ (cadr box) (cadr newbox))
insp (mapcar '- boxmin (mapcar '* newmin (list scx scy 0)))
  )
  (entmod (list (cons -1 newblk)
(cons 10 insp)
(cons 41 scx)
(cons 42 scy)
  )
  )
  (entdel oldblk)
)
(defun c:htk ()
  (cond ((and
   (setq newblkname (getstring "\n新块名:"))
   (if (tblsearch "block" newblkname)
     t
     (alert "查无此块!")
   )
   (setq ss (ssget '((0 . "insert")))) ;请加入自定过滤
)
(setq i -1)
(repeat
   (sslength ss)
    (setq oldblk (ssname ss (setq i (1+ i))))
    (substblk newblkname oldblk)
)
)
  )
  (princ)
)

发表于 2019-9-15 14:24:57 | 显示全部楼层

图框,里面的字用的字段,刷不了。烦请改下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 15:16 , Processed in 0.174257 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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