AcDb3dPolyline

 

AcDb3dPolyline类表示AutoCAD中的3D多段线实体。

注意:控制应用程序(controlling application)应显示地删除非数据库驻留的复合实体的子实体。否则将导致小部分的内存泄漏。

注意:不要派生此类。试图派生此类将使应用程序终止AutoCAD。

 

继承自

AcDbCurve

 

包含文件

dbents.h

 

参见

AcDbObject, AcDbEntity

 

成员

 

AcDb3dPolyline建构器和析构器

AcDb3dPolyline::~AcDb3dPolyline 函数

~AcDb3dPolyline();

析构器。

 

AcDb3dPolyline::AcDb3dPolyline 函数

AcDb3dPolyline(

AcDb::Poly3dType type,

AcGePoint3dArray& vertices,

Adesk::Boolean closed = Adesk::kFalse);

type

输入多段线类型

vertices

输入一个3D顶点数组

closed

输入布尔值,表示多段线是否闭合

此建构器使用由type指定的类型和vertices数组中的顶点创建一条的3d多段线。如果closed为Adesk::kTrue,则多段线将闭合(即,在最后一个顶点至第一个顶点之间有绘一条线),否则多段线将开放。

可能的类型值如下表:

k3dSimplePoly

没有样条曲线拟合的一个标准的多段线。

k3dQuadSplinePoly

具有二次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为5。

k3dCubicSplinePoly

具有三次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为6。


AcDb3dPolyline();

默认建构器。创建一个开放的多段线,且类型初始化为AcDb::k3dSimplePoly。

 

AcDb3dPolyline编辑函数

AcDb3dPolyline::appendVertex 函数

Acad::ErrorStatus

appendVertex(

AcDbObjectId& objId,

AcDb3dPolylineVertex* pNewVert);

objId

输出已增加的顶点的对象ID

pNewVert

输入指向要增加至多段线的顶点的指针

此函数将pNewVert指向的AcDb3dPolylineVertex对象添加至多段线的顶点列表中,设置多段线为顶点的拥有者,并将顶点增加至包含多段线的AcDbDatabase中(对于此函数,多段线必须为数据库驻留)。

增加的顶点必须在appendVertex()调用返回后由调用的应用程序显示地关闭。

如果成功返回Acad::eOk。如果多段线仍不是数据库驻留,则返回Acad::eNoDatabase


Acad::ErrorStatus

appendVertex(

AcDb3dPolylineVertex* unnamed);

pNewVert

输入指向要增加至多段线的顶点的指针

此函数将pNewVert指向的AcDb3dPolylineVertex对象增加至多段线的顶点列表中,并将多段线设为顶点拥有者。另外,如果多段线驻留在AcDbDatabase中,则顶点将被增加至相同的数据库中。如果多段线不是数据库驻留,则在此多段线被增加至一个数据库中时,顶点也将被增加。

如果多段线是数据库驻留,则增加的顶点必须在appendVertex()返回后由调用的应用程序显示地关闭。如果多段线不是数据库驻留,则不需要关闭顶点,因为它还没有被增加至数据库中(对这样的顶点调用closd()将返回Acad::eNoDatabase)。

如果成功返回Acad::eOk

 

AcDb3dPolyline::convertToPolyType 函数

Acad::ErrorStatus

convertToPolyType(

AcDb::Poly3dType newVal);

newVal

输入多段线要转换的类型

使用splineFit()方法转换多段线至newType指定的类型。

可能值如下表:

说明

k3dSimplePoly

没有进行样条曲线拟合的标准多段线

k3dQuadSplinePoly

具有二次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为5。

k3dCubicSplinePoly

具有三次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为6。

如果成功返回Acad::eOk,如果传递的数据非法则返回Acad::eInvalidInput

 

AcDb3dPolyline::insertVertexAt 函数

Acad::ErrorStatus

insertVertexAt(

AcDbObjectId& newVertId,

const AcDbObjectId& indexVertId,

AcDb3dPolylineVertex* pNewVertex);

newVertId

输出pNewVertex的对象ID

indexVertId

输入一个多段线中的顶点ID,新顶点将在其后插入

pNewVertex

输出指向被插入顶点的指针

此函数在对象为indexVertIdAcDb3dPolylineVertex对象后将pNewVertex指向的AcDb3dPolylineVertex对象插入至多段线的顶点列表中,将多段线设为顶点的拥有者,并将顶点增加至包含多段的数据库中(对于此函数,多段线必须为数据库驻留)。

