Jump to content

Empfohlene Beiträge

Geschrieben (bearbeitet)
vor 41 Minuten schrieb ademes:

Is it possible to have a double 1st condition for an event?

Yes, it is. But what you suggest is two triggering events and not two conditions.

You may also have two events triggering the same action. But the method differs, depending on the two events being either of the same type or different ones.

If they are of the same type, simply select multiple elements as triggering objects:

Mehrfachauswahl.jpg.727873412be68a9530802bf6cfd61ef5.jpg

 

However if you want two events of different types to trigger the same action, you want to set up a generic event …

676674176_Benutzerdefiniert1.jpg.bca583fe9d8cfa2abd0533d9a4e613a8.jpg

 

… and execute this in your two different events:

561902041_Benutzerdefiniert2.jpg.ac2d08483ca00d4568af50aa9ec7a33d.jpg

 

Please, let me know if you'd prefer screenshots with captions in English and I'll gladly exchange them.

 

Bearbeitet von Goetz
spelling
Geschrieben

Hi Goetz,

The first situation, I already use it.

The second situation (different triggers), I"ll try asap.  Just to know :

  1. when I define the "user defined" event under the first Event definition, the new event is physically placed after all other existent events and I cannot move it up to be placed as the first one in the list.
  2. Parameters : may I, for example, give the name of a vekicle and use it as an object?

Thank you

user_defined.gif

Geschrieben

Hi Goetz,

I have another problem : Look at the 2 Lua scripts, one in the case "train enters track" and the 2nd whem "timer expires".  The first one works good, but the second one gives an error condition "script error (10) : attempt to index a nil value (global 'vehicle')".  Is it because, as in V4, the trigger in the case of "timer expires" points only to the timer's name?

Regards

André

Geschrieben (bearbeitet)
vor 13 Stunden schrieb ademes:

the new event is physically placed after all other existent events

No, not quite.

But the timers, event variables and the event script come first.
Below that you may sort your modules (folders) and events in any order.

vor 13 Stunden schrieb ademes:

Parameters

are placeholders that you declare. Give them any name you want.

When you call the generic event, you can pass on any data (e.g. the triggering vehicle) to those placeholders. That way, your generic event has access to that object or data and may change its values.

 

The error message

vor 13 Stunden schrieb ademes:

"script error (10) : attempt to index a nil value (global 'vehicle')".

is exactly what it says: Your timer script doesn't know what vehicle you're talking about. There's "nil" vehicle stored in the variable "vehicle".

When an event is triggered by a vehicle, the triggering vehicle is automatically transferred to the variable "vehicle". But it (as all variables) is a local one, not known to other events. If this wasn't the case, you couldn't have different vehicles triggering different events at different locations.

The expiration of your timer is not triggered by a vehicle. So the variable "vehicle" doesn't exist here. You'll need to store the vehicle elsewhere and then access that storage (i.e. variable) in your timer function.

 

Having said that, a timer is not your best choice for a delayed vehicle command anyway. V5 offers a much better alternative:

Simply insert a delay command before the action.

1980085139_Ausfhrungverzgern1.jpg.cb1fad242f46733d54be701f7f17bf8c.jpg

 

The EV will take care of the rest and you don't have to bother with reacting to a timer expiring.

2096077081_Ausfhrungverzgern2.jpg.24a5fad5847d4f4995f70b82d94a716b.jpg

Bearbeitet von Goetz
spelling
Geschrieben

Hi Goetz

Thank you for your help.

  1. vor 17 Stunden schrieb Goetz:

    But the timers, event variables and the event script come firs

    Even if it occurs in the same module?  Currently, I cannot sort the events in the sample i gave to you earlier.  Have I to put the "user-defined" event in a separate module to be able to sort it?

  2. vor 17 Stunden schrieb Goetz:

    Simply insert a delay command before the action.

    That's great and exactly What I need!  I didn't realized that the (same) action restart automatically after the delay.

Regards

André

Geschrieben

hello,

Here are the problems encountered when trying "user-defined" scripts.

  1. As one can see in the attached screens, I call the "user-defined" Grill giving only one parameter "vehicle" that is the trigger to the engine defined in the event "train enters track".  the parameter has been given the "object" as type. 
    The called script execute only one instruction : print (vehicle.name) and this results in a print "Nothing" as seen on the event trace.
  2. It seems to be impossible to communicate a table to the called script.

