[ALG]auto-layout ERM algorithme

Pagina: 1
Acties:

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
Hallo,
SQL server diagrams hebben een super algorithme dat automatisch tabels en relations op de meest efficiente manier neerzet.
Ik wil graag in Delphi dat algorithme namaken. Ik heb al op internet rond gekeken en kwam bij de volgende pagina's:

Het DaVinci algorihtm:
http://www2.toki.or.id/bo...al/BOOK/BOOK4/NODE168.HTM
Is niet helemaal wat ik zoek, lijnen gaan over elkaar heen

Een algorithm dat precies doet wat ik wil maar closed source en moet betaald worden:
http://www.nwoods.com/go/autosamples.htm

Een pagina met volgens mij hetzelfde algorithm als in SQL server:
http://blogs.msdn.com/cla...ve/2005/04/23/411213.aspx

Ik heb nog verder gezocht, maar het is allemaal closed source :'(

Heeft iemand een goede link of source?
Thanks

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


Verwijderd

mmm, misschien dat je kan zoeken op 'GrahamScan' of op 'convex hull'. Dat is denk ik wel iets wat je kan gebruiken. Leuk probleem trouwens. :) Succes ermee

  • staefke
  • Registratie: December 2003
  • Laatst online: 18-02 08:01
heb je al naar graph layout e.d. gezocht ?

duh ?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Verwijderd schreef op zondag 19 juni 2005 @ 13:42:
mmm, misschien dat je kan zoeken op 'GrahamScan' of op 'convex hull'. Dat is denk ik wel iets wat je kan gebruiken. Leuk probleem trouwens. :) Succes ermee
Wat heeft dat er in godsnaam mee te maken? Sorry als het arrogant overkomt, maar als ik al geen idee heb waarom je een convex hull zou willen bepalen om een klassendiagram netjes weer te geven, dan kan de TS er al helemaal niet mee.

Je kunt beter zoeken op 'graph layout algorithm' of iets dergelijks.

[ Voor 10% gewijzigd door Soultaker op 20-06-2005 14:44 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Convex hull is een vrij basaal meetkunde idee, ook wel bekend als "de elastiek". Het is zeg maar de lijn die een elastiek volgt als je'm om een ingewikkeld 2D voorwerp spant (zoals een aantal tables in een diagram). Vervolgens kun je die figuren snel layouten. Ze hebben namelijk geen gekke happen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
MSalters: maar wat heb je er aan in de context van de TS? Waar zet je die tabellen om te beginnen neer (dat is de essentie van het probleem) en als je er dan het convexe omhulsel van bepaald, wat moet je daar dan mee? V.z.i.w. heeft het helemaal niets met de lay-out van een graaf te maken.

(Overigens weet ik wel wat een convex hull is; ik vraag wat de TS er mee moet. Je kunt trouwens het omhulsel van een N-dimensionale verzameling punten nemen; het principe is niet beperkt tot 2D.)

[ Voor 14% gewijzigd door Soultaker op 20-06-2005 16:10 ]


Verwijderd

Ik hou dit topic in ieder geval ook even in de gaten :)

Verwijderd

het is niet de meest makkelijke materie, maar je zou eens naar DOT kunnen kijken uit het graphviz package. http://www.graphviz.org/ Dit is een oud AT&T research project wat helemaal gericht is op graph routing & layouting.

Het algoritme staat in de source code en niet in een hapklare paper (mischien is die paper er wel hoor, maar dan moet je zelf even gaan zoeken). Als je een beetje C kunt lezen zou je het zo uit de source moeten kunnen oppikken.

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Heb je dit al gezien? De source-code staat erbij :)

klik

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Verwijderd

Verwijderd schreef op dinsdag 21 juni 2005 @ 10:44:
het is niet de meest makkelijke materie, maar je zou eens naar DOT kunnen kijken uit het graphviz package. http://www.graphviz.org/ Dit is een oud AT&T research project wat helemaal gericht is op graph routing & layouting.

