明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5204|回复: 6

谁能写个修改组码的通用函数,参考代码如下

[复制链接]
发表于 2012-9-29 16:37 | 显示全部楼层 |阅读模式
谁能写个修改组码的通用函数,要求调用命令为(xgzm  ** (* 123))**为对象名,*为组码123为组码值。
参考代码如下:
(setq ss (ssdel s1 ss)
     s1 (ssname ss 0)
     ent (entget s1)
     txtn (itoa (1+ (atoi txtn)))
     ent (subst
    (cons 1 txtn)
    (assoc 1 ent)
    ent
  )
      )
代码节选自zzxxqq版主的一段
发表于 2012-9-29 22:00 | 显示全部楼层
(defun xgzm (name mode)
       (setq endata (entget name))
       (cdr (assoc mode endata))
)
 楼主| 发表于 2012-10-4 20:06 | 显示全部楼层
楼上的还不够好,我的意思是,给出对象,直接修改该对象,的组码,最后重新生成该实体。
 楼主| 发表于 2012-10-18 09:01 | 显示全部楼层
  1. ;; 很多函数都是嵌套的,可能部分函数给得不全,就慢慢完善吧……
  2. ;; xyp-SubUpd 更改图元DXF组码以修改实体属性 (xyp-SubUpd ename code newvalue)
  3. ;|
  4. 功能 : 更改图元、图元表、选择集DXF组码以修改实体属性
  5. 方式 : (xyp-SubUpd 实体名 DXF码 新值)
  6. 实例1 : 改圆半径为500
  7. (xyp-SubUpd (car(entsel"\n选择圆: ")) 40 500)
  8. 实例2 : 改文本为"明经通道"
  9. (xyp-SubUpd (car(entsel"\n选择文本: ")) 1 "明经通道")
  10. 实例3 : 改块的插入点为(0 0 0)
  11. (xyp-SubUpd (car(entsel"\n选择图块: ")) 10 '(0 0 0))
  12. (xyp-SubUpd (ssget) 62 1)
  13. |;
  14. (defun xyp-SubUpd (ename code val / ent x y i s1)
  15.   (cond ((= (type ename) 'ENAME)
  16.   (setq ent (entget ename))
  17.   (if (and (= (type code) 'LIST) (= (type val) 'LIST))
  18.     (mapcar '(lambda (x y) (xyp-SubUpd ename x y)) code val)
  19.     (progn
  20.       (if (= (xyp-get-dxf code ename) nil)
  21.         (entmod (append ent (list (cons code val))))
  22.         (entmod (subst (cons code val) (assoc code ent) ent))
  23.       )
  24.       (entupd ename)
  25.     )
  26.   )
  27. )
  28. ((= (type ename) 'PICKSET)
  29.   (setq i -1)
  30.   (while (setq s1 (ssname ename (setq i (1+ i))))
  31.     (xyp-SubUpd s1 code val)
  32.   )
  33. )
  34. ((= (type ename) 'LIST)
  35.   (foreach s1 ename (xyp-SubUpd s1 code val))
  36. )
  37.   )
  38.   ename
  39. )

发表于 2012-10-20 09:57 | 显示全部楼层
多谢linshiyin2 。很好的代码!!!
发表于 2012-10-20 10:17 | 显示全部楼层

练习  组码操作.lsp


;|问题来源:http://bbs.mjtd.com/thread-96667-1-1.html

谁能写个修改组码的通用函数

要求:调用命令为(xgzm  ** (* 123))
其中:**为对象名,*为组码123为组码值。

|;
;;;=================================================================*
;;;测试: (xgzm (ssget) '(10 0 0 0))                                *
;;;日期:zml84 于 2012-10-20 10:10                                  *
(defun xgzm (ss lst / i en ent)
    (setq i 0)
    (repeat (sslength ss)
	(setq en  (ssname ss i)
	      ent (entget en)
	      ent (subst lst (assoc (car lst) ent) ent)
	)
	(entmod ent)
	(setq i (1+ i))
    )
)
;;;=================================================================*
发表于 2015-8-2 13:28 | 显示全部楼层
zml84 发表于 2012-10-20 10:17
练习  组码操作.lsp
document.write("最后修改时间: " + document.lastModified)

请问,能不能修改,如果有两个或两个以上相同的组码,能批量修改。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 17:10 , Processed in 0.276665 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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