本帖最后由 作者 于 2010-2-26 14:32:44 编辑
;;本人刚学习LISP ,请高手指教一下 下面是mjtd.com的判断“顺时针”还是“反时针” ;;我的CAD是2002的,使用cad2008也不行 ;;调试出现“ActiveX 服务器返回错误: 未知名称: Length”错误提示 (defun C:test(/ ss fd ang offsetObj plineObj) (if (setq ss (ssget ":s" '((0 . "*POLYLINE"))));;"LWPOLYLINE"也不行吗 (progn (setq plineObj (vlax-ename->vla-object (ssname ss 0))) (setq fd (vlax-curve-getFirstDeriv plineObj 0.5)) (setq ang (atan (/ (cadr fd) (car fd)))) (setq offsetplineObj (car (vlax-safearray->list (vlax-variant-value (vla-offset plineObj 0.0001))))) (if (> (vla-get-length plineobj) (vla-get-length offsetplineobj)) (princ "\n顺时针.") (princ "\n反时针.") ) (vla-delete offsetplineObj) );progn (princ "\nNo object selected or object selected is not a polyline.") );end_if (princ) ) ;;;;经过如下修改也不行吗,奇怪 (defun C:ta(/ ss fd ang offsetObj plineObj) (vl-load-com) (setq ent (car (entsel "\n选取多线:\n"))) (setq PLTYPE (cdr (assoc 0 (entget ent)))) ;;(setq ss (ssget ":s" '((0 . "LWPOLYLINE"))));"LWPOLYLINE" (if (or (= "POLYLINE" PLTYPE) (= "LWPOLYLINE" PLTYPE)) (progn ;(setq plineObj (vlax-ename->vla-object (ssname ss 0))) (command "lengthen" ent "") (setq plineObj (vlax-ename->vla-object ent)) (setq fd (vlax-curve-getFirstDeriv plineObj 0.5)) (setq ang (atan (/ (cadr fd) (car fd)))) (setq offsetplineObj (car (vlax-safearray->list (vlax-variant-value (vla-offset plineObj 0.0001))))) (if (> (vla-get-length plineobj) (vla-get-length offsetplineobj)) (princ "\n顺时针.") (princ "\n反时针.") ) (vla-delete offsetplineObj) );progn (princ "\nNo object selected or object selected is not a polyline.") );end_if (princ) )
|