惑铜 发表于 2014-4-6 13:41:44

[求助]自动提取点坐标

程序在要求输入新半径后出现未知命令,该怎么处理!

(defun c:Tzb ()
    (command "osnap" "off" "")             ;取消捕捉
    (command "layer" "m" "圆" "c" 6 "" ""); 建立"圆"层
    (command "layer" "m" "坐标" "c" 5 "" ""); 建立"坐标"层
    (command "layer" "m" "点号" "c" 4 "" ""); 建立"点号"层
    (setq dat_file (getfiled "选择坐标文件" "txt" ""2))
    (setq ff (open dat_file "a"))
    (setq new_rad (getreal "输入新半径:"))
    (setq new_la "圆")                     ;输入新图层
    (setq h (/new_rad 5))                  ;字高
    (prompt "\n<<框选或点欲拾取的圆>>")
    (setq ss (ssget))
    (setq   n 0
          k 0
    )
    (repeat (sslength ss)             ;计算选择个数确定循环次数
    (setq en (ssname ss n))      ;取出图元名
    (setq endata (entget en))   ;取出对象名称数据列表
    (setq entype (cdr (assoc 0 endata))) ;取出图元名第二位数值
    (if(=entype "CIRCLE")             ;如果是圆就进入子程序
         (sub_upd_rad)
         )
         (setq n (1+n))                        ;记录进入子程序数量
    )
    (alert (strcat "提取了" (itoa k) "个圆心坐标且半径被更新! "))
    (prin 1)
)
(defun sub_upd_rad ()
    (setq 40_list (assoc 40 endata));取出圆半径
    (setq 8_list (assoc 8 endata))      ;取出圆层
    (setq 10_list (assoc 10 endata))   ;取出圆心坐标
    (setq new_40_list (cons 40 new_rad))   ;组成新的半径列表
    (setq new_8_list (cons 8 new_la))      ;组成新的图层列表
    (setq endata (subst new_40_list 40_list endata))   ;用新的半径替换旧半径
    (entmod endata)                        ;更新(半径)
    (setq endata (subst new_8_list 8_list endata))   ;用新的图层替换旧图层
    (entmod endata)                        ;更新(图层)
    (setq k (1+k))                              ;记录圆数量
    (setq
         x         (nth 1 10_list)
         y         (nth 2 10_list)
         z         (nth 3 10_list)
         xyz       (list x y z)
         kyxz (strcat (itoa k)
                   ","
                  (rtos y 2 3)
                  ","
                  (rtos x 2 3)
                  ","
                  (rtos z 2 3)
                  ","
)
      k (itoa k)
      xyyz (list (+ x (* h (strlen k))) (+ y (* h 1.3))
z)
      xyzz (list (+ x (* h (strlen k))) y z)
      xz   (list (+ x (* h (strlen k))) (- y (* h 1.3))
z)
      k (atoi k )
    )
    (write-line kyxz ff)
    (setq    a (strcat "Y=" (rtos x 2 3))
         b (strcat "X=" (rtos y 2 3))
         c (strcat "X=" (rtos z 2 3))
    )
    (setq   bac (strcat "    "b","a","c)
    )
    (command "clayer" "点号" "")
    (command "text" xyz h 0 k)
    (command "clayer" "坐标" "")
    (command "text" xyyz h 0 b)
    (command "text" zyzz h 0 a)
    (command "text" xz h 0 c)

)
(prompt "以完成提取圆心坐标并更新圆半径")
(prin1)



http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 惑铜的微博

惑铜 发表于 2014-4-6 13:48:02

求助各位大神!

lsjj 发表于 2014-4-6 14:23:47

檢查command中多的""
页: [1]
查看完整版本: [求助]自动提取点坐标