关于数据跟新的问题
程序如下(defun c:y12 (/ new-s new-i new-r en new-ext-list endata entype
old-ext-list)
(regapp "sakura") ;注册专属应用名称
(setq new-s (getstring "编号<141400>:"))
(if (not (not new-s))
(setq new-s "141400")
)
(setq new-i (getstring "\n整数值<123:>"))
(if (not (not new-i))
(setq new-i 123)
)
(setq new-r (getstring "\n实数值<45.8>:"))
(if (not (not new-r))
(setq new-r 45.8)
)
(setq en (car (entsel "\n选择对象:")))
(if en
(progn
;------------扩展数据的格式要求
;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
(SETQ new-ext-list
(list -3
(list "sakura"
(cons 1000 new-s) ;群码1000必须是字符串
(cons 1070 new-i) ;群码1070必须是整数
(cons 1040 new-r) ;群码1040必须是实数
)
)
)
(setq endata (entget en '("*")))
(setq entype (cdr (assoc 0 endata)))
(if (setq old-ext-list (assoc -3 endata))
(setq endata (subst new-ext-list old-ext-list endata))
(setq endata (append endata (list new-ext-list)))
)
(entmod endata)
(princ (strcat "*"
entype
"*"
"加入扩展数据成功--"
new-s
","
(itoa new-i)
","
(rtos new-r)
)
)
)
)
(prin1)
)
现图中有一图元
((-1 . <图元名: 7ef7dd38>) (0 . "POLYLINE") (330 . <图元名:
7ef73cc0>) (5 . "44F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"DGX") (62 . 3) (6 . "Continuous") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0
0.0 0.0) (70 . 130) (40 . 0.15) (41 . 0.15) (210 0.0 0.0 1.0) (71 . 0) (72 . 0)
(73 . 0) (74 . 0) (75 . 0) (-3 ("SOUTH" (1000 . "201102"))))
但是运行程序过后数据变成了,
((-1 . <图元名: 7ef7dd38>) (0 . "POLYLINE") (330 . <图元名:
7ef73cc0>) (5 . "44F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"DGX") (62 . 3) (6 . "Continuous") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0
0.0 0.0) (70 . 130) (40 . 0.15) (41 . 0.15) (210 0.0 0.0 1.0) (71 . 0) (72 . 0)
(73 . 0) (74 . 0) (75 . 0) (-3 ("sakura" (1000 . "141400") (1070 . 123) (1040 .
45.8)) ("SOUTH" (1000 . "201102"))))
请问为什么 没把(-3 ("SOUTH" (1000 . "201102"))) 替换成(-3 ("sakura" (1000 . "141400") (1070 . 123) (1040 . 45.8)))
当运行(setq endata (subst new-ext-list old-ext-list endata))时数据已经跟新为
((-1 . <图元名: 7ef7dd38>) (0 . "POLYLINE") (330 . <图元名:
7ef73cc0>) (5 . "44F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"DGX") (62 . 3) (6 . "Continuous") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0
0.0 0.0) (70 . 130) (40 . 0.15) (41 . 0.15) (210 0.0 0.0 1.0) (71 . 0) (72 . 0)
(73 . 0) (74 . 0) (75 . 0) (-3 ("sakura" (1000 . "141400") (1070 . 123) (1040 .
45.8))))
请问,这是什么情况,该怎么解决
(defun c:y12 (/ new-s new-i new-r en new-ext-list endata entype
old-ext-list)
(regapp "sakura") ;注册专属应用名称
(if(= (setq new-s (getstring "编号<141400>:"))"")
(setq new-s "141400")
)
(if(not(setq new-i (getint "\n整数值<123:>")))
(setq new-i 123)
)
(if(not(setq new-r (getreal "\n实数值<45.8>:")))
(setq new-r 45.8)
)
(setq en (car (entsel "\n选择对象:")))
(if (and en (/= new-s "") new-i new-r)
(progn
;------------扩展数据的格式要求
;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
(SETQ new-ext-list
(list -3
(list "sakura"
(cons 1000 new-s) ;群码1000必须是字符串
(cons 1070 new-i) ;群码1070必须是整数
(cons 1040 new-r) ;群码1040必须是实数
)
)
)
(setq endata (entget en '("*")))
(setq entype (cdr (assoc 0 endata)))
(if (setq old-ext-list (assoc -3 endata))
(setq endata (subst new-ext-list old-ext-list endata))
(setq endata (append endata (list new-ext-list)))
)
(print endata)
(entmod endata)
(princ (strcat "*"
entype
"*"
"加入扩展数据成功--"
new-s
","
(itoa new-i)
","
(rtos new-r)
)
)
)
)
(prin1)
) edata 发表于 2014-3-6 14:12 static/image/common/back.gif
还是不行哎,还是一样的根本就没有替换掉 如果将某一个扩展数据清除,必须是清空数据。
注意,该程序无差别清除全部扩展数据
(defun c:y12 (/ new-s new-i new-r en new-ext-list endata entype
old-ext-list)
(regapp "SAKJRA") ;注册专属应用名称
(if(= (setq new-s (getstring "编号<141400>:"))"")
(setq new-s "141400")
)
(if(not(setq new-i (getint "\n整数值<123:>")))
(setq new-i 123)
)
(if(not(setq new-r (getreal "\n实数值<45.8>:")))
(setq new-r 45.8)
)
(setq en (car (entsel "\n选择对象:")))
(if (and en (/= new-s "") new-i new-r)
(progn
;------------扩展数据的格式要求
;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
(SETQ new-ext-list
(list -3
(list "SAKJRA"
(cons 1000 new-s) ;群码1000必须是字符串
(cons 1070 new-i) ;群码1070必须是整数
(cons 1040 new-r) ;群码1040必须是实数
)
)
)
(setq endata (entget en '("*")))
(setq entype (cdr (assoc 0 endata)))
(if (setq old-ext-list (assoc -3 endata))
(progn
(setq old_data(cdr old-ext-list) i -1)
(repeat (length old_data)
(setq old-ext-list (subst (list (setq old_app(car(nth (setq i(1+ i)) old_data))))(assoc old_app old_data)old-ext-list ))
)
(setq endata (subst old-ext-list (assoc -3 endata) endata))
(entmod endata)
(setq endata (entget en '("*")))
(setq endata (append endata (list new-ext-list)))
)
(setq endata (append endata (list new-ext-list)))
)
(entmod endata)
(princ (strcat "*"
entype
"*"
"加入扩展数据成功--"
new-s
","
(itoa new-i)
","
(rtos new-r)
)
)
)
)
(print(entget en '("*")))
(prin1)
)
再来个容易看的。
(defun c:y12 (/ new-s new-i new-r en new-ext-list endata entype
old-ext-list)
(regapp "sakura") ;注册专属应用名称
(if(= (setq new-s (getstring "编号<141400>:"))"")
(setq new-s "141400")
)
(if(not(setq new-i (getint "\n整数值<123:>")))
(setq new-i 123)
)
(if(not(setq new-r (getreal "\n实数值<45.8>:")))
(setq new-r 45.8)
)
(setq en (car (entsel "\n选择对象:")))
(if (and en (/= new-s "") new-i new-r)
(progn
;------------扩展数据的格式要求
;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
(SETQ new-ext-list
(list -3
(list "sakura"
(cons 1000 new-s) ;群码1000必须是字符串
(cons 1070 new-i) ;群码1070必须是整数
(cons 1040 new-r) ;群码1040必须是实数
)
)
)
(setq endata (entget en '("*")))
(setq entype (cdr (assoc 0 endata)))
(if (setq old-ext-list (assoc -3 endata))
(setq endata (subst new-ext-list old-ext-list endata))
(setq endata (append endata (list new-ext-list)))
)
(print endata)
(entmakex endata)
(entdel en)
;(entmod endata)
(princ (strcat "*"
entype
"*"
"加入扩展数据成功--"
new-s
","
(itoa new-i)
","
(rtos new-r)
)
)
)
)
(prin1)
) edata 发表于 2014-3-7 10:46 static/image/common/back.gif
如果将某一个扩展数据清除,必须是清空数据。
注意,该程序无差别清除全部扩展数据
谢了,弄懂了,我一直都是选的曲线,读取不了坐标,多段线的就可以了 好东西,收藏了!
页:
[1]