程序不稳定是怎么回事
麻烦高手帮我看看(defun c:ts11()
(setvar "cmdecho" 1)
(princ "\n选择相交直线")
(setq ss (ssget '((0 . "LINE")))
)
(setq e1 (ssname ss 0)
en (entget e1)
a (cdr (assoc 10 en))
ax (car a)
ay (cadr a)
b (cdr (assoc 11 en))
bx (car b)
by (cadr b)
e2 (ssname ss 1)
en (entget e2)
c (cdr (assoc 10 en))
cx (car c)
cy (cadr c)
d (cdr (assoc 11 en))
dx (car d)
dy (cadr d)
wzb (inters a b c d nil)
uzb (trans wzb 0 1)
x (car wzb)
y (cadr wzb)
)
(if (/= ax bx)
(if (< (/ (+ ax bx)2) x) ;111.aaaaaaabbbbbxxxxxxxxxxxxxxxxxAB是横线
(if (< (/ (+ cy dy)2) y)
(entmake (list '(0 . "CIRCLE") (cons 10 (list(+ x 2.)(+ y 2.))) (cons 40 0.444)))
(entmake (list '(0 . "CIRCLE") (cons 10 (list(+ x 2.)(- y 2.))) (cons 40 0.444))))
(if (< (/ (+ cy dy)2) y)
(entmake (list '(0 . "CIRCLE") (cons 10 (list(- x 2.)(+ y 2.))) (cons 40 0.444)))
(entmake (list '(0 . "CIRCLE") (cons 10 (list(- x 2.)(- y 2.))) (cons 40 0.444)))))
(if (< (/(+ ay by) 2) y) ;111.aaaaaabbbbbyyyyyyyyyyyyyyAB是竖线
(if (< (/ (+ cx dx)2) x)
(entmake (list '(0 . "CIRCLE") (cons 10 (list (+ x 2.)(+ y 2.))) (cons 40 0.444)))
(entmake (list '(0 . "CIRCLE") (cons 10 (list(- x 2.)(+ y 2.))) (cons 40 0.444))))
(if (< (/ (+ cx dx)2) x)
(entmake (list '(0 . "CIRCLE") (cons 10 (list(+ x 2.)(- y 2.))) (cons 40 0.444)))
(entmake (list '(0 . "CIRCLE") (cons 10 (list(- x 2.)(- y 2.))) (cons 40 0.444)))))
)
(command "ucs""O" uzb )
)
内外有别 ivde 发表于 2014-10-12 19:08 static/image/common/back.gif
内外有别
可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序的为什么会这样呢 你要不要試著用COND,順便把4個條件搞清楚些 就有个别图这样,不知道是不是图的关系 你可写个判断,圆心到交点小于到直线的另一端点 判断太复杂,换个思路(defun c:ts11()
(setvar "cmdecho" 1)
(princ "\n选择相交直线")
(if (and (setq ss (ssget '((0 . "LINE")))) (= (sslength ss) 2)) (progn
(setq ent1 (entget(ssname ss 0))
a (cdr (assoc 10 ent1))
b (cdr (assoc 11 ent1))
ent2(entget (ssname ss 1))
c (cdr (assoc 10 ent2))
d (cdr (assoc 11 ent2))
wzb (inters a b c d nil)
uzb (trans wzb 0 1))
(setq ang1 (if (< (distance a wzb) (distance b wzb)) (angle a b) (angle b a)))
(setq ang2 (if (< (distance c wzb) (distance d wzb)) (angle c d) (angle d c)))
(setq pt (polar(polar uzb ang1 2) ang2 2))
(entmake (list '(0 . "CIRCLE") (cons 10 pt) '(40 . 0.444)))
(command "ucs""O" uzb )
))
(princ)
)
易云网络 发表于 2014-10-12 19:13 static/image/common/back.gif
可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序 ...
看楼主的程序是没问题,难道和组码210有关? ZZXXQQ 发表于 2014-10-13 08:19 static/image/common/back.gif
判断太复杂,换个思路
居然可以这么精简,看来要学的东西还很多。
这个还是有一点问题:1.圆的位置反了ang1 -2) ang2 -2)) 改成-2好了
2.为什么就只画一次圆,再执行就没有了,要新建一个图才可以 nzl1116 发表于 2014-10-13 09:00 static/image/common/back.gif
看楼主的程序是没问题,难道和组码210有关?
很奇怪呀!90%没有错误,偶尔会出现这样
页:
[1]
2