Jump to content

Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo,

ich versuche mich nun in die EV einzuarbeiten.
Die erste Aufgabe ist alle Elemente in einer Gruppe umzubenennen ( Element->Eigenschaft->Name ).
Dazu habe ich eine Gruppe erstellt ( Name = GWL )
In der Gruppe sind eine Weiche, Sperrsignale, Gleiskontakte, ein Textfeld ( welches vor her per Hand geändert wird ) und ein Taster.
Alle Elemente in der Gruppe haben verschiedene aussagekräftige Namen.
Diesen Namen sollen nach dem betätigen des Tasters der Text aus dem Textfeld vorangestellt werden.

(siehe Bild Gruppe.JPG )

Ein Beispiel wie es funktionieren soll:
In der Gruppe gibt es eine Weiche, die heißt "WL".
Auf dem Textfeld steht "Bhf_Adorf_".
Nach dem Druck auf den Taster soll der Name der Weiche in "Bhf_Adorf_WL" umbenannt werden.

Nun habe ich in der EV folgendes gemacht.
Bei druck auf den Taster wird einer Modulvariable namens "NEW_NAME" der Wert aus dem Textfeld gegeben.
Das funktioniert schon mal ( siehe Bild schalter_wurde_betätigt.JPG)

Jetzt kommts...ich müsste ja erst mal alle Elemente einer Liste hinzufügen oder ?
Dazu habe ich in der EV - Neu ( also + ) dann Wiederholungen -> Für alle Elemente in einer Liste ( siehe EV_Widerholung.jpg )

Ich weiß aber nicht so genau was ich das auf der rechten Seite eingeben muss?

Eine Frage noch zu der EV: Wird die irgendwo gespeicher, oder kann man die Exportieren/Importieren damit man die nicht jedesmal neu machen muss ?

Matthias

EV.JPG

EV_Widerholung.jpg

Gruppe.JPG

schalter_wurde_betätigt.JPG

test.mbp

Bearbeitet von mroschk
Anlage hinzugefügt
Geschrieben
vor 8 Minuten schrieb mroschk:

Eine Frage noch zu der EV: Wird die irgendwo gespeicher,

Selbstverständlich wird die EV zusammen mit der Anlage gespeichert! In vielen Anlagen der verschiedenen Nutzer hier steckt in der umfangreichen EV die Arbeit von vielen Stunden, wenn nicht Tagen. Meinst du, die Nutzer wären noch hier, wenn sie jeden Tag beim Laden ihrer Anlage die EV neu schreiben müssten?

Gruß Timba

Geschrieben

Hallo,

ahm, da hab ich mich falsch ausgedrückt.

Ich meinte das ich die EV für das umbenennen so erstellen will das die in jeder ( auch neu erstellten ) Anlage verwendet werden kann.

Matthias

Geschrieben (bearbeitet)

Hallo @mroschk

im Video Objekte mit Parametern ausstatten kannst du dir anschauen, wie du Elemente als Liste in eine Wiederholung bekommst.
Im Video Gruppe in Wiederholung ein- und ausblenden findest du ein weiteres Beispiel.

Ich hoffe, es ist okay wenn ich deine Frage mit Videos beantworte. Ich kann manches im laufenden Bild besser erklären.

Viele Grüße
Götz

Nachtrag: In Brummis Historischer Anlage 07 findest du unter "Pultausleuchtung" ein Untermenü "Hilfsfunktion zur Benennung der Kacheln".
Das macht etwas ähnliches wie das, was du vorhast.
Die Anlage hat die Content-ID: 840C1343-D390-4991-8075-B03F08EB6C95

Bearbeitet von Goetz
Ergänzungen
Geschrieben

Habs hinbekommen. Vielleicht gehts noch besser aber so gehts erst mal ziemlich automatisch.

Also einfach in einer neuen Anlage eine Action wenn irgegend ein <schalter betätigt wird.
Den rest macht das Script:

 

if controller == layout:getEntityByName("SW_Rename") then

  local t = layout:getEntitiesByKeyword("WL")
  for i, Elemente in ipairs(t) do
    Elemente.name = layout:getEntityByName("TXT_RENAME").text .. Elemente.name
    Elemente.variables["WL"] = nil
  end

  layout:getEntityByName("TXT_RENAME").visible = false
  layout:getEntityByName("TXT_RENAME").name = "TXT_RENAME_OFF"

  layout:getEntityByName("SW_Rename").visible = false
  layout:getEntityByName("SW_Rename").name = "SW_Rename_OFF"
end

Matthias

av_script.JPG

nach_script.JPG

vor_script.JPG

Geschrieben

Hallo,

 

ich muss noch mal nachfragen.

Also ich möchte ja nun nur die Elemente IN DER GRUPPE Namens "G_RENAME" mit dem Schlagwort "Rename" ändern.
Dazu hab ich im Script folgendes versucht:

local t = layout:getEntitiesByName("G_RENAME"):getEntitiesByKeyword("Rename")

