AMADEUS html plain
* import java.
class ViewSkNum
class ViewSkNum extends View
realiseerib skeem-vaate, kus primitiivliikmed on nummerdatud
Oluliselt sama, mis ViewSketchy
võrreldes ViewSketchy-ga muudatused: vt NNNUUUMMM
Peamine (normaalne) kasutamine -- lihtteksti korral
Ei sobi hästi, kui skeemtekstis on mitte-vaikefondid/suurused
static final int hd = (int)Math.round(
(AmFont.fm[AmFont.No(Default.font)]).charWidth('X') * 2 * AmView.sizeFactor
);
hor-intervall
static final int hdn = (int)Math.round(
(AmFont.fm[AmFont.No(Default.font)]).charWidth('0') * AmView.sizeFactor
);
NNNUUUMMM
static final int vdn = (int)Math.round(
(AmFont.fm[AmFont.No(Default.font)]).getHeight() * AmView.sizeFactor
);
NNNUUUMMM
static final int vdesn = (int)Math.round(
(AmFont.fm[AmFont.No(Default.font)]).getDescent() * AmView.sizeFactor
);
NNNUUUMMM
static final int hdd = 5;
topeltjoonte osa hd-st
static final int vd = 5;
vert-intervall
static Color color = Default.sketchLineColor;
joonistamisva"rv
static Color colorBr = Default.branchHeadColor;
joonistamisva"rv
static Color colorNum = Default.numColor;
numbri värv NNNUUUMMM
ikooni ala:
static int iconw;
== comment.height
static int iconh;
static int ikooninooleNihe = 0;
static int laius;
jooneala laius;
määratakse drawSkLine-s, kasut. ka draw-s
ViewSkNum(Scheme s)
konstruktor
super(s);
type = View.SKNUM;
NNNUUUMMM
public Rectangle getLineArea(Scheme s)
vasakul aa"rel
<======new Rectangle(s.view.x, s.view.y, hd, s.view.height)
private void drawSkLine(Graphics g, Scheme s)
joonistada skeemijoon
Rectangle rk = getLineArea(s);
int xx = rk.x, yy = rk.y, korgus = rk.height;
laius = rk.width;
lihtskeemi joone algus ja lopp (kommentaaride keskkohal):
int xja = xx + 1;
int xjl = xja;
int dd = (s.comment.width == 0)? 0 : vd;
int yja = yy + (s.comment.height) / 2;
int yjl = yy + korgus - 3;-1;
int yjl = yy + korgus - 1 - (s.comment.height) / 2;
g.setColor(color);
? (s instanceof Branch)
ylemuse joonte vahe
int vahe1 = laius/hdd;
? (s.parent.type == Scheme.MODULE)
vahe1 = 1;
? (s.parent.type == Scheme.SIMPLE)
vahe1 = 0;
int xsa = xja + vahe1;
kust algab haru pa"ise algusjoon
algusjoon:
pa"iseta monoskeemis (ainukese) haru algust pole,
kui see ainuke haru on SIMPLE
? ((!(((Sketch)(s.parent)).isMono())) ||
(((Sketch)(s.parent)).head.size() > 0) ||
(s.type != Scheme.SIMPLE))
lihtharu algusjoon yhekordne
??s.type
..case
? Scheme.LOOP:
? Scheme.MODULE:
haru joonte vahe:
int vahe = laius/hdd;
? (s.type == Scheme.MODULE)
vahe = 1;
int xva, yva;
ylemuse valimise pystjoone algus ja lopp
int ysa;
ylemuse sisemise pystjoone algus ja lopp
xva = xja; yva = yja-vahe;
xvl = xjl; yvl =yjl+vahe;
ysa = yva + vahe;
xsl = xsa; ysl = yvl - vahe;
haru algusjoon:
g.drawLine(xsa, yva, xva + laius - 2, yva);
g.drawLine(xsa, ysa, xva + laius - 2, ysa);
<======;
? :
Scheme.SIMPLE ja ko~ik teised
g.drawLine(xsa, yja, xja + laius - 2 - 1, yja);
<======;
<======
skeemijooned tehakse ainult skeemi korral
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
joonte vahe:
int vahe = laius/hdd;
..if
..if
? (s.type == Scheme.MODULE)
vahe = 1;
int xva, yva, xvl, yvl;
valimise pystjoone algus ja lopp
int xsa, ysa, xsl, ysl;
sisemise pystjoone algus ja lopp
xva = xja; yva = yja-vahe; xvl = xjl; yvl =yjl+vahe;
xsa = xva + vahe; ysa = yva + vahe; xsl = xsa; ysl = yvl - vahe;
g.drawLine(xva, yva, xvl, yvl);
valimine pystjoon
g.drawLine(xva+1, yva, xva + laius - 2, yva);
g.drawLine(xvl+1, yvl, xvl + laius - 2, yvl);
g.drawLine(xsa, ysa, xsl, ysl);
sisemine pystjoon
g.drawLine(xsa+1, ysa, xva + laius - 2, ysa);
g.drawLine(xsl+1, ysl, xvl + laius - 2, ysl);
<======;
? :
Scheme.SIMPLE ja ko~ik teised
g.drawLine(xja, yja, xjl, yjl);
pystjoon
g.drawLine(xja+1, yja, xja + laius - 2, yja);
g.drawLine(xjl+1, yjl, xjl + laius - 2, yjl);
<======;
public void plan(int x0, int y0, boolean rowsToo)
planeerib skeemi (sk ja alluvad) alates x0, y0
? rowsToo
sk.comment.planSize();
PrimitiveHead h;
PrimitiveMember nsk;
Arrow ar;
? (sk.icon)
ikooni koht ja moo~tmed:
x = x0; y = y0;
? sk instanceof Branch
x += 5; y += 5;
iconw = sk.comment.height;
eelsü"mbol incl.
iconh = iconw;
width = iconw + 4;
height = iconh + 4;
<======
int yy= y0;
+vd;jooksev vert. koordinaat
int ww = 0;
jooksev laius
et paneks prev: jama???
//??sk.comment.plan(sk.comment.x, sk.comment.y);
sk.comment.y = yy;
sk.comment.height/2;
yy += sk.comment.height + vd;
sk.comment.height/2 + vd
? (sk.comment.width > ww)
ww = sk.comment.width;
? (sk.head.size() != 0)
planeerida pa"ised
yy += vd;
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.plan(x0+hd, yy, rowsToo);
yy-vd);
yy += he.text.height + vd;
? (he.text.width > ww)
ww = he.text.width;
yy -= vd;
keha
..for
* int i = 0; i < sk.body.size(); i++
alluvate planeerimine:
Object o = sk.member(i);
? (o instanceof Scheme)
Scheme ss = (Scheme)o;
? (ss instanceof Sketch)
ss.view.plan(x0+hd, yy, rowsToo);
? (ss.view.width > ww)
ww = ss.view.width;
<======
haru
ss.view.plan(x0+1, yy, rowsToo);
? (ss.view.width-hd > ww)
ww = ss.view.width-hd;
yy += ss.view.height + vd;
? (ss.type != Scheme.SIMPLE)
yy += vd;
3;// paksemate joonte jaoks
<------
o on lihtliige
PrimitiveMember ns = (PrimitiveMember)o;
ns.text.plan(x0+hd + 5*(hdn), yy, rowsToo);
NNNUUUMMM
yy += ns.text.height + vd;
? (ns.text.width + 5*(hdn) > ww)
NNNUUUMMM
ww = ns.text.width + 5*(hdn);
NNNUUUMMM
enda koht ja moo~tmed:
ww - suurim alamskeemide ja lihtliikmete laiustest
x = x0; y = y0;
width = ww+hd+1;
height = yy-y0+vd+1;
? (sk instanceof Branch)
height = yy-y0-vd+1;
height -= 2*vd;haru lo~pus pole kommentaari
<======
sk on skeem
height = yy-y0+vd+1 + sk.comment.height;;
width -= hd; // harud on vasakule nihutatud
kommentaari x
sk.comment.x = sk.view.x + hd;
public void draw(Graphics g)
joonistada skeem sk
Scheme s = super.sk;
? (s.icon)
ikooni va"rv
? (s instanceof Sketch)
g.setColor(color);
<======
ikoon joonistatakse talle planeeritud ala sisse
int luX = x + 2;
int luY = y + 2;
g.drawRect(luX, luY, iconw, iconh);
g.drawLine(luX, luY, luX + iconw - 1, luY + iconh - 1);
g.drawImage(Am.pictureBoard.iconImage, luX, luY, null);
ikooni kommentaar
? (!s.comment.isTrivial())
g.setColor(Default.commentColor);
g.drawString(s.comment.toString(),
x + width + 2, y + iconh);
<======
? (s.head.size() != 0)
? (s instanceof Sketch)
g.setColor(color);
<======
g.drawString(s.primitiveHead(0).text.row(0).toString(),
x + width + 2, y + iconh);
ikooninool
int X = x, Y = y + height/3;
ikooninooleNihe = 0;
et nooled ei XORiks üksteist
? s instanceof Sketch
drawArrowsForIcon(g, (Sketch)s, X, Y, s.level());
<======
haru ikoon
int m = s.body.size();
liikmed
* int j = 0; j < m; j++
Object o = ((Branch)s).member(j);
? o instanceof Sketch
drawArrowsForIcon(g, (Sketch)o, X, Y, s.level());
<------
? o instanceof Arrow
drawIconArrow(g, (Branch)s, (Arrow)o, X, Y, s.level());
<======
skeemijoon ja kommentaar
drawSkLine(g,s);
joonistada skeemijoon
s.comment.draw(g);
joonistada kommentaar
? ((s instanceof Sketch)&&
(s.comment.elements.size()>1))
veel loppu:
Row endc = new Row(Default.commentColor);
endc.elements = s.comment.elements;
endc.x = s.comment.x;
endc.y = s.view.y + s.view.height - 1 - s.comment.height;
endc.width = s.comment.width;
endc.height = s.comment.height;
endc.draw(g);
int yy = s.comment.height + vd;
int x1 = x + hd/2;
pa"ise tunnuse ja primitiivi tunnuse nihe
pa"ised
* Enumeration e = s.head.elements(); e.hasMoreElements();
(((PrimitiveHead)(e.nextElement()))).text.draw(g);
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
g.setColor(Default.sketchHeadColor);
he.text.draw(g);
if(he.text.width > w) w = he.text.width;
g.setColor(color);
paise tunnus
?? he.type
? PrimitiveHead.LOOP:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
(el-paise esimese rea ette)
g.drawString("*", x1, y+yy + he.text.height*3/4);
<======;
? PrimitiveHead.SWITCH:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("??", x1, y+yy + he.text.height*3/4);
<======;
? PrimitiveHead.CASE:
? PrimitiveHead.DEFAULT:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("?", x1, y+yy + he.text.height*3/4);
<======;
? PrimitiveHead.TRY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("!!", x1, y+yy + he.text.height*3/4);
<======;
..case
? PrimitiveHead.CATCH:
? PrimitiveHead.FINALLY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("!", x1, y+yy + he.text.height*3/4);
<======;
yy += he.text.height;
int loePrimit = 0;
keha
* Enumeration e = s.body.elements(); e.hasMoreElements();
Object o = e.nextElement();
? (o instanceof Scheme)
((Scheme)o).view.draw(g);
<------
loePrimit++;
? (o instanceof Arrow)
Arrow ar = (Arrow)o;
ar.text.draw(g);
Scheme sc = ar.destination((Branch)s);
int endx;
int yy0 = ar.text.y +
((Row)(ar.text.rows.elementAt(0))).height/2;
? (ar.type == Arrow.WEAK)&&
(!(sc.view instanceof ViewBox))&&
(!(sc.view instanceof ViewDTree))
endx = sc.view.x + hd/2;
drawWeakArrow(g, ar.text.x, yy0, endx);
<======
endx = sc.view.x;
drawStrongArrow(g, ar.text.x, yy0, endx);
<------
? (o instanceof PrimitiveMember)
PrimitiveMember ns = (PrimitiveMember)o;
?? ns.type
? Primitive.CONDITION:
g.setFont(Default.font);
p.o. selle vaate font ?!!!!!!!!!!!
g.setColor(Default.conditionColor);
(esimese rea ette)
g.drawString("?", x1, ns.text.y + ns.text.height*3/4);
<======
ns.text.draw(g);
int xAlgus = 0;
NNNUUUMMM
NNNUUUMMM
? loePrimit <10
xAlgus = 4*(hdn);
4
<======
? loePrimit <100
xAlgus = 3*(hdn);
3
<======
? loePrimit <1000
xAlgus = 2*(hdn);
2
<======
? loePrimit <10000
xAlgus = 1*(hdn);
1
g.setColor(colorNum);
NNNUUUMMM
fondi suurus peaks olema reast võetud (mitte Default) ??
//g.drawString("" + loePrimit, x1+xAlgus, ns.text.y + vdn - vdesn);
NNNUUUMMM
g.drawString("" + loePrimit, x1+xAlgus, ns.text.y + ns.text.row(0).height - vdesn);
NNNUUUMMM
static void drawStrongArrow(Graphics g,
int startX, int Y, int endX)
g.setColor(Default.arrowColor);
g.drawLine(startX, Y, endX, Y);
noolejoon
noole ots
g.drawLine(endX, Y, endX + 4, Y - 2);
g.drawLine(endX, Y, endX + 4, Y + 2);
static void drawWeakArrow(Graphics g,
int startX, int Y, int endX)
g.setColor(Default.arrowColor);
katkendjoon
* int i = endX; i < startX; i += laius*2/3
g.drawLine(i, Y, i + laius/3, Y);
noole ots
g.drawLine(endX, Y, endX + 4, Y - 2);
g.drawLine(endX, Y, endX + 4, Y + 2);
static void drawArrowsForIcon(Graphics g, Sketch s,
int X, int Y, int iconLevel)
X, Y - noole alguse koordinaadid (ikooni vasakul serval)
int endX;
int n = s.body.size();
harud
* int i = 0; i < n; i++
Branch br = s.branch(i);
int m = br.body.size();
liikmed
* int j = 0; j < m; j++
Object o = br.member(j);
? o instanceof Sketch
drawArrowsForIcon(g, (Sketch)o, X, Y, iconLevel);
<------
? o instanceof Arrow
drawIconArrow(g, br, (Arrow)o, X, Y, iconLevel);
static void drawIconArrow(Graphics g,
Branch br, Arrow ar, int X, int Y, int iconLevel)
ar - nool harus br; X, Y - noole algus (ikooni vasakul serval)
int endX;
Scheme sc = ar.destination(br);
mitteva"ljaulatuvat ei tee (destination on ka planeerimata)
? sc.level() >= iconLevel
<==========
Y += (ikooninooleNihe+=3);
seada endX
? sc instanceof Sketch
endX = sc.view.x;
<======
joonistada nool
? ar.type == Arrow.WEAK
drawWeakArrow(g, X, Y, endX);
<======
drawStrongArrow(g, X, Y, endX);
//
public void write2ps()
saab olema üsna sama struktuuriga, mis draw()
prooviks:
Sketch2ps.write2file("/inch {72 mul} def % Convert inches->points (1/72 inch)");
Sketch2ps.write2file("newpath % Start a new path");
Sketch2ps.write2file("1 inch 1 inch moveto % an inch in from the lower left");
Sketch2ps.write2file("2 inch 1 inch lineto % bottom side");
Sketch2ps.write2file("2 inch 2 inch lineto % right side");
Sketch2ps.write2file("1 inch 2 inch lineto % top side");
Sketch2ps.write2file("closepath % Automatically add left side to close path");
Sketch2ps.write2file("stroke % Draw the box on the paper");
Sketch2ps.write2file("showpage % We're done... eject the page");