Seite 1 von 1

dll für Isolatoreneinbau

Verfasst: 01.09.2017 21:34:56
von Alwin Meschede
So, ich habe jetzt ein paar Stunden gehackt, und das erste Erfolgserlebnis ist da:
Bild

Der Isolator und der Fahrdraht kommen aus meiner eigenen Fahrleitungs-DLL. So Gott will werde ich dem Ding jetzt noch beibringen, die drei anderen Isolatoren auf die Drähte zu fädeln, und dann hätte die DLL schon einen Nutzwert.

Re: Weiterentwicklung des deutschen Fahrleitungsbaukastens

Verfasst: 04.09.2017 13:17:55
von Alwin Meschede
Erste Version einer Fahrleitungs-DLL, mit der sich Abspannungen mit zusätzlichen Isolatoren für Streckentrennungen bauen lassen: https://github.com/ameschede/ZusiFahrle ... g/v1.0.0.2" target="_blank

Für einen Einsatz im scharfen Schuss taugt die DLL aus meiner Sicht noch nicht (dafür bin ich nicht tief genug ins Thema eingestiegen), aber sie zeigt zumindest dass es geht. Meinen Anteil am Quellcode habe ich in ein Github-Repository geladen, so dass im Prinzip eine kollaborative Weiterentwicklung (auch in Richtung weiterer Sonderfahrdrähte) möglich wäre. Wenn jemand coden möchte, muss er sich nur noch die DirectX- und Zusi-Header aus dem Verzeichnis _Docu\demos\catenary\source dazuholen, die ich aus urheberrechtlichen Gründen mal lieber nicht nach Github hochladen wollte.
Carsten Hölscher hat geschrieben:Der Quellcode ist ja extra dabei, um Leute zu inspirieren, dort tätig zu werden.
Ich könnte noch Inspiration gebrauchen, wie man einen Isolator so auf ein Tragseil mit Durchhang auffädelt, dass er richtig sitzt ;) Im Moment rechnet meine DLL noch auf einem straff gespannten Tragseil, weil ich diese Problemstellung erstmal nicht gelöst bekam.

Re: Weiterentwicklung des deutschen Fahrleitungsbaukastens

Verfasst: 04.09.2017 14:29:28
von Carsten Hölscher
Die Position kann nur die dll kennen, die auch den Draht verlegt. Das Thema dll-Programmierung sollte vielleicht aus diesem Thread ausgelagert werden?

Carsten

Weiterentwicklung des deutschen Fahrleitungsbaukastens

Verfasst: 04.09.2017 17:22:10
von Alwin Meschede
Carsten Hölscher hat geschrieben:Das Thema dll-Programmierung sollte vielleicht aus diesem Thread ausgelagert werden?
Ja, wäre wohl günstig.
Carsten Hölscher hat geschrieben:Die Position kann nur die dll kennen, die auch den Draht verlegt.
Das weiß ich. Da Du ja in deinen DLLs eine offenbar funktionierende Lösung hast, würde mich interessieren wie die aussieht. Ich nehme mal an, Du merkst Dir beim ersten und letzten Hänger im Kettenwerk die Position des oberen Punktes, um dann mit einem Vektor drauf zielen zu können, aus dem sich dann der Tragseil-Isolator-Winkel ergibt?

Für die Ausrichtung der am Fahrdraht sitzenden Isolatoren ist bei mir derzeit auch nur ein recht stupider Ansatz implementiert, bei dem ich einfach den Mittelwert der Winkel aus den beiden beteiligten Fahrleitungs-Ankerpunkten nehme. Das funktioniert recht gut, solange die beiden Ankerpunkte nicht 180 ° verdreht zueinander stehen. Dann kommt aus der Mittelwertbetrachtung nämlich ein um 90 ° verdrehter Isolator heraus. Es muss also offenbar einen intelligenteren Ansatz geben.

Re: dll für Isloatoreneinbau

Verfasst: 05.09.2017 21:29:18
von Carsten Hölscher
Ohne Vektorrechnung kommt man nicht zum Ziel, DirectX bietet dabei eine Bibliothek mit nützlichen Grundfunktionen.

Diese kleine procedure hilft ggf.:

