Laden...

Komponente zum visuellen Programmieren gesucht

Erstellt von 7.e.Q vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.727 Views
7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren
Komponente zum visuellen Programmieren gesucht

Hi Leute,

ich suche eine Komponente oder ein Framework, mit dem ich in einem Programm grafische Programmierung ermöglichen kann.

Kennt jemand sowas?

//edit: sowas in der Art (Quelle: MSDN)

http://i.msdn.microsoft.com/Bb483024.VPLScreenshot(en-us,MSDN.10).jpg

Danke!

Grüße,
Hendrik

2.760 Beiträge seit 2006
vor 14 Jahren

Jup, nimmste einfach die Workflow-Foundation.
Weiss aber gerade nicht wie es um die steht, sie sollte eigentlich von Seiten MS komplett neu entwickelt werden. Ob die schon fertig sind? Ansonsten macht es natürlich wenig Sinn auf veraltete Technologie zu bauen zumal man dann nicht weiss wie es mit der portierbarkeit aussieht.

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Da es für mich persönlich ist, eine reine Spielerei, brauch ich auf Portierbarkeit keinen Wert legen.

Aber wie meinst du das, die Workflow Foundation hernehmen?

Ich werd mal erklären, worum's mir geht:

Ich bastel an einem kleinen Programm, das in der Lage sein soll, verschiedene Filter über Bilder laufen zu lassen, also simples Image Processing.

Ich habe einige Grundfilter bereits geschrieben, wozu ein Greyscaler und ein Convolution-Filter gehört, auf dessen Basis ich zwei Blur-Filter (Box und Gauss) und einen Sobel-Edge-Detector geschrieben habe.

Diese Filter sollen nun per Oberfläche beliebig kombiniert werden können.

Jeder Filter hat eine Input-Bitmap, eine AlphaMap-Bitmap und ein Output-Image. Der Filter-Algorithmus läuft nun über die Pixel des Input-Bitmaps und wertet die errechnete neue Pixelfarbe über die AlphaMap prozentual gegen die original Pixelfarbe. 100% Schwarz = 100% Originalfarbe, 100% Weiß = 100% errechnete Farbe.

Das ist interessant, wenn man beispielsweise eine Bitmap mit Sobel-Edge-Daten als Alpha für einen Blur-Filter nimmt. Der Blur-Filter wird dann nur auf die Bereiche angewendet, die durch Sobel nicht als Ränder erkannt wurden. Man kann so beispielsweise automatisch Hautunreinheiten entfernen ohne dass all zu viele Details verloren gehen. Wichtig ist dafür nur, dass der Sobel Details als Randbereiche und Unreinheiten als Flächen erkennt.

Das funktioniert auch schon.

Aber ich möchte das nun nicht hard-coded festlegen müssen, sondern möchte das in dem Programm per grafischer Programmier-Oberfläche zusammen klicken können.

Das soll also in meinem Programm in etwa so ausschauen, wie im Bild im Anhang.

Eine Komponente oder ein Framework, das sowas kann, suche ich.

Ich glaube, es gibt ein kommerzielles Programm, das sowas ähnliches schon kann: Filter Forge. Aber 1. ist das kommerziell und 2. kann es Dinge nicht, die ich aber gerne hätte (Filter Outputs als Alpha Maps für andere Filter verwenden und so).

Danke

2.760 Beiträge seit 2006
vor 14 Jahren

Auch wenn es sicher nicht unkompliziert ist so bin ich der Meinung dass du den Designer der Workflow Foundation auch in deiner eigenen Anwendung hosten kannst.
Siehe z.B.: http://msdn.microsoft.com/en-us/library/aa480213.aspx

Ansonsten sollte das ganze auch mit einem Graph-Algorithmus und bisschen Pinseln selber zu bauen sein.

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Auch in einer WPF Applikation? Dein Link zeigt, wenn ich das richtig gesehen habe, nur das Hosting in einer Windows Forms Applikation.

Ein wenig selber pinseln und so sollte auch kein Problem sein. Damit experimentiere ich auch gerade. Ich hab ein UserControl gebaut, das für die Ports links und rechts ein StackPanel verwendet und für die Ports selbst erstelle ich ein neues UIElement. Mein Problem dabei ist nun:

Ich überschreibe in der von UIElement ableitenden Klasse die OnRender Methode. Füge ich dieses UIElement nun dem StackPanel hinzu, so wird es nicht gestapelt. Die Koordinaten, mit denen ich in der OnRender Methode arbeite, sind scheinbar absolut im Stackpanel. Das heißt, wenn ich da für jeden Port 'n Rechteck zeichne, dann liegen alle Rechtecke auf den selben Koordinaten.

Was muss ich da tun, dass die dem StackPanel entsprechend untereinander angeordent werden?

2.760 Beiträge seit 2006
vor 14 Jahren

Ja Mist... habe total übersehen das ich im WPF-Forum gelandet bin 🤔
Mit WPF bin ich leider noch nicht so firm. Allerdings liegen hier noch ein paar Links rum die ich mir schon lange mal reinziehen wollte, evtl. helfen die dir ja:

http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part1.aspx
http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part2.aspx
http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part3.aspx

Wenn du dir den Stilbruch verzeihen kannst dann könntest du es auch mal mit dem WindowsFormsHost probieren.

Das schöne an WF ist halt das du vom Designer bis zur Ausführung alles geschenkt bekommst.

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo 7.e.Q

Nach dem Lesen deines Postes ist mir ein früheres Projekt eingefallen.
Das hilft dir sicherlich weiter:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Wow, ja, das sieht schonmal fast so aus, wie ich mir das denke. Danke für den Link!

Hat der Kollege zufällig den SourceCode irgendwo veröffentlicht?

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Soooooo, mit Unterstützung des Sourcecodes des DiagramDesigners von CodeProject hab ich da jetzt was zumindest optisch Funktionierendes schonmal zusammen. Sieht jetzt so aus (Bild im Anhang). Man kann schon Verbindungen zwischen den einzelnen Ports herstellen.

Jetzt muss ich nur noch zusehen, dass das Ding auch nicht nur optische Funktionalität hat, sondern auch technisch funktioniert. Aber ich bin guter Dinge.

Es soll universell einsetzbar sein. Also dass man im Grunde nur von einer bestimmten Klasse ableitet und Priorities mit bestimmten Attributen versieht, um diese als Input- und Output-Ports zu definieren. Das heißt, man kann damit nachher alles mögliche an eigenen Klassen kaskadiert ausführen und Daten jedweder Art bearbeiten lassen. Man muss nur die entsprechenden Klassen dazu bauen.