Тема: AcArray в custom object

Уважаемые коллеги!
Как в перегруженных методах класса AcDbEntity dwgInFields(...)
и dwgOutFields(...) (dbx!) записать и прочитать
объект класса AcArray? Кроме, разумеется, самого простого
способа(т.е. простой перебор членов массива).
Кто-то встречался с подобной задачей?
Спасибо

Re: AcArray в custom object

Стесняюсь спросить...
А чем плох перебор?

Re: AcArray в custom object

Перебор неплох, только вот если каждый член
этого массива структура, такая тоска наваливается.....

Re: AcArray в custom object

Могу предложить сделать шаблонный класс AcArraySerializer типа...
template <class T>
AcArraySerializer
{
writeArray(AcArray<T> arr,...* filler)
{
   filler.write (arr.size())
   for (для всех)
     arr[i].write(filler);
}
readArray(AcArray<T> arr,...* filler)
{
  arr.setSize(filler.read())
  for (для всех)
    arr[i].read(filler);
}
}
при этом структура/класс T должны сожержать методы read write чтоб себя записывать/читать.
Т.е. делаешь новую структуру с методами read write и все - массивы можно писать без дополнительного гемора.
А еще для поддержания разговора - я накропал свой MyFiller - у которого есть почти все те же методы что и DwgFillera, а в добавок у него есть методы useDwgFiller(...dwgFiller) useDxfFiller(...dxfFiller)
Т.е. теперь я не думаю о том чтобы писать сохраняловку отдельно в dwg и отдельно в dxf - со всеми возможными отседа багами...
dwgIn
{
myFiller.useDwgFiller(filler)
read(myFiller);
}
dwgOut
{
myFiller.useDwgFiller(filler)
write(myFiller);
}
dxfIn
{
myFiller.useDxfFiller(filler)
read(myFiller);
}
dxfOut
{
myFiller.useDxfFiller(filler)
write(myFiller);
}
read(myFiller)
{
  myFiller.readInt(intVal);
  myFiller.readDoubleArr(dbkArr);
  ...
}
write(myFiller)
{
  myFiller.writeInt(intVal);
  myFiller.writeDoubleArr(dbkArr);
  ...
}

Re: AcArray в custom object

> KonstantinM
Тогда лучше вовсе отказаться от использования AcArray, а использовать стандартные контейнеры, с нормально опредлённым понятием итератора. В этом случае, достаточно просто определить подходящий функтор, например:

struct MyStruct;
class MyStructDwgOut: public std::unary_function<void, MyStruct> {
public:
    MyStructDwgOut(AcDbDwgFiler *filer): filer_(filer) {}
    void operator()(const MyStruct& ms) const {
        // здесь код, который сохраняет структуру
    }
private:
    AcDbDwgFiler *filer_;
};
class MyEntity: public AcDbEntity {
public:
     // ...
private
    std::vector<MyStruct> table_;
};
Acad::ErrorStatus MyEntity::dwgOutFiler(AcDbDwgFiler *filer) {
    std::for_each(table_.begin(), table_.end(), MyStructDwgOut(filer));
}

Вот и всё...

Re: AcArray в custom object

Всем огромная благодарность за очень
толковую и поучительную дискуссию. Век живи
век учись! Решение этой проблемы я искал
в недрах ObjectARX. Создав класс динамических
массивов, наверно логично бы было и создать
методы их сохранения и чтения.
Спасибо большое
BS