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/10/04 12:19]
miw
pl:miw:miw08_prolog_ardxpce [2019/06/27 15:50] (aktualna)
Linia 29: Linia 29:
  
 ====== Sprawozdanie ====== ====== Sprawozdanie ======
 +
  
  
Linia 39: Linia 40:
 == a. Środowisko pracy: == == a. Środowisko pracy: ==
  
-Przykład tworzenia grafu w XPCE był realizowany w środowisu ​Windows XP.+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:​ == == 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.+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. 
 == c. Biblioteka XPCE w Prologu: == == 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. ​
-XPCE to zestaw narzędzi wspomagający tworzenie GUI pod język Prolog. Jest zorientowane obiektowo, daje możliwość tworzenia klas, metod, ​warukó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): == == d. Konstrukcja grafów ARD (Atribute Relationship Diagram): ==
Linia 54: Linia 55:
  
 {{:​pl:​miw:​oraz1.png|:​pl:​miw:​oraz1.png}} {{:​pl:​miw:​oraz1.png|:​pl:​miw:​oraz1.png}}
 +
 +
  
  
Linia 90: Linia 93:
 == e. Tworzenie figur: == == e. Tworzenie figur: ==
  
-arrow - Arrow-head. Normally used implicitly by class line.+arrow - Służy do tworzenia strzałek.
  
-bezier - Bezier ​curve. Both quadratic and cubic Biezer curves are supported.+bezier - Tworzy krzywe ​Bezier`a.
  
-bitmap - Visualisation of an image. Both monochrome and full-colour images are +bitmap - Umieszcza obraz, kolorowy jak i monochromatyczny.
-supported. Images can have shape.+
  
-pixmap ​Subclass of bitmap only for coloured images.+box Tworzy figury takie jak kwadrat i prostokąt, o ostrych lub zaokrąglonych rogach.
  
-box Rectangle. Can be rounded and filled.+circle ​Słuzy do otrzymywania okręgów.
  
-circle - Special case of ellipse.+ellipse ​- Tworzy figury o kształcie elips, może być wypełnione.
  
-ellipse ​Elliptical shape. May be filled.+line Tworzy linię prostą, może służyć do tworzenia strzałek.
  
-arc - Part of an ellipse. Can have arrows. Can show as pie-slice. +path - Wielo linia przechodząca przez kilka punktów.
- +
-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.+
  
 +text - Służy do wyświetlania tekstu.
 Przykład: Przykład:
   ​   ​
Linia 119: Linia 115:
   new(@box, box(100,​100))). - kwadrat   new(@box, box(100,​100))). - kwadrat
  
-== f. Łączenie ​figur: ==+== f. Łączenie ​i działanie na figurach: ==
  
 device - Most generic compound graphical object. The window is a subclass of device - Most generic compound graphical object. The window is a subclass of
Linia 165: Linia 161:
   send(B1, connect, B2, @in_out_link).   send(B1, connect, B2, @in_out_link).
  
-== g. Działanie na figurach: ==+ 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
  
Linia 186: Linia 196:
 ==== 5. Projekt:​==== ==== 5. Projekt:​====
  
-Jedynym pomysłem na tworzenie diagramów ARD w XPCE, jest ręczne przygotowanie pliku *.pce, 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.+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: 
 +   
 +  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|:​pl:​miw:​obraz3.png}} 
 + 
 +po: 
 + 
 +{{:​pl:​miw:​obraz4.png|:​pl:​miw:​obraz4.png}} 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
  
-== d. Dwa kwadraty: == 
  
-  new(@demo,​dialog('​Przykład'​)),​ 
-  new(@jeden,​box(13,​10)),​ 
-  new(@dwa,​box(100,​100)),​ 
-  send(@demo,​append(@jeden)),​ 
-  send(@demo,​append(@dwa)),​ 
-  send(@demo,​open). 
  
 ==== 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. ​+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. ​ 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. ​+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 ====== ====== Materiały ======
Linia 217: 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.1223115576.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