guerearou 发表于 2015-1-30 17:52:20

为什么执行这个Lisp会出现未知命令的提示呢?


运行这个才写的多线段标注命令,不知道为啥会一直提示未知命令TT3。
准确的说是,有多少个多线段顶点就会提示多少次。
难道是因为用了两次repeat的原因?
劳烦懂的帮忙看看?(defun c:tt3(/ m ss lsts)
(vl-load-com)
(setvar "cmdecho" 0)
    (Setq m 0)
    (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (repeat (sslength ss)
      (setq lsts (get_point (ssname ss m)))
      (dimaligned lsts)
      (setq m (+ m 1))
    )
(princ)
)
;;;求多段线顶点坐标集合
(defun get_point (ent / ptlist ptlist1 n)
(setq ptlist '() ptlist1 '() n 0)
(setq ptlist (vlax-safearray->list(vlax-variant-value(vlax-get-property(vlax-ename->vla-object ent)'Coordinates))))
      (repeat (/ (length ptlist) 2)
      (setq ptlist1 (cons (list (nth n ptlist) (nth (setq n (1+ n)) ptlist)) ptlist1))
      (setq n (1+ n))
      )
(setq ptlist2 (mapcar (function (lambda (x) (coorchang x))) ptlist1))
)
;;;;;求两点的中点垂直过50的坐标
(defun get_mid_pt (pt1 pt2 / d ang)
    (setq d   (* (distance pt1 pt2) 0.5)
          ang (angle pt1 pt2)
    )
    (polar pt1 ang d)
)
;;;;;;标注多线段
(defun dimaligned (llst / pt1 pt2 pt i)
    (setq i 0)
    (repeat (- (length llst) 1)
      (setq pt1 (nth i llst))
      (setq pt2 (nth (setq i (1+ i)) llst))
      (setq pt(get_mid_pt pt1 pt2))
      (vl-cmdf "_dimaligned" pt1 pt2 pt "")
    )
)
;;;;二维坐标转换为三维
(defun coorchang (lst)
    (setq p1 (carlst))
    (setq p2 (cadr lst))
    (setq lst (list p1 p2 0))
)

guerearou 发表于 2015-1-30 17:53:29

另外这个的效率简直慢到爆,试了下多线段躲起来的时候,就和动画片一样....不知道有没有啥优化的思路?

longcashman 发表于 2015-1-30 18:55:56

(vl-cmdf "_dimaligned" pt1 pt2 pt "") -------> (vl-cmdf "_dimaligned" pt1 pt2 pt )

guerearou 发表于 2015-1-30 20:25:34

longcashman 发表于 2015-1-30 18:55 static/image/common/back.gif
(vl-cmdf "_dimaligned" pt1 pt2 pt "") -------> (vl-cmdf "_dimaligned" pt1 pt2 pt )

额 果然如此 看来是习惯用其它需要退出的命令 造成的感谢
页: [1]
查看完整版本: 为什么执行这个Lisp会出现未知命令的提示呢?