Продолжаю...
__________________
Функция установки документа:
//**************************
UstDoc(vDoc)//Функция установки документа
{
DelOldObj(vDoc);
var vVarChanged,vBackupTags;
para=new(PolygonObject);
if (!para) return NULL;
para->SetName(cObjName);
vDoc->StartUndo();
vDoc->AddUndo(UNDO_OBJECT_NEW,para);
vDoc->EndUndo();
vVarChanged = new(VariableChanged);
vBackupTags = new(BackupTags);
Nv=Nv05*2;
SP=Nu*Nv;
SQ=Nu*Nv+1;
vPointAry = new(array, SP);
para->SetPoints(vPointAry);
vBackupTags->Init(para);
vVarChanged->Init(0, SP);
if (!para->Message(MSG_POINTS_CHANGED, vVarChanged))
{
vBackupTags->Restore();
return NULL;
}
vPolyAry = new(array, SQ*4);
para->SetPolygons(vPolyAry);
vBackupTags->Init(para);//Init-Бэкапит таги para(предохранитель нехватки памяти)
vVarChanged->Init(0, SQ);//Init-Бэкапит все точки SQ(предохранитель нехватки памяти)
if (!para->Message(MSG_POLYGONS_CHANGED, vVarChanged))//Если нет изменений в para-возврат
{
vBackupTags->Restore();
return NULL;//(это нуль, но в адресном пространстве)
}
// Вставить Объект в ОбъектИерархию
vDoc->InsertObject(para,NULL,NULL);
GeEventAdd(DOCUMENT_CHANGED);
}//конец функции установки документа
//****************************************
__________________
Функция установки документа:
- Даём имя объекту, которое будет видно в Менеджере - para->SetName(cObjName).
- Все шаги отмены должны быть собраны в одном месте, иначе, как пишут разработчики "смешные вещи будут происходить" - vDoc->StartUndo(); vDoc->AddUndo(UNDO_OBJECT_NEW,para); vDoc->EndUndo();.
- Создаём конструкторы переменных и тагов:
vVarChanged = new(VariableChanged);
vBackupTags = new(BackupTags);
Создаём переменную и массив для точек объекта:
SP=Nu*Nv;
vPointAry = new(array, SP);
para->SetPoints(vPointAry);
Создаём переменную и массив для полигонов объекта:
SQ=Nu*Nv+1;
vPolyAry = new(array, SQ*4);
para->SetPolygons(vPolyAry);
Сохраняем и обнуляем переменные и таги объекта:
vBackupTags->Init(para);
vVarChanged->Init(0, SP);
vBackupTags->Init(para);//Init-Бэкапит таги para(предохранитель нехватки памяти)
vVarChanged->Init(0, SQ);//Init-Бэкапит все точки SQ(предохранитель нехватки памяти).
vBackupTags->Restore();
Вставляем Объект в ОбъектИерархию, как родителя:
vDoc->InsertObject(para,NULL,NULL);
Зафиксировать изменения в документе:
GeEventAdd(DOCUMENT_CHANGED);
//**************************
UstDoc(vDoc)//Функция установки документа
{
DelOldObj(vDoc);
var vVarChanged,vBackupTags;
para=new(PolygonObject);
if (!para) return NULL;
para->SetName(cObjName);
vDoc->StartUndo();
vDoc->AddUndo(UNDO_OBJECT_NEW,para);
vDoc->EndUndo();
vVarChanged = new(VariableChanged);
vBackupTags = new(BackupTags);
Nv=Nv05*2;
SP=Nu*Nv;
SQ=Nu*Nv+1;
vPointAry = new(array, SP);
para->SetPoints(vPointAry);
vBackupTags->Init(para);
vVarChanged->Init(0, SP);
if (!para->Message(MSG_POINTS_CHANGED, vVarChanged))
{
vBackupTags->Restore();
return NULL;
}
vPolyAry = new(array, SQ*4);
para->SetPolygons(vPolyAry);
vBackupTags->Init(para);//Init-Бэкапит таги para(предохранитель нехватки памяти)
vVarChanged->Init(0, SQ);//Init-Бэкапит все точки SQ(предохранитель нехватки памяти)
if (!para->Message(MSG_POLYGONS_CHANGED, vVarChanged))//Если нет изменений в para-возврат
{
vBackupTags->Restore();
return NULL;//(это нуль, но в адресном пространстве)
}
// Вставить Объект в ОбъектИерархию
vDoc->InsertObject(para,NULL,NULL);
GeEventAdd(DOCUMENT_CHANGED);
}//конец функции установки документа
//****************************************
Комментариев нет:
Отправить комментарий