找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 891|回复: 9

[求助]:样条曲线 AcDbSpline() 函数的代码?

[复制链接]
发表于 2006-4-28 11:47:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
很奇怪,为什么搜索论坛关于AcDbSpline()函数的代码都没有一个较为全面的内容呢?都是三言两语的.
小弟现在急需查看一下这一函数的用法,(是很急).哪为大虾知道的话,麻烦你贴出来.不胜感激!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-28 11:54:08 | 显示全部楼层
AcDbSpline类



此类执行对AutoCAD的SPLINE实体进行操作。

AcDbSpline类的对象使用一个内嵌的gelib对象储存实际的样条曲线信息。样条曲线自身可是一条通过“拟合点”集的简单的曲线拟合(指定的误差可能为0),或是一条NURBS样条曲线(即,用于定义样条曲线路径的一个控制点、节点和权值的集合)。在内部,一个曲线拟合的样条曲线仍有NURBS数据,然而反过来则不正确。

以下的书是样条曲线知识的基础:

Curves and Surfaces for CAGD by Gerald Farin
Mathematical Elements for Computer Graphics by David Rogers and Alan Adams
An Introduction To Splines For Use In Computer Graphics & Geometric Modeling by Richard H. Bartels, John C. Beatty, and Brian A Barsky


继承自

AcDbCurve



包含文件

dbspline.h



提示

AcDbSpline类提供函数查询和设置一条曲线拟合的样条曲线和一个函数集合用于查询和设置一条NURBS样条曲线。不建议在一条NURBS样条曲线上调用曲线拟合函数或在一条曲线拟合的样条曲线上调用NURBS函数。这将可能导致无效的数据或更坏的情况发生。AcDbSpline::hasFitData()方法可用于确定处理的样条曲线的类型。

使用一个连续序列的相同控制点创建一条NURBS样条曲线将导致一条不可用的样条曲线,因为连续性的问题。



参见

AutoCAD自定义向导和AutoCAD命令参数中的SPLINE



成员



AcDbSpline建构器和析构器

AcDbSpline::~AcDbSpline 函数

virtual

~AcDbSpline();

析构器。



AcDbSpline::AcDbSpline 函数

AcDbSpline(

const AcGePoint3dArray& points,

int order = 4,

double fitTolerance = 0.0);

points
未公布

order
未公布

fitTolerance
未公布


未公布


--------------------------------------------------------------------------------

AcDbSpline(

const AcGePoint3dArray& points,

const AcGeVector3d& startTangent,

const AcGeVector3d& endTangent,

int order = 4,

double fitTolerance = 0.0);

points
未公布

startTangent
未公布

endTangent
未公布

order
未公布

fitTolerance
未公布


未公布


--------------------------------------------------------------------------------

AcDbSpline(

int degree,

Adesk::Boolean rational,

Adesk::Boolean closed,

Adesk::Boolean periodic,

const AcGePoint3dArray& controlPoints,

const AcGeDoubleArray& knots,

const AcGeDoubleArray& weights,

double controlPtTol = 0.0,

double knotTol = 0.0);

degree
未公布

rational
未公布

closed
未公布

periodic
未公布

controlPoints
未公布

knots
未公布

weights
未公布

controlPtTol
未公布

knotTol
未公布


未公布


--------------------------------------------------------------------------------

AcDbSpline(

const AcGePoint3d& center,

const AcGeVector3d& unitNormal,

const AcGeVector3d& majorAxis,

double radiusRatio,

double startAngle = 0.0,

double endAngle = 6.28318530717958647692);

center
未公布

unitNormal
未公布

majorAxis
未公布

radiusRatio
未公布

startAngle
未公布

endAngle
未公布


未公布


--------------------------------------------------------------------------------

AcDbSpline();

默认建构器。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-28 12:45:40 | 显示全部楼层
Spline (AcDbSpline) entities in AutoCAD are NURBS curves. You need to extract
the NURBS data from a given spline entity in order build a Ge model of it as
shown in the following example. This example builds a AcGeNurbeCurve2d of a
spline entity, with little modifications to this, you could also build a
AcGeNurbCurve3d .

