Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_prolog_ardxpce [2008/09/29 00:36]
miw
pl:miw:miw08_prolog_ardxpce [2019/06/27 15:50] (aktualna)
Linia 30: Linia 30:
 ====== Sprawozdanie ====== ====== Sprawozdanie ======
  
-==== 1. Wstęp: ==== 
  
-=== a. Środowisko pracy: === 
  
  
-Wszystkie przykłady tworzone i testowane były w systemie Ubuntu. 
  
-=== b. Oprogramowanie:​ === 
  
  
-== i. SWI-Prolog ​==+==== 1. Wstęp: ====
  
 +== a. Środowisko pracy: ==
  
-== ii. XPCE ==+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.
  
-=== c. Biblioteka XPCE w Prologu===+== b. Oprogramowanie: ==
  
 +Po pobraniu i zainstalowaniu programu [[http://​www.swi-prolog.org/​dl-stable.html|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.
  
-XPCE to zestaw narzędzi wspomagający tworzenie GUI pod język PrologJest zorientowane obiektowo, daje możliwość tworzenia klas, metod, waruków, iteracji... Procedury zawarte w XPCE tworzone są 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 jaklinie, 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. ​+== c. Biblioteka ​XPCE w Prologu==
  
-=== d. Konstrukcja grafów ARD (Atribute Relationship Diagram): ​===+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:​ 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|:​pl:​miw:​oraz1.png}} {{:​pl:​miw:​oraz1.png|:​pl:​miw:​oraz1.png}}
 +
 +
 +
  
 ==== 4. Wiadomości wstępne o XPCE: ==== ==== 4. Wiadomości wstępne o XPCE: ====
Linia 88: Linia 91:
  ?​-free(@demo).  ?​-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: ==
  
-==== 5Projekt:​====+device - Most generic compound graphical object. The window is a subclass of 
 +device and all graphical operations are defined on class device.
  
-Jedynym pomysłem na tworzenie diagramów ARD w XPCEjest ręczne przygotowanie pliku *.pcektó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 figuryjak je ze sobą łączyćw jaki sposób możemy mieć na nie wpływ.+figure - Subclass of deviceprovides clippingbackgroundcontaining rectangle, 
 +border and the possibility to show a subset of the displayed graphical objects.
  
-== a. Tworzenie figur: ==+format - A format object specifies ​two-dimensional table layout. Formats may be 
 +associated to graphical devices using ‘device ! format’.
  
-arrow Arrow-head. Normally used implicitly by class line.+table The successor of format realises tabular layout compatible to the HTML-
 +model for tables.
  
-bezier ​Bezier curveBoth quadratic and cubic Biezer curves are supported.+connection ​Subclass of class lineA 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.
  
-bitmap ​Visualisation ​of an image. Both monochrome and full-colour images are +handle ​Defines the location, nature and name of a connection point for a 
-supportedImages ​can have shape. See section 10.10.+connectionHandles ​can be attached to individual graphicals as 
 +well as to their class.
  
-pixmap ​Subclass ​of bitmap only for coloured images.+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.
  
-box RectangleCan be rounded and filled.+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).
  
-circle - Special case of ellipse. 
  
-ellipse - Elliptical shape. May be filled. 
  
-arc - Part of an ellipse. Can have arrows. Can show as pie-slice. 
  
-line - Straight line segment. Can have arrows. 
  
-path - Poly-line through multiple points. Can have arrows. Can be smooth. 
  
-text - Visualisation of a string in some font. Can have various attributes, can be 
-clipped, formatted, etc. 
  
-Przykład:+ 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +==== 5. Projekt:​==== 
 + 
 +Przygotowany plik (na podstawie grafu ard dla termistatu):​ {{:​pl:​miw:​projekt.pl|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|:​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:
   ​   ​
-  ​?- send(@p, display, +  ​text_box(TB,​ Text, Width, Height) :- 
-  new(@box, box(100,100))). - kwadrat+        new(TB, device), 
 +        ​send(TB, display, 
 +             ​new(B, box(WidthHeight))), 
 +        send(TB, display, 
 +             ​new(T,​ text(Text, center, normal))),​ 
 +        send(T, center, B?center).
  
-== bŁączenie figur==+Niestety nie udało mi się zintegrować tego typu obiektu z przykładowym grafemWadą 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|:​pl:​miw:​obraz3.png}} 
 + 
 +po: 
 + 
 +{{:​pl:​miw:​obraz4.png|:​pl:​miw:​obraz4.png}} 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
-== c. Działanie na figurach: == 
  
  
  
 ==== 6. Wnioski: ==== ==== 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.
  
  
Linia 156: Linia 309:
  
   * http://​www.swi-prolog.org/​packages/​xpce/​   * http://​www.swi-prolog.org/​packages/​xpce/​
- 
-  * https://​ai.ia.agh.edu.pl/​wiki/​pl:​prolog:​prolog_lab:​prolog_lab_xpce 
  
   * Grzegorz J. Nalepa and Igor Wojnicki. (2008). An ARD+ Design and Visualization Toolchain Prototype in Prolog.   * Grzegorz J. Nalepa and Igor Wojnicki. (2008). An ARD+ Design and Visualization Toolchain Prototype in Prolog.
pl/miw/miw08_prolog_ardxpce.1222641404.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