-
Gesamte Inhalte
3392 -
Benutzer seit
-
Letzter Besuch
Alle erstellten Inhalte von EASY
-
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
EASY antwortete auf EASYs Thema in Erweiterungen (Plugins)
Hallo, Die Codierung ist (bei mir) leider egal... Dim C_Client As Net.Sockets.TcpClient 'Kommando-Client Dim C_Stream As NetworkStream 'Kommando-Stream Dim C_Write As StreamWriter 'Kommando schreiben Dim C_Read, As StreamReader 'Kommando Ergebnis lesen Public Function Connect(Optional IP As String = "127.0.0.1", Optional Port1 As Integer = 31385) As Boolean C_Client = New Net.Sockets.TcpClient Try C_Client.Connect(IP, Port1) ' C_Client verbindet sich über IP / Port1 C_Stream = C_Client.GetStream ' Stream1 wird auf C_Client verwiesen C_Write = New StreamWriter(C_Stream, Encoding.UTF8) ' Stream1 zum Senden wird deklariert C_Read = New StreamReader(C_Stream, Encoding.UTF8) ' Stream1 zum Empfangen wird deklariert Console.WriteLine("Codierung= " & C_Read.CurrentEncoding.ToString) Catch ex As Exception CE_Error = ex 'Systemfehlermeldung zwischenspeichern Return False End Try Return True End Function Console.WriteLine("Codierung= " & C_Read.CurrentEncoding.ToString) liefert Codierung= System.Text.UTF8Encoding (was so sein soll) Wenn ich nun das Kommando "editor.getSelectedEntities" sende (Objektname "Quäsßter") und mir durch... Console.WriteLine("Codierung= " & C_Read.CurrentEncoding.ToString) Console.WriteLine("Result=" & C_Read.ReadLine) Console.WriteLine("Codierung= " & C_Read.CurrentEncoding.ToString) Console.WriteLine("Quäsßter") ... das Ergebnis anzeigen lasse, habe ich dieses Resultat... Console.WriteLine("Codierung= " & C_Read.CurrentEncoding.ToString) liefert Codierung= System.Text.UTF8Encoding... ...liefert das richtige Ergebnis... nur der Antwortstring ist immer noch falsch und an der Console kann es auch nicht liegen da mit Console.WriteLine("Quäsßter") richtig geschrieben wird... ... bin etwas ratlos Gruß EASY -
Darstellung von Umlauten und Sonderzeichen JSON Schnittstelle
EASY hat Thema erstellt in Erweiterungen (Plugins)
Hallo @Neo, das einzige große Problem, das ich mit der Schnittstelle momentan habe ist, daß Umlaute und Sonderzeichen als \uxxxx dargestellt werden. Ich habe die Verbindung zum MBS im Visual Studio (VB), ZeroBrane Studio (lua) und mit PuTTY aufgebaut und komme immer zum gleichen Ergebnis. Da ich mir nicht anders zu helfen wußte, habe ich mir z.B. im Visual Studio einen "Übersetzer" gebastelt... If Result.Contains("\u") Then Dim s As String = Result Dim b As String Dim c As New List(Of String) c = Split(s, "\u").ToList For i = 0 To c.Count - 1 b = c(i) If i > 0 Then Dim h As String = b.Substring(0, 4) c(i) = c(i).Replace(h, Char.ConvertFromUtf32(Convert.ToInt32(h, 16))) End If Next Result = String.Join("", c) End If ... was prinzipiell natürlich nur eine Notlösung ist. Woran kann das liegen? (ich habe in keinem anderen Programm ein Problem mit Umlauten und Sonderzeichen...) [Windows 11 pro] Gruß EASY -
Hallo, ... done! (erledigt!) Gruß EASY
-
Hallo @Eggu, Bis zur Version V9 war die Referenzgeschwindigkeit für die Anzeige 100% 330 km/h. Somit konnte nur die Anzeige des Reglers begrenzt werden. In V9 entspricht 100% der eingestellten Höchstgeschwindigkeit das verbundenen Fahrzeugs. Damit ist es zwar möglich, daß 100% Anzeige auch 100% Regler entspricht. Somit muß also nicht die Anzeige des Reglers begrenzt werden, sondern nur die "richtige" Skala vorhanden sein. Hierfür muß allerdings die Animationsdefinition des Modells geändert werden. Der Nachteil ist, daß es prinzipiell 330 verschiedene Höchstgeschwindigkeiten gibt, die im Fahrzeug eingestellt werden können, was zu 330 Varianten des Modells führen würde (um es einmal etwas übertrieben darzustellen...) Um die Vielfalt zu begrenzen, müßte man sich also auf "Standard"-Höchstgeschwindigkeiten einigen, was (wie die Erfahrung zeigt) nicht ganz einfach ist... da bestimmt noch jemand eine Lok findet, die mit max. 77km/h durch die Gegend fährt und möchte auch dies ganz genau angezeigt haben... Gruß EASY
-
Hallo, danke für den Vorschlag... es ist möglich beides umzusetzen. Die neue Schnittstelle ist für solche Aktionen nicht mehr ausgelegt. Es gibt nur die in der wiki beschriebenen Kommandos. für Objekte. Weitere "Kommandos" gehen dann nur über "layout.invokeScript" und da ist der "Befehlssatz" auf die Möglichkeiten, die lua im MBS bietet, beschränkt. Da ich kein Programmierer bin, verwende ich Visual Basic im Visual Studio 2022. VB kannte ich schon etwas und ich wollte keine neue Programmiersprache lernen. Gruß EASY
-
Hallo, Um mich mit der neuen Schnittstelle etwas vertraut zu machen, habe ich das Plugin "Objektreihen setzen" auf die JSON-Schnittstelle umgeschrieben und noch etwas erweitert. Die Beschreibung in der "Hilfe": ... wer mag, kann die Testversion gerne einmal testen. Als Entwurf hochgeladen 34C25CBF-1DA1-4F6E-9D22-36ECAB15CDE5 (bei "Plugins" unter "Suche" eingeben) Kommentare und Rückmeldungen... wie immer gerne. Gruß EASY
-
Hallo @Neo, mal so als Überlegung: um nicht der Lästigkeit zu unterliegen eventuell eine sehr lange Kommandozeile erzeugen zu müssen, wäre es möglich, daß man einer bestehenden Gruppe Elemente hinzufügen kann. So könnte man auch (später) einer Gruppe Elemente hinzufügen, ohne daß man sie zuvor auflösen muß. Die gleiche Überlegung wäre auch beim Selektieren von Objekten (bei der alten Schnittstelle gab es dafür noch ein Parameter [Hinzufügen / nicht hinzufügen]...) P.S. kannst Du auch gerne in Feature Wünsche verschieben... Gruß EASY
-
Hallo @Neo, Bei meinen Versuchen mit der Überarbeitung vom Plugin "Objektreihen Setzen" bin ich auf folgendes Problem gestoßen... Um eine Gruppe aus meinen Kopien zu erzeugen wird... {"jsonrpc": "2.0", "method": "editor.groupEntities", "params": [{"_class": "entity", "name": "20' Container (xxx)"}, {"_class": "entity", "name": "20' Container (xxx)"}, ... "id": 1} verwendet. Ich habe also x mal {"_class": "entity", "name": "20' Container (xxx)"} im Kommandostring. Ab einer bestimmten Anzahl steigt das System aus und gibt eine Fehlermeldung zurück. Details: Informationen über das Aufrufen von JIT-Debuggen anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung. ************** Ausnahmetext ************** System.IO.IOException: In die Übertragungsverbindung können keine Daten geschrieben werden: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen. ---> System.Net.Sockets.SocketException: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen bei System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) bei System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) --- Ende der internen Ausnahmestapelüberwachung --- Dies führt mich zu der Frage, ob es so etwas wie eine maximale Zeilenlänge für die Kommandozeile gibt? Oder kann es dafür noch andere Gründe geben? Gruß EASY
-
Hallo, {"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "a=layout:getEntityByName('20\' Container') return a.transformation.position", "id": 1} ...führt leider nicht zum gewünschten Ergebnis... {"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "a=layout:getEntityByName('20\\' Container') return a.transformation.position", "id": 1} ... dann kommt die Position zurück Gruß EASY
-
Hallo @Neo, wenn ich über die Schnittstelle {"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "a=layout:getEntityByName('Quader') return a.transformation.position", "id": 1} schicke, bekomme ich die Position dem "Quader" zurück. Wenn nun aber mein Objekt nicht Quader sondern 20' Container (1542D00E-B6E2-4B85-B23E-16CC8D183174) ist, müße ich doch {"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "a=layout:getEntityByName('20' Container') return a.transformation.position", "id": 1} schicken (?) Dies ergibt aber eine Fehlermeldung (error:code:-32602 message:Invalid params) (für die ich sogar ein gewisses Verständnis entwickeln kann [ein ' zu viel]) Wie bekomme ich nun die Position von 20' Container? Gruß EASY
-
Eindeutigkeit von Objekten über JSON Schnittstelle
EASY antwortete auf EASYs Thema in Erweiterungen (Plugins)
Hallo, mit {"jsonrpc": "2.0", "method": "editor.getEntityContentID", "params": {"_class": "entity", "name": "Quader"}, "id": 1}, kannst du die Content-ID eines Objektes ermitteln. ...oder indem du auf ein Katalogmodell einen Doppelklick machst und diese markierst und kopierst... Die Contend-ID entspricht Guid der alten Schnittstelle mit {"jsonrpc": "2.0", "method": "editor.createEntity", "params": "F38B36A9-E8A0-4943-B3D8-00D78185EDA9", "id": 1} wird ein neues Objekt aus dem Katalog erzeugt und an die Position 0,0,0 gesetzt. Hierfür gilt dies... (Der Name ist ein Rückgabewert der Anweisung und kann z.B. für das Positionieren in lua genutzt werden) Wenn im Projekt schon ein Objekt mit dem Namen 'Quader' ist, kannst du mit {"jsonrpc": "2.0", "method": "editor.cloneEntity", "params": {"_class": "entity", "name": "Quader"}, "id": 1} eine Kopie erstellen. Das neue Objekt wird an die gleiche Position wie das Ursprungsobjekt gesetzt. Da ein Objekt mit dem Namen 'Quader' (logischerweise) schon existiert, wird der Kopie der Name 'Quader (2)' zugewiesen und einer weiteren Kopie 'Quader (3)'... (Der Name ist ein Rückgabewert der Anweisung und kann z.B. für das Positionieren in lua genutzt werden)) Anmerkung: Die nächste freie Zahl von "(x)" wird ermittelt. Wenn die Objekte 'Quader (2)', 'Quader (3)', 'Quader (5)' schon existieren wird der nächsten Kopie (oder createEntity ) 'Quader (4)' und dann 'Quader (6)' zugewiesen... [das ist zumindest mein Erfahungswert...] Vielleicht mag @Neo, dies noch bestätigen oder berichtigen... nein (eine eventuell vorhandene Selektion bleibt erhalten) Gruß EASY -
-
Hallo, ... um einen Güterwagon von anderen Wagons zu unterscheiden geht das nur über eine Variable oder ein Schlagwort... deshalb mußt Du schon jedem Güterwagon das Schlagwort z.B. "Güterwagon" verpassen. aus diesen beiden Beschreibungen ist nicht ganz eindeutig, wann Du die Variable setzen möchtest... befindet sich dabei der Wagon innerhalb eines Zugverbandes? ... wenn ja, dann geht es über die von @prinz vorgeschlagene Widerholung... wenn ein einzelner Wagon über einen Gleiskontakt rollt, dann ist der Auslöser der Wagon. Gruß EASY
-
Eindeutigkeit von Objekten über JSON Schnittstelle
EASY antwortete auf EASYs Thema in Erweiterungen (Plugins)
Hallo, das ist auch der Lösungsansatz, den ich verfolge. Um das markierte Objekt eindeutig zu identifizieren, das markierte Objekt auslesen, überprüfen ob der Objektname mehrfach existiert, wenn ja, die Objekte umbenennen und dann das markierte Objekt wieder einlesen (die Selektion bleibt ja erhalten)... so habe ich dann eine eindeutige Zuordnung zum selektierten Objekt und dessen Name. Es ist eben nur etwas umständlich... direkt einen eigenen neuen Namen vergeben geht nur über die alte Schnittstelle. Die neue Schnittstelle vergibt den Katalognamen (z.B. Quader) und wenn dieser schon existiert, mit einen Zusatz (z.B. Quader (1), Quader (2)...), somit ist dieses Objekt (prinzipiell vom Namen her) eindeutig. (Das selbe Prinzip ist auch für das Klonen von Objekten gültig.) Der Hintergrund meiner Aktionen ist, daß ich (als Übung im Umgang mit der neuen Schnittstelle) meinen Plugin "Objektreihen setzen" auf die neue Schnittstelle umschreiben möchte. Hierbei ist es eben wichtig, daß vom "richtigen" 'Quader' ausgegangen wird, da die Objektreihe sonst an der falschen Stelle erzeugt wird, wenn mehrere 'Quader' existieren... Gruß EASY -
Eindeutigkeit von Objekten über JSON Schnittstelle
EASY hat Thema erstellt in Erweiterungen (Plugins)
Hallo @Neo, Wenn ich z.B. 5 Quader mit dem Namen 'Quader' habe und einen davon markiere und über die Schnittstelle {"jsonrpc": "2.0", "method": "editor.getSelectedEntities", "id": 1} schicke, bekomme ich als Antwort, daß es sich um ein Objekt (_class:entity) mit dem Namen (name:) 'Quader' handelt. Ich möchte nun diesen Quader kopieren {"jsonrpc": "2.0", "method": "editor.cloneEntity", "params": {"_class": "entity", "name": "Quader"}, "id": 1}. Hier gebe an, daß ich ein Objekt mit dem Namen 'Quader' klonen möchte. Damit sinken meine Chancen, daß der "richtige" 'Quader' genommen wird (es existieren ja noch 4 andere 'Quader'). Worauf ich hinaus möchte, ist die Frage, ob ich über die Schnittstelle (immer noch) darauf angewiesen bin, daß der Name des Objektes im Projekt nur einmal vorkommt um das Objekt erfolgreich zu klonen oder gibt es noch eine Möglichkeit zu differenzieren, welchen von der 5 'Quader' ich markiert habe? Gruß EASY -
Reihenfolge bei Wiederholung für Elemente einer Liste
EASY antwortete auf prinzs Thema in Fragen zur Steuerung
Hallo, Wenn man folgende Eingabe in der EV macht... ... und in lua übersetzen läßt... sieht man den Unterschied. "Für Elemente in einer Liste" wird für die Iteration "in ipairs" übersetzt... diese Iteration ist in lua chronologisch "Für Elemente in einer Tabelle" wird für die Iteration "in pairs" übersetzt... diese Iteration ist in lua nicht zwingend chronologisch Da Du eine Liste angelegt hast... warum hast Du "Für Elemente in einer Tabelle" verwendet? Gruß EASY -
Zug zwischen zwei Gleiskontakten
EASY antwortete auf guenter.strickmanns Thema in Fragen zur Steuerung
Hallo, ...ich habe die Info über den Abstand daher, daß ich meine EVs in lua schreibe, da wird es direkt angezeigt... ... Du brauchst den Maßstab nicht unzuschalten, du mußt in H0 nur unter ca. 1700mm bleiben. Gruß EASY -
Zug zwischen zwei Gleiskontakten
EASY antwortete auf guenter.strickmanns Thema in Fragen zur Steuerung
Hallo, in solchen Fällen ist es hilfreich, wenn Du noch angibst, wo in der EV diese Abfrage gemacht wird... Wenn sich die Abfrage auf die neuen Funktion in V9 bezieht ob sich ein Fahrzeug zwischen 2 Gleiskontakten befindet, dann funktioniert es deshalb nicht weil diese Funktion beschränkt ist auf einen maximalen Kontaktabstand von 150m. Wenn ich dem Maßstab auf 1:1 umschalte ergibt sich ein Abstand von ca. 175m (Durch Fluchtstäbe markierte Gleiskontakte)... (150m sind in H0 1724mm) Gruß EASY -
Integrate text in model
EASY antwortete auf raf.sonnevilles Thema in Modellbau mit externen Programmen
Hi, You have to define an area within the texture in a .txt file, which should represent the text field. (see Wiki ->model making -> basic concepts -> labels) Note: The zero point of the definition (0,0) is top left EASY -
Hallo, das ist ja das Interessante an dem Fehler... wenn ich die .mpb 10 mal aufrufe tritt der Fehler 8 mal innerhalb der ersten beiden Zyklen auf... es ist allerdings auch schon mal 30 Minuten gut gegangen... Gruß EASY
-
Hallo, ich habe mich noch etwas mit der Problematik beschäftigt und die Anlage etwas umgebaut. Am Ende der Strecke sind noch 2 Gleiskontakte hinzugekommen (grün/gelb), daß wenn der Zug über die Stopkontakte (blau) geschoben wird... ... wird ein "error()" ausgegeben und dadurch die Simulation gestoppt (nur bei sichtbarem Ereignisprotokoll!) Die Simulation kann dann wieder gestartet werden und das Projekt läuft weiter. Da ich irgendwie der Zug in Verdacht hatte (Vermutung, daß der Abstand [manchmal] nicht richtig berechnet wird, und somit das Bremsen), habe Versuche gemacht die Loks und die Wagons zu ersetzen was jedoch nicht dazu führte, daß der Fehler nicht mehr auftrat. Als ich allerdings die Tender ersetzt habe, trat der Fehler nicht mehr auf. Lokwechsel mit Fehler.mbp ... ist mit dem Original Tender BR 44 Tender Lokwechsel ohne Fehler.mbp ... ist mit ersetztem Tender BR 45 Tender (nur Modell ersetzt, keine Namensanpassung) Beide Anlagen laufen mit doppelter Geschwindigkeit (was die Fehlerwahrscheinlichkeit erhöht). Da es sich um einen Fehler handelt, der zwar auftritt, jedoch nicht reproduzierbar im Zeitpunkt, weiß ich natürlich nicht wie sich die Sachlage bei anderen Benutzern verhält... (Hinweis: ich habe die EV neu geschrieben... nur in lua) Wer also Lust (und Zeit) hat... Anlage(n) öffnen und "Start" drücken... ... soweit mein kleiner Beitrag um dem Fehler doch noch auf die Schliche zu kommen... Gruß EASY
-
Flächen leuchten ohne Emissive-Textur. Warum? -Blender 4.2.2-
EASY antwortete auf dirk.zs Thema in Modellbau mit externen Programmen
Hallo, Das ist richtig so. Persönlich lege ich mir gerne für ein Projekt einen Projektordner an mit einem Unterordner "Texturen". Hier kommen dann die Referenzbilder, die Dateien für das Programm in dem ich die Texturen erstelle und die Texturen rein (finde ich übersichtlicher so). Unter "Datei" -> "Externe Daten" -> setzte ich mir dann "Pfade relativ machen" [geht erst wenn das Projekt erstmalig gespeichert wurde!] So kann ich einen Projektordner auch mal verschieben und es bleibt alles beisammen... P.S. "irgendwo" ist weniger zu empfehlen, da dann die Pfade absolut sind und die Texturen immer am gleicher Ort bleiben müssen... Gruß EASY -
Hallo, ... nein, wird nicht angezeigt. Dafür müßte ich mir eine Kopie in die eigenen Modelle laden (Online-Version herunterladen), damit ich Zugriff auf die Einstellungen "Aktionen" habe und sie einsehen kann. Gruß EASY
-
Hallo, (... aber nur, wenn die Prüfung erfolgreich wird...) Gruß EASY
-
Flächen leuchten ohne Emissive-Textur. Warum? -Blender 4.2.2-
EASY antwortete auf dirk.zs Thema in Modellbau mit externen Programmen
Hallo, die Antwort auf Dein Problem findet sich in der wiki.... Du hast die Datei Jule-Kirke i Sne 4096x4096_Emissive.png im gleichen Verzeichnis, wie die .glb, weshalb sie für Emissive genommen wird. Benenne die Datei einfach um in Jule-Kirke i Sne 4096x4096 Emissive.png (also ohne den _ vor Emissive) und das Leuchten kann wie gewohnt in Blender eingestellt werden. Gruß EASY