Jump to content

Verschieben von Objekten per Lua


ralf4

Empfohlene Beiträge

Hallo zusammen,

ich habe ein Frage. Ich würde gerne ein Objekt per Skript an einer anderen Stelle platzieren.

Mein Objekt steht der Einfachheit halber auf den Koordinaten 

Position: x=0, y=0, z=0

Rotation: x=0, y=0, z=0

Mein Objekt

local v = $("Strassenmeisterei")

Mit folgendem Aufruf würde ich (offensichtlich naiverweise :) ) erwarten, dass mein Objekt auf der X-Achse um 200mm verschoben wird:
v.transformation:translateX(200)

Es landet aber leider auf der x-Koordinate "2298,85"

Kann mir hier vielleicht behilfich sein? Gibt es da noch irgendeinen Faktor, der mit reinspielt? Muss ich den Umrechnungswert noch irgendwie in mm formatieren?

 

Schon mal vielen Dank und Grüße

Ralf

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Neo,

vielen Dank für die schnelle Antwort.

Wenn ich es richtig verstehe wäre dann mein Aufruf auf Meter umgerechnet (also X/1000) folgender:

v.transformation:translateX(0,2)

Das Objekt landet dann auf der x-Koordinate "22,99". Also mit zwei Stellen hinter dem Komma (wieso gibt es in diesem Fall überhaupt Nach-Komma-Stellen?)

Irgendwo mache ich noch etwas falsch/habe einen Gedankenfehler ...

Viele Grüße Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Goetz,

das sieht schon besser aus :). Jetzt bräuchte ich nur noch einen Hinweis, wie ich sowohl in positiver als auch in negativer Richtung verschieben kann.

v.transformation:translateX(0,0107) und v.transformation:translateX(-0,0107)

Bei beiden Aufrufen wird das Objekt additiv auf der X-Achse verschoben.

Und noch ne Frage am Rand: Kann man nicht einem Objekt einfach per Skript neue Koordinaten zuordnen? Mit Drag´n´Drop bekomme ich das ja auch hin.

Vielen Dank und viele Grüße Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Ralf,

du kannst auch als Ziele beliebige Hilfsobjekte (z.B. eine kleine Fläche aus den Grundkörpern) nehmen.

if $("Taste 1").state == 0 then
  $(""):invoke()
end
local Quelle = $("20' Container-2")
local Ziel = $("Abstellfläche 20′")
Quelle.transformation.position = Ziel.transformation.position
Quelle.transformation.rotation = Ziel.transformation.rotation

Wenn Taste 1 betätigt wird, dann verschiebt sich das Objekt "20' Container-2" mit seinem Nullpunkt zum Nullpunkt des Objekts "Abstellfläche 20'". Die Quelle kann also in alle möglichen Richtungen verschoben und/oder sogar um beliebige Achsen gedreht werden.

HG
Brummi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Ralf,

vor 59 Minuten schrieb ralf4:

v.transformation:translateX(0,0107) und v.transformation:translateX(-0,0107)

Lua als "englische Programmiersprache" verwendet den Punkt (.) als Dezimaltrenner und das Komma (,) als Trenner für Argumente. Deine Zahl muss daher korrekt 0.0107 lauten, dann klappt es auch mit dem negativen Vorzeichen.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb ralf4:

Kann man nicht einem Objekt einfach per Skript neue Koordinaten zuordnen?

Na klar, dafür sind Skripte ja da.
Bau dir eine Routine, welche die von dir bevorzugten Werte in das umrechnet, was die Funktion benötigt.
Du musst diese Werte nicht vorher im Kopf ausrechnen. Du hast doch einen Computer.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

Hallo,

Danke für dieses Thema.

Nach einer Weile verstehe ich :
vehicle.transformation:rotateZ(z)
$("xxx").transformation:translate(0.1*87, 0.1*87, 0) ( in HO )
local t =  $("xxx").transformation.position 
und verwandte Angelegenheiten.

Aber um ein Objekt nach (x, y, z) zu verschieben, verwende ich :

local zero = {}
$("Buche").transformation.position = zero
$("Buche").transformation:translate(26.1,26.1,0)
-- Transformation zu (300,300,0) mm  in scale HO

Also über (0,0,0). Funktioniert gut.
Ich kann nicht direkt zu (x, y, z) gehen. 

Eine kleine Reaktion der Experten bitte. Grüße, Herman

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 42 Minuten schrieb Herman:

Ich kann nicht direkt zu (x, y, z) gehen. 

Aber zu {x=0, y=0, z=0}
Denn du benötigst eine Tabelle, in der die Zellen die Namen x, y und z haben.

$("Buche").transformation.position = {x = 0, y = 0, z = 0}

Hier ist ein Beispiel für dich:   object positioning.mbp

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

So einfach, aber du musst es wissen.
Wirklich danke !
Um eine Antwort zu finden habe ich versucht, den Inhalt der Tabelle in einem Etikett anzuzeigen.

local t =  $("xxx").transformation.position 
$("Label01").text = t[1] 

Aber er hat das Element nicht angegeben
Was ist hier los? Wahrscheinlich ein Missverständnis von mir ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Herman:

Wahrscheinlich ein Missverständnis von mir ?

Ja, denn es gibt in dieser Tabelle keine Zelle mit der Nummer 1
Und weil es keine durchnummerierte Liste ist, geht auch table.tostring nicht.

Die Zellen haben hier Namen, nämlich "x", "y" und "z"

