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

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

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