Zum Inhalt springen

Marionette Frage zum Filter


Chritian W.

Empfohlene Beiträge

Hallo,

ich versuche in Zusammenhang mit dem Umbenennen von mehreren Objekten die Objekte heraus zu filtern, welche diesen Namen bereits haben.

Der Filter macht aber eigenartige Dinge, so dass in beiden Listen, die der Filter ausgibt Objekte mit dem Namen erscheinen. Prinzipiell wechselt er die Liste, nach dem er ein Objekt hat, welches unbenannt ist. im Beispiel Position 4 und 8.

welchen Zusammenhang hat das, was muss man tun damit Errichtung arbeitet.

8F93B437-C87D-481B-A8FC-7049AE770461.jpeg

Namen_Nummerieren_v2021.vwx

Link zu diesem Kommentar

Hallo

 

Das dir not equal lustige Ergebnisse liefert erscheint mir logisch. Du prüfst für jeden Eintrag der Liste nacheinander und einzeln ob sie nicht gleich sind. Das heisst du vergleichst nur Eintag 1 mit 1, 2 mit 2 usw.

 

Was du suchst ist der Node Is Member. Der Prüft, ob ein Item in einer Liste vorhanden ist.

image.png.fb8ee07ad16b213140de7f70c87b02c6.png

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Hallo Manuel,

 

müsste auch so gehen nur die "get Name" Node reagiert nicht so wie "gedacht".

 

Wenn man "get Name" anhängt werden in der Datei einige Rechtecke ohne Namen nicht gelistet, damit passt die Länge der Listen nicht mehr.

 

Kannst dir mal mein geändertes Script "get Name" ansehen, auch da sieht man das "None" nur einmal auftaucht (warum das so ist weiss ich nicht).

Kannst du mal prüfen, ob der "Bug" auch bei "is Member" zusammen mit der normalen "Get Name Node" auftaucht?  

eventuell eine Bugmeldung fällig? 

 

Hallo Chritian,

 

hier meine Abänderung deines Scriptes...

Als Filter Prüfung habe ich den Teilstring "Entwässerungsgebiet" genommen, das erspart dir die "is Member" Node. Und die "Get Name" Node hab ich mal geändert... 

 

Vielleicht noch zwei generelle Tips.

Egal was man scriptet, die Summe der "Teil-Listen" muss immer passen, in deinem / Ihrem Beispiel:

Wenn 12 Objekte reingehen, müssen hinter dem Filter auch in Summe 12 wieder rauskommen, bei der normalen Node "get Name" kommen bei dir / Ihnen aber nur 4 statt 6 Werte raus 

und:   

Ich persönlich würde nicht mit "Namen" im Script arbeiten, bei einem anderen Projekt "Tiles" hab ich damit sehr schlechte Erfahrungen gemacht.

Würde immer eine Datenbank anhängen und dort die Werte reinschreiben und auslesen.  

Namen_Nummerieren_v2021.vwx

Gruß M. Graf 

 

   

 

 

Bearbeitet von m.graf
  • Like 1
Link zu diesem Kommentar

Oh je, es ist noch verrückter als ich dachte...

 

Die "Get Name" Node - ist eine Bugmeldung wert.

 

Neue Rechtecke liefern den Namen "None". Vergibt man einen Namen und löscht den wieder kommt kein "None" mehr raus sondern ein leerer Eintrag. Aber auf jeden Fall stimmen die Listen nicht! 

 

Gruß M. Graf 

 

2031371794_Bildschirmfoto2021-09-18um12_52_48.thumb.png.ad2b52454f13eeb303e2b44217ef6227.png

 

 

Link zu diesem Kommentar

Ich arbeite jetzt auf jeden Fall mit „Is Member“ weiter und gebe wenn notwendig die Namen erst später aus.

 

Auch in diesem Fall gibt der Standard Get Name nur die Objekte aus, welche einen Namen besitzen. Wenn noch kein Name vergeben wurde, gibt der Get Name auch für mehr als ein Objekt „none“ aus. Nur wenn der vergebene Name gelöscht wurde gibt es kein „none“ mehr und der Standard „Get Name“ führt das Objekt nicht mehr auf.

Link zu diesem Kommentar
vor 19 Stunden schrieb m.graf:

Würde immer eine Datenbank anhängen und dort die Werte reinschreiben und auslesen.  

Namen_Nummerieren_v2021.vwx 477 kB · 1 download

 

 

 

Das mit der Datenbank ist noch einmal eine Überlegung wert.

aber müssten die Namen der bereits benannten Objekte nicht sowieso schon in irgend einer Datenbank stehen - wie kann man darauf zugreifen?

