summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epost.lpr11
-rw-r--r--epost.lps118
-rw-r--r--epostunit.pas193
-rw-r--r--typenunit.pas94
-rw-r--r--werteunit.pas36
5 files changed, 382 insertions, 70 deletions
diff --git a/epost.lpr b/epost.lpr
index 3178b8a..b53b6e6 100644
--- a/epost.lpr
+++ b/epost.lpr
@@ -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
diff --git a/epost.lps b/epost.lps
index 2314261..d68027d 100644
--- a/epost.lps
+++ b/epost.lps
@@ -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;