有四个版本:AcDbDatabase::wblock() 布洛克* Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDatabase); 用户定义块的 WBLOCK Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDatabase, AcDbObjectId nObjId); 选择集的 WBLOCK Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDatabase, const AcDbObjectIdArray& pIdSet, const AcGePoint3d& pPoint3d); Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase* pOutputDb, const AcDbObjectIdArray& outObjIds, const AcGePoint3d& basePoint, AcDb::DuplicateRecordCloning drc); 这些版本的 wblock 之间的主要内部区别之一是它们对模型空间和图纸空间的处理。由于在版本 1 中克隆了整个数据库,因此将克隆模型空间和图纸空间中的所有实体及其包含的图纸和模型空间。但是,在其他版本中,目的是仅克隆一组选定的实体。尽管对模型空间和图纸空间进行了处理,但它们使用“浅层克隆”,这不会反过来克隆模型空间和图纸空间中包含的所有实体。AcDbBlockTableRecordsAcDbBlockTableRecordsAcDbBlockTableRecords 尽管模型空间和图纸空间块已在版本二和版本三中克隆,但它们是空的。因此,调用将克隆的实体放入其中不仅是可以接受的,而且有必要这样做。(这是 usingon 的例外,其 ID 在不断变化)。此外,在版本二和版本三中,实体将设置为何时获得调用。这是因为内部代码单独克隆选择集的实体或所选的实体。它不会克隆自己。(但是,嵌套块中的实体仍将设置为)。此行为非常有用,如下一节(案例 1)所示。它使应用程序不必知道正在发生哪种类型的 WBLOCK 操作。AcDbBlockTableRecord::appendAcDbEntity()AcDbBlocKTableRecord::appendAcDbEntity()AcDbBlockTableRecordsisPrimaryAdesk::kTruewblockClone()AcDbBlockTableRecordAcDbBlockTableRecordisPrimaryAdesk::kFalse 以下是一些需要牢记的规则:
|
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:13
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.