Arx遍历块内实体

5 篇文章 0 订阅

1、关键类和接口

1.1、AcDbBlockTableRecordIterator

该迭代器由函数AcDbBlockTableRecord::newIterator()返回。它用于迭代AcDbBlockTableRecord。使用之后要释放(delete)返回的对象。

void start( bool atBeginning = true, bool skipDeleted = true);

此函数用于将迭代器的位置初始化为块的开头或结尾。如果atBeginning为true, 则迭代器位于表的开头; 否则, 它位于表的末尾。如果skipDeleted为true, 则迭代器位于第一个或最后一个非删除实体; 否则, 它位于第一个或最后一个实体, 无论其被删除或未删除状态。  

bool done() const;

如果迭代器已经定位在块的任一端之外, 则此函数返回true ; 否则, 它返回false。 

void step( bool forward = true, bool skipDeleted = true);

此函数将迭代器移动到块中的下一个(或上一个)实体。如果forward为true, 则迭代器逐步向块的末尾移动; 否则, 它会走向块的开头。如果skipDeleted为true, 则将跳过已擦除的块; 否则, 任何已擦除的块都将包含在扫描中。 

Acad::ErrorStatus getEntityId( AcDbObjectId& entityId) const;

该函数返回AcDbObjectId在该迭代器被定位在该实体的ENTITYID。 

1.2、AcDbBlockReference

该AcDbBlockReference类表示在AutoCAD的INSERT实体。块引用用于放置, 调整和显示它引用的AcDbBlockTableRecord中的实体集合的实例。此外, 块引用可以是AcDbAttribute实体的所有者(其列表由AcDbSequenceEnd实体自动终止)。 

从AcDbEntity继承的AcDbBlockReference集函数忽略doSubents参数, 因为这些子实体是真正特殊文本实体的属性, 需要具有各自的属性(与折线顶点不同, 它们只是数据点)。 

AcDbObjectId blockTableRecord() const;

此函数返回块引用引用的AcDbBlockTableRecord的对象ID 。 

引用的块表记录包含块引用将显示的实体。 

块表记录对象ID用于获取与块引用的AutoLISP和ADSRX实体信息列表中的组代码-2一起使用的实体名称。

1.3、AcDbBlockTableRecord

AcDbBlockTableRecord类的对象用作图形文件数据库中实体的容器。AcDbBlocktableRecord对象(通常称为BTR)由数据库的AcDbBlockTable对象拥有。BTR又拥有它们包含的实体对象。 

每个数据库中始终存在两个特殊的BTR。它们是* MODEL_SPACE和* PAPER_SPACE。它们是数据库的模型和纸空间。AutoCAD中在模型空间中创建的任何实体都由* MODEL_SPACE BTR拥有和包含。在Paper Space中创建的实体进入* PAPER_SPACE BTR。 

除了* MODEL_SPACE和* PAPER_SPACE之外的BTR在以前版本的AutoCAD中已知为块定义, 并且由AcDbBlockReferences(通常称为插入)引用。BTR包含一组实体, 可以通过多个插入引用以节省图形中的空间, 节省绘图创建时间, 并保证所有插入显示相同(可能除了颜色和线型)。

2、代码实例

打开块时要先以块参照AcDbBlockReference对象打开,然后用AcDbBlockReference::blockTableRecord()获取块表记录blockTableRecordId,用这个blockTableRecordId打开才是块表记录,直接用块blkid打开块,将返回eNullObjectId错误。

void readBlockEntities(const AcDbObjectId& blkid)
{
    AcDbBlockTableRecordIterator *iter;
    AcDbBlockReference *pBlkRef;
    AcDbBlockTableRecord *pRecord;
    Acad::ErrorStatus es = acdbOpenObject(pBlkRef, blkid, AcDb::kForRead);
    if (es != Acad::eOk)
        return;
    AcDbObjectId blockTableRecordId = pBlkRef->blockTableRecord();
    pBlkRef->close();
    es = acdbOpenObject(pRecord, blockTableRecordId, AcDb::kForWrite);
    if (es != Acad::eOk || pRecord == NULL)
        return;
    pRecord->newIterator(iter);
    for (iter->start(); !iter->done(); iter->step())
    {
        AcDbObjectId id;
        es = iter->getEntityId(id);
        if (es != Acad::eOk || !id.isValid())
            continue;
        // TODO 处理实体
    }
    // 释放迭代器对象,关闭快表记录
    delete iter;
    pRecord->close();
}