Die Gruppe gibt es und die Elemente in der Gruppe haben auch das Schlagwort "Rename".

Leider bekomme ich folgenden Scriptfehler:


[16:35:59]         Skriptfehler (2): attempt to call a nil value (method 'getEntitiesByKeyword')

Was mach ich denn da falsch ?

Matthias

Geschrieben

Hallo Matthias,

wenn Du z.B. alle Objekte mit dem Schlagwort "Test" in "Schiene" mit aufsteigender Nummer umbenennen willst, dann geht das (Danke, Götz) so:

local entities = layout:getEntitiesByKeyword("Test")
for k, v in pairs(entities) do
  v.name = "Schiene "..k
end

 

Geschrieben

Hallo Matthias,

vor 1 Stunde schrieb mroschk:

Was mach ich denn da falsch ?

Du verstehst (unter anderem) den Doppelpunkt im Befehl nicht. Den kannst du nicht in einer Zuweisung zweimal verwenden.
Du kannst nur eine Liste anhand eines Kriteriums erstellen.

Beim Abarbeiten musst du dann mit einer Fallunterscheidung prüfen, ob auch das zweite Kriterium erfüllt ist.

Zur Bedeutung des Doppelpunkts in Lua gibt es von mir auch ein Video ...

Viele Grüße
Götz

Geschrieben

Ja, der zweite Doppelpunkt war nur ein Versuch, da ich zwar in C# programmiere, aber nicht in LUA.

Nun aber immer noch die Frage...wie komme ich denn nun an alle Elemente in einier Gruppe ?
Ich hab den Eindruck das geht nicht ?

Matthias

Geschrieben
vor 3 Minuten schrieb mroschk:

Ich hab den Eindruck das geht nicht ?

Stimmt - die Gruppenzugehörigkeit spielt in der EV keine Rolle.
Da wirst du alle Elemente aus dieser Gruppe auswählen müssen. 

Wähl die Gruppe aus, drück F3 und du findest die Gruppe direkt in der Auswahlliste.
Dort kannst du alle Elemente der Gruppe auswählen. Die musst du dann in eine Liste übernehmen.

Geschrieben
vor 35 Minuten schrieb mroschk:

Nun aber immer noch die Frage...wie komme ich denn nun an alle Elemente in einier Gruppe ?
Ich hab den Eindruck das geht nicht ?

Das Studio bietet ja inzwischen verschiedene Wege an, um zum Ziel zu kommen. Es kommt immer darauf an, was man erreichen möchte. Wenn es dir um die EV geht und du mehrere verschiedene Elemente zugleich ansprechen möchtest (wenn ich das richtig verstanden habe), dann ist die Gruppe weniger gut geeignet, sondern an der Stelle wäre die Verwendung von Schlagwörtern sinnvoller. Damit kannst du sowohl in der grafischen EV als auch über Lua ("getEntitiesByKeyword") alle auf diese Weise zusammengefassten Elemente ansprechen. Die Gruppe eignet sich eher für die räumliche Gestaltung, weniger für die Programmierung.

Gruß Timba

Geschrieben
vor 33 Minuten schrieb Little:

das funktioniert wohl nicht?

Nein, das funktioniert nicht, Frank.
Es gibt keine Methode (sprich: Funktion) mit diesem Namen.

Das sagt die Fehlermeldung, welche du bei diesem Versuch bekommst: 

Zitat

Unknown method or property name getEntitiesByGroup

 

 

Geschrieben

Hallo,

danke euch für all die Hilfe.

Also zum einen wollte ich mich mal mit der EV befassen, zum anderen habe ich mir ( siehe oben ) eine Weiche zusammen gebastelt mit 2 Sperrsignalen, 3 Gleiskontakten und einem Weichensignal und einer Weiche natürlich.
Das ganze habe ich dann zu einer Gruppe gemacht und dann unter Meine 3D Modelle gespeichert.
Ziel des ganzen ist eben das man das für die weitere Verwendung später ... viel später mal in Rocrail nicht immer wieder per Hand machen muss.
So haben die Sperrsignale die namen WL_SH0 und WL_SH1 ( WL = Weiche links, SH0 = Sperrsig für gerade, SH1 für Sperrsig abzweigend usw.)
Ebenso habe ich in der Gruppe ein Textfeld und einen Taster mit gespeichert.
Wenn mann nun das Textfeld änder, also den Text was auch immer man da haben möchte, dann werden alle Elemente in der Liste umbenannt.
WL_SH0 wird zu (Textfeld.text) + WL_SH0 usw.

Ich denke der Tip mit dem Schlagwort war gut.
Man muss nur bedenken, das man dann nach dem setzen des Modells IMMER den Taster drücken muss.

Der benennt dann alles um und dann MÜSSEN die Schlagwörter gelöscht werden, sonst gehts beim nächsten Modell schief wenn man den Taster drückt und irgendwo sind noch Elemente mit dem gleichen Schlagwort übrig :-)

Aber gleube das bekomme ich hin.


Matthias

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...