有点难度???
如何才能在下图中每一个交点上划出一标示的圆形符号,记住一个交点上只能存在一个标示的圆,不能出现一个交点上重复出现多个重叠的圆注:图中的线皆为line
望各位能多出主意,不吝赐教,谢谢
求出每两条线的实交点,然后剔除公共点,最后在每个点上画圆即可。 莫名大哥的方法我也想到过,但是我实际操作的图,远远不止上图那么几个交点而已,而是有很多的交点(上千个),这样的话运算量与速度是个问题吧 要试过才知道运算速度会怎么样。而且如果是一张图只用一次,速度慢点也可以接受。
要不就这样,找到交点后,用选择集过滤看是否有圆心是这个交点,半径相同的圆存在,不存在就画,存在就不画。 (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)) 不错是一个变向的完成要求的好方法
页:
[1]