xuming 发表于 2006-1-16 14:36:00

<P>谁能告诉我下面程序如何放到CAD程序中去及又如何使用?谢了(QQ:308302994)</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>(defun&nbsp;get_all_inters_in_SS&nbsp;(SS&nbsp;/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSL&nbsp;;length&nbsp;of&nbsp;SS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PTS&nbsp;;returning&nbsp;list<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aObj1&nbsp;;Object&nbsp;1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aObj2&nbsp;;Object&nbsp;2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N1&nbsp;&nbsp;;Loop&nbsp;counter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N2&nbsp;&nbsp;;Loop&nbsp;counter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPts&nbsp;;intersects<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<BR>&nbsp;&nbsp;(setq&nbsp;N1&nbsp;0&nbsp;;index&nbsp;for&nbsp;outer&nbsp;loop<BR>&nbsp;SSL&nbsp;(sslength&nbsp;SS))<BR>&nbsp;&nbsp;;&nbsp;Outer&nbsp;loop,&nbsp;first&nbsp;through&nbsp;second&nbsp;to&nbsp;last<BR>&nbsp;&nbsp;(while&nbsp;(&lt;&nbsp;N1&nbsp;(1-&nbsp;SSL))<BR>&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Get&nbsp;object&nbsp;1,&nbsp;convert&nbsp;to&nbsp;VLA&nbsp;object&nbsp;type<BR>&nbsp;&nbsp;&nbsp;&nbsp;(setq&nbsp;aObj1&nbsp;(ssname&nbsp;SS&nbsp;N1)<BR>&nbsp;&nbsp;&nbsp;aObj1&nbsp;(vlax-ename-&gt;vla-object&nbsp;aObj1)<BR>&nbsp;&nbsp;&nbsp;N2&nbsp;(1+&nbsp;N1))&nbsp;;index&nbsp;for&nbsp;inner&nbsp;loop<BR>&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Inner&nbsp;loop,&nbsp;go&nbsp;through&nbsp;remaining&nbsp;objects<BR>&nbsp;&nbsp;&nbsp;&nbsp;(while&nbsp;(&lt;&nbsp;N2&nbsp;SSL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Get&nbsp;object&nbsp;2,&nbsp;convert&nbsp;to&nbsp;VLA&nbsp;object<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq&nbsp;aObj2&nbsp;(ssname&nbsp;SS&nbsp;N2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aObj2&nbsp;(vlax-ename-&gt;vla-object&nbsp;aObj2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Find&nbsp;intersections&nbsp;of&nbsp;Objects<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPts&nbsp;(vla-intersectwith&nbsp;aObj1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aObj2&nbsp;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;variant&nbsp;result<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPts&nbsp;(vlax-variant-value&nbsp;iPts))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Variant&nbsp;array&nbsp;has&nbsp;values?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&gt;&nbsp;(vlax-safearray-get-u-bound&nbsp;iPts&nbsp;1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)<BR>&nbsp;(progn&nbsp;;array&nbsp;holds&nbsp;values,&nbsp;convert&nbsp;it<BR>&nbsp;&nbsp;&nbsp;(setq&nbsp;iPts&nbsp;;to&nbsp;a&nbsp;list.<BR>&nbsp;&nbsp;&nbsp;(vlax-safearray-&gt;list&nbsp;iPts))<BR>&nbsp;&nbsp;&nbsp;;Loop&nbsp;through&nbsp;list&nbsp;constructing&nbsp;points<BR>&nbsp;&nbsp;&nbsp;(while&nbsp;(&gt;&nbsp;(length&nbsp;iPts)&nbsp;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq&nbsp;Pts&nbsp;(cons&nbsp;(list&nbsp;(car&nbsp;iPts)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cadr&nbsp;iPts)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(caddr&nbsp;iPts))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pts)<BR>&nbsp;&nbsp;&nbsp;&nbsp;iPts&nbsp;(cdddr&nbsp;iPts)))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq&nbsp;N2&nbsp;(1+&nbsp;N2)))&nbsp;;inner&nbsp;loop&nbsp;end<BR>&nbsp;&nbsp;&nbsp;&nbsp;(setq&nbsp;N1&nbsp;(1+&nbsp;N1)))&nbsp;;outer&nbsp;loop&nbsp;end<BR>&nbsp;&nbsp;Pts)&nbsp;;return&nbsp;list&nbsp;of&nbsp;points&nbsp;found<BR>;;-----------------------------------------------&nbsp;&nbsp;&nbsp;END&nbsp;LISTING&nbsp;1<BR>;;<BR>;;&nbsp;Remaining&nbsp;lines&nbsp;of&nbsp;code&nbsp;for&nbsp;download&nbsp;version,&nbsp;used&nbsp;to&nbsp;demonstrate&nbsp;and&nbsp;test&nbsp;the&nbsp;utility&nbsp;in&nbsp;Listing&nbsp;1.<BR>;;<BR>;;&nbsp;Process&nbsp;-&nbsp;Create&nbsp;drawing&nbsp;with&nbsp;intersecting&nbsp;lines&nbsp;and&nbsp;lwpolylines.<BR>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Load&nbsp;function&nbsp;set<BR>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run&nbsp;command&nbsp;function&nbsp;INTLINES<BR>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intersections&nbsp;are&nbsp;marked&nbsp;with&nbsp;POINT&nbsp;objects&nbsp;on&nbsp;current&nbsp;layer<BR>;;<BR>(defun&nbsp;C:INTLINES&nbsp;()<BR>&nbsp;&nbsp;(prompt&nbsp;"\nINTLINES&nbsp;running&nbsp;to&nbsp;demonstrate&nbsp;GET_ALL_INTERS_IN_SS&nbsp;function.")<BR>&nbsp;&nbsp;(setq&nbsp;SS1&nbsp;(get_all_lines_as_SS)<BR>&nbsp;PTS&nbsp;(get_all_inters_in_ss&nbsp;SS1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<BR>&nbsp;&nbsp;(foreach&nbsp;PT&nbsp;PTS&nbsp;;;Loop&nbsp;through&nbsp;list&nbsp;of&nbsp;points<BR>&nbsp;&nbsp;&nbsp;&nbsp;(command&nbsp;"_POINT"&nbsp;PT))&nbsp;;;Create&nbsp;point&nbsp;object<BR>&nbsp;&nbsp;(setvar&nbsp;"PDMODE"&nbsp;34)&nbsp;;;display&nbsp;points&nbsp;so&nbsp;you&nbsp;can&nbsp;see&nbsp;them<BR>&nbsp;&nbsp;(command&nbsp;"_REGEN")<BR>)<BR>;;<BR>;;-----------------------------------------------<BR>;;&nbsp;&nbsp;Get&nbsp;all&nbsp;lines&nbsp;and&nbsp;lwpolyline&nbsp;objects&nbsp;in&nbsp;the<BR>;;&nbsp;&nbsp;drawing&nbsp;and&nbsp;return&nbsp;as&nbsp;a&nbsp;selection&nbsp;set.<BR>;;<BR>(defun&nbsp;get_all_Lines_as_SS&nbsp;()<BR>&nbsp;&nbsp;(ssget&nbsp;"X"&nbsp;'((0&nbsp;.&nbsp;"LINE,LWPOLYLINE"))))<BR>;;</P>

zmdjing 发表于 2006-2-10 10:26:00

<P>不会用啊&nbsp; 说清好吗</P>

TANER 发表于 2006-2-17 07:45:00

<P>现成的</P>
<P><A href="dispbbs.asp?boardID=3&amp;ID=8719&amp;page=1" target="_blank" >dispbbs.asp?boardID=3&amp;ID=8719&amp;page=1</A></P>

<P>发错了位置,请版主删除。</P>

killer9806 发表于 2006-3-1 18:28:00

<P>精彩,本菜鸟顶一个,各位高手太棒了。</P>

小菜123 发表于 2006-3-30 17:49:00

都用的 intersectwith方法,有些缺点,一是当一段圆弧极短的时候,会得出错误的交点,还有就是两条线靠得很近,但不相交,但可以求出交点,如果不信,我可以提供一个图试试

knight928 发表于 2006-6-26 12:35:00

这些交点程序,得到的结果都包含了线的顶点坐标,这样对于任意个多边形的相邻的情况(注意不是相交的)既有几个顶点的边重合的时候,这样得到的坐标不是交点的坐标,而是重合点的坐标!请问如何去除顶点坐标?

zxq651007z 发表于 2006-7-23 20:39:00

如果只是在屏幕上读交点,那是很容易的,打开捕捉,设定为交点就行了,用得着这么兴师动众?

cb000007 发表于 2006-7-26 00:01:00

<P>我顶.顶,顶,顶.</P>

sjsapple 发表于 2006-8-9 23:02:00

;求两实体交点<BR>(defun c:get_int0( / ent1 ent2 ps)<BR>&nbsp; (setq ent1 (car (entsel "选择第一实体:")))<BR>&nbsp; (setq ent2 (car (entsel "选择第二实体:")))<BR>&nbsp; (print)<BR>&nbsp; (setq ps (obj_int ent1 ent2))<BR>)<BR>;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>;功能:返回两个对象的所有交点<BR>;参数: ent1、ent2 均为ename对象<BR>(defun obj_int (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)<BR>&nbsp;&nbsp; (setq ax_ent_1 (vlax-ename-&gt;vla-object ent1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ax_ent_2 (vlax-ename-&gt;vla-object ent2)<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))<BR>&nbsp;&nbsp; (setq intpoints (vlax-variant-value intpoints))<BR>&nbsp;&nbsp; (setq i 0)<BR>&nbsp;&nbsp; (if (&gt; (vlax-safearray-get-u-bound intpoints 1) 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp; (repeat (/ (+ 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (- (vlax-safearray-get-u-bound intpoints 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-l-bound intpoints 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq points (append points (list (list<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints (+ i 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-safearray-get-element intpoints (+ i 2))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq i (+ 3 i))<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; points<BR>)<BR>

killer9806 发表于 2006-8-20 18:09:00

<P>长见识了,学习中…………</P>
页: 1 2 3 4 5 6 [7] 8
查看完整版本: [求助]请问如何求出两条多义线的交点?