raifacn 发表于 2011-3-26 11:13:01

程序执行有时正确有时不正确?

本帖最后由 raifacn 于 2011-3-26 11:15 编辑

我要在电路图上标上线号,即在直线的中间偏上标上数字,数字从101递增,直线可能为水平或垂直,线号与直线平行并偏移2。我做了如下的程序,但程序执行时线号的位置有时正确有时不正确,不正确的结果是标注的坐标没有偏移( 该行未执行:(setq mx (- mx 2)))或标注的坐标没有在中间而是跟直线端点相同(my与pt1y或pt2y相等)。
最主要的是有时候执行正确,有时候不正确。

我是初学者,对各位来说应该是很简单的程序,麻烦各位看看。先谢了!

(defun c:a1 (/ en en_data pt1 pt2 pt1x pt2x pt1y pt2y mx my pt1xf pt2xf pt1yf pt2yf mpt str1)
(setq num 101)

(while
    (setq en (entsel "Select a Line:"))
   (setq en_data (entget (car en)))
   (setq pt1 (cdr (assoc 10 en_data)))
   (setq pt2 (cdr (assoc 11 en_data)))
   (setq pt1x (car pt1))
   (setq pt2x (car pt2))
   (setq pt1y (cadr pt1))
   (setq pt2y (cadr pt2))
   (setq mx (/ (+ pt1x pt2x) 2))      ; 标注的位置,直线的中点
   (setq my (/ (+ pt1y pt2y) 2))      ; 标注的位置,直线的中点
   (setq pt1xf (fix pt1x))                ; 直线坐标值取整数,为了比较判断直线水平还是垂直,如果直接比较则经常执行不正确,即本来是水平线,但程序认为不水平,取整后判断就可以了,不知道为什么?
   (setq pt2xf (fix pt2x))
   (setq pt1yf (fix pt1y))
   (setq pt2yf (fix pt2y))
   (setq str1 (itoa num))

   (if (= pt1xf pt2xf); 判断是垂直线
       (progn
         (setq mx (- mx 2))
         (setq mpt (list mx my))
         (command "-mtext" mpt "j" "mc" "r" "90" "w" "5" str1 "")
         (setq num (+ 1 num))
       )
   )

   (if (= pt1yf pt2yf) ; 判断是水平线
       (progn
         (setq my (+ my 2))
         (setq mpt (list mx my))
         (command "-mtext" mpt "j" "mc" "w" "5" str1 "")
         (setq num (+ 1 num))
       )
   )

)
)

Gu_xl 发表于 2011-3-26 11:14:51

回复 raifacn 的帖子

关闭捕捉模式!

raifacn 发表于 2011-3-26 11:20:05

版主回帖速度这么快!试过了,是这个问题,感谢!!
页: [1]
查看完整版本: 程序执行有时正确有时不正确?