CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

wblockClone()

2022-12-31 18:00| 发布者: admin| 查看: 248| 评论: 0|来自: AutoCAD

有四个版本: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

以下是一些需要牢记的规则:

  1. 从不使用。如果必须创建新实体,则必须将它们与其未来所有者的 ID 一起保存在内存中,然后在之后追加它们。这也适用于将对象追加到、折线、多边形网格、多边形网格和块参照。AcDbBlocKTableRecord::appendAcDbEntity()WBLOCK*AcEdItorReactor::endDeepClone()AcDbDictionaries
  2. 在其他形式的 WBLOCK 中,仅在追加到模型空间或图纸空间时使用。但除了这个例外,WBLOCK* 提到的所有其他限制仍然适用。AcDbBlocKTableRecord::appendAcDbEntity()

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 12:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部