Regards

André

Lua prob 2.GIF

Lua prob 2b.GIF

Lua prob 2c.GIF

Geschrieben
vor einer Stunde schrieb ademes:

Currently, I cannot sort the events in the sample i gave to you earlier.

My mistake - sorry

all modules come before any events. So, you may sort your modules differently and you may sort your events outside these modules in any order too. But you cannot stick an event between two modules (unless you put that event itself inside another module.)

 

sorting order.jpg

Geschrieben (bearbeitet)
vor 31 Minuten schrieb ademes:

As one can see in the attached screens, I call the "user-defined" Grill giving only one parameter "vehicle"

You're wrongly passing on a string "vehicle" instead of the object vehicle, which is what you should do.

Try

$("set grill"):invoke(vehicle) -- no quotation marks around "vehicle"

 

Bearbeitet von Goetz
example added
Geschrieben

Hi Goetz,

Thank you for your explanations, but you didn't answer to this question.

André

vor einer Stunde schrieb ademes:

It seems to be impossible to communicate a table to the called script.

 

Geschrieben (bearbeitet)
vor 7 Minuten schrieb ademes:

but you didn't answer to this question.

Oh, please …!
Gimme some rest, will you?
I'm eager to help but I'm not your lackey, you know?

Bearbeitet von Goetz
Geschrieben (bearbeitet)

Hallo @Neo

Warum gibt das MBS bei der Abfrage der Rotation eines Objekes das Quaternion 0,0,0,-1 aus und nicht 0,0,0,1 ? (Bei 0° in allen Achsen).

Hintergrund: Bei meinen Versuchen mit der Rotation ist mir gestern ein Objekt im wahrsten Sinne des Wortes "in Nirwana" verschwunden.
Bei dem Versuch der Umwandlung einer Matrix in ein Quaternion hatte ich das Ergebnis 0,0,0,1 was eigentlich dem enspricht, was ich als 0° in alle Richtungen bezeichnen würde.

... also habe ich folgenden Versuch gemacht...
... ein Objekt irgendwie verdreht...
Quaternion01.thumb.jpg.4ec192e4739af936fa42b5434a3250e4.jpg

... und dem Schalter dies mit auf den Weg gegeben...
 

$("Lineal 1:1 30 m").transformation.rotation={0,0,0,1}

q=$("Lineal 1:1 30 m").transformation.rotation
print(q.x,q.y,q.z,q.w)

...wenn ich den Schalter betätige sieht es eigentlich ganz gut aus...
Quaternion02.thumb.jpg.d072087b5f407ff4149e0722793b3521.jpg
Quaternion03.jpg.099714cf7dd06e39bb90c4d90db1df33.jpg

... das ausgelesene Quaternion sieht so aus...(???)
Quaternion04.jpg.b951599e1da0c2d07e0cfa6b81bcaef4.jpg

... und wenn ich den Schalter dann noch einmal betätige dann dies...
Quaternion05.jpg.4f132b6d477d02085eea895ea2383c05.jpg
... das ausgelesene Quaternion ist ???????

... und das Objekt hat einen Quantenzustand angenommen...
Quaternion06.jpg.be0950ee7c61ed57ef7785e439a8fe57.jpg

... und ist aus diesem auch nicht wieder in die Realität zurückholbar...

Quaternion01.mbp

... wenn ich also das Objekt in der Rotation zurücksetzen möchte muß ich...

$("Lineal 1:1 30 m").transformation.rotation={0,0,0,-1}

... zuweisen... warum???

Gruß
EASY

Bearbeitet von EASY
Geschrieben (bearbeitet)
Nach den Quaternion-Regeln gilt: (es heißt übrigens wohl tatsächlich die Quaternion! (w!))

aus x,y,z,w wird:

der Winkel um den gedreht wird:
alpha = 2*acos(w)

mit der Rotationsachse:
b=x/sin(alpha/2)
c=y/sin(alpha/2)
d=z/sin(alpha/2)

