明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2626|回复: 12

[已解答] 程序不稳定是怎么回事

[复制链接]
发表于 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 )

)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-10-12 19:08:51 来自手机 | 显示全部楼层
内外有别   
 楼主| 发表于 2014-10-12 19:13:49 | 显示全部楼层
ivde 发表于 2014-10-12 19:08
内外有别

可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序的为什么会这样呢
发表于 2014-10-12 20:40:26 | 显示全部楼层
你要不要試著用COND,順便把4個條件搞清楚些
 楼主| 发表于 2014-10-13 08:01:31 | 显示全部楼层
就有个别图这样,不知道是不是图的关系
发表于 2014-10-13 08:17:53 | 显示全部楼层
你可写个判断,圆心到交点小于到直线的另一端点
发表于 2014-10-13 08:19:24 | 显示全部楼层
判断太复杂,换个思路
  1. (defun c:ts11()
  2. (setvar "cmdecho" 1)
  3. (princ "\n选择相交直线")
  4. (if (and (setq ss (ssget '((0 . "LINE")))) (= (sslength ss) 2)) (progn
  5.   (setq ent1 (entget(ssname ss 0))
  6.        a (cdr (assoc 10 ent1))
  7.        b   (cdr (assoc 11 ent1))
  8.        ent2  (entget (ssname ss 1))
  9.        c   (cdr (assoc 10 ent2))
  10.        d   (cdr (assoc 11 ent2))
  11.        wzb   (inters a b c d nil)
  12.        uzb   (trans wzb 0 1))
  13.   (setq ang1 (if (< (distance a wzb) (distance b wzb)) (angle a b) (angle b a)))
  14.   (setq ang2 (if (< (distance c wzb) (distance d wzb)) (angle c d) (angle d c)))
  15.   (setq pt (polar(polar uzb ang1 2) ang2 2))
  16.   (entmake (list '(0 . "CIRCLE") (cons 10 pt) '(40 . 0.444)))
  17.   (command "ucs"  "O" uzb )
  18. ))
  19. (princ)
  20. )
发表于 2014-10-13 09:00:00 | 显示全部楼层
易云网络 发表于 2014-10-12 19:13
可以说清楚吗?有时候好的有时候不行,拾取直线的顺序变了就好了(右边的例子),
我这个程序是不分顺序 ...

看楼主的程序是没问题,难道和组码210有关?
 楼主| 发表于 2014-10-13 09:23:59 | 显示全部楼层
ZZXXQQ 发表于 2014-10-13 08:19
判断太复杂,换个思路

居然可以这么精简,看来要学的东西还很多。
这个还是有一点问题:1.圆的位置反了ang1 -2) ang2 -2)) 改成-2好了
                    2.为什么就只画一次圆,再执行就没有了,要新建一个图才可以
 楼主| 发表于 2014-10-13 09:32:21 | 显示全部楼层
nzl1116 发表于 2014-10-13 09:00
看楼主的程序是没问题,难道和组码210有关?

很奇怪呀!90%没有错误,偶尔会出现这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 01:57 , Processed in 0.188014 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表