Code: Alles auswählen

  procedure Lage(Pkt1, Pkt2:TD3DVector; l:single; var xyz, xyzphi:TD3DVector);
  // berechnt die Position eines Isolators auf dem Draht
  var v, vNorm, h:TD3DVector;
      Winkelz, Winkelx:single;
  begin
    D3DXVec3Subtract(v, Pkt2, Pkt1);
    D3DXVec3Normalize(vNorm, v);
    D3DXVec3Scale(h, vNorm, l);
    D3DXVec3Add(xyz, h, Pkt1);

    Winkelz:=ArcTan2(Pkt2.y-Pkt1.y, Pkt2.x-Pkt1.x);                             
    Winkelx:=arctan2(Pkt2.z-Pkt1.z, sqrt(sqr(Pkt2.x-Pkt1.x)+sqr(Pkt2.y-Pkt1.y)));
    xyzphi.x:=-Winkelx;
    xyzphi.y:=0; 
    xyzphi.z:=Winkelz+Pi/2;
  end;
Carsten

Re: dll für Isloatoreneinbau

Verfasst: 11.09.2017 13:36:35
von Alwin Meschede
Version 1.0.0.5 meiner Fahrleitungs-DLL: https://github.com/ameschede/ZusiFahrle ... g/v1.0.0.5" target="_blank
  • Die Baurichtung (von A nach B oder von B nach A) ist jetzt egal
  • Tragseile werden mit Durchhang berechnet
  • Die Isolatoren sollten jetzt immer korrekt sitzen
  • Experimentell: Drahtstärke konfigurierbar, Bau von Fahrdrähten ohne Y-Beiseil
Für Streckentrennungen mit Isolatoren taugt die DLL aus meiner Sicht jetzt für den Echt-Einsatz.
Die beiden Experimental-Features sind hingegen wirklich als Experiment zu betrachten. Meine DLL kann zwar jetzt auch Normalfahrdrähte ohne Y-Seile erstellen, bietet dabei aber keinen Vorteil gegenüber der bei Zusi mitgelieferten Re160-DLL. Es ging mir hauptsächlich darum, erstmal die notwendigen Strukturen zu schaffen um mehr als eine Sorte Fahrdrähte zu unterstützen.

Re: dll für Isloatoreneinbau

Verfasst: 23.01.2018 12:46:47
von Helferlein
Hallo Alwin,

ich habe eine kurze Frage zu der DLL, wobei ich hoffe, dass sie nicht in Richtung DAU geht :O .
Und zwar ist es mir unter Anwendung Deiner DLL lediglich möglich, die Isolatoren zwischen dem Ausfädelungsausleger und dem Spannwerk einzubauen
(also Ausfädelungsausleger --- Isolatoren ----------------Isolatoren --- Spannwerk).
Nach einigen Wahrnehmungen von draußen dürften die Isolatoren jedoch vor dem Ausfädelungsausleger liegen
(also Standardausleger ------- Isolatoren --- Ausfädelungsausleger ...).
Bei Anklicken beider Ausleger schlägt mir das System auch für den Standardausleger eine Befestigung ohne Y-Beiseil und für den Ausfädelungsausleger eine Ausfädelung mit Isolatoren vor, das ganze wird aber nicht erstellt.
Habe ich in meinem jugendlichen Leichtsinn etwas übersehen?

Beste Grüße Jürgen

PS: Grad noch mal nachgeschaut, meine Wahrnehmungen von draußen werden durch das Buch "Fahrleitungen elektrischer Bahnen" (Skizze 3.35, S. 184) bestätigt.

Re: dll für Isloatoreneinbau

Verfasst: 23.01.2018 13:11:58
von Alwin Meschede
Sieht so aus als hätte ich das nach der Version 1.0.0.5 gängig gemacht, dann aber nur als Quellcode veröffentlicht. Es kann jetzt Version 1.0.0.6 runtergeladen werden, die sollte das dann können.

Re: dll für Isloatoreneinbau

Verfasst: 23.01.2018 13:18:39
von Helferlein
Es ist immer wieder schön, hier so schnell und kompetent Hilfe zu finden :tup
Klappt wunderbar. Danke.

Gruß Jürgen.

Re: dll für Isloatoreneinbau

Verfasst: 20.11.2018 13:25:39
von Alwin Meschede
Es steht Version 1.0.0.7 der DLL zur Verfügung, in der das Konfigurationsmenü ohne Absturz zugänglich ist, auch wenn man den neuen 3D-Editor 3.1.7.2 im hohen Adressbereich betreibt.

