Opis

Wojciech Franczak, wojciech.franczak@gmail.com,

ARD visualization and interactive, shell-based editing, w/ vis. in XPCE (VARDA shell)

Spotkania

08.02.19

Przydzielenie projektu, wstępne omówienie tematu.

08.03.04

Pytania:

1. pytanie dotyczące aplikacji którą pokazywał Pan na pierwszym spotkaniu (jak działa i jak ja zainstalować, i jak wygląda od środka)?

2. czy w razie problemów mogę się zgłaszać do Pana?

08.03.18

  • generowanie prostych grafów skierowanych w XPCE
  • możliwość edycji, sprzężenie zwrotne, t.j. klikam na węźle, krawędzi → odpala predykat w prologu, callback

08.04.01

  • generowanie ARD w XPCE z varda

Sprawozdanie

1. Wstęp:

a. Środowisko pracy:

Przykład tworzenia grafu w XPCE był realizowany w środowisku Windows XP za pomocą programu SWI-Prolog/XPCE for MS-Windows 5.6.61. Alternatywą jest możliwość uruchomienia na platformie Linux, z powodów trudności z uruchomieniem i konfiguracją nie wybrałem tej możliwości.

b. Oprogramowanie:

Po pobraniu i zainstalowaniu programu SWI-Prolog/XPCE for MS-Windows 5.6.61, mozliwa była praca z Prolog/XPCE w środowisku Windows. Możliwości i działanie aplikacji pod systemem Windows jest bardzo zbliżona do pracy pod systemem Linux-owym.

c. Biblioteka XPCE w Prologu:

XPCE to zestaw narzędzi wspomagający tworzenie GUI pod język Prolog. Jest zorientowane obiektowo, daje możliwość tworzenia klas, metod, warunków, iteracji… Procedury zawarte w XPCE tworzone są w C. Jest możliwe do uruchomienia w różnych środowiskach pracy. Dane z Prologa mogą być powiązane ze zmiennymi w XPCE. Zaimplementowane jest za pomocą własnej biblioteki VWS (Virtual Window System) która, definiuje metody do tworzenia i manipulacji oknami, prostymi obiektami jak: linie, kółka, tekst oraz obsługi zdarzeń. Dzięki swojej budowie, programy używające XPCE są w pełni przenośne pomiędzy różnymi środowiskami pracy.

d. Konstrukcja grafów ARD (Atribute Relationship Diagram):

Diagram ARD identyfikuje atrybuty systemu i wskazuje na zależności pomiędzy nimi. W ARD występują dwa rodzaje elementów: atrybuty (attributes) i właściwości (properties). Poniżej przedstawiam przykład diagramu ARD dla problemu budowy kontrolera temperatury:

:pl:miw:oraz1.png

4. Wiadomości wstępne o XPCE:

Jednymi z ważniejszych predykatów wykorzystywania XPCE w Prologu są:

a. Tworzenie obiektów NEW:

new(?Reference, +NewTerm) – tworzy obiekt oraz przypisuje do niego dana referencję, która jest wykorzystywana do komunikacji pomiędzy obiektami.

Przykład:
?- new(@demo, dialog(‘Okno Dialogowe’)). – tworzy okno dialogowe, w którym umieszcza się napisy, przyciski, itp.
b. Modyfikacja stanu obiektów SEND:

send(+Receiver, +Selector(..Argumenty..)). – za pomocą tej komendy dokonuje się zmiany stanu obiektów. Pierwszy argument tego predykatu jest referencją do obiektu, natomiast drugi to term, którego nazwa jako funktor jest nazwą metody do wywołania, a argumenty są argumentami operacji.