ich bin jedoch mit der Verwendung von Datenbanken auch schon etwas vorsichtig geworden. Wenn man innerhalb eines Netzwerkes eine Datenbank schreibt und wieder ausliest, kann es passieren, dass der zu schreibende Wert einen Bruchteil einer Millisekunde zu spät geschrieben wird. Dann steht der zwar in der Datenbank, aber in der Ausgabe steht noch der alte Wert. Einen Zusammenhang mit der Reihenfolge konnte ich an dieser Stelle nicht feststellten und musste es dann punktuell anders lösen.

 

 

Link zu diesem Kommentar
vor 21 Stunden schrieb Manuel Roth:

Hallo

 

Das dir not equal lustige Ergebnisse liefert erscheint mir logisch. Du prüfst für jeden Eintrag der Liste nacheinander und einzeln ob sie nicht gleich sind. Das heisst du vergleichst nur Eintag 1 mit 1, 2 mit 2 usw.

 

Was du suchst ist der Node Is Member. Der Prüft, ob ein Item in einer Liste vorhanden ist.

image.png.fb8ee07ad16b213140de7f70c87b02c6.png

OK jetzt stehe ich wieder vor dem Problem, dass der Filter nicht wie gewünscht funktioniert.

 

Ich möchte letztendlich die Namen, welche es schon gibt, aus der Neu erstellten Namensliste entfernen. aber entweder werden alle Werte in eine Liste gesteckt, Obwohl Member zumindest mal die richtige Anzahl ausgibt. Bei If in String und equal sollen die ja eigentlich den richtigen Abgleich machen, aber die Ausgabe ist nicht richtig.

 

Namen_Nummerieren_v2021 2.vwx

Namen_Nummerieren_v2021 2.vwx

F95D23B9-6210-428A-8318-385D2C3DC57C.jpeg

Bearbeitet von Chritian W.
Link zu diesem Kommentar

Schalte mal den "Bugmodus ein", das ist der kleine Käfer in der Optionsleiste der Marionette Nodes  und schau dir die Listenlängen an, (jede Linie im Netzwerk bekommt dann die Listenlänge als Zahl). Mir ist das Script zu unübersichtlich geworden um es heute schnell prüfen zu können.

2050588765_Bildschirmfoto2021-09-19um13_20_36.png.decee1f1513a885808dd56bc6273c1aa.png

Mein Tip:

am besten etappenweise prüfen, ob speziell bei der Filternode genau so viele Ja / Nein bei der Prüfung "unten"  reinlaufen wie oben Objekte...  sonst wird das nichts werden.

Und solange die normale get Name dabei ist werden die Listen nicht passen. 

 

Gruß Markus 

 

 

 

 

 

Bearbeitet von m.graf
Link zu diesem Kommentar

Wieso so kompliziert?
Wieso nicht einfach den Node "Objs by Crit" als Vorfilter verwenden?
Z.B.: Objekt Ist Aktiv & Name enthält nicht "Entwässerungdsdings" & Name enthält nicht "Apfel" -> Der Rest wird umbenannt.
Oder noch einfacher: Objekt Ist Aktiv & Name enthält nicht "*" (Stern) -> alles was bereits einen Namen hat, wird nicht ausgegeben..
790791929_Bildschirmfoto2021-09-20um11_47_22.thumb.png.e562475d189da2444d59f0c044091ea2.png

 

vor 22 Stunden schrieb m.graf:

Schalte mal den "Bugmodus ein", das ist der kleine Käfer in der Optionsleiste der Marionette Nodes  und schau dir die Listenlängen an, (jede Linie im Netzwerk bekommt dann die Listenlänge als Zahl).

