MODSIM II
Grafika i animacja
Podstawowe obiekty graficzne aplikacji
WindowObj
Standardowe okno aplikacji będące przede wszystkim kontenerem
wszystkich pozostałych obiektów graficznych
ImageObj
Bazowy statyczny obiekt graficzny
DynImageObj
Bazowy obiekt graficzny wykorzystywany do animacji
DialogBoxObj
Obiekt graficzny reprezentujący okno dialogowe składające się z
różnych kontrolek: buttons, check boxes, list boxes, radio boxes,
value boxes and text boxes
MenuBarObj
Pasek menu aplikacji
GraphicVObj – bazowy obiekt graficzny
ParentWindow : ANYOBJ
ReferenceName : STRING
Id : INTEGER
LastPicked : GraphicVObj
Translation : PointType - względna pozycja względem „rodzica”
Visible : BOOLEAN
Hidden : BOOLEAN - niewidoczny razem z „dziećmi”
Selectable : BOOLEAN
ASK METHOD Draw - ustawia Visible=TRUE i wywołuje Update
ASK METHOD Update - uaktualnia obiekt na ekranie wraz z „dziećmi”
ASK METHOD DisplayAt(IN x,y : REAL)
ASK METHOD SetTranslation(IN tx, ty : REAL)
ASK METHOD Erase {Visible=FALSE}
ASK METHOD SetHidden(IN hidden : BOOLEAN)
ASK METHOD SetSelectable(IN selectable : BOOLEAN)
GraphicVObj – bazowy obiekt graficzny
ASK METHOD ClickButton() : INTEGER – numer ostatnio naciśniętego
przycisku
ASK METHOD BeSelected – wywoływana, gdy obiekt jest wskazany przez
mysz
ASK METHOD AcceptInput() : ANYOBJ
ASK METHOD SaveToLibrary(IN library : GraphicLibObj;
IN name : STRING)
ASK METHOD LoadFromLibrary(IN library : GraphicLibObj;
IN name : STRING)
ASK METHOD AddGraphic(IN NewMember: GraphicVObj)
ASK METHOD RemoveGraphic() : ANYOBJ
ASK METHOD Child(IN referenceName : STRING;
IN id : INTEGER) : ANYOBJ
ASK METHOD Descendant(IN referenceName : STRING; IN id : INTEGER) :
ANYOBJ – j.w. z tym, że przeszukuje również dalsze poziomy hierarchii
Definiowanie obiektów graficznych
Obiekty graficzne dodawane do struktury obiektów
okna aplikacji mogą być definiowane:
całkowicie w sposób dynamiczny – definiując jawnie
w programie wszystkie niezbędne atrybuty
(wykorzystując ich metod)
z wykorzystaniem edytora graficznego
SimDraw,
w
którym stworzone obiekty są następnie zapisywane
do biblioteki graficznej w postaci pliku *.sg2
W celu załadowania tak zdefiniowanych obiektów
graficznych z biblioteki należy wykorzystać
GraphicLibObj
ImageObj
Color : ColorType
Highlighted : BOOLEAN
HighlightColor : ColorType
Parent : ImageObj
ASK METHOD SetColor(IN color : ColorType)
ASK METHOD SetRGBColor(IN redPct : REAL; IN greenPct : REAL;
IN bluePct : REAL)
ASK METHOD SetScaling(IN xScale, yScale : REAL)
ASK METHOD SetRotation(IN rotation : REAL)
ASK METHOD SetWorld(IN worldXlo : REAL; IN worldYlo : REAL;
IN worldXhi : REAL; IN worldYhi : REAL) – układ współrzędny
dla obiektów będących „dziećmi”
ASK METHOD Select(INOUT x,y : REAL) : ImageObj
DynImageObj
Course : REAL
Speed : REAL
MovingTo : BOOLEAN
XVelocity : REAL
YVelocity : REAL
RotationSpeed : REAL
RotatingTo : BOOLEAN
AutoRotation : BOOLEAN
ScaleSpeed : REAL
ScalingTo : BOOLEAN
DynImageObj
ASK METHOD StartMotion
ASK METHOD StopMotion
ASK METHOD SetCourse(IN course : REAL)
ASK METHOD SetSpeed(IN speed : REAL)
TELL METHOD MoveTo(IN XDestination, YDestination : REAL)
TELL METHOD FollowPath(IN path : PointArrayType)
TELL METHOD RotateTo(IN theta : REAL)
ASK METHOD SetRotationSpeed(IN rotationSpeed : REAL)
TELL METHOD ScaleTo(IN xScale, yScale : REAL)
ASK METHOD SetScaleSpeed(IN scaleSpeed : REAL)
WindowObj - własności
wygląd – widzialność, rozmiar, położenie, tytuł
zawartość – drzewiasta struktura obiektów
graficznych znajdujących się w oknie
kolor – określany za pomocą szerokiego
zestawu predefiniowanych kolorów lub za
pomocą RGB
monitorowanie akcji myszy – metody reakcji na
zdarzenia generowane przez mysz
kursor – paleta kursorów
suwaki (scroll bars)
status bar
Przykładowy graficzny program
symulacyjny
MAIN MODULE cart;
FROM Window
IMPORT WindowObj;
FROM Animate
IMPORT DynImageObj, DynAClockObj;
FROM Graphic
IMPORT GraphicLibObj;
FROM Form IMPORT DialogBoxObj;
FROM Button
IMPORT ButtonObj;
FROM Value IMPORT ValueBoxObj;
FROM Menu IMPORT MenuBarObj, MenuItemObj;
FROM SimMod
IMPORT StartSimulation, ResetSimTime;
FROM GTypes IMPORT ALL ColorType;
cdn...
Przykładowy graficzny program
symulacyjny
TYPE
menubartype = OBJECT(MenuBarObj)
OVERRIDE
ASK METHOD BeSelected;
END OBJECT;
VAR
window : WindowObj;
library : GraphicLibObj;
cart
: DynImageObj;
clock : DynAClockObj;
dialogbox
: DialogBoxObj;
menubar : menubartype;
item
: MenuItemObj;
end
: BOOLEAN;
cdn...
Przykładowy graficzny program
symulacyjny
OBJECT menubartype;
ASK METHOD BeSelected;
VAR
button : ButtonObj;
XLocation, YLocation : ValueBoxObj;
library : GraphicLibObj;
BEGIN
CASE ASK LastPicked TO ReferenceName
WHEN "start": {start}
ASK dialogbox TO Draw;
button := ASK dialogbox TO AcceptInput();
cdn...
Przykładowy graficzny program
symulacyjny
IF ASK button TO ReferenceName = "ok"
XLocation := ASK
dialogbox TO Child("x", 0);
YLocation := ASK dialogbox TO
Child("y", 0); ASK clock TO StartMotion; ASK cart TO
SetSpeed(2000.0);
ResetSimTime(0.0); TELL cart TO
MoveTo(ASK XLocation Value(),
ASK YLocation Value());
StartSimulation;
END IF;
WHEN "exit": { stop }
end:=TRUE;
END CASE;
END METHOD;
END OBJECT;
cdn...
Przykładowy graficzny program
symulacyjny
BEGIN
NEW(window);
ASK window TO SetSize(70.0,70.0); {w procentach wspolrzednych
ekranu
(100.0,100.0)}
ASK window TO SetTitle("MODSIM II - program symulujacy ruch
wozka"); ASK window TO SetColor(Black);
ASK window TO DisplayAt(25.0,25.0);
NEW(library);
ASK library TO ReadFromFile("cart.sg2");
NEW(menubar);
ASK menubar TO LoadFromLibrary(library, "menubar");
NEW(dialogbox);
ASK dialogbox TO LoadFromLibrary(library, "dialog");
cdn...
Przykładowy graficzny program
symulacyjny
NEW(cart);
ASK cart TO LoadFromLibrary(library, "cart");
NEW(clock);
ASK clock TO LoadFromLibrary(library, "clock");
ASK clock TO SetTimeScale(1.0 / 3600.0); {liczba godzin na jed.
czasu sym.}
ASK window TO AddGraphic(menubar);
ASK window TO AddGraphic(cart);
ASK window TO AddGraphic(clock);
ASK window TO Draw;
ASK window TO AddGraphic(dialogbox);
WHILE NOT end
item := ASK menubar TO AcceptInput();
END WHILE;
END MODULE.