社区
图形处理/算法
帖子详情
读取CAD的DXF文件中的SPLINE 样条曲线数据 求绘制此曲线的算法与实现
xgc2067598
2010-11-10 03:14:59
如题,大家帮帮忙啊
...全文
1610
29
打赏
收藏
读取CAD的DXF文件中的SPLINE 样条曲线数据 求绘制此曲线的算法与实现
如题,大家帮帮忙啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
geruiguang
2012-07-31
打赏
举报
回复
能不能给我发一份啊,谢谢了,现在正在研究这个
867519280@qq.com
zhaoyong1105
2012-07-11
打赏
举报
回复
小弟也在摸索,楼主能否发份代码,不胜感激
1044369245@qq.com
swmnet
2012-06-24
打赏
举报
回复
楼主可否也发发份代码。。谢谢!在下也在摸索。。。
swmnet@126.com
cuiyaer
2012-02-28
打赏
举报
回复
楼主能否发份代码。。谢谢!
Jorry721
2011-08-19
打赏
举报
回复
楼主能否发份代码给我?多谢
453436534@qq.com
csuchen6
2011-06-13
打赏
举报
回复
楼主已完成?能否发份代码给我?多谢
190523797@qq.com
LIUKUN1106
2011-05-23
打赏
举报
回复
麻烦你也帮我发一份代码吧 谢谢了 liukun1106@126.com
xgc2067598
2010-11-16
打赏
举报
回复
非常感谢 buluori 的大力支持! 结贴了 基本完成了
xgc2067598
2010-11-12
打赏
举报
回复
好的 我已经发你右键了
buluori
2010-11-11
打赏
举报
回复
改成NURBS 要在 取点的 d布尔算法那函数里 加权值 的
CRPoint CRSpline::Dbordv(double u, int iDegree)
/*
输入参数:
k表示次数,l表示相异节点个数,u表示参数值,t[l]表示相异节点数组,r[l]表示重复度数组,
d[dim][kl]表示所涉及的控制顶点。
输出参数:
p表示B样条曲线上参数为u值的一点
*/
{
int k = Knot_Index(u) - iDegree; //相关节点的起始点索引号
if(k < 0)
return CRPoint(0,0);
CArray<double,double> dt0,dt1, dw;
dt0.SetSize(iDegree + 1);
dt1.SetSize(iDegree + 1);
dw.SetSize(iDegree + 1); //权值
for(int i = 0;i <= iDegree;i++)
{
dw[i] = m_pW[k + i];
dt0[i] = dw[i] * m_pCtrlPtList[k + i].x;
dt1[i] = dw[i] * m_pCtrlPtList[k + i].y;
}
for(int II = 1;II <= iDegree;II++)
{
for(int j = 0;j <= iDegree - II;j++)
{
double denom,alpha;
denom = Knot_Value(j+iDegree+1+k) - Knot_Value(j+II+k);
if(fabs(denom) <= 1e-5)
alpha = 0.0;
else
alpha = (u - Knot_Value(j+II+k))/denom;
dt0[j] = (1.0 - alpha) * dt0[j] + alpha * dt0[j+1];
dt1[j] = (1.0 - alpha) * dt1[j] + alpha * dt1[j+1];
dw[j] = (1.0 - alpha) * dw[j] + alpha * dw[j+1]; //权值
}
}
CRPoint p;
p.x = dt0.GetAt(0) / dw.GetAt(0); //权值
p.y = dt1.GetAt(0) / dw.GetAt(0);
return p;
}
buluori
2010-11-11
打赏
举报
回复
对,曲线逼近那里 也要改下,他用的步进值好像是du为 0.1 的,太绝对了, 用2分法去切要好点
hn13723899236
2010-11-11
打赏
举报
回复
给我也发一份代码吧
xgc2067598
2010-11-11
打赏
举报
回复
你发的那份代码 曲线逼近的算法 很不柔和,autocad里面 6个控制点 画出来的两个波段都是很柔和的
不过还是要谢谢你 不知道如何使得更加柔和 据我所致 autocad里面的样条曲线时 NURBS的算法貌似
xgc2067598
2010-11-11
打赏
举报
回复
好的 xgc2067598@163.com
buluori
2010-11-11
打赏
举报
回复
有没有邮箱,发段例子给你把,只要把里面的 哈特利-贾德方法 算法,改下就可以了, 加入 权值, 节点的计算用DXF读取的值替换掉
buluori
2010-11-11
打赏
举报
回复
通讯工具在公司用起来不方便,公司禁止,有事可以邮件留言
xgc2067598
2010-11-11
打赏
举报
回复
朋友可否加QQ 或者MSN 来交流下 这里效率太慢
我的QQ 123504023
MSN xgc2067598@hotmail.com
请注明 NURBS
xgc2067598
2010-11-11
打赏
举报
回复
Dj * Nj,k一般样条曲线, 而 NURBS用的是 Wj * Dj * Nj,k / Wj * Nj,k 能解释下么 我对算法的公式不是很了解 而且公式体现在程序的那一块里
buluori
2010-11-11
打赏
举报
回复
而且用的公式是不一样的 例子里用的公式是 Dj * Nj,k一般样条曲线, 而 NURBS用的是 Wj * Dj * Nj,k / Wj * Nj,k
buluori
2010-11-11
打赏
举报
回复
不,cad里面省略是因为我们在画spline的时候没有去编辑控制点权值的值,默认都是1的,所以生成DXF的时候cad会自动省略掉,一旦用户编辑过spline的权值,DXF里就会有权值这组数据了,所以你如果不想以后解析出来的曲线变形的话就在程序里加入进去
加载更多回复(8)
解析
DXF
图形
文件
格式
一、
DXF
文件
格式分析
DXF
文件
由标题段、表段、块段、实体段和
文件
结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录Auto
CAD
系统的所有标题变量的当前值或当前状态。标题变量记录了Auto
CAD
系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目
DXF
文件
内容解释
解析
DXF
图形
文件
格式 一、
DXF
文件
格式分析
DXF
文件
由标题段、表段、块段、实体段和
文件
结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录Auto
CAD
系统的所有标题变量的当前值或当前状态。标题变量记录了Auto
CAD
系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在
文件
中
出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。 ☆块
dxf
格式详解
解析
DXF
图形
文件
格式 一、
DXF
文件
格式分析
DXF
文件
由标题段、表段、块段、实体段和
文件
结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录Auto
CAD
系统的所有标题变量的当前值或当前状态。标题变量记录了Auto
CAD
系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在
文件
中
出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW
解析
Dxf
文件
:椭圆的解析
C++Qt利用
dxf
lib库解析并
绘制
椭圆
DXF
文件
详解
一个
DXF
文件
由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于
数据
类型的代码,它由
CAD
图形系统所规定,而组值为具体的数值,二者结合起来表示一个
数据
的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。 (1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决定。例如: 代码0~9组值类型为字符型。 代码10~59组值类型为实型。 代码60~79组值类型...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章