- 积分
- 11670
- 明经币
- 个
- 注册时间
- 2008-5-10
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 cairunbin 于 2019-4-2 20:41 编辑
ObjectArx的Curve.GetDistAtPoint方法,一直存在bug,调用前,都需要先调用GetClosestPointTo()方法,将点位尽量计算到曲线上。但是,我现在碰到一个bug,即使事先调用了GetClosetPointTo方法,AutoCAD依然会抛出eInvalidInput异常。下面两行代码,运行到第二行line.GetDistAtPoint方法时,AutoCAD抛出eInvalidInput异常。
这里说明一句,下面两行语句里面有三个点:(695939.053,3919395.056,0),(695937.577789435,3919396.40646429,0),(695938.134733118,3919395.8966167,0)。其中,第三个点的的确确位于头两个点的连线上,三点共线。也就是说,从理论上,下面两行语句完全没问题。
- Line line = new Line(new Point3d(695939.053,3919395.056,0), new Point3d(695937.577789435,3919396.40646429,0));
- line.GetDistAtPoint(new Point3d(695938.134733118,3919395.8966167,0));
复制代码
我将上述代码改进,加入GetClosestPointTo调用,如下:
- Line line = new Line(
- new Point3d(695939.053,3919395.056,0),
- new Point3d(695937.577789435,3919396.40646429,0)
- );
- Point3d ptOnCurve = line.GetClosestPointTo(new Point3d(695938.134733118, 3919395.8966167, 0), false);
- line.GetDistAtPoint(ptOnCurve);
复制代码
但是AutoCAD2020依然抛出异常。
请AutoDesk公司的大侠帮忙看看,看看是不是AutoCAD自身的bug,或者是我的代码自身有问题。
另外,我说一件让人哭笑不得的事情:我在Autodesk的论坛里面,发布了关于这个问题的帖子。题目用了AutoCAD's Bug等字眼,结果帖子发出没两分钟,就不见了。弄得我摸不到头脑,还以为没法出去,或者发出去了自己找不到了。然后,我又费了九牛二虎之力,又发了一份类似的帖子(英语水平限制,写篇帖子这个费劲)。结果大家猜得到,没两分钟,第二份帖子也被Autodesk和谐了。这和谐的速度,可比兔子快得多。经过这两次,我好像明白了什么,第三份帖子,就没敢出现Bug这个词,结果,顺利发出,并得到了回复。
这件事,元芳,你怎么看?
|
|