public class MonochromeEmbryology extends BiomorphEmbryology
| Constructor and Description |
|---|
MonochromeEmbryology() |
| Modifier and Type | Method and Description |
|---|---|
void |
develop(Morph morph)
Margins
|
getEmbryologyPreferences, propertyChangepublic void develop(Morph morph)
The original Pascal Develop procedure adjusts the margin in this order.
Instead of DelayedDrawing, just pass in null if you don't want a call to Drawpic at the end.
procedure Develop(var biomorph: person; Here: point; ZeroMargin: boolean);
var
DeltaRecord: DeltaArray;
DeltaRecordPtr: DeltaArrayPtr;
j, seg, Upextent, Downextent, wid, ht, SizeWorry, thick: integer;
Running: chromosome;
OldHere, Centre: Point;
ExtraDistance, IncDistance: integer;
begin {develop}
ClipBoarding := False;
if zeromargin then
with margin do
begin
left := Here.h;
right := Here.h;
top := Here.v;
bottom := Here.v;
end;
Centre := Here;
DeltaRecordPtr := @DeltaRecord;
PlugIn(Biomorph.gene, DeltaRecordPtr);
ZeroPic(MyPic, Here);
with biomorph do
with DeltaRecord do
begin
if SegNoGene < 1 then
SegNoGene := 1;
if dGene[10] = Swell then
Extradistance := Tricklegene
else if dGene[10] = Shrink then
Extradistance := -Tricklegene
else
ExtraDistance := 0;
Running := gene;
IncDistance := 0;
for seg := 1 to SegNoGene do
begin
OddOne := odd(seg);
if seg > 1 then
begin
OldHere := Here;
Here.v := Here.v + (SegDistGene + IncDistance) div Tricklegene;
IncDistance := IncDistance + ExtraDistance;
if biomorph.dGene[9] = shrink then
thick := biomorph.Gene[9]
else
thick := 1;
PicLine(MyPic, OldHere.h, Oldhere.v, Here.h, Here.v, thick);
for j := 1 to 8 do
begin
if dGene[j] = Swell then
Running[j] := Running[j] + Tricklegene;
if dGene[j] = Shrink then
Running[j] := Running[j] - Tricklegene;
end;
if Running[9] < 1 then
Running[9] := 1;
PlugIn(Running, DeltaRecordPtr);
end;
SizeWorry := biomorph.SegNoGene * TwoToThe(biomorph.gene[9]);
if SizeWorry > WorryMax then
biomorph.Gene[9] := biomorph.Gene[9] - 1;
if biomorph.gene[9] < 1 then
biomorph.gene[9] := 1;
tree(biomorph, DeltaRecordPtr, Here.h, Here.v, order, 2);
end;
end;
with biomorph do
with margin do
begin
if Centre.h - left > right - Centre.h then
right := Centre.h + (Centre.h - left)
else
left := Centre.h - (right - Centre.h);
Upextent := Centre.v - top; {can be zero if biomorph goes down}
Downextent := bottom - Centre.v;
if ((SpokesGene = NSouth) or (SpokesGene = Radial)) or (TheMode = Engineering) then
{Obscurely necessary to cope with erasing last Rect in Manipulation}
begin
if UpExtent > DownExtent then
bottom := Centre.v + UpExtent
else
top := Centre.v - DownExtent;
end;
if SpokesGene = Radial then
begin
wid := right - left;
ht := bottom - top;
if wid > ht then
begin
top := centre.v - wid div 2 - 1;
bottom := centre.v + wid div 2 + 1;
end
else
begin
left := centre.h - ht div 2 - 1;
right := centre.h + ht div 2 + 1;
end;
end;
end;
MyPic.PicPerson := biomorph;
end; {develop}
develop in interface Embryologydevelop in class BiomorphEmbryology