我曾经这样做过,但是速度很慢,而且如果封闭区域不是独立的,就难以实现
速度是慢了点,但还好
封闭区域不独立,将pline在交点处打断,spline好像就没办法了
boundary,选择生成region
你说的是使用boundary命令,如果不能使用命令,比如VB.Net上使用命令会使程序执行次序混乱,该怎么办呢?
怎么把SPline在自身交点处打断呢?
break不可以吗?
关键是自身交点怎么求?
做面域对有自相交的实体不可用
pline可用(我干过,把它炸开,各图元在交点处打断就可以了),spline好像不行?
<FONT face=宋体 size=2>贴一个判断点在曲线内外的测试程序,对自相交有效,就目前我自己测试,成功率100%<BR>但要判断是否在线上,大家自己开动脑筋想想吧:)</FONT><BR><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>;| <BR><BR><FONT color=#000000>(defun c:test ()<BR>(setq ent (car(entsel))<BR> os (getvar "osmode"))<BR>(setvar "osmode" 0)<BR>(while (setq pt (getpoint "\n选择点:"))<BR> (x@-ptin ent pt)<BR>)<BR>(setvar "osmode" os)<BR>)<BR></FONT></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700> <BR>|; <BR>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>defun x</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>@-</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ptin </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ent pt </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>/ </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>e</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR> (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>setq e </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>entlast</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) <BR> (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>vl</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>-</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>cmdf </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>".boundary" "a" "o" "r" "b" "n" </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ent </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>"" "" </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>pt </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>""</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR> (if (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>eq </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>entlast</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>e</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR> (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>princ </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>"\n点在曲线外."</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR> (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>progn </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>entdel </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>entlast</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>))(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>princ </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>"\n点在曲线内."</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) <BR> ) <BR>)<BR></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva">另发一个已经加上判断在曲线上的测试程序:<BR>判断点与曲线内外关系(boundary方法)-------------------------无痕.2004.2<BR>返回: 0 (在曲线内) ;1 (在曲线上); 2 (在曲线外)|;<BR>加载后运行:test</FONT>
<FONT face=宋体 size=2>测试点在曲线内外的程序,是用构造xline,求交点排序位置的方法.</FONT>
<FONT face=宋体 size=2>测试:<BR>(c:ptin)<BR>出错! 未选中曲线<BR>_$ (c:ptin)<BR>点在曲线外<BR>_$ (c:ptin)<BR>点在曲线内<BR>_$ (c:ptin)<BR>点在曲线上:<BR>_$ </FONT><BR>