要在多段线的开始处插入一个顶点,可将AcDbObjectId::kNull传递给indexVertId参数。

插入的顶点必须在insertVertexAt()返回后由调用的应用程序显示地关闭。

如果成功返回Acad::eOk。如果多段线不是数据库驻留,则返回Acad::eNoDatabase


Acad::ErrorStatus

insertVertexAt(

const AcDb3dPolylineVertex* pIndexVert,

AcDb3dPolylineVertex* pNewVertex);

pIndexVert

输入指向一个多段线中的顶点的指针,新顶点将在其后插入

pNewVertex

输入要被插入的顶点的指针

此函数在pIndexVert指向的AcDb3dPolylineVertex对象后将pNewVertex指向的AcDb3dPolylineVertex对象插入至多段线的顶点列表中,将多段线设为顶点的拥有者。另外,如果多段线驻留在AcDbDatabase中,则顶点将被增加至相同的数据库中。如果多段线不是数据库驻留,则在此多段线被增加至一个数据库中时,顶点也将被增加。

要在多段线的开始处插入一个顶点,将NULL值传递至pIndexVert参数。

如果多段线是数据库驻留,则增加的顶点必须在appendVertex()返回后由调用的应用程序显示地关闭。如果多段线不是数据库驻留,则不需要关闭顶点,因为它还没有被增加至数据库中(对这样的顶点调用close()将返回Acad::eNoDatabase)。

如果成功返回Acad::eOk

 

AcDb3dPolyline::makeClosed 函数

Acad::ErrorStatus

makeClosed();

此函数将多段线设为闭合(在多段线的起点和中点间将绘出一条线段,使多段线成为一多边形)。

这将设置DXF群组码的第一位。

如果成功返回Acad::eOk

 

AcDb3dPolyline::makeOpen 函数

Acad::ErrorStatus

makeOpen();

此函数将多段线设为开放。在多段线的起点和中点间没有一条线段,因此多段线不会形成一多边形。

这将清除DXF群组码的第一位。

如果成功返回Acad::eOk

 

AcDb3dPolyline::setPolyType 函数

Acad::ErrorStatus

setPolyType(

AcDb::Poly3dType type);

type

输入多段线类型

type设为多段线的AcDb::Poly3dType。AcDb::Poly3dType表示此多段线的样条曲线拟合类型。

可能值如下表:

说明

k3dSimplePoly

没有进行曲线/样条曲线拟合的标准多段线

k3dQuadSplinePoly

具有二次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为5。

k3dCubicSplinePoly

具有三次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为6。

如果成功返回Acad::eOk

 

AcDb3dPolyline::splineFit 函数

Acad::ErrorStatus

splineFit(

AcDb::Poly3dType splineType,

Adesk::Int16 splineSegs);

splineType

输入多段线类型控制值,用于多段线上的样条曲线拟合操作

splineSegs

输入多段线段控制值,用于多段线上的样条曲线拟合操作

此函数删除所有已有的任何样条曲线或曲线拟合顶点,将所有剩余的顶点转换至样条曲线控制顶点,并生成一个新的样条曲线拟合顶点集。结果多段线为穿过新的顶点集的样条曲拟合。此函数与PEDIT命令的"Spline fit"选项执行相同的操作除了此函数使用splineTypesplineSegs作为splineFit操作的控制参数,而不是使用splinetypesplinesegs数据库/系统变量

如果成功返回Acad::eOk


Acad::ErrorStatus

splineFit();

此函数删除所有已有的任何样条曲线或曲线拟合顶点,将所有剩余的顶点转换至样条曲线控制顶点,并生成一个新的样条曲线拟合顶点集。结果多段线为穿过新的顶点集的样条曲拟合。此函数与PEDIT命令的"Spline fit"选项执行相同的操作。

如果成功返回Acad::eOk

 

AcDb3dPolyline::straighten 函数

Acad::ErrorStatus

straighten();

此函数从多段线中删除所有任何样条曲线或曲线拟合顶点,并将所有剩余的顶点设为简单顶点。此函数与PEDIT命令的"Decurve"选项执行相同的操作。

如果成功返回Acad::eOk

 

AcDb3dPolyline杂项函数

AcDb3dPolyline::getClassID 函数

virtual Acad::ErrorStatus

getClassID(

CLSID* pClsid) const;

pClsid

未说明

Description to come。

 

AcDb3dPolyline::worldDraw 函数