Mit in pairs kannst du in Lua paarweise Zellenname und Zelleninhalt bekommen:

local t =  $("Buche").transformation.position 

for Zellenname, Zelleninhalt in pairs(t) do
  print(Zellenname," - ", Zelleninhalt)
end

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Goetz

Hallo,

Ich habe auch vergessen, dass eine Tabelle auch Zeichenfolgen als Namen hat. Schande:(

Ich habe getestet

local w = { x=26.1, y=26.1, z =0 }
$("Buche").transformation.position = w

$("Label01").text  = w["x"] / 87 

-> 0.3  = 0,3 m = 300 mm in HO :)

Viel gelernt, dankeschön.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Herman:

Ich habe auch vergessen, dass eine Tabelle auch Zeichenfolgen als Namen hat.

Das ist eine exotische Eigenschaft in Lua.

Tabellen sind "dictionaries/tables" und "lists/arrays" in einem. Man kann sogar beides in einer Tabelle vereinen.
Aber man muss wissen, dass bestimmte Eigenschaften nur für den Listenteil einer Tabelle gelten.

 

vor einer Stunde schrieb Herman:

Ich habe getestet

Sehr gut (y)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...
Am 31.1.2021 um 12:59 schrieb Neo:

die EV und Lua arbeiten immer im Maßstab 1:1 und Meter. Bei Verwendung anderer Maßstäbe musst du entsprechene Umrechnungen vornehmen.

Hallo @Neo,

kann man den verwendeten Maßstab mit einem Lua - Befehl einlesen?

Er kann doch selbst in geöffneten Anlagen beliebig geändert werden.

Damit wäre es eventuell möglich, das der Maßstab für Berechnungen/ Umrechnungen automatisch angepasst wird,

ggf. durch eine Funktion, wenn er er als   String   existiert.

Eine Objekt-Skalierung lässt sich ja mit   Objekt.transformation.scaling  einlesen.

Viele Grüße

Hawkeye

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 10 Stunden schrieb Hawkeye:

Damit wäre es eventuell möglich, das der Maßstab für Berechnungen/ Umrechnungen automatisch angepasst wird

das ist nicht nötig, da es aus Sicht der EV/Lua gar keinen Anlagenmaßstab gibt, da alle Werte in 1:1 (m) interpretiert werden. Eine Umrechnung auf den tatsächlichen Anlagenmaßstab findet vom Studio automatisch statt.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 8.6.2021 um 07:56 schrieb Neo:

Eine Umrechnung auf den tatsächlichen Anlagenmaßstab findet vom Studio automatisch statt.

Hallo Neo,

ja, das stimmt, habe es  mal ausprobiert.

Aber nur sofern man den Maßstab der Anlage verändert und an Werten (Variablen),

die in der EV auf einen bestimmten Maßstab umgerechnet werden, nichts verändert!

Eine Ausnahme gibt es dann schon, wenn man eine Variable z.B. in 1: 87 (H0) definiert hat,

die per Lua für die Ausführung in 1:1 [m] umgerechnet wird, in einem anderen gewählten Maßstab

für die Anlage verändern möchte, dann muß man aber „wissen“, das diese Variable in H0 zu verändern ist,

und nicht  in dem neuen gewählten Maßstab für die Anlage. 

In diesem Fall kommt sonst ein anderes Ergebnis bei der Ausführung heraus.

Beispiel:

Variable = 100 mm in H0 definiert, in Lua auf 1:1 umgerechnet = 8,7 m

Ändere ich den Maßstab der Anlage auf 1:1 [m]

und möchte die Variable auf  10m  verändern, darf ich nicht 10 als Variablen-Wert eingeben,

sondern muß „wissen“ und berücksichtigen, das Variable in H0 einzugeben ist,

da die Umrechnung ja trotzdem stattfindet. Variable neu = 114,94 (H0),

obwohl ich jetzt im Maßstab 1:1 bin.


Ich werde meine EV so umschreiben, 

dass die Variablen jetzt direkt im Maßstab 1:1 einzugeben sind,

dann spielt der Maßstab keine Rolle mehr, und eine Umrechnung ist

dann auch nicht mehr nötig.

Viele Grüße,

Hawkeye

 

 

 

 

 

 


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 2 Minuten schrieb Hawkeye:

Ich werde meine EV so umschreiben, 

dass die Variablen jetzt direkt im Maßstab 1:1 einzugeben sind,

das ist die empfohlene Herangehensweise, denn so arbeitet auch die gesamte EV (maßstabsfrei).

Viele Grüße,

Neo

PS: Deine Beiträge sind etwas schwer zu lesen, weil du viele Leerzeilen einfügst. Du brauchst die Enter-Taste hier im Forum nur zu drücken, wenn du einen neuen Absatz beginnen willst, ein Zeilenumbruch findet automatisch statt.

Link zu diesem Kommentar
Auf anderen Seiten teilen


 

vor 11 Minuten schrieb Neo:

PS: Deine Beiträge sind etwas schwer zu lesen, weil du viele Leerzeilen einfügst. Du brauchst die Enter-Taste hier im Forum nur zu drücken, wenn du einen neuen Absatz beginnen willst, ein Zeilenumbruch findet automatisch statt.

:D:DÄrgere mich jedesmal darüber, wenn ich vom Tablet schreibe. Da ich es gewohnt bin, die Absatzformatierung selbst durchzuführen. Versuch es mir zu merken, danke für den Tip.(y)

VG

Hawkeye

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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