Jump to content
Zum Start hinzufügen

Weitere Informationen

3D-Modellbahn Studio

Eine Vollbild-App auf Ihrem Startbildschirm mit Push-Benachrichtigungen und mehr.

So installieren Sie diese App auf iOS und iPadOS
  1. Tippen Sie auf das Teilen-Symbol in Safari
  2. Scrollen Sie durch das Menü und tippen Sie auf Zum Startbildschirm hinzufügen.
  3. Tippen Sie oben rechts auf Hinzufügen.
So installieren Sie diese App auf Android
  1. Tippen Sie auf das 3-Punkte-Menü (⋮) in der oberen rechten Ecke des Browsers.
  2. Tippen Sie auf Zum Startbildschirm hinzufügen oder App installieren.
  3. Bestätigen Sie durch Tippen auf Installieren.

gmd

Mitglieder
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von gmd

  1. Diesen gedanken werde ich verwenden.. Immer wenn ich ein objekt keyword setze, werde ich das keyword "marked" setzen. Dann bekomme ich alle objekte mit keywords und vermeide alle objekte abzurufen. Das erscheint mir am besten, mit den gegebenen moeglichkeiten. Gruss Gmd
  2. Danke an euch beide. Ich dachte mir so etwas. Ich habe eine funktion mit der ich alle aktuell verwendeten modul keywords loesche bevor ich ein neues setze. Ich vergebe keywords grundsaetzlich durch code in einer initphase und dann auch waehrend des betriebs. Die meisten keywords habe ich in einer tabelle, aber beim erstellen einse scriptes kommt es vor dass man keywords aendert und dann bleiben die alten "haengen". Die muss ich dann halt alle manuell pflegen. Insbesondere fuer objektvariablen. Da werde ich dann eure vorschlaege nutzen. Tabellen habe ich derzeit fuer "statische" Modulvariablen. Ich poste mein beispiel hier fuer andere als beispiel. Dann hatte der thread wenigstens einen sinn mit euren beitraegen. Zunaechst ein Beispiel einer definitionstabelle. Der erste eintrag is das keyword, danach folgen listen von kontakten. RouteIdentifikation = { { "RolaZufahrt", { ["RolaEntryRoute"] = 1 } }, { "RolaExit", { ["RolaExitRoute"] = 2 } }, { "RolaEinfahrt", { ["RolaEinfahrRouten"] = 3 } }, { "RolaAusfahrt", { ["RolaAusfahrRouten"] = 4 } }, { "RolaLoading", { ["RolaLadeRouten"] = 5 } }, { "RolaUnLoading", { ["RolaAlternativAusfahrt"] = 6 } }, { "RolaAltExit", { ["RolaAlternativAusfahrt"] = 7 } }, { "RolaWagenLaden", { ["RolaWagengruppe1Lkw"] = 8, ["RolaWagengruppe2Lkw"] = 9 } }, { "RolaWagenEntLaden", { ["RolaWagengruppe3Lkw"] = 10 } } } Hier die funktion, die bei der initialisierung den kontakten ein statisches keyword zuweist. Wird ueberall fuer alle module verwendet. function InitialiseAllKeywords(Modul, RouteIdentifikation, clearExisting) for i, entry in ipairs(RouteIdentifikation) do local keywordText = entry[1] -- Extract keyword (e.g., "RolaZufahrt") local routeGroups = entry[2] -- Extract table of route lists for groupName, _ in pairs(routeGroups) do local KontaktListe = _G[groupName] -- Dynamically fetch global table by name if isListOfLists(KontaktListe) then for _, sublist in ipairs(KontaktListe) do ProcessKontaktListe(sublist, keywordText, clearExisting) end else ProcessKontaktListe(KontaktListe, keywordText, clearExisting) end end end end Hier die funktion die einzelne listen verarbeitet function ProcessKontaktListe(KontaktListe, keywordText, clearExisting) local lastIndex = #KontaktListe for i, entryName in ipairs(KontaktListe) do local entryObject = layout:getEntityByName(entryName) if entryObject ~= nil then if clearExisting then ClearKeywords(entryObject, RouteIdentifikation) -- Clear previous keywords before assigning end entryObject.variables[keywordText] = keyword -- Extra keyword for the first and last entry if i == 1 then entryObject.variables[keywordText.."_Start"] = keyword elseif i == lastIndex then entryObject.variables[keywordText .. "_End"] = keyword end end end end und hier die funktion, die alle keywords loescht bevor eines gesetzt wird, manuell ergaenzt, damit keine leichen entstehen. Wird aufgerufen wenn clearExisting == true ist. function ClearKeywords(entryObject, RouteIdentifikation) -- Loop through all possible keywords in RouteIdentifikation and clear them for _, eventData in pairs(RouteIdentifikation) do local oldKeyword = eventData[1] -- Extract stored keyword entryObject.variables[oldKeyword] = nil -- Clear the keyword if it exists entryObject.variables[oldKeyword.."_Start"] = nil entryObject.variables[oldKeyword.."_End"] = nil end entryObject.variables["Rola"] = nil entryObject.variables["Start"] = nil end Ich dachte halt dass ich das einfacher haben kann, insbesondere fuer objektvariablen, die ich noch nicht erschlagen habe. Nochmals vielen dank fuer eure muehe. Manchmal kann einem Lua schon auf den nerv gehen, wenn man eine "richtige" Entwicklungsumgebung gewohnt ist. Gruss Gmd
  3. Hallo, Wie kann ich auf einfache weise ALLE objekt schlagworte/variablen loeschen $("").variables[""] = nil $("").variables[""] = keyword oder aehnlich ?? gruss Gmd
  4. Hallo, ich denke ich kann das selbst beantworten, aber ich frage trotzdem, da ich ja so oft dinge uebersehe. Ich moechte per Lua einen neuen ereigniseintrag innerhalb eines moduls anlegen, also z.B. Gleiskontakt mit schlagwort xy wird ausgeloest. Ich kann ja variablen beliebig anlegen. Ich moechte ereignisse verteilen auf mehrere entry points, moechte die aber nicht manuell einrichten muessen. Fuer generische scripts ist das kontraproduktiv. Ich nehme mal an das geht nicht, aber wie gesagt ich frage trotzdem mal. Das waere was fuer den Wunschzettel. Gruss Gmd
  5. 100% .. kein argument dagegen.. Ich habe nichts gegen einen snapshot der gesamten anlage. In meinem beispiel hatte ich schienenverkehr angesprochen und da gilt fuer mich das gleiche. In einer "Einfahrtsituation mit Auftrag", wird ALLES auf einen definierten zustand gesetzt, IMMER. Ich versuche auch soweit wie moeglich variablen zu vermeiden, die nicht automatisch zurueckgesetzt werden koennen, aber das geht nicht immer. Depots koennen hier eine besondere rolle spielen, das ist wohl ein gutes gegenbeispiel. OK, versteht mich nicht falsch, ich diskutiere hier nicht um recht zu behalten, weit entfernt davon, aber es ist manchmal einfach gut ideen austauschen. Viele demos haben das problem dass man sie nicht unterbrechen kann, sie muessen zu ende laufen etc. Man kann nur die anlage neu starten und wehen man hat sie gespeichert. Es ware halt schon zu einer demoanlage immer einen "Ursprungszustand" zu haben, der immer erhalten bleibt bis er neu gesetzt wird. Und da gebe ich Neo absolut recht, das macht nur sinn mit allen zustaenden. Aber auch das waere fuer meine zwecke phantastisch und wuerde viel zeit sparen. Just an idea. Gruss Gmd
  6. Irgendetwas verstehe ich hier nicht, oder sehe ich nicht. Auch weichen und signale spielen nicht wirklich eine rolle wenn scripte robust programmiert sind. Lediglich einige variablen koennten da relevant werden, wenn ein test abgebrochen wird oder wegen fehlern nicht zu ende laeuft. Beispiel Variable: Wenn ich zustaende in variablen in fahrzeugen speichere, dann so dass am ende eines zyklus (block etc. ) immer ein zustand verbleibt, der bei einem erneuten ausloesen eines kontaktes zurueckgesetzt wird, da er nur an einem "zielkontakt" existieren kann. Beispiel Signale und Weichen: Am beginn eines scenarios (folge von fahrstrassen etc.) ist es in meinen scripten egal wie weichen und signale, oder auch animationen gesetzt sind. I sorge immer dafuer, dass alle benoetigten elemente aktiv geschaltet werden. Bei mir betritt ein fahrzeug ein gebiet mit einem "auftrag" und einem "ziel". Der auftrag haengt an einem keyword und nicht an einem bestimmten fahrzeug. Der auftrag legt fest ob zum beispiel ein bahnhofshalt erfolgt oder nicht. Wenn ein solches fahrzeug einen "eingangskontakt" ausloest, und die freigabe bekommt, (wo auch immer), dann werden alle element bis zum ausgang "reserviert" einschliesslich zustand, und aktiviert je nach bedingungen am jeweiligen abschnitt. Am ende des letzten abschnitts wird der auftrag geleoscht. Ich kann ein fahrzeug mit auftrag and den eingangspunkt zuruecksetzen ohne dass signale oder weichen gestetzt werden muessen, das geschieht automatisch. Natuerlich werde ich beim testen auftrage nicht immer loeschen vor dem zuruecksetzen. Fuer mich ist das kein "Spezialfall", aber es ist wohl die art wie ich programmiere, dass das so ist. Wenn ich auch noch weichen und signale zuruecksetzen muesste um ein scenario immer wieder zu testen, wuerde ich verrueckt werden, bzw. dann mache ich was gruendlich falsch und meine steuerung ist nicht sehr robust. Gruss Gmd
  7. Goetz, es kommt wirklich darauf an was zu testen ist. Ich halte versionen der gleichen Anlage fuer das testen von unterschiedlichen teilen und fuehre dann die scripte zusammen. Das problem ist wenn man einen teilaspekt tested, z.b. das einfahren von 12 lkw mit anhaenger ueber verschiedene spuren mit einer reihe von konfliktloesungen. Der test is relativ kurz, aber das ruecksetzen von 12 lkw mit anhaenger ist es nicht. Das laden der anlage dauert noch viel laenger also ist das speichern eines anfangszustandes hier auch nicht hilfreich. Ich habe mir in meinem programm eine loesung gebastelt, allerdings dachte ich dass auch andere in aehnlichen situation ein solches feature moegen wuerden. Ich habe mich ja auch vorsichtig ausgedrueckt und das nicht wirklich als featurewunsch definiert, bin aber einfach mal neugierig was andere dazu zu sagen haben oder ob nur ich dieses problem habe oder sehe. Gruss Gmd
  8. Da muss ich dir widersprechen.. ich komme ohne aenderungen von variablen etc aus, weil meine scripte so eingerichtet sind. Es ist richtig dass zustaende fuer die meisten eine groessere rolle spielen, aber das ist oft mit einem einfachen loeschen aller temporarer variablen geregelt. Es kommt halt darauf an, was und wie man programmiert. Ich bin mir bewusst, dass nicht jeder ein solches feature zu schaetzen weiss, aber lassen wir doch mal andere hier ein pro oder contra ausdruecken. Vielleicht sehen wir beide vielleicht noch nicht alle aspekte. Gruss Gmd
  9. Hallo an alle, es ist nicht wirklich ein feature wunsch (yet), und ich behaupte auch nicht dass das vollstaendig durchdacht ist, ich schreibe einfach mal eine beobachtung auf und was ich in der situation getan habe und.. was vielleicht wuenschenswert waere. Beim testen fuer meine scripte RoLa und Spedition kam es oefter vor, dass ich einige fahrzeuge immer wieder in eine ausgangsposition setzen muss, um einen test durchzufuehren. Es sind nicht nur ein oder zwei sondern in einigen faellen 10+ und das nicht nur einmal. Ich kann nun ein script schreiben mit dem ich alle beteiligten fahrzeuge oder beteiligten modelle auf eine anfangsposition zuruecksetze, ich habe mich dazu entschieden meinem programm beizubringen fuer eine selektion (alles eindeutige namen) einen stand (positionen) abzuspeichern und immer wieder abzurufen. Das spart enorm zeit. Hat aber immer noch das problem, dass alle objekt eindeutige namen haben muessen. Ich dachte nun, wenn man im MBS eine ebene nimmt und alle diese beweglichen test modelle zuordnet, und dann einen snapshot machen kann, und am ende des tests den ursprungszustand wieder abrufen kann, dann waere das ein riesen fortschritt fuer aufwendige tests. Es kann dann auch zum ruecksetzen einer demo verwendet werden usw. Ich rede hier nicht von versionen von anlagen, oder aehnlichem, man kann das ja beliebig kompliziert machen. Eine einfache moeglichkeit auf einen status zurueckzusetzen, der ueber das einfache CTRL Z hinausgeht. Neo kann da besser entscheiden was einfach machbar ist, aber fuer wiederholtes testen aller moeglichen art von bewegung ist das ungeheuer hilfreich. Gruss Gmd
  10. Danke, das war die info auf die ich auch gewartet habe. Gruss Gmd
  11. Hallo, heute ein update zur RoLa .. Hier das filmchen zum stand der dinge Habe die ersten generischen scripte und etliche hilfsfunktionen gebastelt und die einfahrt zur verladung laeuft jetzt .. Das script ist weitestgehend allgemein und ich werde es fuer die weiteren einfahr- und ausfahrstrecken verwenden und wohl auch fuer andere zwecke als die Rola. Ziel ist es, alles allein mit tabellendefinitionen zu machen und minimalen speziellen scripten. Falls jemand interesse hat bin ich gerne bereit den letzten stand als entwurf zu laden. Nur eine PM schicken. Gruss Gmd
  12. yep, und manchmal wohl gar nicht .. lol ich bin einfach zu ungeduldig .. Ich sollte einfach mehr vertrauen in die ueberlegungen haben, die Neo in die EV reingesteckt hat und einfach erst mal annehmen dass ich nur genau genug hinschauen muss .. Gruss Gmd
  13. Easy Danke, Ich zweifele an meinem verstand, warum habe ich das nicht gefunden ? Gruss Gmd Edit: Es gibt auch erreicht sein ziel .. damn .. ich habe immer nur unter Aktionen geschaut .. ich muss wirklich die grafische EV besser untersuchen. Das kommt davon wenn man nur in code denkt.
  14. Ok, danke trotzdem .. Ich glaube ich habe da was fuer die wunschliste Gruss Gmd
  15. Folgefrage, vielleicht weist du das ja auch .. Depot eingang wird protokolliert .. bekomme ich einen event/ aktion ? oder muss ich einen kontakt setzen ? Portal wird nicht protokolliert.. gruss Gmd
  16. Hmmmm.. du hast voellig recht.. Da hatte ich wohl mal wieder einen blonden (grauen) moment .. Warum war ich der meinung dass ich ein gleis oder spur als ziel angeben kann ? Gruss Gmd
  17. Ok, danke dir, aber das ist nur die halbe wahrheit .. Es ist eine bedingung die ich abfragen kann, aber ich muss staendig abfragen, und wenn ich keinen event habe zu dem zeitpunkt dann faehrt das fahrzeug weiter, es sei denn ich verwende einen kontakt und lass es halten, ist aber nicht sinn der sache. Ich moechte einen event, der ausgeloest wird wenn die bedingung: "Fahrzeug erreicht ziel" wahr wird, genau wie Kontakt wird ausgeloest. Gruss Gmd
  18. Hallo, Das ereignis "Ziel Erreicht" wird protokolliert aber ich finde keinen event oder bedingung in der EV. Um das zu nutzen muss ich mir alle ziele und gleise oder kontakte merken und dann einen eigenen event erzeugen ?? Habe ich da mal wieder was uebersehen ? Gruss Gmd
  19. Neo, mit der neuen schnittstelle und dem enormen datenvolumen die sie produziert, waere es nuetzlich wenn man konfigurieren koennte welche events gelogged werden. Ich verwende in den meisten faellen die events fuer verlassen und betreten gleis nicht, und es waere gut diese zu unterdruecken. Das sollte nicht statisch sein, sondern ueber die schnittstelle (oder Lua) steuerbar, wie ein geraeusch oder in der art. Du hast Easys fragen zur schnittstelle noch nicht beantwortet .. waere gut wenn du die zeit findest und da noch ein paar pointers zu geben. Gruss Gmd
  20. gmd antwortete auf gmds Thema in Fragen zur Steuerung
    Just for info, wem das hilft function debugMessage(msg) if Modul and Modul.variables then Modul.variables["DebugOutput"] = msg -- wird in der eventliste angezeigt end end Modul ist das ereignismodul an dem ich gerade arbeite, kann aber auch jedes andere sein hier ein beispiel: local Modul = layout:getEventsByName("RoLa" )[1] -- das Ereignismodul unter dem alles gespeichert wird Edit: noch ein anwendungsbeispiel: Der nachfolgende aufruf debugMessage(segmentTable .. " - adding segment: " .. KontaktListe[i] .. " -> " .. KontaktListe[i + 1]) erzeugt [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_4 - adding segment: RolaKEinWarte3 -> RoLaKEinAuswahl" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_4 - adding segment: RolaKZuf1 -> RolaKEinWarte4" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_4 - adding segment: RolaKEinWarte4 -> RoLaKEinAuswahl" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_4 - adding segment: RolaKZuf1 -> RolaKEinWarte5" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_4 - adding segment: RolaKEinWarte5 -> RoLaKEinAuswahl" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "RouteTables", {5 Elemente} [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_5 - adding segment: RoLaKEinAuswahl -> RolaKEinSp2" [9:14:47 PM] Modul-Variable wird gesetzt -> RoLa, "DebugOutput", "RouteTable_5 - adding segment: RoLaKEinAuswahl -> RolaKEinSp1" usw. Gruss Gmd
  21. gmd antwortete auf gmds Thema in Fragen zur Steuerung
    Hallo Goetz, kann das bestatetigen .. print not working in main script .. Das kommt jetzt auf die wunschliste gruss Gmd
  22. gmd antwortete auf gmds Thema in Fragen zur Steuerung
    Ok, danke fuer den tip .. print hat funktioniert in event response .. Bin dabei printless zu arbeiten .. im hauptscript. Gruss Gmd
  23. gmd hat Thema erstellt in Fragen zur Steuerung
    [6:43:29 PM] Ereignisprotokollierung gestartet [6:43:29 PM] Die Ereignisverarbeitung ist aufgrund von Skriptfehlern deaktiviert: Attempt to call a nil value (global 'print') das einzige Lua kommando print ("Start Script") eine komplett neue Anlage .. hat angefangen mit der anlage an der ich bause mit viel script .. print wird nicht erkannt Gruss Gmd Werde mal neu starten .. Auch nach komplettem neustart .. gleiches problem .. neue anlage, ein print kommando bringt den fehler Korrupte installation ? Werde mit 8.5 probieren Weiterer Edit: 8.5 gleiches problem .. jetz bin ich etwas flappergusted. Weiterer Edit: 8.0 bringt keine fehlermeldung aber der string erscheint nicht in der EV protokollierung
  24. Ich muss dir da widersprechen. Ich hatte ja auch meine pittfalls mit dem AI .. aber generell hat es mir viel viel tiparbeit gespart, wenn man gelernt hat mit dem tool umzugehen. Komplexe logic kann er nicht entwickeln, das scheitert gnadenlos. Also denken muss man fuer sich selbst, aber wenn man ein problem in kleine teile zelegt und in einem pseudocode beschreibt kommt man mit ein paar iterationen und fine tuning schon ans ziel. Ich habe inzwischen gut gelernt mit dem AI zu arbeiten und es spart in einigen bereichen enorm zeit. Natuerlich kommt immer mal wieder mist raus, aber man kann doch auch erstaunlich effizient arbeiten. Hier ein weiteres beispiel: Ich habe das werkstatthandbuch fuer mein motorrad. Es hat alle noetigen informationen um komplexen service zu machen, allerdings sind die einzelnen abschnitte, die man braucht uber viele viele seiten verteilt und verweisen wieder auf andere. Sie sind nicht task orientiert, das kennt man ja von solchen manuals. Ich habe das pdf dem AI gefuettert und habe eine arbeitsanweisung fuer den wechsel des cam chain tensioners anfertigen lassen. Du bekommst ein komplettes dokument mit allen beschreibungen in reihenfolge mit allen bildern.. den orginaltext umsortiert gemaess dem auftrag. Pattern matching oder anwenden von "gesicherten" informationen ist erstaunlich gut. Ich fuettere dem AI die code beipiele von C# libraries und mache einen request in pseudocode und bekomme brauchbare ergebnisse, die mit wenigen korrekturen funktionieren. Spart stunden von tipparbeit und ausprobieren. Es ist wie mit allen tools, man muss mit dem hammer umgehen koennen um einen nagel in die wand zu schlagen, bzw. auch den richtigen hammer verwenden. Der AI ist ein komplexes tool, man braucht etwas geduld zu lernen damit umzugehen. Gruss Gmd
  25. Little, Es gibt keine funktion layout.setSignalState Du kannst nur ein script snippet schicken mit {"jsonrpc": "2.0", "method": "layout.invokeScript", "params": "print('Hallo Welt') return 42", "id": 1} Ich rate dir Putty zu benutzen und die messages manuell zu testen. Gruss Gmd

Push-Benachrichtigungen konfigurieren

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.