nxy_918 发表于 2004-3-28 21:18:00

有点难度???

如何才能在下图中每一个交点上划出一标示的圆形符号,记住一个交点上只能存在一个标示的圆,不能出现一个交点上重复出现多个重叠的圆
注:图中的线皆为line
望各位能多出主意,不吝赐教,谢谢

莫名 发表于 2004-3-28 21:24:00

求出每两条线的实交点,然后剔除公共点,最后在每个点上画圆即可。

nxy_918 发表于 2004-3-29 08:40:00

莫名大哥的方法我也想到过,但是我实际操作的图,远远不止上图那么几个交点而已,而是有很多的交点(上千个),这样的话运算量与速度是个问题吧

subtlation 发表于 2004-3-29 08:57:00

要试过才知道运算速度会怎么样。而且如果是一张图只用一次,速度慢点也可以接受。
要不就这样,找到交点后,用选择集过滤看是否有圆心是这个交点,半径相同的圆存在,不存在就画,存在就不画。

BDYCAD 发表于 2004-3-29 09:09:00

(defun c:test(/ os pts i center)
       (setq os (getvar "osmode"))
       (setvar "osmode" 0)
       (princ "\n選手要處理的對象:")
       (defun JIAODIAN ( ss / N1 SSL AOBJ1 AOBJ2 IPTS ); 算交點點
       (vl-load-com)
       (SETQ PTS NIL)
       (setq N1 0 SSL (sslength SS))
       (while (vla-object AOBJ1) N2 (1+ N1))
                       (while (vla-object AOBJ2)
                                               IPTS       (vla-intersectwith AOBJ1 AOBJ2 0 )
                                                       IPTS       (vlax-variant-value IPTS)       )
                                       (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
        (progn       
               (setq IPTS(vlax-safearray->list IPTS) )
               (while (> (length IPTS) 0)
                               (setq PTS       (cons (list (car IPTS)
                                               (cadr IPTS)(caddr IPTS)) PTS )
                       IPTS (cdddr IPTS)))))
                                       (setq N2 (1+ N2)))
                       (setq N1 (1+ N1)))
       (princ))
       (JIAODIAN (ssget))
       (setq i 0)
       (repeat (length pts)
                       (setq center (nth i pts))
                       (entmake (append
                               '((0 . "CIRCLE"))
                                                                                       '((100 . "AcDbEntity"))
                               '((100 . "AcDbCircle"))
                               '((8 . "0")) ; 在0層畫出
                               '((40 . 1)); 設定圓的半徑為1mm
                                       (list (cons 10 center))))
                       (setq i (1+ i)))
       (setq pts nil)
       (setvar "osmode" os)
       (princ "\n程序運行完成,歡迎使用.")
       (princ))

nxy_918 发表于 2004-3-29 10:45:00

不错是一个变向的完成要求的好方法
页: [1]
查看完整版本: 有点难度???