Przykład:
?- send (@demo, append(text_item(Nazwa)). – wywołuje metodę append klasy dialog, dodaje komponent do okna dialogowego.
c. Zapytanie do Obiektów GET:

Służy do pobierania informacji o stanie obiektu. Dwa pierwsze argumentu są podobne jak w predykacie SEND, trzeci zwraca wartość.

Przykład:
?- get(@demo, display, D). – zwraca obiekt display, na którym @demo jest wyświetlane.
d. Niszczenie obiektów FREE:

Argumentem jest referencja na obiekt (stworzona przy użyciu NEW i GET). Predykat usuwa obiekt.

Przykład:
?-free(@demo).
e. Tworzenie figur:

arrow - Służy do tworzenia strzałek.

bezier - Tworzy krzywe Bezier`a.

bitmap - Umieszcza obraz, kolorowy jak i monochromatyczny.

box - Tworzy figury takie jak kwadrat i prostokąt, o ostrych lub zaokrąglonych rogach.

circle - Słuzy do otrzymywania okręgów.

ellipse - Tworzy figury o kształcie elips, może być wypełnione.

line - Tworzy linię prostą, może służyć do tworzenia strzałek.

path - Wielo linia przechodząca przez kilka punktów.

text - Służy do wyświetlania tekstu. Przykład:

?- send(@p, display,
new(@box, box(100,100))). - kwadrat
f. Łączenie i działanie na figurach:

device - Most generic compound graphical object. The window is a subclass of device and all graphical operations are defined on class device.

figure - Subclass of device, provides clipping, background, containing rectangle, border and the possibility to show a subset of the displayed graphical objects.

format - A format object specifies a two-dimensional table layout. Formats may be associated to graphical devices using ‘device ! format’.

table - The successor of format realises tabular layout compatible to the HTML-3 model for tables.

connection - Subclass of class line. A connection can connect two graphicals on the same window that have handles. The line is automatically updated if either of the graphicals is moved, resized, changed from device, (un)displayed, hidden/exposed or destroyed.

handle - Defines the location, nature and name of a connection point for a connection. Handles can be attached to individual graphicals as well as to their class.

link - Defines the generic properties of a connection: the nature (‘kind’) of the handle at either side and the line attributes (arrows, pen and colour). connect - gesture Event-processing object used to connect two graphical objects.

Przykład:

:- pce_global(@in_out_link, make_in_out_link).

make_in_out_link(L) :-
new(L, link(in, out, line(arrows := second))).

linked_box_demo :-
new(P, picture(’Linked Box demo’)),
send(P, open),
send(P, display, new(B1, box(50,50)), point(20,20)),
send(P, display, new(B2, box(25,25)), point(100,100)),
send(B1, handle, handle(w, h/2, in)),
send(B2, handle, handle(w/2, 0, out)),
send_list([B1, B2], recogniser, new(move_gesture)),
send(B1, connect, B2, @in_out_link).

5. Projekt:

Przygotowany plik (na podstawie grafu ard dla termistatu): projekt.pl wprowadzam do SWI-Prolog komendą: „[swi('demo/projekt')].”, następnie wpisuję komendę: „projekt.”. Wynikiem jest przykładowy graf. Jedynym pomysłem na tworzenie diagramów ARD w XPCE, jest ręczne przygotowanie pliku *.pl, który po załadowaniu wyświetli zawarte w nim informacje. Uproszczeniem procesu tworzenia pliku była by prosty edytor. Aby móc przygotować potrzebny plik musimy widzieć jak tworzyć odpowiednie figury, jak je ze sobą łączyć, w jaki sposób możemy mieć na nie wpływ.

Wynikiem moich prób jest następujący graf, składający się z prostokątów połączonych odpowiedni strzałkami (jak w wstępie przykład dla termostatu), użytkownik ma możliwość przesuwania obiektów wciskając i przytrzymując lewy przycisk myszy.:

:pl:miw:obraz2.png

i jego kod źródłowy:

 :- pce_global(@in_out_link, make_in_out_link).

make_in_out_link(L) :-

 new(L, link(in, out, line(arrows := second))).
 projekt :-
 new(P, picture('Projekt')),
 send(P, open),
 send(P, display, new(B1, box(50,50)), point(10,100)),
 send(P, display, new(B2, box(50,50)), point(100,20)),
 send(P, display, new(B3, box(50,50)), point(100,100)),
 send(P, display, new(B4, box(50,50)), point(100,180)),
 send(P, display, new(B5, box(50,50)), point(190,20)),
 send(P, display, new(B6, box(50,50)), point(190,100)),
 send(P, display, new(B7, box(50,50)), point(280,75)),
 send(B1, handle, handle(w, h/2, in)),
 send(B2, handle, handle(0, h/2, out)),
 send(B2, handle, handle(w, h/2, in)),
 send(B3, handle, handle(0, h/2, out)),
 send(B3, handle, handle(w, h/2, in)),
 send(B4, handle, handle(0, h/2, out)),
 send(B4, handle, handle(w, h/2, in)),
 send(B5, handle, handle(0, h/2, out)),
 send(B5, handle, handle(w, h/2, in)),
 send(B6, handle, handle(0, h/2, out)),
 send(B6, handle, handle(w, h/2, in)),
 send(B7, handle, handle(0, h/2, out)),
 send_list([B1, B3], recogniser, new(move_gesture(left))),
 send_list([B2, B5], recogniser, new(move_gesture(left))),
 send_list([B3, B6], recogniser, new(move_gesture(left))),
 send_list([B4, B6], recogniser, new(move_gesture(left))),
 send_list([B5, B7], recogniser, new(move_gesture(left))),
 send_list([B6, B7], recogniser, new(move_gesture(left))),
 send(B1, connect, B3, @in_out_link),
 send(B2, connect, B5, @in_out_link),
 send(B3, connect, B6, @in_out_link),
 send(B4, connect, B6, @in_out_link),
 send(B5, connect, B7, @in_out_link),
 send(B6, connect, B7, @in_out_link).

Istnieje również możliwość tworzenia podpisanych obiektów. Można to osiągnąć poprzez podpisanie każdego z nich lub stworzenie tak zwanego „text boxa”. Drugie wyjście otrzymujemy w przykładowy sposób:

text_box(TB, Text, Width, Height) :-
      new(TB, device),
      send(TB, display,
           new(B, box(Width, Height))),
      send(TB, display,
           new(T, text(Text, center, normal))),
      send(T, center, B?center).

Niestety nie udało mi się zintegrować tego typu obiektu z przykładowym grafem. Wadą takiego obiektu jest słaba odporność na zmiany wielkość obiektu oraz aby ja modyfikować należy dość dobrze znać się na strukturze obiektu.

Przesuwanie obiektu możemy osiągnąć poprzez przykładową komend:

 send(B1,x,100), send(B1,y,120).

Integrację z użytkownikiem możemy osiągnąć poprzez predykat:

 send(B1, recogniser,
         click_gesture(left, '', double,
                       message(@pce, write_ln, hello))).

Którego rezultatem jest po dwukrotnym kliknięciu kółka w linii komend pojawi się napis: „hello” tak jak na poniższych obrazkach:

przed:

:pl:miw:obraz3.png

po:

:pl:miw:obraz4.png

6. Wnioski:

Pierwsze podejście do stworzenia przykładowego grafu podjąłem w systemie Ubuntu 8.04. Po zainstalowaniu z internetu odpowiednich paczek aplikacja nie odpalała się. Mimo prób uzyskania możliwości pracy z prologiem i XPCE pod Linuxem nie otrzymałem żadnych pozytywnych wyników, a brak lepszej znajomości z systemem nie pozwalał mi na rozwiązanie problemu. Drugie podejście podjąłem w bardziej znanym mi środowisku jakim jest Windows XP. Aplikacja działa poprawnie. XPCE nie jest tak proste i przyjazne w użytkowaniu jak może się wydawać na pierwszy rzut oka. Trzeba spędzić dużo czasu zanim się nauczy w nim programować. Jest ono ściśle związane z językiem Prolog, ma duże możliwości lecz stworzenie GUI jest pracochłonne, przy założeniu, że nie zna się jeszcze XPCE.

Materiały

  • Grzegorz J. Nalepa and Igor Wojnicki. (2008). An ARD+ Design and Visualization Toolchain Prototype in Prolog.
  • Nalepa, G. J. (2008). UServ Case Study, Conceptual Design with ARD+ Method. Paper presented at the FLAIRS-21: Proceedings of the twenty-first international Florida Artificial Intelligence Research Society conference: 15–17 may 2008, Coconut Grove, Florida, USA, Menlo Park, California.
  • Nalepa, G. J., & Wojnicki, I. (2008). Towards Formalization of ARD+ Conceptual Design and Refinement Method. Paper presented at the FLAIRS-21: Proceedings of the twenty-first international Florida Artificial Intelligence Research Society conference: 15–17 may 2008, Coconut Grove, Florida, USA, Menlo Park, California.
pl/miw/miw08_prolog_ardxpce.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0