加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

读取dxf的样条曲线

(2014-10-04 09:19:45)
标签:

电脑

分类: 电脑

读取dxf的样条曲线

 

autocad里面的图形可以打印成plt文件, plt文件是一个比较容易读取的文件格式,

因为plt里面的数据都是线段,也就是说autocad把所有图形转化成了线段的组合.

但是Adobe illustrator里面的图形不能直接导出成plt文件,只能导出到dxf文件,

那么现在的任务就是读取dxf文件,也就是写程序解析dxf里面的内容,

把里面的矢量图形变成线段的组合,相当于做一个dxfplt的转换.

 

Dxf文件是一个文本文件,很容易一行一行读出来,读出来的东西是图形的数学定义.

最常用的几个是: 线段LINE, 多线段POLYLINE, 圆弧CIRCLE, 椭圆ELLIPSE,样条曲线SPLINE,

这里面最复杂的是SPLINE,其它几个用中学的解析几何就可以搞定.

 

所以先要把SPLINE搞定,否则这dxf就没法读出来了,先用Adobe illustrator画一些样条曲线,

用过autocad的人可能找不到样条曲线按钮,其实画样条曲线的就是钢笔工具.

在这里我画了一个聪明的字的形状路径.

http://s8/mw690/002Yl47sgy6MxJx6jpZ17&690

导出到dxf文件,导出以后先用autocad打开看看,因为dxf格式是autocad公司的东西

http://s5/mw690/002Yl47sgy6MxJAgL8814&690

,确定导出的文件没有问题,然后用任何文本编辑器打开,我自己习惯用editplus, 打开以后搜索SPLINE,

http://s1/mw690/002Yl47sgy6MxJCBeo0e0&690

好了,样条曲线就在这里了,但是如何下手呢,这里面只有一行一行的数字和字符,

先来看看autocad公司的dxf帮助,仔细研究后应该基本上可以看懂dxf文件的意思

http://s4/mw690/002Yl47sgy6MxJEXuP923&690

dxf文件里面的SPLINE后面有很多相关信息,比如: 节点,控制点,拟合点,权值,

但是这如何确定SPLINE的图形呢,其实SPLINECIRCLE是类似的,

Dxf文件的CIRCLE字段后面我们可以读出圆心和半径,那么就可以画出圆来,

因为圆有方程,可是样条曲线有没有方程呢,肯定有,否则autocad怎么显示出来的呢.

我开始的时候在想那SPLINE的方程是什么呢?有没有专门的学科和书籍去阐述它呢,

我首先想到了[计算机图形学],网上找了很多相关书籍,发现有些书有提到,并且给出了方程,

但是我后来发现不对,因为上面给出的是均匀B样条的,我们这里的是非均匀的.

后来我又发现autocad的帮助里面说,autocad里面的样条曲线是NURBS(非均匀有理B样条)

 

搜索NURBS,最后下载到两本书,英文的[the nurbs book][计算机辅助几何设计与非均匀有理B样条]

看了一些后发现中文的这本有包含大部分英文的那本,

研究了这两本书好多天后发现,

1, dxf里面的SPLINE是一个特殊的NURBS,是分段bezier曲线

2, 样条曲线的方程是一个叫做deboor-cox递推公式

3, 有两种方法可以得到图形, 求出分段函数的方程或者直接用递推公式算坐标

 

 

理论有了个大概了解后就开始用VC编程了,编程有两个比较麻烦的地方,

1,dxf文件,里面是树形结构,最麻烦的是块的处理,

2,处理SPLINE字段,就是用节点序列和控制点序列算坐标

 

我用的是递推公式算坐标的,就是让参数从最小节点值到最大节点值单调变化,

根据每个参数值用deboor-cox公式递推出来的坐标点就扫过了整条样条曲线,

最后出来的结果表明deboor-cox递推可以画出SPLINE

http://s2/mw690/002Yl47sgy6MxJGxrQ541&690

结束

 

QQ: 1034593913

20112

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有