Animation Lokomotivsteuerung

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Animation Lokomotivsteuerung

    Hallo Experten,

    nachdem ich hier schon viel gelesen habe bin ich nun auch registriert und angemeldet.

    Eine Rubrik "Vorstellung neuer Mitglieder" habe ich nicht finden können.

    Mein Hobby ist der Bau von Dampflokomotiven im Maßstab 1:22,5. Die Steuerung einer Dampfmaschine / Lok ist ein Thema welches mich besonders reizt. Im CAD komme ich recht schnell zu brauchbaren Ergebnissen bei der Planung einer funktionsfähigen Mechanik. Viele aus meinem Freundeskreis haben diese Möglichkeiten aber nicht. Es gibt ein englischsprachiges Programm zum freien Download im Netz welches von Ch.Dockstader vor vielen Jahren in Pascal geschrieben wurde. Mich reizt es sehr etwas Ähnliches mit VB zu machen.

    Mit den Grundlagen in VB befasse ich mich gerade und habe auch "schon" eine Benutzeroberfläche mit diversen Steuerelementen zum Laufen gebracht. Jetzt kommt aber eine ziemlich hohe Hürde für mich: Die Steuerung soll, bestehend aus einem Kurbeltrieb, Hebeln und einer Kulisse (Schwinge), nach Eingabe der relevanten Eckdaten, als Animation sichtbar werden. Wenn ich es richtig verstanden habe gibt es dazu mehrere Möglichkeiten. Ist es, z.B., effektiv einen Punkt auf einer Kreisbahn als Kurve zu "plotten" und die Positionen aus einem Array zu holen ?

    Hier gibt es eine kleine Animation dazu: themt.de/org-0015b-49.html

    Ich freue mich auf eine gute Zeit hier im Forum. Vielleicht kann ich ja auch einmal etwas beitragen.

    mfG

    Hannes

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Steamjoe“ ()

    Und Du möchtest diese Animation, mit deinen eigenen Einstellungen rendern?

    Das ist allerdings alles andere als einfach. Wäre ich an deiner Stelle würde ich da sogar zu einem
    DirectX wrapper à la SharpDX zurück greifen, weil ich selbst mit GDI+ auf dem Kriegsfuß stehe was rotationen etc. betrifft.
    Aber ist ja auch erstmal egal.

    Was Du machen musst ist, dir ein System auszudenken wie Du die Daten => Punkte der Mechanischen Verbindungen und die darraus
    resultierenden Positionen der Teilbilder auf den Bildschirm überträgst.

    Für die Darstellung/das Rendern gibt es mehrere Möglichkeiten:

    - Einmal mit GDI+ (Sollte es eigentlich schafften).
    - Dann wäre da noch WPF (Wenn ich mich recht erinnere sollte das damit sehr gut gehen).
    - DirectX (mit extra Bibliothek und das ganze zu vereinfachen, so genannte Wrapper)
    - OpenGL (mit extra Bibliothek und das ganze zu vereinfachen)

    Was eventuell auch noch hilfreich sein kann, wäre wenn Du dir eine fertige Physik-Engine (Bibliothek) zu eigen machst.
    Mit der richtigen fertig Engine, würde der schwirigere erste Teil fast wegfallen, bzw. stark vereinfacht werden.


    Was auch möglich ist das ich dein Ausgangspost komplett falsch verstanden habe, und Du nur ein Liniendiagramm o. ä.
    erstellen möchtest, aber Da müsstest Du das ganze nochmal genauer formulieren, worum es denn jetzt wirklich geht.
    Bzw. wo bei dir das aktuelle Problem liegt.
    Sowas sollte in GDI+ gehen. Ansonsten mal mit DirectX oder direkt Direct2D probieren. Wobei man, gerade bei so graphisch anspruchsvollen Sachen auch gut mit WPF arbeiten kann.

    WPF arbeitet nicht mehr mit Win32 Controls (abgesehen vom Window selbst) sondern rendert die Controls direkt mit DirectX.
    Das ganze sollte doch mit einer animierten Giff funktionieren. Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für Die Antworten.

    Ich möchte nochmal versuchen mein Vorhaben besser zu beschreiben: Bei den Dampfmaschinen mit Schiebersteuerung wird der Dampf über Einlasskanäle den Dampfzylindern zugeführt. Die linearen Wege der Schieber werden durch eine Mechanik erreicht die aus mehreren Komponenten besteht. Um die optimalen Schieberwege zu erhalten müssen die Maße der Steuerungsteile zueinander passen. Einige Maße sind durch Größe des Modells und Vorbildnähe vorgegeben. Mit einem "Schieberdiagram" möchte ich den Schieberweg und die Einlass - u, Auslasskanäle, zur Kontrolle, sichtbarmachen. Die Auswirkungen von Änderungen an der Konstruktion, z.B. Länge eines Hebels oder Kurbelkreises, sollen erkennbar und auswertbar werden.

    Einige der diesbezüglichen Formeln habe ich in alter Fachliteratur gefunden aber Alles läßt sich, jedenfalls von mir, nicht berechnen. Daher bin ich auf diesen "grafischen Weg" angewiesen. Die Animation sollen nur symbolisch erfolgen. Es reichen mir Punkte, Linien und Kreise aus um Parameteränderungen sichtbar zu machen. Es wäre allerdings schön wenn der Kram ruckelfrei ablaufen könnte. Ich hatte daran gedacht, z.B., Daten für ein Objekt welches sich auf einer Kreisbahn bewegen soll in einem Array zu hinterlegen und dann erst zu zeichnen. So stören die Berechnungen kaum meine Animation.

    Eure Vorschläge (DirectX usw.) sind für mich, als Einsteiger, (noch) nicht ganz verständlich und so suche ich, erst einmal, nach einer Lösung mit "Bordmitteln".

    vielen Dank

    Hannes
    du kannst mal im AVB-upload nach "ClockSample" suchen - da wird mit GDI alles mögliche gezeichnet, und die Zeiger wandern auch.
    Also nach dem Prinzip würde man mit GDI so Sachen animieren.
    oder suche dort sinusDemo - das ist eine animation, so "fließend", wies in Gdi halt möglich ist (und beobachte dabei auch die Prozessorlast ;))
    Du beschreibst hier sehr viel Dampfmaschinen- und Mechanik-spezifisches. Davon haben die meisten hier wirklich 0 Ahnung. Dagegen können wir bei konkreten Programmierfragen sehr gut helfen. In deinem letzten Post, wo du dein Vorhaben nochmal beschreibst, verstehe ich auch nicht alles ^^ Am besten wäre ein Bild von dem, was du am Ende gezeichnet haben möchtest. Oder wir beschränken uns auf Programmierfragen, da kann ich schon antworten:
    Ist es, z.B., effektiv einen Punkt auf einer Kreisbahn als Kurve zu "plotten" und die Positionen aus einem Array zu holen ?
    Ja, das ist so durchaus sinnvoll. Wenn du die Positionen alle schon in einem Array hast, wird das Zeichnen "relativ" einfach.

    edit: Zur Darstellung mit "Bordmitteln" solltest du wie schon erwähnt GDI+ nutzen. Falls du dich damit noch nicht auskennst, gibt es hier 2 super Tutorials:
    [VB 2008] [Tutorial] GDI+
    [VB 2008] [TUTORIAL] Pen & Linien in GDI+

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Steamjoe schrieb:

    so suche ich, erst einmal, nach einer Lösung mit "Bordmitteln".
    Dann sollten wir erst mal klar herausarbeiten, was Du eigentlich willst, und dann setzen wir es um.
    Und: Schreibe bitte keinen Code dazu, solange Dir und uns nicht vollständig klar ist, was gemacht werden soll.
    Es gibt hier einige Heißsporne, die Dich ggf. mit Code zuspammen, die aber ggf. das Problem nicht verstanden haben.
    Also:
    Du willst eine Periode des Ablaufes in einer Lokomotive quasi stroboskopisch abbilden und in einem netten Bildchen darstellen, wenn ich Dich richtrig verstanden habe.
    CAD-Stationen können das.
    Mit VB kann man das ganz bestimmt auch, nur wird das nicht trivial.
    Bist Du bereit?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Am besten wäre ein Bild von dem, was du am Ende gezeichnet haben möchtest

    Ich denke damit käme ich nochmals in Erklärungsnot und ich kann auch nicht verlangen, dass Ihr Euch mit dem Thema "Dampf" befasst.

    Du willst eine Periode des Ablaufes in einer Lokomotive quasi stroboskopisch abbilden und in einem netten Bildchen darstellen

    Genau das ist mein Vorhaben. Ein weiteres Ziel wäre es die Auswirkung von Änderungen an den Dimensionen der einzelnen Steuerungsteile zu erkennen und auszuwerten.

    nur wird das nicht trivial.Bist Du bereit?

    Ja, falls meine alten grauen Zellen (Bj.54) dazu ausreichen.

    edit: Zur Darstellung mit "Bordmitteln" solltest du wie schon erwähnt GDI+ nutzen. Falls du dich damit noch nicht auskennst, gibt es hier 2 super Tutorials:
    [VB 2008] [Tutorial] GDI+
    [VB 2008] [TUTORIAL] Pen & Linien in GDI+
    Das hilft mir schon etwas weiter.

    Ich werde, um mich mit GDI anzufreunden, erst einmal einen Kurbeltrieb "zum Laufen" bringen. Dann kann ich ev. auch konkretere Fragen stellen.

    Vielen Dank für Eure Unterstützung!

    Steamjoe schrieb:

    Ein weiteres Ziel wäre es die Auswirkung von Änderungen an den Dimensionen der einzelnen Steuerungsteile zu erkennen und auszuwerten.
    Das ist ein weiteres (Teil-)Projekt.
    Ich empfehle Dir, Deine Teilprojekte hier im Forum getrennt anzugehen, jedes Teil in einem separaten Thread, so kann Dir effizienter geholfen werden.
    Die Auswirkung von Dimensionsänderung ist doch wohl eher eine konstruktiv-technologische (optimierungs-) Frage, während die Ablaufanimation eher ein handwerkliches GUI-Problem ist.
    ZUr GUI-Problematik:
    Überleg Dir, den Zeitablauf nicht in Sekunden vorzugeben, sondern z.B. in Winkel-Grad, dann sind 360° ein Vollumlauf.
    Erstell Dir für jedes bewegte Teil eine separate Klasse, die Du über Properties fütterst.
    Jede Klasse hat dann eine eigene Paint-Routine mit den Parametern (g As Graphics, winkel As Double).
    Jedes Objekt soll sich dann selbst an der richtigen Position in der richtigen Phasenlage darstellen.
    Wenn Du dies richtig durchziehst, ist die Darstellung der Dimensionsänderung nur noch ein Klacks. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!