初始数据库
AutoCAD®会话开始时,数据库包含以下元素:
- 一组九个符号表。
块表 (AcDbBlockTable)
标注样式表 (AcDbDimStyleTable)
图层表 (AcDbLayerTable)
线型表 (AcDbLinetypeTable)
已注册申请表 (AcDbRegAppTable)
文本样式表 (AcDbTextStyleTable)
用户坐标系表 (AcDbUCSTable)
视口表 (AcDbViewportTable)
查看表 (AcDbViewTable)
某些符号表已包含一条或多条记录。原始数据库中的图层表包含一个记录,即图层 0。块表最初包含三条记录:*MODEL_SPACE、*PAPER_SPACE 和 *PAPER_SPACE0。线型表始终具有连续、BY_LAYER和BY_BLOCK线型表记录。已注册的应用程序表始终具有 ACAD 表记录。文本样式表始终具有标准表记录。
- 命名对象字典。创建数据库时,此字典已包含两个数据库字典:GROUP 字典和 MLINE 样式字典。在 MLINE 样式字典中,标准样式始终存在。
- 一组固定的标头变量。(这些不是数据库对象。
-
创建和填充数据库
用于new创建数据库并用delete销毁数据库。AcDbDatabase构造函数中的第一个参数的默认值为 Adesk::kTrue。如果此参数为Adesk::kTrue,则使用“初始数据库”主题中所述的标准数据库对象填充数据库。如果参数为Adesk::kFalse,则创建一个空数据库,可以通过读取图形文件来填充该空数据库.
使用该函数读取存储在图形文件中的对象。readDwgFile()
如果收到以下任何错误代码,则可能需要使用用户界面提供的标准 AutoCAD 恢复机制恢复图形:
kDwgNeedsRecovery kDwgCRCDoesNotMatch kDwgSentinelDoesNotMatch kDwgObjectImproperlyRead
保存数据库
要保存数据库,请使用函数。您还可以选择使用全局函数将文件保存为以前的文件格式。saveAs()acdbSaveAs2000()
设置默认文件格式
ObjectARX®提供了为 SAVEAS、SAVE 和 QSAVE 命令指定默认文件格式的功能。(“自动保存”命令始终以正在使用的 AutoCAD 版本的本机格式保存图形。
该类包含一个枚举,该枚举定义将图形保存到文件时使用的格式。ObjectARX 参考中的 Seeenum以获取可能值的列表。AcApDocumentSaveFormat
该函数返回 SAVEAS、SAVE 和 QSAVE 命令正在使用的当前保存格式:formatForSave()
返回的值可以是会话范围的默认设置,也可以是用户为此文档选择的其他设置。如果它是此文档的覆盖,则不会跨会话保留。
该函数使用其中一个值来设置使用 SAVEAS、SAVE 和 QSAVE 命令保存图形时要使用的文件格式。这将设置会话范围的默认值,用户可以选择临时覆盖单个文档。setDefaultFormatForSave()SaveFormat
这些函数仅直接报告或设置用户输入的交互式命令的文件格式。如果希望应用程序使用当前的保存格式,则每次希望保存数据库时,首先需要调用,然后使用返回的值来确定要调用的函数。例如,如果返回,您将调用将数据库写入 AutoCAD 2000 DXF 文件。formatForSave()SaveFormatformatForSave()k2000_dxfacdbDxfOutAs2000()
请务必考虑以下几点:
- 您或您的用户可以设置一个持久的会话范围的默认保存格式,除 AUTOSAVE 之外的所有保存命令都将遵循该格式。
- 只有用户可以临时(不是在会话之间永久)覆盖特定文档的此设置。
- 该方法返回用户希望保存单个文档的格式;这将是会话范围的默认值或临时覆盖(视情况而定)。formatForSave()
wblock操作
该类包含一个wblock()重载函数,该函数具有四种形式,对应于 AutoCAD WBLOCK 命令的选项。这些函数可用于从现有数据库创建新数据库,或从输入数据库创建包含指定实体的新数据库。
从现有数据库创建新数据库
以下函数等效于 WBLOCK* 命令:
Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDb);
此函数从调用的数据库 (“this”) 创建新数据库。输入数据库中任何未引用的符号都将在新数据库中省略(这使得新数据库可能比原始数据库更干净、更小)。但是,它不负责复制其所有权根植于命名对象字典的应用程序定义对象。您需要使用通知函数AcEditorReactor将应用程序数据从源数据库传输到目标数据库。
使用实体创建新数据库
函数的其他三种形式创建一个新数据库,其模型空间块表记录包含输入数据库中的指定实体。此函数的第一种形式从命名块表记录中复制实体。函数的第二和第三种形式都复制实体数组,但其中一个包含指定如何处理新数据库中重复符号或字典条目的参数。AcDbDatabase::wblock()
复制命名块
以下函数等效于使用块定义的名称调用 WBLOCK 命令:
Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDb, AcDbObjectId blockId);
参数表示输入数据库中的块表记录。此块表记录中的实体将复制到新数据库的模型空间块表记录中。新数据库的插入基是块表记录的源。blockId
复制实体数组
以下函数等效于调用 WBLOCK 命令,然后使用该选项选择特定对象并指定插入基点:
Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDb, const AcDbObjectIdArray& outObjIds, const AcGePoint3d* basePoint);
此函数创建一个新数据库,其中包含参数中指定的实体。实体(可以位于输入数据库的模型空间或图纸空间块表记录中)放置在新数据库的模型空间中。新数据库中还包括这些实体拥有或引用的对象,以及这些对象的所有者。指定的点是新图形的原点(以世界坐标为单位)(即,它是新数据库的模型空间中的插入基点)。outObjIds
该函数的最终版本还复制实体数组并指定插入基点,但它有一个附加参数,指定如何处理新数据库中的重复符号或字典条目:AcDbDatabase::wblock()
Acad::ErrorStatus AcDbDatabase::wblock( AcDbDatabase*& pOutputDb, const AcDbObjectIdArray& outObjIds, const AcGePoint3d* basePoint, AcDb::DuplicateRecordCloning drc);
有关参数的详细信息,请参阅ObjectARX 参考中的函数文档。drcwblock()
插入数据库
这些函数将一个数据库复制到调用成员函数的数据库中。AutoCAD 合并它定义的对象,例如 MLINE 样式和组字典;但是,它不负责复制其所有权根植于命名对象字典的应用程序定义对象。您需要使用通知函数将应用程序数据从源数据库传输到目标数据库。insert()AcEditorReactor
注意:这些函数执行深度克隆,如“深度克隆”部分所述。insert()如果在合并源数据库和目标数据库时发生冲突(例如,如果两个数据库具有相同的线型名称),AutoCAD 将使用目标数据库中的版本。
以下函数等效于标准绘图 INSERT 命令:
Acad::ErrorStatus AcDbDatabase::insert( AcDbObjectId& blockId, const char* pBlockName, AcDbDatabase* pDb, bool preserveSourceDatabase = true);
此函数将实体从输入数据库 () 的模型空间复制到指定的块表记录 () 中,并返回新块表记录 () 的块 ID。然后,应用程序必须创建对块表记录的引用,并将其添加到数据库中。pDbpBlockNameblockId
以下函数等效于 AutoCAD 插入* 命令:
Acad::ErrorStatus AcDbDatabase::insert( const AcGeMatrix3d& xform, AcDbDatabase* pDb, bool preserveSourceDatabase = true);
此函数从输入数据库 () 的模型空间复制实体,并将它们放入新数据库的当前空间(图纸空间或模型空间),对实体应用指定的转换 ()。pDbxform
以下版本的函数将实体从源数据库中的命名块表记录复制到目标数据库中的命名块表记录,并在必要时创建新的目标块表记录或替换现有目标块表记录的内容:insert()
Acad::ErrorStatus AcDbDatabase::insert( AcDbObjectId& blockId, const char* pSourceBlockName, const char* pDestinationBlockName, AcDbDatabase* pDb, bool preserveSourceDatabase = true);
设置当前数据库值
如果未为实体指定数据属性(如颜色或线型),则使用该数据的数据库当前值。以下各节概述了用于指定与数据库关联的当前数据值的函数。
数据库颜色值
如果未为实体指定颜色,则使用存储在 CECOLOR 系统变量中的数据库当前颜色值。以下函数设置和检索数据库中的当前颜色值:
Acad::ErrorStatus AcDbDatabase::setCecolor( const AcCmColor& color); AcCmColor AcDbDatabase::cecolor() const;
数据库线型值
以下函数设置和检索数据库中的当前线型值:
Acad::ErrorStatus AcDbDatabase::setCeltype( AcDbObjectId objId); AcDbObjectId AcDbDatabase::celtype() const;
数据库线型比例值
数据库具有三种线型比例设置:
- 当前图元的线型比例设置,存储在 CELTSCALE 系统变量中。
- 当前图形的线型比例设置,存储在 LTSCALE 系统变量中。
- 一个标志,指示是将线型缩放应用于实体所在的空间,还是应用于图元在图纸空间中的外观。此设置存储在 PSLTSCALE 系统变量中。
再生图形时使用全局 LTSCALE 和 PSLTSCALE 设置(请参见实体)。使用以下函数设置和查询这些值:
Acad::ErrorStatus AcDbDatabase::setLtscale(double scale); double AcDbDatabase::ltScale() const; Acad::ErrorStatus AcDbDatabase::setCeltscale(double scale); double AcDbDatabase::celtscale() const; Acad::ErrorStatus AcDbDatabase::setPsltscale(bool scale) bool AcDbDatabase::psltscale() const;
数据库图层
以下函数设置并检索数据库中的当前图层值:
Acad::ErrorStatus AcDbDatabase::setClayer( AcDbObjectId objId); AcDbObjectId AcDbDatabase::clayer() const;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~