Forum: PC-Programmierung Schaltplaneingabe mit .NET


von Marc (Gast)


Lesenswert?

Hi,

ich möchte für mein Projekt ein Schaltplaneingabetool entwickeln.
Also, ich ziehe Symbole mit Namen, Designator, und Pins aus einer Lib in 
eine Zeichenfläche (einstellbar DIN A3 / A4).
Die Pins möchte ich frei miteinander verbinden können.
Verbindungen mit Verbindern müssen natürlich auch möglich sein.
Ein richtiges Schaltplantool halt.
Schön währe, wenn sich neue Symbole einfach als XML-Datei definieren 
ließen.

Das ganze soll einem von mir ohne Ahnung dreckig zusammengefrickeltes 
Arbeitserleichterungs-Script-Tool eine Benutzerfreundliche Eingabe 
verpassen.
Soll also kein richtiges CAD-Tool werden und alles recht simpel bleiben.
Sowas ähnliches wie Simulink würde mir schon reichen.

Entwicklungsumgebung ist Visual Studio 2010.

Welche Toolkits, Frameworks, Ressourcen sollte ich mir mal reinziehen?

Danke.

von Benjamin U. (utzus)


Lesenswert?


von Sharping (Gast)


Lesenswert?

Viel brauchst du nicht: C# + .NET + WPF.
Damit solltest du ein schönes, Vektorbasiertes UI hinbekommen. Ich 
schreibe häufiger mal solche Tools, und komme damit eigentlich immer 
recht schnell zum Ziel.

Viel Erfolg!

von Erwin (Gast)


Lesenswert?

Hi,

warum probierst Du es nicht erstmal mit einer eigenen Blibliothek in Dia 
(http://de.wikipedia.org/wiki/Dia_(Software)) oder yED 
(http://de.wikipedia.org/wiki/YEd).

Microsoft Jünger würden vielleicht MS Visio nehmen. Ich denke aber es 
könnte einen Blick Wert sein sich Dia oder yED anzusehen und zu prüfen 
ob es nicht damit machbar ist.
Im Endeffekt steckt da auch nur XML dahinter.

Erwin

von Ralf (Gast)


Lesenswert?

@Sharping:
> Viel brauchst du nicht: C# + .NET + WPF.
> Damit solltest du ein schönes, Vektorbasiertes UI hinbekommen. Ich
> schreibe häufiger mal solche Tools, und komme damit eigentlich immer
> recht schnell zum Ziel.
Rein interessehalber: Vektorbasiert ohne Lib dahinter? Quasi reine 
Basics, oder?
Kannst du einen Screenshot zur Verfügung stellen? Ich kann's mir anhand 
deiner Beschreibung allein nicht vorstellen.

Ralf

von Sharping (Gast)


Angehängte Dateien:

Lesenswert?

Hi Ralf,
Jop, reine Basics. Anbei ein Screenshot (bei dem Projekt ging es um 
interaktive Schaltpläne).

von Ralf (Gast)


Lesenswert?

> Jop, reine Basics. Anbei ein Screenshot (bei dem Projekt ging es um
> interaktive Schaltpläne).
Cool. Aber deine reinen Basics scheinen sich von meinem zu unterscheiden 
:)
Oder was würde beispielsweise passieren wenn du ein Bauteil oder eine 
Verbindung verschiebst? Wandern angeschlossene Leitungen bzw. die 
Verbindungspunkte mit?

Ralf

von Sharping (Gast)


Lesenswert?

Ralf schrieb:
> Oder was würde beispielsweise passieren wenn du ein Bauteil oder eine
> Verbindung verschiebst? Wandern angeschlossene Leitungen bzw. die
> Verbindungspunkte mit?

Das kommt natürlich darauf an, wie du es implementierst ;-)
Aber eigentlich ist das ja ganz leicht zu machen:
 - Das Letungsobjekt merkt sich zwei Referenzen auf die Pins, an denen 
es angeschlossen ist.
 - Sobald du ein Bauteil verschiebst, werden alle Objekte neu 
gezeichnet.
 - Beim Zeichnen der Leitung werden der Anfangs und der Endpunkt dann 
eben von den beiden Pin-Referenzen abgefragt.

