To jest stara wersja strony!


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).

Dodatkowo nie udało mi się jeszcze połączyć pól box z tekstem oraz dodatkowo, że podwójne kliknięcie spowoduje wywołanie predykatu zadanego predykatu.

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.1223193783.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (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