Легко!
Объекты-содержимые и объект-коробка создаются отдельно и независимо друг от друга (тут имеется ввиду создание классов, а не создание объекта в базе данных).
Создаётся объект-содержимое, в котором заполняются соответствующим образом функции worldDraw, dwgInFields, dwgOutFields etc
Далее создаётся объект-коробка со своими worldDraw, dwgInFields, dwgOutFields etc. При этом в каждой из этих функций передаётся управление списку внутренних объектов-содержимых.
Acad::ErrorStatus container::dwgOutFields(AcDbDwgFiler* pFiler) const
{
//сохраняем какие-то данные по контейнеру
pFiler->writeString(nazvanieContainera);
//сохраняем количество внутр. объектов
pFiler->writeItem((Adesk::UInt16) itemsPArray.length());
for (i=0; i<itemsPArray.length(); i++)
itemsPArray[i]->dwgOutFields(pFiler);
return pFiler->filerStatus();
}
Acad::ErrorStatus container::dwgInFields(AcDbDwgFiler* pFiler)
{
//читаем какие-то данные по контейнеру
pFiler->readString(nazvanieContainera);
//читаем количество внутр. объектов
int len;
pFiler->readItem(&len);
//читаем внутренности вложенных объектов
for (i=0; i<len; i++)
{
item *pItem=new item;
pItem->dwgInFields(pFiler);
itemPArray.append(pItem);
}
return pFiler->filerStatus();
}
аналогично в worldDraw etc
Да, и не забывай обнулять массив внутренних объектов, чтобы не получить удвоение массива каждый раз при изменении объекта. Так как при изменении объекта, объект создаётся снова, для последующей возможности применения UNDO (объект копируется, а функция AcArray::append(...) лишь добавляет новые данные не удаляя старые). Это важно. То есть вполне достаточным будет вставить в конструктор контейнера фразу itemsPArray.setLogicalLength(0);
С остальным разберёшься сам. Если чё не понятно, пиши.