virtual Adesk::Boolean

worldDraw(

AcGiWorldDraw* pWd);

pWd

未说明

Description to come。

 

AcDb3dPolyline查询函数

AcDb3dPolyline::polyType 函数

AcDb::Poly3dType

polyType() const;

返回AcDb::Poly3dType,表示此3D多段线的样条曲线拟合类型。

可能的AcDb::Poly3dType值如下表:

k3dSimplePoly

没有进行曲线/样条曲线拟合的标准多段线

k3dQuadSplinePoly

具有二次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为5。

k3dCubicSplinePoly

具有三次B样条路径的进行样条曲线拟合的多段线。这对应DXF群组码70的第三位被设置且DXF群组码75设为6。

AcDb3dPolyline子实体访问函数

AcDb3dPolyline::openSequenceEnd 函数

Acad::ErrorStatus

openSequenceEnd(

AcDbSequenceEnd*& pSeqend,

AcDb::OpenMode openMode);

pSeqend

输出指向Seqend对象的指针

openMode

输出打开Seqend的模式

此函数提供对多段线的AcDbSequenceEnd实体的访问,以取得或设置xdata。此函数将试图在openMode指定的模式下打开多段线的Seqend

openMode参数为以下之一:

AcDb::kForRead

AcDb::kForWrite

AcDb::kForNotify

如果打开操作成功,则pSeqend将设为AcDbSequenceEnd对象的地址并返回Adesk::eOk

如果试图以AcDb::kForRead模式打开,Seqend已打开且读取了最大的次数(256次),则打开众所周知且此函数返回Acad::eAtMaxReaders

如果Seqend当前以AcDb::kForNotify模式打开,则打开将失败且返回Acad::eWasNotifying

如果Seqend当前包含在一个Undo操作中,则打开将失败且返回Acad::eWasOpenForUndo

如果Seqend当前以AcDb::kForWrite模式打开,则打开将失败且返回Acad::eWasOpenForWrite.

注意:这个功能只与已有的,使用AcDbSequenceEnd对象进行xdata储存的AutoLISP应用程序兼容。

不建议在AcDbSequenceEnd对象上储存xdataxdata可以贴附在AcDb3dPolyline对象或任何顶点上,或使用扩展词典。

 

AcDb3dPolyline::openVertex 函数

Acad::ErrorStatus

openVertex(

AcDb3dPolylineVertex*& pVertex,

AcDbObjectId vertId,

AcDb::OpenMode openMode,

bool openErasedOne = false);

pVertex

输出指向顶点对象的指针

vertId

输出要打开的顶点的对象ID

openMode

输入打开顶点的模式

openErasedOne

输入布尔值,表示是否打开已删除的顶点

此函数提供对多段线顶点的访问。此函数使用一个空的指针进行传递。要打开的顶点的对象ID为vertId。打开的模式为openModeopenErasedOne是一个布尔值,表示是否打开已删除的顶点.

openMode参数为以下之一:

AcDb::kForRead

AcDb::kForWrite

AcDb::kForNotify

如果打开操作成功,则pVertex将设为访问的顶点对象的地址并返回Adesk::eOk

如果openErasedEntityAdesk::kFalse,则打开一个已删除的顶点将失败且此函数将返回Acad::eWasErased

如果试图以AcDb::kForRead模式打开,Seqend已打开且读取了最大的次数(256次),则打开众所周知且此函数返回Acad::eAtMaxReaders

如果顶点当前以AcDb::kForNotify模式打开,则打开将失败且返回Acad::eWasNotifying

如果顶点当前包含在一个Undo操作中,则打开将失败且返回Acad::eWasOpenForUndo

如果顶点当前以AcDb::kForWrite模式打开,则打开将失败且返回Acad::eWasOpenForWrite.

如果objIdAcDbObjectId::kNull,则打开将失败且此函数返回Acad::eNullObjectId

注意:如果需要,acdbOpenObject()acdbOpenAcDbEntity()都可以直接在顶点上使用。

 

AcDb3dPolyline::vertexIterator 函数

AcDbObjectIterator *

vertexIterator() const;

AcDb2dPolyline::vertexIterator 函数

AcDbObjectIterator *

vertexIterator() const;

此函数创建一个新的AcDbObjectIterator集,用于遍历多段线的顶点,并返回一个指象刚创建的遍历器对象的指针。调用此函数的程序程序负责使用C++的delete操作符释放遍历器对象。