objectarx二次开发自定义实体dwgInFields与dwgOutFields函数是如何区分写入数据是谁
时间: 2024-02-09 17:09:11 浏览: 27
在 ObjectARX 二次开发中,dwgInFields 和 dwgOutFields 函数是用来处理自定义实体数据的,其中 dwgInFields 用于读取实体数据,dwgOutFields 用于写入实体数据。这两个函数都有一个参数 pFiler,该参数是一个指向 AcDbDwgFiler 对象的指针,用于读/写数据。
在 dwgOutFields 函数中,要写入的数据应该被添加到 AcDbDwgFiler 对象中,例如:
```
void MyEntity::dwgOutFields(AcDbDwgFiler* pFiler) const
{
// 将数据写入到文件中
pFiler->writeItem(m_data1);
pFiler->writeItem(m_data2);
// ...
}
```
在 dwgInFields 函数中,需要读取的数据应该从 AcDbDwgFiler 对象中读取,例如:
```
void MyEntity::dwgInFields(AcDbDwgFiler* pFiler)
{
// 从文件中读取数据
pFiler->readItem(&m_data1);
pFiler->readItem(&m_data2);
// ...
}
```
通过这种方式,可以在读取和写入数据时区分数据是谁的。当写入数据时,数据应该与实体对象相关联,而在读取数据时,数据应该被读取并设置到实体对象的成员变量中。
相关问题
objectarx二次开发自定义实体dwgInFields与dwgOutFields函数写入了两个int类型 分别是列数和行数,在读取两个int数据是如何区分哪个是列哪个是行的
在 ObjectARX 二次开发中,如果在 dwgOutFields 函数中写入了两个 int 类型的数据,分别表示行数和列数,那么在 dwgInFields 函数中读取这两个数据时,可以按照写入的顺序进行读取,如下所示:
```
void MyEntity::dwgOutFields(AcDbDwgFiler* pFiler) const
{
// 写入行数和列数
pFiler->writeItem(m_rows);
pFiler->writeItem(m_cols);
// ...
}
void MyEntity::dwgInFields(AcDbDwgFiler* pFiler)
{
// 读取行数和列数
pFiler->readItem(&m_rows);
pFiler->readItem(&m_cols);
// ...
}
```
在读取时,可以根据写入时的顺序来确定哪个是行数,哪个是列数。例如,假设在 dwgOutFields 函数中先写入行数再写入列数,那么在 dwgInFields 函数中就应该先读取行数再读取列数:
```
void MyEntity::dwgOutFields(AcDbDwgFiler* pFiler) const
{
// 写入行数和列数
pFiler->writeItem(m_rows);
pFiler->writeItem(m_cols);
// ...
}
void MyEntity::dwgInFields(AcDbDwgFiler* pFiler)
{
// 读取行数和列数
pFiler->readItem(&m_rows);
pFiler->readItem(&m_cols);
// ...
}
```
这样就可以正确地区分哪个是行数,哪个是列数了。
C++objectarx二次开发如何验证dwgOutFields与dwgInFields读写数据是否正确
在C++ ObjectARX二次开发中,可以通过以下方式来验证dwgOutFields与dwgInFields读写数据是否正确:
1. 首先,在程序中定义一个测试数据结构体,结构体中包含了需要读写的各个字段。
2. 然后,使用dwgOutFields将测试数据结构体中的数据写入到dwg文件中。
3. 接着,使用dwgInFields将dwg文件中的数据读取到测试数据结构体中。
4. 最后,对比测试数据结构体中的数据和原始数据,判断读写是否正确。
下面是一个示例代码,用于验证dwgOutFields与dwgInFields读写数据是否正确:
```
// 定义测试数据结构体
struct TestStruct
{
int id;
char name[256];
double value;
};
// 测试函数
void test()
{
TestStruct data1 = { 1, "test1", 2.5 };
TestStruct data2 = { 0 };
// 写入数据
AcDbDwgFiler* pFiler = new AcDbDwgFiler;
pFiler->dwgOutFields(&data1);
// ... 写入代码
delete pFiler;
// 读取数据
AcDbDwgFiler* pFiler = new AcDbDwgFiler;
pFiler->dwgInFields(&data2);
// ... 读取代码
delete pFiler;
// 对比数据
if (memcmp(&data1, &data2, sizeof(TestStruct)) == 0)
{
// 读写正确
}
else
{
// 读写错误
}
}
```
在上面的示例代码中,我们定义了一个测试数据结构体TestStruct,包含了id、name和value三个字段。我们首先使用dwgOutFields将测试数据结构体中的数据写入到dwg文件中,然后使用dwgInFields将dwg文件中的数据读取到另一个测试数据结构体中,最后对比两个测试数据结构体中的数据,判断读写是否正确。