Headings: !!Introduction !!Einleitung !!Required Objects !!Benötigte Objekte !!Struktur !!Ausblick !!Links !!Bottomline
The risc gui lib is only useful for Risc-OS Computers from Acorn and its successors.
The RiscGuiLib is a C++ class library for Risc-Os. It shall simplify the development of GUI-Applications using object orientation.
The first attempt to do this on the internet resulted in a lot for me to learn - i wrote some test applications for evaluation purposes.
The second attempt is now more targeted. The goal is to develop the software for my 3D milling machine StepperFraese. The software consists of an interrupt part and a GUI part that mills a bitmap in gray-scale into a depth-profile with arbitrary resolution.
In the following i have some documentation that grew with the project. Give me some time to translate it :-).
- The progress is entered into a bitmap for each step performed
- Milling shall be optimized by use of differently sized drills
- As further optimization, after a pre-calculation of the milling paths needed, the paths are sorted to minimize gaps between subsequent paths.
- A finishing pass that is optimized not for milling under full material but for milling everything it can reach with the current drill can be added
- Milling time optimization and estimation shall take place after precalculation of all milling paths
- Shape of the drills is not taken into account. The user has to ensure not to use drills that do no fit into deep trenches when they occur.
- Arbitrary bitmap sizes
- Hardware can be switched on/off (Drill,Vac,Steppers)
27 jan 03
- The above is mostly done
- Continuing work with different drill sizes after one pass has been done results in loss of milling paths
- Time estimation still missing
- Editing template files results in reordering of icons- the numbers used for reference change sometimes
- reading of 'double' values from editable icons sometimes freezes the machine after changes in the template file
Die RiscGuiLib ist eine C++ Klassenbibliothek für Risc-Os.
Das Ziel ist, die Programmierung von GUI-Anwendungen unter Risc-OS durch Einsatz der Objektorientierung zu vereinfachen.
Der erste Versuch dies im Netz mit mehreren zu lösen hat Bewirkt dass ich vieles dazugelernt und mir Techniken erarbeitet habe - Dazu habe ich einige Testanwendungen erstellt.
Der zweite Versuch ist nun zielorientierter. Das Ziel ist die Erstellung einer Software für meinen 3D Fräs-Plotter StepperFraese. Die Software besteht aus einem Interruptteil und einem Oberflächenteil der eine Bitmap in Graustufendarstellung mit angebbarer Auflösung in ein Tiefenprofil Fräsen lässt:
- Der Fortschritt wird protokolliert indem in jeweils eine weitere Bitmap die Bearbeitung eingzeichnet wird.
- Durch mehrfaches Fräsen mit unterschiedlichen Fräserdurchmessern soll eine Fräszeitoptimierung stattfinden.
- Weitere Optimierung erfolgt durch eine Vorberechnung der Fräsaufträge und deren möglichst nahtlose Aneinanderkettung .
- Als Abschluss kann mit dem aktuellen Fräser zusätzlich zum normalen Fräsvorgang der maximal mögliche Rest mitgefräst werden, auch wenn dann nicht unter vollem Material gefahren wird.
- Fräszeitoptimierung und -Schätzung soll nach Vorberechnung aller Fräswege stattfinden.
- Bohrertiefen werden nicht berücksichtigt. Bei steilen, tiefen Gräben darf man die kurzen Bohrer nicht einsetzen.
- Bitmapgrößen frei wählbar
- Hardware ein- und ausschaltbar (Bohrer/Sauger, Stepper)
27.1.03
- Die oben genannten Aufgaben sind zum größten Teil erledigt
- Das Weiterarbeiten mit verschiedenen Fräsergrössen nach erfolgtem Fräsdurchgang mit dem ersten Fräser geht noch nicht - die Restdaten fehlen nach dem 1.Durchgang!
- die Fräszeitschätzung existiert noch nicht.
- Das Filehandling für die Zwischenstände fehlt.
- Bei Editierung des Templatefiles verschieben sich die Einträge- Die Zuordnung stimmt dann nicht mehr, ausserdem gibt es Abstürze beim Auslesen von double Werten aus edit-boxen wenn etwas in der Templatedatei geändert wurde.
The part of RiscGuiLib used and needed by the application is mostly done. Extensions desired (with falling priority) would be:
- Support filehandling
- use icon reference by name
- use handles to accelerate spriteaccess
- auto update of sprites (animation-like)
general extensions would be:
- dynamic handling of menues
- saveing of template files
These extensions are not badly needed.
Der für die RiscGuiLib benötigte und verwendbare Teil ist abgeschlossen, für die Fräse erwünschte Erweiterungen (mit fallender Priorität) wären:
- Filehandling unterstützen
- Namenszugriff auf Iconhandles
- Spritezugriffsbeschleunigung durch Handles
- Auto-Update von Sprites (ähnlich Animation)
allgemeine Erweiterungen wären:
- dynamisches Handling von Menus
- Speichern von Templatedateien
Diese Erweiterungen sind aber nicht dringend.
- Task Interface -ok-
- Zero event handler for surveillance of milling progress -ok-
- Sprite handling for display of current and nominal condition -ok-
- Template handling for window data -ok-
- Icon Handling for initiation of passes -ok-
- Writeable icons for resolution, drill size, normal- or finishing milling pass -ok-
- menue for drill selection - solved by use of icons-
- Restructure the program by extracting the system independent functionality from main
- Stepper object: everything that has to do with the milling hardware
- drill position
- stepper control
- processing of point lists with linear connection in 3D
- Miller object: everything that has to do with computation of milling paths
- material
- drill type
- sorting of paths
- computing of paths
- scheduling paths for milling jobs
- Map class
..to be continued..
- Task Interface -ok-
- Null-Event Verwaltung für die Überwachnung des Fräsfortschritts -ok-
- Sprite Verwaltung für die Darstellung von Soll- und Istzustand -ok-
- Template-Verwaltung für Fensterdaten -ok-
- Icon Handling für die Initiierung der Arbeitsschritte -ok-
- Eingabefelder für Auflösung, Fräsergröße, Normal/Endfräsen -ok-
- Menus oder Listenauswahl für Fräserwahl -durch Icons gelöst-
- Umbauen der Programmstrur - Herausziehen der Systemunabhängigen Funktionalität:
- Stepper: alles was direkt mit der HW zu tun hat
- Fräserposition
- Motorsteuerung
- Verarbeiten von Punktlisten mit linearer Verbindung im Raum
- Miller: alles was mit der Verwaltung der Fräsbahnen zu tun hat
- Material
- Werkzeug
- Bahnsortierung
- Bahnermittelung
- Scheduler für die Abarbeitung der Jobs für Berechnung oder Fräsvorgang
- Map
- Aufnahme der Daten und des Bearbeitungsfortschritts
- Methoden für die Eintragung von Fräsflächen
- Methoden für die Untersuchung auf Freiflächen
- Variable Bitmapgröße
- Ausführen mit optimiertem Fräsweg
ausstehend
- Map
- Filehandling der Fräsdaten zum Speichern von Zwischenständen
- 3x3 Filter für die Kantenverfolgung
- 5x5 Filter für die Kantenermittlung
- Tracker
- Kantengeneration aus Pfadverfolgung
- Bohrlochdetektion
- Netzlistenermittlung
- Isolationsbahnermittlung aus Netzlisten
- Ein/Ausschalten der Spannungsversorgung
- Anschlagkontrolle
- Import und Verarbeitung vektorieller Quelldaten
- Vektorisieren von Quelldaten
Zentrale Objekte:
Passive Hilfs-Objekte:
Event Handler Objekte:
Hardware- Schnittstelle:
Kurz zur Technik:
- Wir haben ein paar Objekte die man als Singletons bezeichnen kann- das RiTask Objekt und das RiEventDispatcher Objekt.
- Diese werden entweder direkt angesprochen oder (Dispatcher) durch das Erben einer Basisklasse RiEventHandler die Methoden zum Zugriff auf das Dispatcher Singleton kennt.
- Das Taskobjekt kann uns beim System anmelden, der Eventdispatcher kann Events verarbeiten und an die Handler verteilen und Template kann Fensterdaten einladen und daraus Fensterobjekte erzeugen und an uns übergeben.
- Die Events werde ich auf unterster Ebene erstmal nur aufgrund der Eventmaske verteilen- die Fenster-und Iconabhängigen Geschichten kommen erstmal wieder 'raus.
- Die Entscheidung an wen das Event alles geht kommt erst in den spezialisierten Eventanmeldungen. Das wird dann zwar eine 'dicke' API, aber dafür sind die Methoden weitestgehend selbsterklärend und man benötigt keine Structs um das Interface zu benutzen.
Framework:
Die entwickelten Bausteine sind so ausgelegt, dass sie ein Framework bilden das auch für zukünftige Projekte nutzbar ist. Das Endziel ist die automatische Generierung eines Programmgerüstes (Framework) für ein gegebenes Template- File und weitere vorher erfassbare Informationen wie Menu-Baum, Tastatur- shortcuts und generelle Programm-Eigenschaften wie Vorhandensein einer Null-Event-Schleife oder Toolbox- Basis.
Einige Erweiterungen des Frameworks werden notwendig werden:
- RiEventDispatcher und -Handler: Erweitern auf die Behandlung zusätzlicher Event Typen
- RiWindow: Erstellung eigener Fenster, Modifikation, nicht nur aus Template.
Fräse:
Zur Platinenerstellung ist eine Kantenverfolgung für die Erzeugung von Isolationsbahnen notwendig. Dafür kann zunächst eine Kantendetektion in einem Grafikprogramm erfolgen- daraufhin wird das 'Isolationsbild' mittels Kantenverfolgung in einen vektoriellen Datensatz umgewandelt.
- Die Schrittweite muß anhand von Versuchen ermittelt werden.
- Schleifen- und Endeerkennung notwendig um nicht ewig im Kreis zu laufen!
- Automatische Bohrlocherkennung sollte mittels der Vektordaten möglich sein.
UwesSeite