ObjectArx 自定义实体 dwgInFields 数组写法

本文介绍了一种从DWG文件读取3D点数据的方法,使用了Adesk::Int32和Adesk::UInt32类型变量ptNum来存储点的数量,并通过pFiler->readInt32()函数读取ptNum的值。随后,清空并调整m_pts向量的大小以匹配ptNum,最后通过循环和pFiler->readPoint3d()函数读取每个3D点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//假设有数组成员变量 vector<AcGePoint3d> m_pts;
//下面是dwgInFields函数中的写法
Adesk::Int32 ptNum = 0;//此处注意整数类型要和下面一句对应上
pFiler->readInt32(&ptNum);
m_pts.clear();
m_pts.resize(ptNum);
for (Adesk::UInt32 i = 0; i < ptNum; ++i)
{
    pFiler->readPoint3d(&(m_pts[i]));
}

 

ObjectARX 中,可以使用 dwgOutFields 和 dwgInFields 函数将自定义实体的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。这些函数支持的数据类型包括基本数据类型、字符串、数组以及自定义结构体。 如果要存储和读取自定义结构体数组,可以按照以下步骤操作: 1. 在自定义结构体中添加 dwgOutFields 和 dwgInFields 函数,用于存储和读取结构体中的数据。 2. 在自定义实体的 dwgOutFields 和 dwgInFields 函数中,依次调用结构体数组中每个元素的 dwgOutFields 和 dwgInFields 函数,将每个元素的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。 以下是一个示例代码: ```cpp struct MyData { int id; double value; // 添加 dwgOutFields 和 dwgInFields 函数 void dwgOutFields(AcDbDwgFiler* filer) const { filer->writeInt32(id); filer->writeDouble(value); } Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer) { filer->readInt32(&id); filer->readDouble(&value); return filer->filerStatus(); } }; class MyEntity : public AcDbEntity { public: ACDB_DECLARE_MEMBERS(MyEntity); // 添加 dwgOutFields 和 dwgInFields 函数 void dwgOutFields(AcDbDwgFiler* filer) const override { AcDbEntity::dwgOutFields(filer); filer->writeInt32(m_data.size()); for (const auto& data : m_data) { data.dwgOutFields(filer); } } Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer) override { Acad::ErrorStatus es; if ((es = AcDbEntity::dwgInFields(filer)) != Acad::eOk) return es; int count; filer->readInt32(&count); for (int i = 0; i < count; i++) { MyData data; data.dwgInFields(filer); m_data.push_back(data); } return filer->filerStatus(); } private: std::vector<MyData> m_data; }; ``` 在上面的示例代码中,MyData 结构体中添加了 dwgOutFields 和 dwgInFields 函数,用于存储和读取结构体中的数据。MyEntity 实体中的 dwgOutFields 和 dwgInFields 函数依次调用了结构体数组中每个元素的 dwgOutFields 和 dwgInFields 函数,将每个元素的数据存储到 DWG 文件中,或者从 DWG 文件中读取出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值