Somit passt sich die Leitung immer an die verschobenen Objekte an.

von Marc (Gast)


Lesenswert?

@Benjamin:
Ich habe mir bereits die hier bestellt:
http://www.amazon.de/Professionell-entwickeln-mit-Visual-2010/dp/3836214741/
http://www.amazon.de/Visual-2012-umfassende-Handbuch-Computing/dp/3836219972/

Mir geht es auch weniger darum das jetzt alles direkt selbst umsetzten 
zu können.
Erstmal will ich mir einen Überblick über die Technologien verschaffen 
um einschätzen zu können was mit welchem Aufwand und wie alles möglich 
ist.

Sharping:
Danke für die aufmunternden Worte, hört sich ja recht vielversprechend 
an.
Gibt es spezielle Ressourcen, die du empfehlen kannst?
Z.B. Entsprechende Demos im Netz?

Erwin:
Externe Programme kommen wegen der Datenkonsistenz nicht in Frage.
Der Kern meiner Anwendung ist auch nicht der Schaltplan, der ist nur 
Mittel zum Zweck.

von Sharping (Gast)


Lesenswert?

Das wichtigste wäre wohl, dass du die Grundlagen sicher beherrschst. 
Einerseits natürlich die Sprache (C#), vor allem aber auch die 
OOP-Konzepte.
Denn so ein Projekt steht und fällt mit einer guten Architektur, die 
übersichtlich, wartbar und leicht erweiterbar ist.

Wenn du das hinbekommst sind die technischen Dinge (wie zeichne ich 
Objekte? Wie lese ich XML-Files? Wie verarbeite ich die Nutzereingaben? 
Wie gestalte ich die GUI rund um meine Zeichenfläche?) nur noch 
Nebensache.

Fang am besten mal mit einer einfachen Anwendung an: eine Ribbon-Bar mit 
ein paar Formen zur Auswahl (Dreieck, Kreis und Quadrat). Dann eine 
Zeichenfläche, auf die du diese Objekte ziehen kannst. Anschließend 
sorgst du darür, dass man die Objekte auswählen und verschieben kann.
Wenn du das geschafft hast, hast du vermutlich das nötige Wissen 
beisammen. Dann lehnst du dich zurück, und überlegst ganz in Ruhe wie du 
deine Schaltplan-Anwendung aufbauen willst (wie gesagt, eine gute 
Architektur ist das Wichtigste).

von Ralf (Gast)


Lesenswert?

@Sharping:
> Das kommt natürlich darauf an, wie du es implementierst ;-)
> ...
> Somit passt sich die Leitung immer an die verschobenen Objekte an.
Stimmt, das wäre ein Weg. Kennst du zufällig eine Lib, die gerade die 
vektorbasierte Implementierung von Objekten (Kreise, etc.) übernimmt? 
Schnittpunkt ermitteln, skalieren, verknüpfen, etc.
Dein Bild sah im ersten Moment so aus, als ob du solch eine Lib als 
Basis verwendest :)

Ralf

von Sharping (Gast)


Lesenswert?

Also zum Zeichnen braucht's nicht viel. Da reichen schon die 
Windows-Libs, wie z.B. GDI/GDI+, WPF oder Direct2D.

Wenn du jetzt Berechnungen (wie Schnittpunkte) durchführen willst, 
brauchst du dann noch was Zusätzliches. Allerdings kann ich da keine 
Empfehlung geben (habe ich bis jetzt nie benötigt).

von Marc (Gast)


Lesenswert?

Es wird wohl darauf hinauslaufen, dass jemand anderes den Code schreibt.
Ich werde dann spezifizieren, die Technologien vorgeben und 
Architekturarbeit machen.

> eine gute Architektur ist das Wichtigste
Dem stimme ich 100%ig zu.
Deswegen will ich auch versuchen mich soweit einzuarbeiten, dass ich es 
prinzipiell (in 100-facher Zeit) auch selbst machen könnte.

Ich hätte eigentlich gedacht, dass man bei solch einem Vorhaben auf ein 
Framework wie Nevron aufsetzen sollte.
http://www.nevron.com/
Würde das nicht viel Entwicklungszeit und Komplexität aus meinem Code 
nehmen?

