Constructor ComDataType.Load(var S : TStream);
begin
  S.Read(Gopr, SizeOf(Gopr));
  S.Read(Gzpr, SizeOf(Gzpr));
  S.Read(nopr, SizeOf(nopr));
  S.Read(nzpr, SizeOf(nzpr));
  S.Read(Pikz, SizeOf(Pikz));
  S.Read(kpdz, SizeOf(kpdz));
  S.Read(kpdo, SizeOf(kpdo));
  S.Read(piko, SizeOf(piko));
  S.Read(fk2, SizeOf(fk2));
  S.Read(fk1, SizeOf(fk1));
end;

Procedure ComDataType.Store(var S : TStream);
begin
  S.Write(Gopr, SizeOf(Gopr));
  S.Write(Gzpr, SizeOf(Gzpr));
  S.Write(nopr, SizeOf(nopr));
  S.Write(nzpr, SizeOf(nzpr));
  S.Write(Pikz, SizeOf(Pikz));
  S.Write(kpdz, SizeOf(kpdz));
  S.Write(kpdo, SizeOf(kpdo));
  S.Write(piko, SizeOf(piko));
  S.Write(fk2, SizeOf(fk2));
  S.Write(fk1, SizeOf(fk1));
end;

{$I xar_kom.inc}
PROCEDURE ComDataType.GrafKomp(numwin,nknr:byte);
        { numwin - Номер окна вывода х-ки }
CONST
    Cross  : FillPatternType = (255,255,255,255,255,255,255,255);

VAR
    kvet,i,j,k,kt       : Integer;
    n0,pi0,kpd0,gpr0    : Real;
    nv,pi,{g,}kpd{,p}   : Real;
    t0,t1,t2,t3         : ARRAY[1..3] OF Real;
    xpom,ypom,kpom,r    : ARRAY[1..25] OF Real;
    xmin,xmax,ymin,ymax : Real;
    xx,yy               : Integer;
    kx,ky               : Mkoor;
    npr                 : Mpar;
    c                   : Boolean;
    ch1                 : Char;

 BEGIN DrawXar:=True;
  PL:=FALSE;   { без вывода на плоттер }

                                  { поиск экстремумов }
  xmax:=0; ymax:=0; xmin:=10000; ymin:=10000;
  FOR i:=1 TO Adhead.kv DO
  WITH AdXar[i] DO
  BEGIN
    IF vv.gv[1]>xmax THEN xmax:=vv.gv[1];
    IF vv.gv[1]<xmin THEN xmin:=vv.gv[1];
    IF vv.pv[1]>ymax THEN ymax:=vv.pv[1];
    IF vv.pv[1]<ymin THEN ymin:=vv.pv[1];
    IF vv.sv[1]>ymax THEN ymax:=vv.sv[1];
    IF vv.sv[1]<ymin THEN ymin:=vv.sv[1];
     xpom[i]:=vv.gv[adhead.kt];
     ypom[i]:=vv.pv[adhead.kt];
     kpom[i]:=vv.sv[adhead.kt];
    IF vv.gv[adhead.kt]>xmax THEN xmax:=vv.gv[adhead.kt];
    IF vv.gv[adhead.kt]<xmin THEN xmin:=vv.gv[adhead.kt];
    IF vv.pv[adhead.kt]>ymax THEN ymax:=vv.pv[adhead.kt];
    IF vv.pv[adhead.kt]<ymin THEN ymin:=vv.pv[adhead.kt];
    IF vv.sv[adhead.kt]>ymax THEN ymax:=vv.sv[adhead.kt];
    IF vv.sv[adhead.kt]<ymin THEN ymin:=vv.sv[adhead.kt];
  END;
  xmin:=xmin-0.1; ymin:=ymin-0.1;

                    {  построение разметки графика  }
  WITH Grafik DO
  BEGIN
    GStep(xmin,xmax,9,argmin,argmax,stepx,ktokx);
    GStep(ymin,ymax,9,funcmin,funcmax,stepy,ktoky);
  END;
  if num<>2 then GWindow(numwin);

  SetColor(Black{DarkGray});
case nknr of
  1: GRazmet('Gpr','Pik',0,numwin);
  2: GRazmet('n ','Gtop',0,numwin);
 end;
                    {  вычерчивание линии помпажа  }
  SetColor(Red);
  GDot(xpom[1],ypom[1]);
  FOR i:=2 TO adhead.kv DO
  GPlot(xpom[i],ypom[i],false,xx,yy);
                    {  вычерчивание линий Пик      }
  SetColor(Blue);

  FOR i:=1 TO adhead.kv DO
  WITH AdXar[i] DO
  BEGIN
     GDot(vv.gv[1],vv.pv[1]);
    FOR j:=2 TO adhead.kt DO
    BEGIN
     GPlot(vv.gv[j],vv.pv[j],false,xx,yy);
                    { обозначение nпр на ветках }
      IF j=adhead.kt THEN
       BEGIN npr[i]:=nv; kx[i]:=xx; ky[i]:=yy; END;
    END;

  END; { ---- WITH----}

  GTam(1,1,xx,yy,c);
  PutTextXY(xx-3,yy-3,'*',Green);
  x_o[numwin]:=xx; y_o[numwin]:=yy;
  x_pt[numwin]:=xx; y_pt[numwin]:=yy;

  NameVet(4,adhead.kv,npr,kx,ky,{Yellow} Red);

 {} SetViewport(8,14,629-14,340,clipoff);
  { дорисовка }
    if numwin=2 then
        begin
          setcolor(cyan) ;
          setlinestyle(0,0,3); rectangle(320,14,622,314);
          setlinestyle(0,0,1);
        end;
      setfillstyle(1,red);
{     if nknr=1 then bar(174,14+2,540,55)
               else bar(174,14+2,435,55);
 }
      getviewsettings(viewport);
      with viewport do
     case nknr of
    1: PutTextXY(230,y1+5,' Compressor characteristic ',Black);
    2: PutTextXY(230,y1+5,' Regulator characteristic ',Black);
      end;

      PutTextXY(Round(GetMaxX/2-120),20,' * - measurement point;',Green);
      PutTextXY(Round(GetMaxX/2+30),20,' * - operating point ',Black);
     if nknr=1 then
      PutTextXY(Round(GetmaxX/2-150),35,
                '+ - relation of compressors performance factor from Gpr ',Green);

      case numwin of
         1: setviewport(8,14,round(getmaxx/2),314,clipoff);
         2: setviewport(round(getmaxx/2)+3,14,getmaxx-11,314,clipoff);
      end;
 {}

  SetColor(White);               {  Для вычерчивания рабочей линии }
  SetFillPattern(Cross,White);   {  Для вычерчивания рабочей линии }
  DrawXar:=False;

END;  {  GrafKomp  }

Procedure ComDataType.GTamN(x,y : Real; VAR ix,iy : Integer;
                                          Var tam : Boolean);
Begin
  GTam(x,y,ix,iy,tam);  { это использую тоько в:  kom.pas }
End;

Procedure ComDataType.GUnDotN(i,j : Integer; Var x,y : Real);
Begin
 GUnDot(i,j,x,y);      { это использую тоько в kom.pas }
End;