Het algoritme staat in de source code en niet in een hapklare paper (mischien is die paper er wel hoor, maar dan moet je zelf even gaan zoeken). Als je een beetje C kunt lezen zou je het zo uit de source moeten kunnen oppikken.
Dit idd een goed algoritme, er is ook een kant en klare, vrij te gebruiken library van http://home.so-net.net.tw/oodtsen/wingraphviz/

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
Verwijderd schreef op dinsdag 21 juni 2005 @ 13:05:
[...]


Dit idd een goed algoritme, er is ook een kant en klare, vrij te gebruiken library van http://home.so-net.net.tw/oodtsen/wingraphviz/
He Cool!
precies wat ik zoek!
THanks!!!
Die andere ga ik straks bekijken m

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


Verwijderd

Verwijderd schreef op dinsdag 21 juni 2005 @ 13:05:
[...]

Dit idd een goed algoritme, er is ook een kant en klare, vrij te gebruiken library van http://home.so-net.net.tw/oodtsen/wingraphviz/
Een kant en klare "library" voor Windows ja, niet een universele C lib. Eigenlijk is het gewoon de standaard code iets ge-repacked als activeX component. Maar goed, ik heb deze zelf ook wel eens gebruikt en het is erg handig.

Je kunt een graph opgeven in het zeer makkelijk .dot formaat. (bv a->b b->c, etc). De lib kan dan een layout naar een SVG, GIF, PS, etc maken, maar kan ook de originele graph aanvullen met coordinaten van de layout. Deze layout coordinaten kun jij weer uitlezen, en op basis daarvan (na bv scaling en transformatie) kun je zelf een tekening maken, bv door win32 draw functies te gebruiken.

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
Verwijderd schreef op dinsdag 21 juni 2005 @ 14:30:
[...]


Deze layout coordinaten kun jij weer uitlezen, en op basis daarvan (na bv scaling en transformatie) kun je zelf een tekening maken, bv door win32 draw functies te gebruiken.
Wow, kan dat ook? In welke taal heb je dat gedaan?
Betekend dat dat ik zelf kan bepalen wat ik teken (dus niet de ondersteunde elipsen, rectangles), maar ook zelf bitmaps, canvassen, gifs etc kan invoegen?

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


Verwijderd

hemaworst schreef op dinsdag 21 juni 2005 @ 14:35:
[...]

Wow, kan dat ook? In welke taal heb je dat gedaan?
Betekend dat dat ik zelf kan bepalen wat ik teken (dus niet de ondersteunde elipsen, rectangles), maar ook zelf bitmaps, canvassen, gifs etc kan invoegen?
Ja maar dan moet je wel zelf een renderer voor schrijven (denk ik, weet ik niet 100% zeker); in het dot formaat krijg je de posities terug van de objecten. Je zult wel de objecten moeten faken m.a.w. van een bitmap moet je een rectangle maken. Iets wat ook wel het vermelden waard is, is dat de pijlen b-splines zijn, het zou moeten zijn dat NEATO een optie heeft voor rechte pijlen.

Ik heb deze component een keer (succesvol) toegepast in C#.

[ Voor 6% gewijzigd door Verwijderd op 21-06-2005 16:06 ]


Verwijderd

Je kunt DOT idd zo gebruiken dat ie alleen de layout voor je doet. Dat wil zeggen, de positie van alle elementen wordt voor je bepaald. Hoe je deze elementen dan vervolgens gaat tekenen moet je zelf weten. M.a.w. de layout wordt voor je gedaan, maar de renderer schrijf je zelf.

Wil je niet zelf een renderer maken, dan kun je makkelijk in het SVG of desnoods GIF formaat een graph laten schrijven. Er zijn voor de meeste platforms wel SVG viewers zodat je de uitput nog mooi naar je viewport kan scalen. In iets beperktere mate kan dit ook met gif, waarbij de dot dan al de gewenste grote opgeeft.
Pagina: 1