Squealer
Legacy Member
In de toekomst zal ik mij met een project moeten bezig houden die de gebruiker toelaat op een grafische manier (op een tekening) stuff te manipuleren. De requirements liggen nog lang niet vast. Er werd hooguit even over gepraat, niets concreets werd beslist, maar ik wou toch al even informeren...
Met "interface" hier in de titel bedoel ik niet een standaard GUI met buttons en labels en panels en what not.
Ik heb het ook niet over een Paint applicatie ofzo
Ik heb het over een dynamisch genereerde omgeving die de gebruiker kan manipuleren.
- Er zullen tekeningen moeten getoond worden op het scherm (gegenereerd met code). (dwarsdoorsnede van iets, dus meerdere lagen naast elkaar)
- Die schema's zullen bepaalde domein objecten voorstellen.
- De gebruiker moet op het scherm zaken een naam kunnen geven en waarden kunnen wijzigen.
- De gebruiker moet componenten op die tekening (van layer tot layer) met elkaar kunnen verbinden, liefst met een soort "snap to".
- Heel die tekening moet je kunnen pannen en in- en uitzoomen.
- Het domein moet op de hoogte zijn van welk object welk label heeft gekregen, en welke objecten met elkaar verbonden zijn.
In other words:
Ik wil geen tekeningske maken met mijn muis.
Ik wil via code een tekening laten maken adhv bepaalde start up criteria
De gebruiker moet daarna bepaalde componenten (vormen dus eigenlijk) op het scherm kunnen slepen, (of invoegen met een popup menu) en die al dan niet laten verbinden met andere componenten dmv drag en drop, of door lijnen te trekken tussen componenten of andere lijnen.
Heel die bazaar moet ofcourse exportable zijn, en terug importable (wat dan een start up situatie wordt).
Ik vind niet direct een goed voorbeeld, maar om je toch een grof idee te geven van welke richting er moet uitgegaan worden:
(voorbeeld van statisch gegenereerde afbeelding waar enkel properties kunnen gewijzigd worden)
http://www.bergmans.com/Combustion Control System/GUI Screenshot - Small.jpg
(voorbeeld van dynamisch gegenereerde afbeelding, waar alle nodes samen hangen en versleepbaar zijn)
http://www.cytoscape.org/screenshots/2_6_ss1.png
Probleem is: het enige waar ik aan kan denken om hier aan te beginnen, is Java2D.
Mijn ervaring met Java2D is beperkt...
Tijdens en na mijn stage heb ik mij hier wel mee kunnen bezighouden, maar het Java2D gedeelte werd vooral door men collega gecodeerd, door mij enkel getweaked.
In het project toen, tekenden we een simplistische 2D weergave van een computerchip, met al zijn pinnen rondom rond. Die pinnen (korte lijntjes) waren selecteerbaar (zodat ze in een "detailview" konden bekeken worden), en elke pin had ook een label ernaast staan. Die labels lagen vast en konden enkel aangeklikt worden waardoor een dialog opende met meer info.
Heel die bazaar, device, pinnen, en labels, kon in 1 geheel versleept worden en er kon in en uitgezoomed worden.
Om die "click regio's" (voor de pinnen en hun labels) te laten werken in alle situaties, werden die gebieden ergens bijgehouden in de code, en gewijzigd bij elke pan of zoom.
De code werd uiteindelijk tamelijk bloated en error prone. Lot's of pixel neuken....
Ik kan me niet van de indruk ontdoen dat er een andere manier bestaat om zoiets te coderen.... Bestaan er geen frameworks?
Als ik lijnen moet laten trekken en in de code moet "weten" dat er nu een lijn is getrokken tussen object 1 dat behoort tot layer 1, en object 158 in layer 3, dan moet ik toch een shitload aan arrays van Rectangles of whatever gaan bijhouden en er telkens over gaan loopen van zodra de muis beweegt om te weten wat de user aanwijst (om info te tonen bv)? Toch onbegonnen werk?
Met "interface" hier in de titel bedoel ik niet een standaard GUI met buttons en labels en panels en what not.
Ik heb het ook niet over een Paint applicatie ofzo
Ik heb het over een dynamisch genereerde omgeving die de gebruiker kan manipuleren.
- Er zullen tekeningen moeten getoond worden op het scherm (gegenereerd met code). (dwarsdoorsnede van iets, dus meerdere lagen naast elkaar)
- Die schema's zullen bepaalde domein objecten voorstellen.
- De gebruiker moet op het scherm zaken een naam kunnen geven en waarden kunnen wijzigen.
- De gebruiker moet componenten op die tekening (van layer tot layer) met elkaar kunnen verbinden, liefst met een soort "snap to".
- Heel die tekening moet je kunnen pannen en in- en uitzoomen.
- Het domein moet op de hoogte zijn van welk object welk label heeft gekregen, en welke objecten met elkaar verbonden zijn.
In other words:
Ik wil geen tekeningske maken met mijn muis.
Ik wil via code een tekening laten maken adhv bepaalde start up criteria
De gebruiker moet daarna bepaalde componenten (vormen dus eigenlijk) op het scherm kunnen slepen, (of invoegen met een popup menu) en die al dan niet laten verbinden met andere componenten dmv drag en drop, of door lijnen te trekken tussen componenten of andere lijnen.
Heel die bazaar moet ofcourse exportable zijn, en terug importable (wat dan een start up situatie wordt).
Ik vind niet direct een goed voorbeeld, maar om je toch een grof idee te geven van welke richting er moet uitgegaan worden:
(voorbeeld van statisch gegenereerde afbeelding waar enkel properties kunnen gewijzigd worden)
http://www.bergmans.com/Combustion Control System/GUI Screenshot - Small.jpg
(voorbeeld van dynamisch gegenereerde afbeelding, waar alle nodes samen hangen en versleepbaar zijn)
http://www.cytoscape.org/screenshots/2_6_ss1.png
Probleem is: het enige waar ik aan kan denken om hier aan te beginnen, is Java2D.
Mijn ervaring met Java2D is beperkt...
Tijdens en na mijn stage heb ik mij hier wel mee kunnen bezighouden, maar het Java2D gedeelte werd vooral door men collega gecodeerd, door mij enkel getweaked.
In het project toen, tekenden we een simplistische 2D weergave van een computerchip, met al zijn pinnen rondom rond. Die pinnen (korte lijntjes) waren selecteerbaar (zodat ze in een "detailview" konden bekeken worden), en elke pin had ook een label ernaast staan. Die labels lagen vast en konden enkel aangeklikt worden waardoor een dialog opende met meer info.
Heel die bazaar, device, pinnen, en labels, kon in 1 geheel versleept worden en er kon in en uitgezoomed worden.
Om die "click regio's" (voor de pinnen en hun labels) te laten werken in alle situaties, werden die gebieden ergens bijgehouden in de code, en gewijzigd bij elke pan of zoom.
De code werd uiteindelijk tamelijk bloated en error prone. Lot's of pixel neuken....
Ik kan me niet van de indruk ontdoen dat er een andere manier bestaat om zoiets te coderen.... Bestaan er geen frameworks?
Als ik lijnen moet laten trekken en in de code moet "weten" dat er nu een lijn is getrokken tussen object 1 dat behoort tot layer 1, en object 158 in layer 3, dan moet ik toch een shitload aan arrays van Rectangles of whatever gaan bijhouden en er telkens over gaan loopen van zodra de muis beweegt om te weten wat de user aanwijst (om info te tonen bv)? Toch onbegonnen werk?