zzm0601213 发表于 2011-10-26 15:02:36

求高手帮忙,怎么总是出现错误错误: 输入的点对中含有多余的 cdrs

(defun c:gsx()
(setvar "cmdecho" 0)
(setq aa (ssget "x" '((0 . "LWPOLYLINE") (8 . "JZD"))))
(setq i 0)
(setq n (sslength aa))
(repeat n
(setq a (ssname aa i)i (+ i 1))
(setq g (entget a)zdh (substr (cddr(nth 1 (cdr g))) 6))
(setq dlh (cddr(nth 3 (cdr g))))
(setq dlh1 (atoi dlh) zdh1 (atoi zdh))
(setq g1 (subst (cons 38 dlh1) (assoc 38 g) g)g2 (subst (cons 39 zdh1) (assoc 39 g) g))
(entmod g1)
(entmod g2)
(entupd a)
)
)

xiaxiang 发表于 2011-10-26 15:26:20

什么东西?楼主你这个程序要干什么呢?
取出JZD层的多义线,干什么用?

zzm0601213 发表于 2011-10-26 15:42:01

xiaxiang 发表于 2011-10-26 15:26 static/image/common/back.gif
什么东西?楼主你这个程序要干什么呢?
取出JZD层的多义线,干什么用?

目的是把宗地号和地类号分别放到线的厚度和标高属性里

vormittag 发表于 2011-10-26 15:54:08

......
(setq g (entget a)zdh (substr (cddr(nth 1 (cdr g))) 6))
(setq dlh (cddr(nth 3 (cdr g))))
......

这两句看得是不知所云。楼主能说说想干什么吗?

zzm0601213 发表于 2011-10-26 16:09:30

vormittag 发表于 2011-10-26 15:54 static/image/common/back.gif
......
(setq g (entget a)zdh (substr (cddr(nth 1 (cdr g))) 6))
(setq dlh (cddr(nth 3 (cdr g))) ...


((-1 . <图元名: 7ef6e9c8>)
   (0 . "LWPOLYLINE")
   (5 . "4A9")
   (102 . "{ACAD_REACTORS")
   (330 . <图元名: 7ef6ea00>)
   (102 . "}")
   (330 . <图元名: 7ef6ccc0>)
   (100 . "AcDbEntity")
   (67 . 0)
   (410 . "Model")
   (8 . "JZD")
   (6 . "Continuous")
   (100 . "AcDbPolyline")
   (90 . 4)
   (70 . 129)
   (43 . 0.15)
   (38 . 0.0)
   (39 . 0.0)
   (10 172.115 86.2944)
   (40 . 0.15)
   (41 . 0.15)
   (42 . 0.0)
   (10 172.753 57.8364)
   (40 . 0.15)
   (41 . 0.15)
   (42 . 0.0)
   (10 209.079 58.4735)
   (40 . 0.15)
   (41 . 0.15)
   (42 . 0.0)
   (10 208.017 87.3562)
   (40 . 0.15)
   (41 . 0.15)
   (42 . 0.0)
   (210 0.0 0.0 1.0)
(-3 ("NUMBER" (1000 . "111220001"))
   ("OWNER" (1000 . "xxx"))
   ("SOUTH" (1000 . "300000")
            (1000 . "111220001")
            (1000 . "xxx")
            (1000 . "071"))
    ("AREA" (1040 . 1036.13))
    ("BLAREA" (1040 . 0.0))
    ("JZMJ" (1040 . 0.0))
    ("QHDM" (1000 . ""))
    ("SJZGBM" (1000 . ""))
    ("FRDBXM" (1000 . ""))
    ("FRDBZMS" (1000 . ""))
    ("FRDBDH" (1000 . ""))
    ("DLRXM" (1000 . ""))
    ("DLRSFZ" (1000 . ""))
    ("DLRDH" (1000 . ""))
    ("TXDZ" (1000 . ""))
    ("TDZL" (1000 . ""))
    ("DONGZHI" (1000 . ""))
    ("NANZHI" (1000 . ""))
    ("XIZHI" (1000 . ""))
    ("BEIZHI" (1000 . ""))
    ("QSLYZM" (1000 . ""))
    ("PZTDYT" (1000 . ""))
    ("TDSYZ" (1000 . ""))
    ("SBJZWQS" (1000 . ""))
    ("YBDJH" (1000 . ""))
    ("TDZH" (1000 . ""))
    ("SHRQ" (1000 . ""))
    ("DJRQ" (1000 . ""))
    ("ZZRQ" (1000 . ""))
    ("DWXZ" (1000 . ""))
    ("QSXZ" (1000 . ""))
    ("SYQLX" (1000 . ""))
    ("TDDJ" (1000 . ""))
    ("MPH" (1000 . ""))
    ("TUFU" (1000 . ""))
    ("BDDJ" (1040 . 0.0))
    ("SBDJ" (1040 . 0.0))
    ("SJY" (1000 . ""))
    ("GXRQ" (1000 . ""))
)
)



”zdh (substr (cddr(nth 1 (cdr g))) 6))”是取上面那个表中(-3 ("NUMBER" (1000 . "111220001")) 111220001中的后四位数0001
“(setq dlh (cddr(nth 3 (cdr g))))”是取("SOUTH" (1000 . "300000")
            (1000 . "111220001")
            (1000 . "xxx")
            (1000 . "071"))里面的071

vormittag 发表于 2011-10-26 17:27:15

本帖最后由 vormittag 于 2011-10-26 17:29 编辑

老天,你的多义线好像是有扩展数据的!
1、(entget a) 可不会返回扩展数据的内容,你没有选一根线在命令行里试一下?
2、(entget a '("*"))才会返回所有注册程序的扩展数据,如果想返回某一个注册程序名的扩展数据,用注册程序名代替"*",如"NUMBER".
3、不知道你用什么函数返回上面一个表的,用(entget a '("*"))返回值也不是这个结构。这个表你仔细研究他的结构了么?(cdr g)的返回值是
(
(0 . "LWPOLYLINE")
(5 . "4A9")
....
)
你知道错哪里了吧?
页: [1]
查看完整版本: 求高手帮忙,怎么总是出现错误错误: 输入的点对中含有多余的 cdrs