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