易云网络 发表于 2014-10-12 19:02:24

程序不稳定是怎么回事

麻烦高手帮我看看

(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:51

内外有别   

易云网络 发表于 2014-10-12 19:13:49

ivde 发表于 2014-10-12 19:08 static/image/common/back.gif
内外有别

可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序的为什么会这样呢

lsjj 发表于 2014-10-12 20:40:26

你要不要試著用COND,順便把4個條件搞清楚些

易云网络 发表于 2014-10-13 08:01:31

就有个别图这样,不知道是不是图的关系

自贡黄明儒 发表于 2014-10-13 08:17:53

你可写个判断,圆心到交点小于到直线的另一端点

ZZXXQQ 发表于 2014-10-13 08:19:24

判断太复杂,换个思路(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)
)

nzl1116 发表于 2014-10-13 09:00:00

易云网络 发表于 2014-10-12 19:13 static/image/common/back.gif
可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序 ...

看楼主的程序是没问题,难道和组码210有关?

易云网络 发表于 2014-10-13 09:23:59

ZZXXQQ 发表于 2014-10-13 08:19 static/image/common/back.gif
判断太复杂,换个思路

居然可以这么精简,看来要学的东西还很多。
这个还是有一点问题:1.圆的位置反了ang1 -2) ang2 -2)) 改成-2好了
                  2.为什么就只画一次圆,再执行就没有了,要新建一个图才可以

易云网络 发表于 2014-10-13 09:32:21

nzl1116 发表于 2014-10-13 09:00 static/image/common/back.gif
看楼主的程序是没问题,难道和组码210有关?

很奇怪呀!90%没有错误,偶尔会出现这样
页: [1] 2
查看完整版本: 程序不稳定是怎么回事