Einheitsquat x=0,y=0,z=0,w=-1
alpha = 2*acos(w) = 2*acos(-1) = PI (in Radian)! => entspricht 360°, aber mit w=1 wäre das Resultat 0
es gilt für die Rotationsachse:
b=x/sin(alpha/2)  -> b=x
c=y/sin(alpha/2)  -> c=y
d=z/sin(alpha/2)  -> d=z
-> b,c,d = 0
dreht also um den Vektor (b=0,c=0,d=0) alpha.
Wenn hier alpha mit 0 eingesetzt werden würde, wird sin(0)=0. Steht im Nenner -> PENG!

Eigentlich wird um 360° gedreht, sonst knallt's im Nenner.  sin(PI/2) = 1  sin(0) = 0
Bei den Drift-Versuchen habe ich resultierende Winkel mehrfach in den Range -180 ... +180 rein zwingen müssen, sonst hätte es auch geknallt.

Bearbeitet von Andy
Geschrieben

Hallo,

Am 15.8.2019 um 10:34 schrieb Roter Brummer:

Vielleicht gibt es ja noch die Möglichkeit einer Gruppe von Modellen die EV mit auf den Weg zu geben.

dieser Gedanke kam mir während der Entwicklung der EV auch bereits. Der Gedanke hat dazu geführt, dass die neue EV zu 100% modularisiert wurde, d.h. alle Variablen, Timer, Skripte und Ereignisse sind immer Teil eines Moduls (was nun auch deutlich mehr als nur eine Ereignisgruppe ist) und nicht mehr viel fehlt, um auch Gruppen von 3D-Modellen eine EV mitzugeben. Allerdings habe ich diesen Gedanken noch nicht bis zu Ende durchkonzipiert, und ich bin mir noch nicht sicher, ob Modellgruppen mit einer eigenen Steuerung in den Modell- oder in den Anlagenkatalog gehören, oder vielleicht sogar auch etwas eigenständiges sind. Das Thema habe ich aber noch auf dem Schirm, und bis dahin würde ich empfehlen, solche Module noch als Anlagen zu veröffentlichen. Durch neue/angepasste Kategorien, Sets und eventuell Schlagwörtern kann man solche Modulanlagen gut organisieren (gibt ja bereits einige andere Anlagen die als Module (ohne EV) gedacht sind).

Am 15.8.2019 um 12:53 schrieb Andy:

Die Kulisse kriegt Schatten ab.

Um ehrlich zu sein finde ich das richtig so. Solche Kulissen gibt es auch auf echten Modellbahnen, dort fallen auch Schatten auf die Wände.

vor 15 Stunden schrieb EASY:

Warum gibt das MBS bei der Abfrage der Rotation eines Objekes das Quaternion 0,0,0,-1 aus und nicht 0,0,0,1 ?

Das hat etwas mit den internen Abläufen zu tun. Intern nutzt das Studio ein linkshändisches Koordinatensystem (DirectX Standard), nach Außen hin (Gizmo, Transformationsseite, Lua...) nutzt es ein rechtshändisches System. Durch die Konvertierung dreht sich das Vorzeichen um. Das ist aber nicht wichtig, weil eine Rotation um 0° oder um 360° zum gleichen Ergebnis führt.

vor 15 Stunden schrieb EASY:

$("Lineal 1:1 30 m").transformation.rotation={0,0,0,1}

Du verwendest hier eine falsche Tabelle. Korrekt müsste es lauten:

$("Lineal 1:1 30 m").transformation.rotation={x=0, y=0, z=0, w=1}

Durch die falsche Tabelle wird intern die Quaternion auf 0 gesetzt, was ein ungültiger Zustand ist. Dass dein Lineal noch korrekt positioniert wird ist nur ein glücklicher Zufall, die Rotation ist dann aber schon kaputt (deshalb die anschließenden NaNs).

Viele Grüße,

Neo

Geschrieben
vor 11 Minuten schrieb Neo:

weil eine Rotation um 0° oder um 360° zum gleichen Ergebnis führt

Man muß halt nur bei Winkelspielereien aufpassen. Die Hälfte von 0 bleibt 0, die Hälfte von 360 ist 180.

vor 12 Minuten schrieb Neo:

Um ehrlich zu sein finde ich das richtig so. Solche Kulissen gibt es auch auf echten Modellbahnen, dort fallen auch Schatten auf die Wände.

Das nenne ich ein Argument :)

Geschrieben

Hallo,

vor 12 Minuten schrieb Andy:

Man muß halt nur bei Winkelspielereien aufpassen. Die Hälfte von 0 bleibt 0, die Hälfte von 360 ist 180.