Re: dll für Isloatoreneinbau

Verfasst: 20.11.2018 15:05:07
von Jens Haupert
Hallo Alwin,

hat es genügt, die DLL mit dem LargeAdressAware-Flag neu zu kompilieren?

Grüße
Jens

Edit: gebe mir selbst die Antwort: ein Blick in den Quellcode mit der einzigen Änderung

Code: Alles auswählen

+ {$SetPEFlags $20}
sagt ja. :-)

Re: dll für Isloatoreneinbau

Verfasst: 20.11.2018 15:08:58
von F. Schn.
Jens Haupert hat geschrieben:mit der einzigen Änderung
Nein, im commit zuvor hat Alwin den MM ausgetauscht: https://github.com/ameschede/ZusiFahrle ... s/v1.0.0.7" target="_blank

Re: dll für Isloatoreneinbau

Verfasst: 20.11.2018 16:59:08
von Alwin Meschede
Meine Entwicklungsumgebung für die DLL ist (wie bei Zusi) Delphi 7. Hat für mich den Vorteil, dass ich ohne großen Aufstand zu den Eigenarten von Zusis DLL-Schnittstelle kompatibel bin. Wer ein moderneres Delphi einsetzt, muss sich zum Beispiel erstmal vertieft Gedanken zu diversen String-Formaten machen, die seit Delphi 7 geändert wurden.

Jedenfalls baut mir Delphi 7 den BorlandMM in die DLL ein, wenn ich nichts anderes regele. Der taugt nicht für die hohen Adressen.

Re: dll für Isolatoreneinbau

Verfasst: 20.11.2018 21:56:13
von Max Senft
Huhu,

das führt jetzt etwas ins OT und ich könnte es mit Sicherheit auch einfach googlen, aber es lebe die zwischenmenschliche Interaktion. ;-)

Generell müssten doch auch für Delphi beim Aufruf von externen DLLs die Typen-Standards gelten? Gerade bei Strings sollte doch irgendeine C-Kompatibilität vorhanden sein, oder? Sonst würde ja "gar kein" Aufruf von WinAPI-Funktionen klappen?!

Grüße
Max

Re: dll für Isolatoreneinbau

Verfasst: 20.11.2018 21:59:38
von Alwin Meschede
Die Datentypen pChar und pAnsiChar waren in alten Delphis noch ein und das gleiche. Seit Delphi 2009 ist das nicht mehr so. Wenn man einen pChar aus einer modern kompilierten DLL an Zusi übergibt, dann knallt es erstmal.

Re: dll für Isolatoreneinbau

Verfasst: 20.11.2018 22:16:00
von Max Senft
Alwin Meschede hat geschrieben:Die Datentypen pChar und pAnsiChar waren in alten Delphis noch ein und das gleiche. Seit Delphi 2009 ist das nicht mehr so. Wenn man einen pChar aus einer modern kompilierten DLL an Zusi übergibt, dann knallt es erstmal.
Ouh ja, ok, diese bösen Multi-Byte-Zeichen. ;-) Dann ist aber vermutlich nur die API Doku von Zusi ungenau. Wenn man einen PAnsiChar übergibt/erwartet (egal welche Delphi-Version) sollte das ja immer passen... Zumindest solange Zusi nicht mit einer neueren Delphi-Version compiliert wird. :rolleyes:

Gruß
Max

Re: dll für Isolatoreneinbau

Verfasst: 16.01.2019 19:15:52
von Hardy_Kuebler
Hallo Alwin,

blöde Frage - wie aktiviere ich deine dll? Einfach nur in ..\Zusi3\_Docu\demos\catenary reinkopieren reicht offensichtlich nicht.

Gruß
Hardy

Re: dll für Isolatoreneinbau

Verfasst: 16.01.2019 19:26:47
von Carsten Hölscher
_instsetup\lib\...

ist gefragt

Carsten

Re: dll für Isolatoreneinbau

Verfasst: 16.01.2019 20:42:17
von Hardy_Kuebler
Hallo Carsten, danke!

Re: dll für Isolatoreneinbau

Verfasst: 16.12.2021 14:09:21
von Alwin Meschede
Der Vollständigkeit halber sei vermerkt: Die in diesem Thread behandelte "Re160ErweiterteFunktionen.dll" könnt ihr wegtun. Die neue Re160.dll kann alles was das alte Ding konnte, aber macht es noch besser.