请大神帮忙分析这一点处怎么可能是裂缝(检查多段线之间的缝隙)
本帖最后由 changyiran 于 2012-8-21 16:49 编辑(defun fjdb(en / x);返回轻量多段线的点表
(vl-remove-if'not
(mapcar'(lambda(x)(if(=(car x)10)(cdr x)))(entget en));mapcar返回的是一个表,lambda构造一个匿名函数
)
)
这是我写的查询缝隙的程序,根据本程序一共查出了19处缝隙,白色的圆圈标出的确实是裂缝,但是蓝色的圆圈怎么可能是裂缝,两个多段线在这一点处明明是重合的啊,我的程序难道有什么问题吗?请大神们帮忙分析下这个十分困扰我的问题。 (defun c:jcfx(/ BJXDB BJYBJ CXJL EN FXGS J M PDZ QSXZBB QYTYB SS YBJZB TYCCB ZXCXJL);检查缝隙(裂缝、相交缝)
(command"undo"m)
(setq cxjl(getreal"\n请输入最大查询距离(0.3):"))
(setq zxcxjl(getreal"\n请输入最小查询距离(0.0001):"))
(if (not cxjl)(setq cxjl 0.3))
(if (not zxcxjl)(setq zxcxjl 0.0001))
(setq bjybj(getreal"\n请输入标记圆半径(2):")fxgs 0 ybjzb'())
(if (not bjybj)(setq bjybj 2))
(setq en(car(entsel"\n请选择外围边界线(如果没有外围线直接回车):")))
(if (not en);没有外围线
(progn
(princ"\n请选择权属线:")
(setq ss(ssget'((0 . "lwpolyline")(8 . "jzd"))))
(setq tyccb'()j -1)
)
(progn
(setq bjxdb(fjdb en)fxgs 0);获取边界线点表
(setq ss(ssget"cp"bjxdb'((0 . "lwpolyline")(8 . "jzd"))));建立边界线内部权属线选择集
(setq tyccb(list en)j -1);建立图元储存表
)
)
(repeat(sslength ss)
(setq tyccb(cons (ssname ss (setq j(1+ j)))tyccb))
)
(foreach en tyccb
(setq qytyb(vl-remove en tyccb));建立其余图元储存表
(setq qsxzbb(fjdb en));获取权属线坐标表
(foreach pt qsxzbb
(if(not(vl-position pt ybjzb));该点位没有参加过比较
(progn
(setq ybjzb(cons pt ybjzb))
(setq pdz(vl-some'(lambda(x)
(setq jlz(distance pt(vlax-curve-getClosestPointTo x pt)))
(and(> jlz zxcxjl)(< jlz cxjl)))
qytyb
)
)
)
)
(if pdz
(progn
(entmake(list'(0 . "circle")(list 10(car pt)(cadr pt))'(8 . "缝隙标记")(cons 40 bjybj)'(62 . 2)))
(setq fxgs(1+ fxgs))
)
)
)
)
(if(= 0 fxgs)
(alert"没有发现缝隙处")
(alert(strcat"共发现"(itoa fxgs)"处缝隙"))
)
(princ)
)
我自己调试了下,正式怀疑cad有bug,我分段调试程序时有一部分圆的圆心在黄线上,当程序运行完毕时那些本来圆心在黄线上的圆居然也跑到了红线上,还有黄线上蓝色圈处所在点离红线的距离是0,而红线上蓝色圈处所在点离黄线的距离居然是0.000169285,更崩溃的时程序运行时是0.000169285,而运行结束后再算这个距离居然又变成了0,cad和lisp伤不起啊! 如此一来检查多段线缝隙的程序该怎么写呢,哎,真是困扰人啊 高手们为什么都不出现呢? no function definition: FJDB
不知是怎麽回事? 我把我自己的研究结果继续写出来,希望有高手能给予合理的解答。设黄色多段线位于蓝色圈圆心处的点为pt1,而红色红色多段线相应位置的点为pt2,黄色线上离pt2最近的点为zj1,红色线上离pt1最近的点为zj2,用equal实验pt1和pt2返回T,zj1和zj2同样返回T,而pt1和zj2以及pt2和zj1居然返回nil,这么奇怪的事情,且不说其他的,根据equal就算等价代换这四个值也应该分别相等啊,真是搞不懂。 srv2 发表于 2012-8-21 16:31no function definition: FJDB不知是怎麽回事?
哦,这是我自己写的一个返回多段线顶点坐标的一个函数,忘了传了。现在传上去 万能的明经啊,帮帮俺吧! 调试到现在终于找到原因了,原来是pdz放的位置不对!可以放松了! 不过还是有一点不太明白,本该标注在黄色多段线上的圆为什么都跑到了红色多段线上。
页:
[1]
2