Пример использования операторов GETDATA/PUTDATA

 

!  Пример использования операторов 

!  GetCode / GetData / PutData

!  Программа копирует содержимое выбранного

! сегмента базы DEMO.DOG в COPY.DOG

 

system sgr

system gps

system dog

system sets

 

  SIZEL_T=4; SIZER_T=5; SIZEA_T=6; FORMAT_T=7;

  GTABL_T=8; GTABLO_T=9; POZ_T=10; TRS_T=11;

  SHER_T=13; CUT_T=14; CRK_T=15; ARC_T=16;

  BOX_T=17; STROKE_T=18; STRING_T=19; K_T=20;

  FILL_T=27; STROKEU_T=29;

 

toSet(1) = SIZEL_T, SIZER_T, SIZEA_T, FORMAT_T,

           GTABL_T, GTABLO_T, POZ_T, TRS_T, SHER_T,

           CUT_T, CRK_T, ARC_T, BOX_T, STRING_T, K_T

 

define struct(SIZEL_T)   = getData, "SizeL";

define struct(SIZER_T)   = getData, "SizeR";

define struct(SIZEA_T)   = getData, "SizeA";

define struct(FORMAT_T)  = getData, "Format";

define struct(GTABL_T)   = getData, "GTabl";

define struct(GTABLO_T)  = getData, "GTablOut";

define struct(POZ_T)     = getData, "Poz";

define struct(TRS_T)     = getData, "Trs";

define struct(SHER_T)    = getData, "Sher";

define struct(CUT_T)     = getData, "Cut";

define struct(CRK_T)     = getData, "Crk";

define struct(ARC_T)     = getData, "Arc";

define struct(BOX_T)     = getData, "Box";

define struct(STRING_T)  = getData, "String";

define struct(98)        = getData, "K";

define struct(97): "Index" = real;

define struct(K_T)       = struct(98), struct(97);

dispose struct(98); dispose struct(97);

define struct(99)        = getData, "ELEMKON";

 

grMode 1; grOut 2;

oldBase "DEMO"

seg$="";

selSegm seg$;

cgSegm seg$;

shelSegm p1,p2;

window x[p1], y[p1], x[p2], y[p2], prop;

view 0,0,1,1

clrView;

outSegm;

 

code=0;

nEl=0;

print x1,y1,"Загрузка данных из DEMO.DOG",seg$;

repeat

  nEl=nEl+1;

  getCode n.nEl, code;          ! взять код элемента

  if code>0 then print x.1,y.code,code,":",v.code+1;

  ! элементы Stroke, StrokeU,Fill,GTablOut не

  ! копируются, для их занесения в новую базу

  ! необходимо использовать операторы подсистемы DOG

  if code>0 and code<>STROKE_T and code<>STROKEU_T

     and code<>FILL_T and code<>GTABLO_T then begin

    v.code=v.code+1;

    ! занесение данных об элементе в структуру

    getData n.nEl, struct(code,v.code);

    ! занесение данных об элементах контура

    if code=K_T then begin

      if v.K_T>1 then

        struct(K_T,v.K_T): "Index" =

          (struct[K_T,v.K_T-1,"NumEl"]+

           struct[K_T,v.K_T-1,"Index"])

      else

        struct(K_T,v.K_T): "Index" = 1;

      getData kstruct[K_T,v.K_T,"Handle",1],

                 struct[K_T,v.K_T,"Handle",2],

              struct(99, struct[K_T,v.K_T,"Index"]);

    end;

  end;

until code=0;

 

print x.1,y.1,"                                     ";

print x.1,y.1,"Количество элементов в базе: ", nEl-1;

print x.1,y.2,"Нажмите ENTER для продолжения..."

input wait;

 

print x.1,y.3,"Копирование данных в COPY.DOG",seg$;

oldBase "COPY"

if seg$>"\" then mkSegm seg$ else clrSegm;

for i=1 to lenOfSet[1] do

  if v(set[1,i])>0 then begin

    if set[1,i]=K_T then

      putData struct(K_T, 1, v.K_T), kstruct(99,1)

    else

      putData struct(set[1,i], 1, v(set[1,i]));

  end

 

clrView;

outSegm;

! перерасчет оболочки сегмента для правильного

! отображения в графическом редакторе DiaCAD

shelSegm p.1,p.2;

 

print x.1,y.1, "Копирование завершено. ",

               "Нажмите ENTER для выхода";

input wait;

 

end