找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1753|回复: 10

[原创]:改块内图元特性的小程序

[复制链接]
发表于 2004-4-18 14:42:48 | 显示全部楼层 |阅读模式

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

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

×
在我的工作中,同一设备在不同图中表示时需要用不同的颜色及线型表示,因此编了这个程序。因为不会vlisp和dcl,所以做成纯lisp程序。
本程序用于指定已插入图中的图块内部图元的颜色、图层、线型,对于块内有嵌套块的情形一并改掉,因此如果希望嵌套块不变的情形本程序不适用,需要的可以自己修改BKMD_PR函数加个条件判断。
请批评指正
在选颜色时用acad_colordlg 调用了对话框,但图层和线型没有现成函数调用对话框,我本来想用(command  "layer")但无法显示对话框,如何在command函数里面显示命令的对话框?
本程序参考了tc405003 :)
[PHP](defun C:BKMD ()
  (prompt "**********更改块内图元********** \n")
  (setq cmd (getvar "CMDECHO"))
  (setvar "cmdecho" 0)
  (prompt "\n选择需要改动的块: ")
  (setq ent_blk (ssget '((0 . "INSERT"))))
  (setq count (sslength ent_blk))
  (setq index 0)
  (initget 1 "1 2 3 ")
  (setq setkey (getkword "\nCOLOR 1/LAYER 2/LINETYPE 3/ <>   "))
  (cond
    ((= setkey "1")
      (setq attr (acad_colordlg 7)
            dxfcode 62
      )
    )
    ((= setkey "2")
      (setq attr (getstring "改到何层? ")
            dxfcode 8
      )
    )
    ((= setkey "3")
      (setq attr (getstring "改为何种线型? ")
            dxfcode 6
      )
    )
    (t   nil)
  )
  (repeat count
    (setq eg1 (entget (ssname ent_blk index)))
    (setq en1 (ssname ent_blk index))
    (redraw en1 3)
    (setq en1 nil)
    (setq nam (cdr (assoc 2 eg1)))
    (setq en2 (cdr (assoc -2 (tblsearch "block" nam))))
    (BKMD_PR dxfcode attr en2 nam)
    (setq index (+ index 1))
  )
  (setvar "CMDECHO" cmd)
  (princ)
)
(defun BKMD_PR (dxfcode attr en2 nam)
  (setq cnt 0)
  (while en2
    (setq cnt (1+ cnt)
          eg2 (entget en2)
          en2 (entnext (cdr (assoc -1 eg2)))
    )
    (grtext -2 (strcat nam " block entity # " (itoa cnt)))
    (if (= (cdr (assoc 0 eg2)) "insert")
      (progn
        (setq nm2 (cdr (assoc 2 eg2))
              en3 (cdr (assoc -2 (tblsearch "block" nm2)))
        )
        (BKMD_PR dxfcode attr en3 nm2)
      )
      (progn
        (if (assoc dxfcode eg2)
          (setq eg2 (subst
                      (cons dxfcode attr)
                      (assoc dxfcode eg2)
                      eg2
                    )
          )
          (setq eg2 (append
                      eg2
                      (list (cons dxfcode attr))
                    )
          )
        )
        (entmod eg2)
      )
    )
  )
  (setq ss1 (ssget "x" (list (cons 2 nam)))
        cnt 0
  )
  (while (setq en1 (ssname ss1 cnt))
    (setq cnt (1+ cnt))
    (entupd en1)
  )
)
(princ)
(princ "BKMD loaded! Start command with BKMD")
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

 楼主| 发表于 2004-4-19 00:18:29 | 显示全部楼层
谢谢您的建议,只是觉得当块定义很复杂如图元多、有嵌套块时,或者图形交错图元不好选择时就有用了。
PS:请教,能否在command函数里面显示所调用命令的对话框?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-19 06:10:38 | 显示全部楼层

Re: [原创]:改块内图元特性的小程序

最初由 John 发布
[B]... 我本来想用(command "layer")但无法显示对话框,如何在command函数里面显示命令的对话框?
[/B]


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

使用道具 举报

发表于 2004-4-19 11:05:25 | 显示全部楼层
这个是不是只是用语cad上呢!也就是说用他来改变cad里面图层的颜色?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-15 10:43:31 | 显示全部楼层
楼主能不能加深一下程序,使之可以修改多层图块中的任意子图元?
另外是不是完善一下变量表.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2009-1-13 23:18:30 | 显示全部楼层
程序很好,使用递归函数。
涉及到嵌套块内图元实体的坐标更改的情况,论坛上很少有程序设计,能否写一个这样的例程?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-16 17:12:58 | 显示全部楼层
(command -style BarSt 宋体 TtH 1 0 n n n)
(command "-style" "BarSt" "宋体" TtH 1 0 "n" "n" "n")
(command "-style" "standred" "宋体" 10 1 0 "n" "n" "n")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 10:28 , Processed in 0.205384 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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