Cad里的样条曲线有2种绘制方式,一种是以控制点绘制,一种是拟合点绘制方式,2种是不同的算法,cad里还可以无缝切换还是有一手的,不过我们自己写就先不管这个了
为了快速验证代码,一开始以autocad二次开发的方式先验证生成的曲线对不对,用AI生成了控制点的方法和拟合点的方法(中间也是各种问题代码,最后用grok搞定了控制点的生成,用GitHub copilot搞定了拟合点的生成),算法是挺有意思的,但是活太多了,先用AI搞定后期再慢慢学习其中的奥妙
通过二次开发方式和autocad做了比对,完美重合,本以为就这么愉快的搞定了,接着坑又来了,我们的autocad设置了默认存储为2007版本的,问题来了,读出来的点数据对应不上,
2个问题:
1.控制点的方式点对应不上,读取出来的点总比实际点多3个,一开始以为第三方库错了,还跟他们反馈了这个问题,后来意外把dwg导出dxf,因为dxf是明文,直接查看里面的数据发现也是多了3个点,那么应该就不会第三方库的问题了,关闭了那个问题反馈
2.拟合点的方式,当闭合属性设置为闭合时,读取出来却变成了控制点方式,后来想想cad能读取出来再转换成拟合方式应该也是有某个算法在里面,细节就不得而知了,不过经过慢慢比对数据也发现了一些细节可以判断哪个控制点数据是通过拟合方式转换而来,那就是节点向量数据,控制点的节点向量都是整数形式,拟合点转换过来的是小数,大胆猜测应该是cad反向推算出来的吧,那这个就不怎么好搞了,
因为一直想着这个问题,晚上没事就用家里的电脑在测试测试,结果又来个一波意外,发现第三方库读取闭合的拟合点不会再转成控制点了就是实实在在的拟合点,我以为是另一台电脑的解决方案没有清缓存导致的
第二天一大早就给项目方案清理一下重新生成,问题依旧,懵逼了一会,突然想到该不会是版本问题吧,还真是,把dwg文件另存为了2007,2010,2013,2018四个版本,一测试原来不同版本的存储方式不一样,搞了半天飞机,2007和2010需要对读出来的原始数据做一点处理,2013之后的版本直接用就好了
经过了几天的验证测试,样条曲线的读取问题应该搞定了,兼容别人的文件就是麻烦了一点,
二次开发是上层的接口应该内部做了统一所以没有这个问题,等到直接操作dwg文件时就暴露出了不同版本的文件存储方式了
夜雨聆风