diff options
-rw-r--r-- | epost.lpr | 11 | ||||
-rw-r--r-- | epost.lps | 118 | ||||
-rw-r--r-- | epostunit.pas | 193 | ||||
-rw-r--r-- | typenunit.pas | 94 | ||||
-rw-r--r-- | werteunit.pas | 36 |
5 files changed, 382 insertions, 70 deletions
@@ -182,6 +182,17 @@ begin aufraeumen; halt(1); end; + if startetMit('Agglomeration ',s) then begin + i:=findeWerte(s,inf,@wertes,@Konturen,true); + if i<0 then begin + aufraeumen; + halt(1); + end; + if wertes[i].berechneAgglomeration(syntaxtest,inf) then + continue; + aufraeumen; + halt(1); + end; if startetMit('teile ',s) then begin i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); if i<0 then begin @@ -7,10 +7,8 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> - <TopLine Value="71"/> - <CursorPos X="32" Y="151"/> - <FoldState Value=" T0iVV3912821151511111313[442[C42121[872+"/> + <TopLine Value="72"/> + <CursorPos Y="185"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -25,9 +23,8 @@ <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="22"/> - <CursorPos X="3" Y="50"/> - <FoldState Value=" T3pC0D5 piejM078]9XjF0G7[94]IH4 T0kpB0{1{"/> + <TopLine Value="1885"/> + <CursorPos X="5" Y="1905"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -42,14 +39,17 @@ <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="4"/> + <TopLine Value="210"/> + <CursorPos X="60" Y="219"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="5"/> - <TopLine Value="195"/> + <TopLine Value="214"/> <CursorPos Y="216"/> <UsageCount Value="200"/> <Loaded Value="True"/> @@ -71,9 +71,9 @@ <Unit8> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="3"/> - <TopLine Value="468"/> - <CursorPos X="21" Y="483"/> - <UsageCount Value="26"/> + <TopLine Value="17"/> + <CursorPos X="3" Y="37"/> + <UsageCount Value="28"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -94,7 +94,7 @@ <EditorIndex Value="2"/> <TopLine Value="65"/> <CursorPos X="26" Y="80"/> - <UsageCount Value="18"/> + <UsageCount Value="20"/> <Loaded Value="True"/> </Unit11> <Unit12> @@ -107,123 +107,123 @@ </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="epost.lpr"/> - <Caret Line="360" Column="13" TopLine="321"/> + <Filename Value="werteunit.pas"/> + <Caret Line="251" TopLine="211"/> </Position1> <Position2> - <Filename Value="epost.lpr"/> - <Caret Line="21" Column="35"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1926" Column="16" TopLine="1906"/> </Position2> <Position3> - <Filename Value="epost.lpr"/> - <Caret Line="361" Column="56" TopLine="322"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1947" Column="33" TopLine="1912"/> </Position3> <Position4> - <Filename Value="epost.lpr"/> - <Caret Line="394" Column="54" TopLine="360"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1927" Column="36" TopLine="1912"/> </Position4> <Position5> <Filename Value="epostunit.pas"/> - <Caret Line="5873" TopLine="7"/> </Position5> <Position6> <Filename Value="epostunit.pas"/> - <Caret Line="5654" Column="3" TopLine="5645"/> + <Caret Line="122" Column="25" TopLine="90"/> </Position6> <Position7> <Filename Value="epostunit.pas"/> - <Caret Line="5749" TopLine="5734"/> + <Caret Line="123" Column="25" TopLine="91"/> </Position7> <Position8> <Filename Value="epostunit.pas"/> - <Caret Line="343" TopLine="327"/> + <Caret Line="407" Column="29" TopLine="375"/> </Position8> <Position9> - <Filename Value="typenunit.pas"/> - <Caret Line="203" Column="11" TopLine="184"/> + <Filename Value="epostunit.pas"/> + <Caret Line="442" Column="32" TopLine="403"/> </Position9> <Position10> - <Filename Value="typenunit.pas"/> - <Caret Line="16" Column="14"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1803" Column="26" TopLine="1780"/> </Position10> <Position11> - <Filename Value="typenunit.pas"/> - <Caret Line="24" Column="46"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1929" Column="35" TopLine="1910"/> </Position11> <Position12> - <Filename Value="typenunit.pas"/> - <Caret Line="450" Column="51" TopLine="417"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1941" Column="14" TopLine="1920"/> </Position12> <Position13> - <Filename Value="typenunit.pas"/> - <Caret Line="809" Column="57" TopLine="776"/> + <Filename Value="epostunit.pas"/> + <Caret Line="1904" Column="33" TopLine="1885"/> </Position13> <Position14> <Filename Value="epostunit.pas"/> - <Caret Line="5756" Column="38" TopLine="5735"/> + <Caret Line="151" Column="14" TopLine="132"/> </Position14> <Position15> <Filename Value="epostunit.pas"/> - <Caret Line="5758" Column="37" TopLine="5738"/> + <Caret Line="1903" Column="5" TopLine="1897"/> </Position15> <Position16> <Filename Value="epostunit.pas"/> - <Caret Line="5793" Column="20" TopLine="5763"/> + <Caret Line="153" Column="14" TopLine="134"/> </Position16> <Position17> - <Filename Value="epost.lpr"/> - <Caret Line="361" Column="33" TopLine="322"/> + <Filename Value="epostunit.pas"/> + <Caret Line="82" Column="22" TopLine="61"/> </Position17> <Position18> <Filename Value="epostunit.pas"/> - <Caret Line="5781" Column="35" TopLine="5761"/> + <Caret Line="153" Column="57" TopLine="121"/> </Position18> <Position19> - <Filename Value="epostunit.pas"/> - <Caret Line="132" Column="37" TopLine="114"/> + <Filename Value="typenunit.pas"/> + <Caret Line="350" Column="19" TopLine="342"/> </Position19> <Position20> - <Filename Value="epostunit.pas"/> - <Caret Line="5761" Column="99" TopLine="5742"/> + <Filename Value="typenunit.pas"/> + <Caret Line="377" Column="20" TopLine="345"/> </Position20> <Position21> <Filename Value="typenunit.pas"/> - <Caret Line="913" TopLine="895"/> + <Caret Line="831" Column="42" TopLine="820"/> </Position21> <Position22> <Filename Value="epostunit.pas"/> - <Caret Line="151" Column="41" TopLine="134"/> + <Caret Line="475" Column="8" TopLine="394"/> </Position22> <Position23> - <Filename Value="epostunit.pas"/> - <Caret Line="3690" Column="2" TopLine="3656"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1935" TopLine="1912"/> </Position23> <Position24> - <Filename Value="epostunit.pas"/> - <Caret Line="124" Column="25" TopLine="117"/> + <Filename Value="typenunit.pas"/> + <Caret Line="408" Column="59" TopLine="391"/> </Position24> <Position25> - <Filename Value="epostunit.pas"/> - <Caret Line="1545" TopLine="1515"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1937" Column="22" TopLine="1917"/> </Position25> <Position26> <Filename Value="epostunit.pas"/> - <Caret Line="3701" TopLine="3680"/> + <Caret Line="1904" Column="71" TopLine="1883"/> </Position26> <Position27> <Filename Value="epostunit.pas"/> + <Caret Line="1901" Column="37" TopLine="1882"/> </Position27> <Position28> - <Filename Value="epostunit.pas"/> - <Caret Line="329" Column="17" TopLine="316"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1943" Column="7" TopLine="1918"/> </Position28> <Position29> - <Filename Value="epostunit.pas"/> - <Caret Line="3688" TopLine="3670"/> + <Filename Value="typenunit.pas"/> + <Caret Line="400" Column="96" TopLine="374"/> </Position29> <Position30> - <Filename Value="epost.lpr"/> - <Caret Line="149" Column="18" TopLine="73"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1514" Column="15" TopLine="1494"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index a804c01..45cdb26 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -124,6 +124,7 @@ type function ladeDateien(st: boolean; var f: tMyStringlist; pl,sa: boolean): boolean; function ladeAscii(st: boolean; datei: string): boolean; function berechneLiKo(st: boolean; var f: tMyStringlist; threads: longint): boolean; + function berechneAgglomeration(st: boolean; var f: tMyStringlist): boolean; function berechneQuotient(st: boolean; var f: tMyStringlist; threads, dividend, divisor: longint): boolean; function berechneProdukt(st: boolean; var f: tMyStringlist; threads, faktor1, faktor2: longint): boolean; function berechneKorrelation(st: boolean; var f: tMyStringlist; threads: longint; const quelle: tWerte): boolean; @@ -1790,6 +1791,167 @@ begin result:=true; end; +function tWerte.berechneAgglomeration(st: boolean; var f: tMyStringlist): boolean; +var + i,xmin,xmax,tmin,tmax: longint; + quellen: tWerteArray; + s: string; + Zeit,schritt: extended; + horizontal: boolean; + pSi: pTLLWerteSingle; + pDo: pTLLWerteDouble; + pEx: pTLLWerteExtended; +begin + result:=false; + warteaufBeendigungDesLeseThreads; + setlength(quellen,0); + Genauigkeit:=gExtended; + _xsteps:=0; + _tsiz:=0; + Zeit:=now; + schritt:=1; + horizontal:=true; + repeat + if not f.metaReadln(s,true) then begin + gibAus('Unerwartetes Dateiende!',3); + exit; + end; + if s='Ende' then break; + if startetMit('xmin:',s) then begin + xmin:=kont2disk('x',exprtofloat(st,s)); + continue; + end; + if startetMit('xmax:',s) then begin + xmax:=kont2disk('x',exprtofloat(st,s)); + continue; + end; + if startetMit('tmin:',s) then begin + tmin:=kont2disk('t',exprtofloat(st,s)); + continue; + end; + if startetMit('tmax:',s) then begin + tmax:=kont2disk('t',exprtofloat(st,s)); + continue; + end; + if startetMit('Schritt:',s) then begin + schritt:=exprtofloat(st,s); + continue; + end; + if s='horizontal' then begin + horizontal:=true; + continue; + end; + if s='vertikal' then begin + horizontal:=true; + continue; + end; + setlength(quellen,length(quellen)+1); + i:=findeWerte(erstesArgument(s),nil,wertes,Konturen,false); + if i<0 then + exit; + quellen[length(quellen)-1]:=wertes^[i]; + if _xsteps=0 then begin + _xsteps:=quellen[length(quellen)-1]._xsteps; + Transformationen.kopiereVon(quellen[length(quellen)-1].Transformationen); + xmin:=0; + xmax:=_xsteps-1; + end; + if _tsiz=0 then begin + _tsiz:=quellen[length(quellen)-1]._tsiz; + Transformationen.kopiereVon(quellen[length(quellen)-1].Transformationen); + tmin:=0; + tmax:=_tsiz-1; + end; + if _xsteps<>quellen[length(quellen)-1]._xsteps then begin + gibAus('Unterschiedliche Anzahl an x-Schritten: '+inttostr(_xsteps)+' bisher vs. '+inttostr(quellen[length(quellen)-1]._xsteps)+' bei '+inttostr(i)+'!',3); + exit; + end; + if _tsiz<>quellen[length(quellen)-1]._tsiz then begin + gibAus('Unterschiedliche Anzahl an t-Schritten: '+inttostr(_tsiz)+' bisher vs. '+inttostr(quellen[length(quellen)-1]._tsiz)+' bei '+inttostr(i)+'!',3); + exit; + end; + if quellen[length(quellen)-1].Transformationen.xstart<>quellen[0].Transformationen.xstart then begin + gibAus('Anfangspostionen passen nicht zusammen ('+floattostr(quellen[0].Transformationen.xstart)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.xstart)+' bei '+inttostr(i)+')!',3); + exit; + end; + if quellen[length(quellen)-1].Transformationen.xstop<>quellen[0].Transformationen.xstop then begin + gibAus('Endpostionen passen nicht zusammen ('+floattostr(quellen[0].Transformationen.xstop)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.xstop)+' bei '+inttostr(i)+')!',3); + exit; + end; + if quellen[length(quellen)-1].Transformationen.tstart<>quellen[0].Transformationen.tstart then begin + gibAus('Anfangszeiten passen nicht zusammen ('+floattostr(quellen[0].Transformationen.tstart)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.tstart)+' bei '+inttostr(i)+')!',3); + exit; + end; + if quellen[length(quellen)-1].Transformationen.tstop<>quellen[0].Transformationen.tstop then begin + gibAus('Endzeiten passen nicht zusammen ('+floattostr(quellen[0].Transformationen.tstop)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.tstop)+' bei '+inttostr(i)+')!',3); + exit; + end; + until false; + + if length(quellen)=0 then begin + gibAus('Leere Agglomeration!',3); + exit; + end; + + Transformationen.addAusschnitt(xmin,xmax,tmin,tmax); + _xsteps:=xmax-xmin+1; + _tsiz:=tmax-tmin+1; + + if horizontal then + _xsteps:=_xsteps*length(quellen) + else + _tsiz:=_tsiz*length(quellen); + if not Transformationen.addAgglomeration(horizontal,Schritt,length(quellen)) + then exit; + + _np:=quellen[0]._np; + _beta:=quellen[0]._beta; + if st then begin + result:=true; + exit; + end; + eWerte.holeRam(3); + gibAus('Berechne ...',3); + Zeit:=now; + + for i:=0 to length(quellen)-1 do + case quellen[i].Genauigkeit of + gSingle: begin + pSi:=@(quellen[i].sWerte); + eWerte.kopiereVonNach( + pSi, + xmin,xmax, + tmin,tmax, + i*byte(horizontal), + i*byte(not horizontal) + ); + end; + gDouble: begin + pDo:=@(quellen[i].dWerte); + eWerte.kopiereVonNach( + pDo, + xmin,xmax, + tmin,tmax, + i*byte(horizontal), + i*byte(not horizontal) + ); + end; + gExtended: begin + pEx:=@(quellen[i].eWerte); + eWerte.kopiereVonNach( + pEx, + xmin,xmax, + tmin,tmax, + i*byte(horizontal), + i*byte(not horizontal) + ); + end; + end; + + gibAus('... fertig '+timetostr(now-Zeit),3); + result:=true; +end; + function tWerte.berechneQuotient(st: boolean; var f: tMyStringlist; threads, dividend, divisor: longint): boolean; var i,xmin,xmax,tmin,tmax: longint; s: string; @@ -5120,16 +5282,20 @@ begin nichtLeeresArgument:=true; end; begin - inherited create; + if not st then + inherited create; + erfolg:=cmd<>''; - bg:=endetMit('&',cmd); - if not st then begin + if st then begin + endetMit('&',cmd); + shellParseNextArg(cmd); + end + else begin + bg:=endetMit('&',cmd); p:=tProcess.create(nil); p.Options:=p.Options + [poWaitOnExit]; p.Executable:=shellParseNextArg(cmd); - end - else - shellParseNextArg(cmd); + end; nichtLeeresArgument:=cmd=''; if not erfolg then begin if not st then begin @@ -5139,8 +5305,10 @@ begin exit; end; while length(cmd)>0 do begin - if st then shellParseNextArg(cmd) - else p.Parameters.Add(shellParseNextArg(cmd)); + if st then + shellParseNextArg(cmd) + else + p.Parameters.Add(shellParseNextArg(cmd)); if not erfolg then begin if not st then begin p.free; @@ -5149,12 +5317,12 @@ begin exit; end; end; + if st then + exit; if not nichtLeeresArgument then begin p.free; p:=nil; end; - if st then - exit; if assigned(p) then begin cmd:=p.Parameters.Text; while (length(cmd)>0) and (cmd[length(cmd)] in [#10,#13]) do @@ -5844,7 +6012,10 @@ function externerBefehl(st: boolean; s: string): boolean; var bt: tBefehlThread; begin bt:=tBefehlThread.create(st,s,result); - if st then exit; + if st then begin +// bt.free; + exit; + end; if not result then begin try bt.free; diff --git a/typenunit.pas b/typenunit.pas index 8e9da0a..974090e 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -283,6 +283,18 @@ type // keine Änderung der Werte(skalierung) function dumpParams: string; override; end; + tAgglomeration = class (tKoordinatenTransformation) + schritt: extended; + anzahl: longint; + horizontal: boolean; + constructor create; overload; + constructor create(original: tAgglomeration); overload; + function xsteps_tsiz: tIntPoint; override; + function achsen: t2x2Extended; override; + function transformiereKoordinaten(const p: tExtPoint): tExtPoint; override; overload; + // keine Änderung der Werte(skalierung) + function dumpParams: string; override; + end; tBearbeitungstyp = (btUnbekannt,btKnick,btLog,btAbsLog,btAbs); tWerteTransformation = class (tTransformation) // eine generische Transformation der Werte @@ -397,6 +409,7 @@ type function add(st: boolean; s: string; f: tMyStringlist; etf: tExprToFloat): boolean; overload; function add(syntaxtest: boolean; s: string; xscale,yscale: extended; etf: tExprToFloat): boolean; overload; procedure addAusschnitt(xmin,xmax,tmin,tmax: longint); + function addAgglomeration(horizontal: boolean; schritt: extended; anzahl: longint): boolean; function append(inhs: tTransformationen): boolean; function transformiereKoordinaten(const lage: tLage; const x: extended): extended; overload; function transformiereKoordinaten(const x,y: extended): tExtPoint; overload; @@ -1468,6 +1481,67 @@ begin result:='Koordinatenausschnitt: '+inttostr(gr['x','x'])+'..'+inttostr(gr['x','y'])+' x '+inttostr(gr['y','x'])+'..'+inttostr(gr['y','y']); end; +// tAgglomeration ************************************************************** + +constructor tAgglomeration.create; +begin + inherited create; + schritt:=0; + anzahl:=0; + horizontal:=false; +end; + +constructor tAgglomeration.create(original: tAgglomeration); +begin + inherited create; + schritt:=original.schritt; + anzahl:=original.anzahl; + horizontal:=original.horizontal; +end; + +function tAgglomeration.xsteps_tsiz: tIntPoint; +var + c: char; +begin + for c:='x' to 'y' do + result[c]:=in_xs_ts[c]*(1+(anzahl-1)*byte(horizontal xor (c='y'))); +end; + +function tAgglomeration.achsen: t2x2Extended; +var + c,d: char; +begin + for c:='x' to 'y' do + if in_xs_ts[c]<=1 then begin + for d:='x' to 'y' do + result[c,d]:=in_achsen[c,d] + schritt*(anzahl-1)*byte((horizontal xor (c='y')) and (d='y')); + if in_achsen[c,'x']<>in_achsen[c,'y'] then + fehler('Nur eine Koordinate, aber '+floattostr(in_achsen[c,'x'])+' = '+c+'start <> '+c+'stop = '+floattostr(in_achsen[c,'y'])+'!'); + end + else begin + if horizontal xor (c='y') then + fehler('In der Richtung der Agglomeration ('+c+') können nicht mehrere Daten liegen!'); + for d:='x' to 'y' do + result[c,d]:=in_achsen[c,d]; + end; +end; + +function tAgglomeration.transformiereKoordinaten(const p: tExtPoint): tExtPoint; +begin + testeAuszerhalb(p); + result:=p; // es ist etwas unpräzise, schließlich landet p des i-ten Datensatzes auf p + i * schritt * (byte(horizontal);byte(not horizontal)) +end; + +function tAgglomeration.dumpParams: string; +begin + result:='Agglomeration: '+inttostr(anzahl)+'x '; + if horizontal then + result:=result+'horizont' + else + result:=result+'vertik'; + result:=result+'al um '+floattostr(schritt)+' versetzt'; +end; + // tWerteKnickTransformation *************************************************** constructor tWerteKnickTransformation.create; @@ -1932,6 +2006,26 @@ begin achsenUndGroeszeAktualisieren; end; +function tTransformationen.addAgglomeration(horizontal: boolean; schritt: extended; anzahl: longint): boolean; +begin + result:=false; + if horizontal and (xsteps<>1) then begin + gibAus('Horizontale Agglomeration über in x-Richtung ausgedehnte Werte ist nicht erlaubt!',3); + exit; + end; + if (not horizontal) and (tsiz<>1) then begin + gibAus('Vertikale Agglomeration über in t-Richtung ausgedehnte Werte ist nicht erlaubt!',3); + exit; + end; + setlength(Schritte,length(Schritte)+1); + Schritte[length(Schritte)-1]:=tAgglomeration.create; + (last as tAgglomeration).horizontal:=horizontal; + (last as tAgglomeration).schritt:=schritt; + (last as tAgglomeration).anzahl:=anzahl; + achsenUndGroeszeAktualisieren; + result:=true; +end; + function tTransformationen.kopiereVon(original: tTransformationen): boolean; begin clear; diff --git a/werteunit.pas b/werteunit.pas index b1fa1dd..28083a6 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -35,6 +35,9 @@ type procedure kopiereVon(st: boolean; original: pTLLWerteSingle; xmin,xmax,tmin,tmax: longint); overload; procedure kopiereVon(st: boolean; original: pTLLWerteDouble; xmin,xmax,tmin,tmax: longint); overload; procedure kopiereVon(st: boolean; original: pTLLWerteExtended; xmin,xmax,tmin,tmax: longint); overload; + procedure kopiereVonNach(original: pTLLWerteSingle; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; + procedure kopiereVonNach(original: pTLLWerteDouble; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; + procedure kopiereVonNach(original: pTLLWerteExtended; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; procedure kopiereVerzerrt(original: pTLLWerteSingle; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformationen); overload; procedure kopiereVerzerrt(original: pTLLWerteDouble; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformationen); overload; procedure kopiereVerzerrt(original: pTLLWerteExtended; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformationen); overload; @@ -213,6 +216,39 @@ begin end; end; +procedure tLLWerte.kopiereVonNach(original: pTLLWerteSingle; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); +var + i,j: longint; +begin + inherited create; + for i:=qxmin to qxmax do + for j:=qtmin to qtmax do + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= + original^.werte[i+j*original^.params.xsteps]; +end; + +procedure tLLWerte.kopiereVonNach(original: pTLLWerteDouble; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); +var + i,j: longint; +begin + inherited create; + for i:=qxmin to qxmax do + for j:=qtmin to qtmax do + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= + original^.werte[i+j*original^.params.xsteps]; +end; + +procedure tLLWerte.kopiereVonNach(original: pTLLWerteExtended; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); +var + i,j: longint; +begin + inherited create; + for i:=qxmin to qxmax do + for j:=qtmin to qtmax do + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= + original^.werte[i+j*original^.params.xsteps]; +end; + procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteSingle; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformationen); var i,j,k,l: longint; tmp: extended; |