von solchen Spielereien würde ich Abstand nehmen, für gewöhnlich braucht es keine Winkelumrechnungen, um mit Rotationen zu arbeiten.

vor 15 Stunden schrieb EASY:

Warum gibt das MBS bei der Abfrage der Rotation eines Objekes das Quaternion 0,0,0,-1 aus und nicht 0,0,0,1 ?

Ich werde die Ausgabe beim nächsten Update in die Normalform bringen, d.h. bei negativen w wird die Quaternion negiert, sodass bei keiner Rotation (0, 0, 0, 1) in Lua zurückgegeben wird (q = -q).

Viele Grüße,

Neo

Geschrieben

Hallo Neo,
erstmal Danke für das Update. Bin schonmal sehr froh, dass nun das Filter im Selektionsfenster wieder an seinem alten Platz ist. Trotzdem hier noch ein Tipp: Wenn man ohne Filterungen einen Namen eingibt und es sind sehr viele Objekte vorhanden, braucht er Ewigkeiten, bis er nach dem ersten Buchstaben wieder zurückkommt. Ein kleines Delay nach dem Eintippen eines Buchstabens würde hier wahrschienlich helfen, sodaß man über die kritischen Anfangsbuchstaben (bei mir z.B. G für Gleis) drüber weg kommt. Suche Dir ruhig mal 'ne richtig fette Anlage und versuch's mal. Auch für die Lua-Editor-Änderungen ein (y) und die Modellbauer freuen sich bestimmt über den neuen Import.

Gruß
  Andy

Geschrieben

Ich habe noch immer ein Verständnisproblem mit der Rotation und bitte um Vervollständigung von Easys Beispielprogramm Quaterunion01. Bei Bedienung des Tasters sollte sich das Objekt in 30 Grad Schritten um die Z-Achse drehen.

Gruß

kokos

 

Geschrieben

Hallo @Neo,

ist mir aufgefallen: Im Ereignisfenster (rechts unten) hat der Button für die Objektvariablen einen anderen Zusammenhang. Zu diesem Button fehlt der Tooltip. Muss der einen neuen Text bekommen?

Gruß
Wolfgang

Geschrieben

Hallo kokos,

vor 7 Stunden schrieb kokos:

Bei Bedienung des Tasters sollte sich das Objekt in 30 Grad Schritten um die Z-Achse drehen.

... wenn es sich um eine "einfache Drehung" um die Z-Achse handelt (keine geneigte Z-Achse) geht es mit einem Schalter und z.B. einer Pyramide
mit dem Ereignis "Schalter wird betätigt"
und als Aktion in Lua die Zeile...

$("Pyramide").transformation:rotateZ(math.rad(30))

... ganz ohne die Quaternion.

Gruß
EASY

Geschrieben

Hallo Neo,
wenn es nicht viel Aufwand ist, könntest Du den Lua-Editor-Cursor im Überschreibmodus auf Under-Underline schalten?
Und könnte man etwas Markiertes in das 'Finden'-Fenster übernehmen? (das könnte Geschmackssache sein)

Gruß
  Andy

Geschrieben

Hallo @Neo

Wäre es möglich dass man bei der Objektsuche die eingestellten Filter speichert, solang man die Anlage geöffnet hat. Speziell geht es mir da um die Sichtbarkeit der Objekte, aber auch alle anderen Filteroption wären super wenn sie beibehalten werden. Ich arbeite gerade mal wieder an meiner Riesenanlage und immer wenn ich ein Objekt als Variable hinterlegen will braucht das Eingabefenster erst mal eine gefühlte Ewigkeit bis es sich öffnet (ja im gesamten sind es verdammt viel Objekte) und es bringt mir immer alle Objekte. Die Anlage habe ich mit mehreren Ebenen versehen und alle die ich gerade nicht brauche blende ich aus. Wenn ich nun einmalig als Filter hinterlege, dass ich nur sichtbare Objekte angezeigt haben möchte würde ich die gewünschten Objekte schneller finden. Subjektiv betrachtet arbeitet die Suchfunktion auch schneller wenn die unsichtbaren Objekte von vornherein weggefiltert werden.

Gruß Frank

P.S.: unter V4 war dies glaube ich so, die Filter wurden beibehalten, bis man die Anlage geschlossen hat

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...