среда, 19 декабря 2012 г.

Функция установки документа.

Продолжаю...
__________________
Функция установки документа:

  1. Даём имя объекту, которое будет видно в Менеджере - para->SetName(cObjName).
  2. Все шаги отмены должны быть собраны в одном месте, иначе, как пишут разработчики "смешные вещи будут происходить" -      vDoc->StartUndo();      vDoc->AddUndo(UNDO_OBJECT_NEW,para);      vDoc->EndUndo();.
  3. Создаём конструкторы переменных и тагов:
     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);
     
}//конец функции установки документа
//****************************************

Комментариев нет:

Отправить комментарий