<code_begin>ads_name ent;ads_point pt;if (acedEntSel("Select an entity: ", ent, pt) != RTNORM){    acedAlert("Error selecting entity!");    return;}AcDbEntity *pEnt;AcDbObjectId objId;if (acdbGetObjectId(objId, ent) != Acad::eOk){    acedAlert("Error getting the ObjectId!");    return;}if (acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead) != Acad::eOk){    acedAlert("Error opening the entity for Read!");    delete pEnt;    return;}int deg;Adesk::Boolean rational;Adesk::Boolean closed;Adesk::Boolean periodic;AcGePoint3dArray cPoints;AcGeDoubleArray knots;AcGeDoubleArray weights;double controlPtTol;double knotTol;AcGePoint3d c3Pt;AcGePoint2d c2Pt;AcDbSpline *pSpline=AcDbSpline::cast(pEnt);if (pSpline != NULL){//The following extracts the NURBS data from the given Spline.pSpline->getNurbsData(deg, rational, closed, periodic, cPoints, knots, weights,controlPtTol, knotTol);int cnt=cPoints.length();AcGePoint2dArray ncPts;AcGeDoubleArray nweights;nweights.setLogicalLength(cnt);ncPts.setLogicalLength(cnt);for (int i=0; i<=cnt-1; i++){        pSpline->getControlPointAt(i , c3Pt);    c2Pt[0]=c3Pt[0];    c2Pt[1]=c3Pt[1];    ncPts.setAt(i , c2Pt);    if (weights.length() == 0)    {        nweights.setAt(i , 1.0);    }    else    {        nweights.setAt(i , weights.at(i));    }}AcGeKnotVector knotvec(knots, knotTol);AcGeNurbCurve2d *pNurbcurve=new AcGeNurbCurve2d(deg, knotvec, ncPts, nweights,periodic);pSpline->close();}else{    acedAlert("This is not a Spline entity: ");    pEnt->close();}<code_end>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-28 18:16:55 | 显示全部楼层
晕倒!
是不是太麻烦了?
有没有简单一点的.我只是想要画一条剖面线而已呀,大哥!
更直接一点的.
难道就没有象画直线那样的处理方法吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-28 19:38:45 | 显示全部楼层
容易大家不都会了么, 你靠什么吃饭. 要想有饭吃,就能做不容易的事情
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-4 23:30:40 | 显示全部楼层
大家讨论这么高深的问题,我实在插不上嘴。
我现在想问一个简单问题(不用编程),看看大家有没有办法解决:

在AutoCAD中先画2条spline,然后把它们对接起来。
我想这应该是一个非常简单的问题,因为在此前我曾经成功地对接过许多pline线(非spline)。
可是我找遍了,也没有发现什么命令或方法,能够将2条spline对接成为一条。

另外还有一个问题,刚画好的spline如果打断,它就成为另外一种形式,而不能复原。

大家有什么好的办法吗?请帮忙解决,非常感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 11:08:36 | 显示全部楼层
两条样条线做对接(即相连)可以采用取两条线的定位点,然后重新生成新的样条线,
而打断后的样条线是没有定位点的,只有控制点。因此它不能复原。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 15:59:38 | 显示全部楼层
打断曲线确实会变形的,只有打断后增加或调整相关控制点来使曲线的形状和原来一样。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 17:22:10 | 显示全部楼层
利用2条spline的数据点重新生成新的样条线,这个我当然早就想到了,但那要编程的。
我认为这不应该是我们事,应该是Autodesk的责任和义务。

另外,打断以后的spline只剩下控制点,多麻烦啊!我的数据点到哪里去了啊??!!
这讨厌的desk!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-10-12 23:22:19 | 显示全部楼层

连接两条SPLINE,用几何库

AcGeNurbCurve3d::joinWith Function
AcGeNurbCurve3d &
joinWith(
const AcGeNurbCurve3d& curve);
curveInput spline to be joined with this spline
Recomputes spline by joining input spline to this spline. Neither spline may be closed and the start point of the input spline must be equal to the endpoint of this spline.

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-26 07:42 , Processed in 0.518013 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表