找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1187|回复: 7

[日积月累]:属性值修改程序

[复制链接]
发表于 2003-6-15 11:36:00 | 显示全部楼层 |阅读模式

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

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

×
;属性值修改程序,可以对图中同名图块中的属性值(数字)进行加、减、乘、除,主要目的的用于批量修改图中以图块型式存在的高程
;最近手中有一批水工剖面图,因所使用的高程系变化,需对图的高程进行修改,而图中的高程是以图块存在的,一个个修改太麻烦了
;前几天所编的数字替换程序也是为此,在此感谢网友教我如何用LISP查找属性值,现程序编出,给大家共享

  1. (defun *error* (msg)
  2.   (if
  3.     (or
  4.       (= msg "Function cancelled")
  5.       (= msg "quit / exit abort")
  6.       (= msg "函数被取消")
  7.     )
  8.      (princ (strcat "\nError: " msg))
  9.   )
  10. )
  11. (defun invar ()
  12.   (setvar "cmdecho" 0)                        ;屏蔽命令行显示
  13.   (setq os (getvar "osmode"))                ;提取物体捕捉变量
  14.   (setvar "osmode" 0)                        ;设置物体捕捉变量空
  15.   (setq dimzin_v (getvar "dimzin"))        ;提取dimzin 变值
  16.   (setvar "dimzin" 0)                        ;设置dimzin值为零,以防小数位数对rtos无效
  17.   (command "undo" "g")                        ;设置“U”回的值
  18. )
  19. (defun revar ()
  20.   (setvar "osmode" os)                        ;恢复物体捕捉置
  21.   (setvar "dimzin" dimzin_v)                ;恢复dimzin的值
  22.   (command "undo" "e")                        ;设置“U”的最点
  23.   (setvar "cmdecho" 1)                        ;恢复命令行显示
  24. )
  25. (defun process_insert (insert_ss  kword             value_bp        weishu
  26.                        begin_v          /             i                ii
  27.                        n          insert_name                att_name
  28.                        att_data          insert_data                o_txt_d
  29.                        o_txt_c          o_txt_v    n_txt_v        n_txt_c
  30.                        n_txt_d
  31.                       )
  32.   (setq        n  0
  33.         ii 0
  34.   )
  35.   (repeat (sslength insert_ss)
  36.     (setq insert_name (ssname insert_ss ii))
  37.     (setq insert_data (entget insert_name))
  38.     (setq att_name (entnext insert_name))
  39.     (setq att_data (entget att_name))
  40.     (setq o_txt_d (assoc 1 att_data))
  41.     (setq o_txt_c (cdr o_txt_d))
  42.     (setq o_txt_v (distof o_txt_c))
  43.     (if        (and
  44.           (/= o_txt_v nil)
  45.           (>= o_txt_v begin_v)
  46.         )
  47.       (progn
  48.         (cond
  49.           ((= kword "+") (setq n_txt_v (+ o_txt_v value_bp)))
  50.           ((= kword "-") (setq n_txt_v (- o_txt_v value_bp)))
  51.           ((= kword "*") (setq n_txt_v (* o_txt_v value_bp)))
  52.           ((= kword "/") (setq n_txt_v (/ o_txt_v value_bp)))
  53.         )                                ;End of cond
  54.         (setq n_txt_c (rtos n_txt_v 2 weishu))
  55.         (setq n_txt_d (cons 1 n_txt_c))
  56.         (setq att_data (subst n_txt_d o_txt_d att_data))
  57.         (entmod att_data)
  58.         (entupd insert_name)
  59.         (setq n (1+ n))
  60.       )                                        ;end of progn
  61.     )                                        ;end of if
  62.     (setq ii (1+ ii))
  63.   )                                        ;end of repeat
  64.   (prin1 "成功对")
  65.   (prin1 n)
  66.   (prin1 "个数字进行了操作!")
  67. )                                        ;end of subprogram
  68. (defun c:shuxxg        ()
  69.   (invar)
  70.   (setq name_insert (getstring "\n请输入图块名(自己从图中查找确定)"))
  71.   (setq
  72.     ss_insert (ssget "x" (list '(0 . "insert") (cons 2 name_insert)))
  73.   )                                        ;选取指定名称的图块
  74.   (if (null ss_insert)
  75.     (prompt "\n你所指定的图块名称有误")
  76.     (progn
  77.       (initget "+ - * /")
  78.       (setq p_kword
  79.              (getkword "\n 请输入操作码: 加(+)、减(-)、乘(*)、除(/)<+>")
  80.       )
  81.       (if (null p_kword)
  82.         (setq P_kword "+")
  83.       )
  84.       (initget (+ 1 2))
  85.       (setq bp_value (getreal "\n 请输入加、减、乘、除数:"))
  86.       (setq wei_shu (getint "\n 请输入小数位数<2>:"))
  87.       (if (null wei_shu)
  88.         (setq wei_shu 2)
  89.       )
  90.       (setq begin_v
  91.              (getreal
  92.                "\n 给定起始数(小于该数的不进行操作)/<不给定(全部操作)>:"
  93.              )
  94.       )
  95.       (process_insert ss_insert p_kword bp_value wei_shu begin_v)
  96.       (prompt "\n山东省水利勘测设计院 杨克坤 2003.6.15编")
  97.     )
  98.   )
  99.   (revar)
  100. )                                        ;end of main program
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-6-15 12:10:03 | 显示全部楼层
我不懂什么是高程,如果就是属性值修改, 是否太繁琐了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-15 12:19:01 | 显示全部楼层
高程就是图中的建筑物标高如▽12.68,在有些图中三角号和数字是以图块存在的,我的图因所用的高程系变了,需对图中的标高全部加上或减去一个常数,图中这种标高很多,一个个用属性修改的命令的改太累,并且很容易出错,万一有的数你改了好几遍,有的没改,怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-6-17 21:13:45 | 显示全部楼层
使用的办法就是,你先用CAD中的有关命令,查找一个所用来标高的块的名称,在使用我所编的命令时会提示你输入图块名,你输入图块名后,程序就会找到你所指定名称的图块,对其数字进行加、减、乘、除。这个程序会把你图中的所有这类同名图块中的数字进行操作,如果你只想对选中的对象进行操作的话,只需把程序的(setq    ss_insert (ssget "x" (list '(0 . "insert") (cons 2 name_insert))))过滤符"x"这三个字符全去掉即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-2 00:37:08 | 显示全部楼层
楼主这个程序确实不错,很实用。
有一点值得改进,当提示“输入图块名”时,能否加上“从图中拾取”的功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-3-2 10:17:04 | 显示全部楼层
最初由 coolzhb 发布
[B]还有如果有多属性,只能改一个属性,不知道能不能改一下! [/B]

你可以把属性名称甚至提示等作适配过滤,就可以只改其中的某个属性。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 22:37 , Processed in 0.176336 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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