von MaWin (Gast)


Lesenswert?

> Aber eigentlich ist das ja ganz leicht zu machen:
> - Das Letungsobjekt merkt sich zwei Referenzen auf die Pins, an denen
> es angeschlossen ist.
>  - Sobald du ein Bauteil verschiebst, werden alle Objekte neu
> gezeichnet.
>  - Beim Zeichnen der Leitung werden der Anfangs und der Endpunkt dann
> eben von den beiden Pin-Referenzen abgefragt.

Deswegen sind also DotNET Applikationen immer so schreiend langsam.


> Es wird wohl darauf hinauslaufen, dass jemand anderes den Code schreibt.
> Ich werde dann spezifizieren, die Technologien vorgeben und
> Architekturarbeit machen.

Arbeitssklaven sind immer gut.
Du darfst sicher sein: Wer den Code schreibt, weiß viel besser als du, 
welche Technologien und Architektur am Besten ist.

von Sharping (Gast)


Lesenswert?

MaWin schrieb:
> Deswegen sind also DotNET Applikationen immer so schreiend langsam.

... (alles klar)
Was für ein unqualifizierter Trolllversuch. Da müssen wir jetzt nicht 
weiter drauf eingehen, oder?


@Marc:
So ein Framework wird dann interessant, wenn du z.B. Docking betreiben 
willst. Ansonsten kann man ganz gut drauf verzichten, da bietet dir MS 
von Haus aus eigentlich alle Controls, die man so braucht.

von Sven (Gast)


Lesenswert?

Hallo Marc,
die Library von Nevron sieht vielversprechend aus. Kostet auch nur 600$. 
Nur musst du schauen ob sie das liefert, was du brauchst. Ich denke du 
willst mehr, als ein schönes Bild haben?

Kannst du nicht dein eigentliches Problem kurz beschreiben? Es ist mir 
in den letzten Postings zu oft die Aussage 'alles kein Problem...' 
aufgetaucht. Ich denke vom Arbeitsaufwand steckt da schon eine Menge 
Arbeit drin, gerade für einen Anfänger.

MfG Sven

von Marc (Gast)


Lesenswert?

@MaWin

Bitte lass deine Polemik in meinem Thread sein, bisher fand ich es sehr 
angenehm und konstruktiv hier.

.NET ist nicht langsam.

Programmierer sind keine "Arbeitssklaven". Es ist einfach ein Job.

Ich hoffe doch sehr, dass ein erfahrener Programmierer den wir mit 
diesem Projekt betrauen werden sich viel besser mit Softwaretechnologien 
und Architektur auskennt als ich.
Und du darfst sicher sein, dass ich dieses Know-How auch nutzen werde.
Nichtsdestotrotz werde ich die Entscheidungen treffen.

von Helmut (Gast)


Lesenswert?

Nevron taugt nicht für Schaltplan.
Es gibt auch noch GoDiagram und yFiles.
Alles das selbe. Gut für Diagramme und Signal Flows, wird sich aber in 
einem Schaltplanprogramm immer fremd anfühlen, während dir die meisten 
Features nichts nutzen werden.
Wenn du ein richtiges Schaltplanfeeling a la Orcad haben willst, dann 
musst du es schon selbst machen.
Ist aber auch nicht wirklich schwierig.

Einen Einstieg kannst du dir evtl. hier abgucken:
http://www.codeproject.com/Articles/24681/WPF-Diagram-Designer-Part-4
http://www.kolls.net/gatesim/

Viel Spaß.

von Marc (Gast)


Lesenswert?

Danke, Helmut. Nach genau solchen Code-Beispielen habe ich gesucht!
Mittlerweile glaube ich, dass wird deutlich einfacher als erwartet.

@Sven:
> Kannst du nicht dein eigentliches Problem kurz beschreiben?
Was musst du denn noch wissen?
Ich denke im Eröffnungspost steht schon alles.
Natürlich will ich auch per Doppelklick auf ein Symbol noch 
Einstellungen vornehmen können, etc.
Am Ende läuft alles darauf hinaus die mit dem Schaltplan eingegebenen 
Relationen an das Backend zur Weiterverarbeitung zu übergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.