Jump to content

Empfohlene Beiträge

Geschrieben (bearbeitet)

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

Bearbeitet von EASY
Geschrieben (bearbeitet)

Easy,
das ist das zentrale problem meiner App.. vorausetzung ist dass alle objekte eindeutige name haben. Das ist die erste aktion.
Ich verwende dazu zunaechst einen temporaeren namen, den ich mit einer laufenden nummer ergaenze und kennzeichne,
also z.B. @Quader-001. Du hast keinen einfluss darauf welcher quader welchen namen bekommt.
Ich habe deswegen siebe gebaut die objekttypen filtern und nur bestimmte typen umbenennen usw.
Fuer mich ist das hauptsaechlich bei gleisen wichtig und da lasse ich eine lok fahren die dann events liefert mit eindeutigen namen,
dann kann ich die umbenennen in der reihenfolge wie ich sie brauche.
Fuer andere objekte mach ich selektionen, lese die ein und weiss dann dass diese objekt einen zusammenhang haben. Will ich aber bestimmte objekte
eindeutig identifizieren, dann um beim beispiel zu bleiben, positioniere ich 5 Quader und benenne sie eindeutig (@Quader1, usw), das ist bei mir eine automatische funktion. Du kannst ja jedes objekt mit Guid erzeugen und dabei einen name vergeben, aber nur mit der alten schnittstellen soviel ich weiss. 
Dann positioniere ich jeden quader mit eideutigem namen dahin wo er hingehoert, entweder manuell oder wenn ich die koordinate berechnen kann automatisch, oder zumindest in die naehe des ziels. Deswegen habe ich areas, segmente, virtuelle ebenen und gruppen etc, um objekte zu orden.
Man kann auch automatisch positionieren etc .. kommt halt drauf an was du mit den objekten am hut hast.
Gruss
Gmd

 

Bearbeitet von gmd
Geschrieben

Hallo,

vor 13 Stunden schrieb gmd:

Will ich aber bestimmte objekte
eindeutig identifizieren, dann um beim beispiel zu bleiben, positioniere ich 5 Quader und benenne sie eindeutig (@Quader1, usw), das ist bei mir eine automatische funktion.

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

vor 14 Stunden schrieb gmd:

Du kannst ja jedes objekt mit Guid erzeugen und dabei einen name vergeben, aber nur mit der alten schnittstellen soviel ich weiss.

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

Geschrieben
6 hours ago, EASY said:

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.

Prima das habe ich noch nicht so ausprobiert mit der neuen schnittstelle. Ist das objekt selektiert nach der einfuegung ?
Welche aktion verwendest du zum einfuegen mit der neuen schnittstelle ? Habe ich noch nicht ausprobiert.
Danke
Gruss
Gmd

 

Geschrieben (bearbeitet)

Hallo,

vor 18 Stunden schrieb gmd:

Welche aktion verwendest du zum einfuegen mit der neuen schnittstelle ? Habe ich noch nicht ausprobiert.

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...
Bild001.thumb.jpg.fc8c445cd160c8833345b8cc0420cee0.jpg

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

Am 4.2.2025 um 18:18 schrieb EASY:

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.

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

vor 18 Stunden schrieb gmd:

Ist das objekt selektiert nach der einfuegung ?

nein (eine eventuell vorhandene Selektion bleibt erhalten)

Gruß
EASY

Bearbeitet von EASY
Geschrieben

Vielen Dank,
das spart mir eine menge zeit bei der umstellung. Muss aber erst einige performancetests machen. V9 ist deutlich langsamer als V8 und die grosse zeichenmenge der neuen schnittstelle hilft nicht gerade bei grossen anlagen. Ich habe "aussetzer" in der scriptausfuehrung festgestellt, habe aber noch nicht weiter detailliert getestet. Ich musste delays im programm einbauen fuer die positionierung von objekten, aber immer dann wenn ein objekt nocht nicht geladen war (internet). Das ist ja ok und nicht schuld der V9, aber an anderer stelle beim umbenennen einer grossen anzahl von objekten (alte schnittstelle) kommt es vor, dass objekte ueberbleiben und ich den vorgang fuer die restlichen wiederholen muss. Habe das aber noch nicht konsequent getestet. Es sind aber nicht immer die gleichen die ueberbleiben, ist ein zufaelliges ergebnis.
Gruss
gmd
 

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