明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1798|回复: 5

[已解答] 关于数据跟新的问题

  [复制链接]
发表于 2014-3-6 13:27:55 | 显示全部楼层 |阅读模式
程序如下
(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))))

请问,这是什么情况,该怎么解决
发表于 2014-3-6 14:12:00 | 显示全部楼层
  1. (defun c:y12 (/        new-s new-i new-r en new-ext-list endata entype
  2.               old-ext-list)
  3.   (regapp "sakura")                        ;注册专属应用名称
  4.   (if(= (setq new-s (getstring "编号<141400>:"))"")  
  5.     (setq new-s "141400")
  6.   )
  7.   (if(not(setq new-i (getint "\n整数值<123:>")))  
  8.     (setq new-i 123)
  9.   )
  10.   (if(not(setq new-r (getreal "\n实数值<45.8>:")))  
  11.     (setq new-r 45.8)
  12.   )  
  13.   (setq en (car (entsel "\n选择对象:")))
  14.   (if (and en (/= new-s "") new-i new-r)
  15.     (progn
  16.                                         ;------------扩展数据的格式要求
  17.                                         ;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
  18.       (SETQ new-ext-list
  19.              (list -3
  20.                    (list "sakura"
  21.                          (cons 1000 new-s) ;群码1000必须是字符串                         
  22.                          (cons 1070 new-i) ;群码1070必须是整数
  23.                          (cons 1040 new-r) ;群码1040必须是实数                         
  24.                    )
  25.              )
  26.       )
  27.       (setq endata (entget en '("*")))
  28.       (setq entype (cdr (assoc 0 endata)))
  29.       (if (setq old-ext-list (assoc -3 endata))
  30.         (setq endata (subst new-ext-list old-ext-list endata))
  31.         (setq endata (append endata (list new-ext-list)))
  32.       )
  33.       (print endata)
  34.       (entmod endata)
  35.       (princ (strcat "*"
  36.                      entype
  37.                      "*"
  38.                      "加入扩展数据成功--"
  39.                      new-s
  40.                      ","
  41.                      (itoa new-i)
  42.                      ","
  43.                      (rtos new-r)
  44.              )
  45.       )
  46.     )
  47.   )
  48.   (prin1)
  49. )
 楼主| 发表于 2014-3-6 16:22:49 | 显示全部楼层
edata 发表于 2014-3-6 14:12

还是不行哎,还是一样的根本就没有替换掉
发表于 2014-3-7 10:46:19 | 显示全部楼层
如果将某一个扩展数据清除,必须是清空数据。
注意,该程序无差别清除全部扩展数据
  1. (defun c:y12 (/        new-s new-i new-r en new-ext-list endata entype
  2.               old-ext-list)
  3.   (regapp "SAKJRA")                        ;注册专属应用名称
  4.   (if(= (setq new-s (getstring "编号<141400>:"))"")  
  5.     (setq new-s "141400")
  6.   )
  7.   (if(not(setq new-i (getint "\n整数值<123:>")))  
  8.     (setq new-i 123)
  9.   )
  10.   (if(not(setq new-r (getreal "\n实数值<45.8>:")))  
  11.     (setq new-r 45.8)
  12.   )  
  13.   (setq en (car (entsel "\n选择对象:")))
  14.   (if (and en (/= new-s "") new-i new-r)
  15.     (progn
  16.                                         ;------------扩展数据的格式要求
  17.                                         ;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
  18.       (SETQ new-ext-list
  19.              (list -3
  20.                    (list "SAKJRA"
  21.                          (cons 1000 new-s) ;群码1000必须是字符串                        
  22.                          (cons 1070 new-i) ;群码1070必须是整数
  23.                          (cons 1040 new-r) ;群码1040必须是实数                        
  24.                    )
  25.              )
  26.       )
  27.       (setq endata (entget en '("*")))
  28.       (setq entype (cdr (assoc 0 endata)))
  29.       (if (setq old-ext-list (assoc -3 endata))
  30.         (progn
  31.           (setq old_data(cdr old-ext-list) i -1)
  32.           (repeat (length old_data)
  33.             (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 ))
  34.             )
  35.           (setq endata (subst old-ext-list (assoc -3 endata) endata))
  36.           (entmod endata)
  37.           (setq endata (entget en '("*")))
  38.           (setq endata (append endata (list new-ext-list)))
  39.         )
  40.         (setq endata (append endata (list new-ext-list)))
  41.       )      
  42.       (entmod endata)
  43.       (princ (strcat "*"
  44.                      entype
  45.                      "*"
  46.                      "加入扩展数据成功--"
  47.                      new-s
  48.                      ","
  49.                      (itoa new-i)
  50.                      ","
  51.                      (rtos new-r)
  52.              )
  53.       )
  54.     )
  55.   )
  56.   (print(entget en '("*")))
  57.   (prin1)
  58. )


再来个容易看的。
  1. (defun c:y12 (/        new-s new-i new-r en new-ext-list endata entype
  2.               old-ext-list)
  3.   (regapp "sakura")                        ;注册专属应用名称
  4.   (if(= (setq new-s (getstring "编号<141400>:"))"")  
  5.     (setq new-s "141400")
  6.   )
  7.   (if(not(setq new-i (getint "\n整数值<123:>")))  
  8.     (setq new-i 123)
  9.   )
  10.   (if(not(setq new-r (getreal "\n实数值<45.8>:")))  
  11.     (setq new-r 45.8)
  12.   )  
  13.   (setq en (car (entsel "\n选择对象:")))
  14.   (if (and en (/= new-s "") new-i new-r)
  15.     (progn
  16.                                         ;------------扩展数据的格式要求
  17.                                         ;------------(-3 ("SAKJRA"(1000 . "A0001")(1070 .123)(1040 . 45.8)))
  18.       (SETQ new-ext-list
  19.              (list -3
  20.                    (list "sakura"
  21.                          (cons 1000 new-s) ;群码1000必须是字符串                        
  22.                          (cons 1070 new-i) ;群码1070必须是整数
  23.                          (cons 1040 new-r) ;群码1040必须是实数                        
  24.                    )
  25.              )
  26.       )
  27.       (setq endata (entget en '("*")))
  28.       (setq entype (cdr (assoc 0 endata)))
  29.       (if (setq old-ext-list (assoc -3 endata))
  30.         (setq endata (subst new-ext-list old-ext-list endata))
  31.         (setq endata (append endata (list new-ext-list)))
  32.       )
  33.       (print endata)
  34.       (entmakex endata)
  35.       (entdel en)
  36.       ;(entmod endata)
  37.       (princ (strcat "*"
  38.                      entype
  39.                      "*"
  40.                      "加入扩展数据成功--"
  41.                      new-s
  42.                      ","
  43.                      (itoa new-i)
  44.                      ","
  45.                      (rtos new-r)
  46.              )
  47.       )
  48.     )
  49.   )
  50.   (prin1)
  51. )
 楼主| 发表于 2014-3-7 18:03:35 | 显示全部楼层
edata 发表于 2014-3-7 10:46
如果将某一个扩展数据清除,必须是清空数据。
注意,该程序无差别清除全部扩展数据

谢了,弄懂了,我一直都是选的曲线,读取不了坐标,多段线的就可以了
发表于 2014-7-18 10:32:39 | 显示全部楼层
好东西,收藏了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 09:14 , Processed in 0.164452 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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