Das macht der "Print Debug" Node auch ("Number of Item: = Listenlänge)

Gruss KroVex

  • Like 1

Have you tried to turn it off and on again?
Vectorworks | Architektur | macOS/Windows

Link zu diesem Kommentar
vor 6 Stunden schrieb KroVex:

Wieso so kompliziert?
Wieso nicht einfach den Node "Objs by Crit" als Vorfilter verwenden?

Ja das wäre schön wenn es so einfach wäre, es steckt jedoch etwas mehr Überlegung dahinter.

 

Also es können im Projekt Objekte vorhanden sein, welche bereits den Namen mit einer Zählnummer haben.

Alle neuen Objekte sollen auch den Namen mit einer Zählnummer bekommen, ohne das die Zählnummern der bereits benannten Objekte neu vergeben werden.

 

Ich habe mir die im Anhang beschriebenen Schritte überlegt.

 

Was ich nicht verstehe, warum das Herausfiltern der Namen, welche bereits vergeben sind, aus der neu erstellten Namensliste nicht funktioniert.

8B5C3937-E52F-462E-A711-739D954966B2.jpeg

Link zu diesem Kommentar

Hallo zusammen,

In der ersten Datei gab es Objekte, die mal benannt waren und der Name wurde dann gelöscht, damit passte keine Liste, die aus "get Name" rauskam. Da bei der normalen get Name die Objekte mit gelöschten Namen in der Liste fehlen. (Bugmeldung?)

Zweiter Fehler war, das nicht ein Teilstring als Filter genutzt wurde / das kann man mit "is Member" umgehen, muss man aber nicht. 

Falsche Listenlängen sieht man halt am schnellsten mit dem Käfer, dafür braucht man nicht hinter jede Node die Printdebug hängen.

 

@Krovex

im (Bild unten) sieht man die vielen kleinen Fallstricke, die in Marionette möglich sind:

hinter dem oberen PrintDebug: 

Listennummer 13 = "Marionette Group Print Debug_28"  

entweder hat der Ausdruck einen Namen oder ist zeitgleich aktiv oder beides,

und wieder würden die Listen im weiteren Script nicht passen.

 

Gruß M.Graf

 

Am 20.9.2021 um 11:50 schrieb KroVex:

Wieso so kompliziert?
Wieso nicht einfach den Node "Objs by Crit" als Vorfilter verwenden?
Z.B.: Objekt Ist Aktiv & Name enthält nicht "Entwässerungdsdings" & Name enthält nicht "Apfel" -> Der Rest wird umbenannt.
Oder noch einfacher: Objekt Ist Aktiv & Name enthält nicht "*" (Stern) -> alles was bereits einen Namen hat, wird nicht ausgegeben..
790791929_Bildschirmfoto2021-09-20um11_47_22.thumb.png.e562475d189da2444d59f0c044091ea2.png

 

 

 

 

 

 

 

 

Bearbeitet von m.graf
Link zu diesem Kommentar
Am 20.9.2021 um 18:42 schrieb Chritian W.:

Also es können im Projekt Objekte vorhanden sein, welche bereits den Namen mit einer Zählnummer haben.

Alle neuen Objekte sollen auch den Namen mit einer Zählnummer bekommen, ohne das die Zählnummern der bereits benannten Objekte neu vergeben werden.

Ich habe deine Problematik verstanden und konnte einen Weg finden dies zu lösen. Was allerdings noch offen bleibt: Wenn du z.B. 30 Objekte mit einer bestehenden Nummerierung hast, 15 davon löscht und 5 neu hinzufügst, dann wirst du trotzdem keine durchgehende Nummerierung haben, da ja die bestehenden nicht angefasst werden sollen (also z.B. "Entwässerungsgebiet_29" könnte immer noch vorhanden sein, obwohl du nur 20 Objekte hast).

Mein Lösungsweg:525444257_Bildschirmfoto2021-09-22um10_07_41.thumb.png.662af54fd207d1a5f50cdc7439cade00.png

 

Name_Nummerierung.vwx

Gruss KroVex

Have you tried to turn it off and on again?
Vectorworks | Architektur | macOS/Windows

Link zu diesem Kommentar
vor 7 Stunden schrieb KroVex:

Wenn du z.B. 30 Objekte mit einer bestehenden Nummerierung hast, 15 davon löscht und 5 neu hinzufügst, dann wirst du trotzdem keine durchgehende Nummerierung haben, da ja die bestehenden nicht angefasst werden sollen (also z.B. "Entwässerungsgebiet_29" könnte immer noch vorhanden sein, obwohl du nur 20 Objekte hast)

Vielen Dank,

das könnte gut funktionieren, werde es austesten.

Der Punkt, dass keine durchgängige Nummerierung nach löschen einzelner mehr vorhanden ist, ist in Ordnung. Da zu diesem Objekt dann möglicherweise bereits eine Datenbank existiert. Diese Zuordnung muss dann also bestehen bleiben.

 

Link zu diesem Kommentar
vor 11 Minuten schrieb Chritian W.:

Der Punkt, dass keine durchgängige Nummerierung nach löschen einzelner mehr vorhanden ist, ist in Ordnung. Da zu diesem Objekt dann möglicherweise bereits eine Datenbank existiert.

Wenn du mit Datenbanken arbeitest, könntest du dir natürlich auch noch überlegen, diese Verknüpfungen gleich im Marionette zu integrieren (Set Record).

Gruss KroVex

Have you tried to turn it off and on again?
Vectorworks | Architektur | macOS/Windows

Link zu diesem Kommentar
Am 22.9.2021 um 17:31 schrieb KroVex:

Wenn du mit Datenbanken arbeitest, könntest du dir natürlich auch noch überlegen, diese Verknüpfungen gleich im Marionette zu integrieren (Set Record)

Hallo, die Datenbank werde ich integrieren.

Habe noch zwei Fragen dazu:

1. Gibt es eine Möglichkeit mit Marionette eine Datenbank zu löschen?

2. Wenn alle zu brennenden Objekte keinen NAmen haben gibt es einen Fehler. Gibt es hierzu auch eine Lösung?

Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

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

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
  • Forenstatistik

    • Themen insgesamt
      20,7Tsd
    • Beiträge insgesamt
      103,3Tsd
×
×
  • Neu erstellen...