从acdbmgd.dll导出的内容,方便参考,格式如下: 类:Autodesk.AutoCAD.DatabaseServices.TextStyleTableRecord:Autodesk.AutoCAD.DatabaseServices.SymbolTableRecord New() 方法: {dtor}() {dtor}() {dtor}() {dtor}() ApplyPaperOrientationTransform(Viewport) ApplyPartialUndo(DwgFiler,RXClass) Audit(AuditInfo) Cancel() Close() CloseAndPage(Boolean) CopyFrom(RXObject) CreateExtensionDictionary() DisableUndoRecording(Boolean) Dispose() DowngradeOpen() DowngradeToNotify(Boolean) DwgIn(DwgFiler) DwgOut(DwgFiler) DxfIn(DxfFiler) DxfOut(DxfFiler) Erase() Erase(Boolean) HandOverTo(DBObject,Boolean,Boolean) ReleaseExtensionDictionary() RemoveField(ObjectId) ResetScaleDependentProperties() SetObjectIdsInFlux() SetPaperOrientation(Boolean) SwapIdWith(ObjectId,Boolean,Boolean) SwapReferences(IdMapping) UpgradeOpen() ViewportDraw(ViewportDraw) XDataTransformBy(Matrix3d) 函数: Clone() AS System.Object CompareTo(Object) AS System.Int32 CreateObjRef(Type) AS System.Runtime.Remoting.ObjRef DecomposeForSave(DwgVersion) AS Autodesk.AutoCAD.DatabaseServices.DecomposeForSaveReplacementRecord DeepClone(DBObject,IdMapping,Boolean) AS Autodesk.AutoCAD.DatabaseServices.DBObject Equals(Object) AS System.Boolean GetHashCode() AS System.Int32 GetLifetimeService() AS System.Object GetObjectSaveVersion(DwgFiler) AS Autodesk.AutoCAD.DatabaseServices.FullDwgVersion GetObjectSaveVersion(DxfFiler) AS Autodesk.AutoCAD.DatabaseServices.FullDwgVersion GetPersistentReactorIds() AS Autodesk.AutoCAD.DatabaseServices.ObjectIdCollection GetReactors() AS System.Collections.Generic.List`1[[Autodesk.AutoCAD.Runtime.RXObject, acdbmgd, Version=17.1.0.0, Culture=neutral, PublicKeyToken=null]] GetRXClass() AS Autodesk.AutoCAD.Runtime.RXClass GetType() AS System.Type GetXDataForApplication(String) AS Autodesk.AutoCAD.DatabaseServices.ResultBuffer HasPersistentReactor(ObjectId) AS System.Boolean InitializeLifetimeService() AS System.Object QueryX(RXClass) AS System.IntPtr RemoveField() AS Autodesk.AutoCAD.DatabaseServices.ObjectId RemoveField(String) AS Autodesk.AutoCAD.DatabaseServices.ObjectId SetAttributes(DrawableTraits) AS System.Int32 SetField(Field) AS Autodesk.AutoCAD.DatabaseServices.ObjectId SetField(String,Field) AS Autodesk.AutoCAD.DatabaseServices.ObjectId SetFromStyle() AS System.Boolean ToString() AS System.String UpgradeFromNotify() AS System.Boolean ViewportDrawLogicalFlags(ViewportDraw) AS System.Int32 WblockClone(RXObject,IdMapping,Boolean) AS Autodesk.AutoCAD.DatabaseServices.DBObject WorldDraw(WorldDraw) AS System.Boolean X(RXClass) AS System.IntPtr 属性: AcadObject AS System.Object 可读不可写 Annotative AS Autodesk.AutoCAD.DatabaseServices.AnnotativeStates 可读可写 AutoDelete AS System.Boolean 可读可写 BigFontFileName AS System.String 可读可写 ClassID AS System.Guid 可读不可写 Database AS Autodesk.AutoCAD.DatabaseServices.Database 可读不可写 Drawable AS Autodesk.AutoCAD.GraphicsInterface.Drawable 可读不可写 DrawableType AS Autodesk.AutoCAD.GraphicsInterface.DrawableType 可读不可写 ExtensionDictionary AS Autodesk.AutoCAD.DatabaseServices.ObjectId 可读不可写 FileName AS System.String 可读可写 FlagBits AS System.Byte 可读可写 Font AS Autodesk.AutoCAD.GraphicsInterface.FontDescriptor 可读可写 Handle AS Autodesk.AutoCAD.DatabaseServices.Handle 可读不可写 HasFields AS System.Boolean 可读不可写 HasSaveVersionOverride AS System.Boolean 可读可写 Id AS Autodesk.AutoCAD.DatabaseServices.ObjectId 可读不可写 IsAProxy AS System.Boolean 可读不可写 IsCancelling AS System.Boolean 可读不可写 IsDependent AS System.Boolean 可读不可写 IsDisposed AS System.Boolean 可读不可写 IsErased AS System.Boolean 可读不可写 IsEraseStatusToggled AS System.Boolean 可读不可写 IsModified AS System.Boolean 可读不可写 IsModifiedGraphics AS System.Boolean 可读不可写 IsModifiedXData AS System.Boolean 可读不可写 IsNewObject AS System.Boolean 可读不可写 IsNotifyEnabled AS System.Boolean 可读不可写 IsNotifying AS System.Boolean 可读不可写 IsObjectIdsInFlux AS System.Boolean 可读不可写 IsPersistent AS System.Boolean 可读不可写 IsReadEnabled AS System.Boolean 可读不可写 IsReallyClosing AS System.Boolean 可读不可写 IsResolved AS System.Boolean 可读不可写 IsShapeFile AS System.Boolean 可读可写 IsTransactionResident AS System.Boolean 可读不可写 IsUndoing AS System.Boolean 可读不可写 IsVertical AS System.Boolean 可读可写 IsWriteEnabled AS System.Boolean 可读不可写 MergeStyle AS Autodesk.AutoCAD.DatabaseServices.DuplicateRecordCloning 可读可写 Name AS System.String 可读可写 ObjectBirthVersion AS Autodesk.AutoCAD.DatabaseServices.FullDwgVersion 可读不可写 ObjectId AS Autodesk.AutoCAD.DatabaseServices.ObjectId 可读不可写 ObliquingAngle AS System.Double 可读可写 OwnerId AS Autodesk.AutoCAD.DatabaseServices.ObjectId 可读可写 PaperOrientation AS Autodesk.AutoCAD.DatabaseServices.PaperOrientationStates 可读不可写 PriorSize AS System.Double 可读可写 TextSize AS System.Double 可读可写 UndoFiler AS Autodesk.AutoCAD.DatabaseServices.DwgFiler 可读不可写 UnmanagedObject AS System.IntPtr 可读不可写 XData AS Autodesk.AutoCAD.DatabaseServices.ResultBuffer 可读可写 XScale AS System.Double 可读可写 -------------------------------- 类:Autodesk.AutoCAD.DatabaseServices.TextVerticalMode:System.Enum 函数: CompareTo(Object) AS System.Int32 Equals(Object) AS System.Boolean GetHashCode() AS System.Int32 GetType() AS System.Type GetTypeCode() AS System.TypeCode ToString() AS System.String ToString(IFormatProvider) AS System.String ToString(String,IFormatProvider) AS System.String ToString(String) AS System.String 字段: TextBase AS TextVerticalMode TextBottom AS TextVerticalMode TextTop AS TextVerticalMode TextVerticalMid AS TextVerticalMode value__ AS Int32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值