Zum Inhalt springen

Marionette als Rechner für Ergebnisprotokoll


Chritian W.

Empfohlene Beiträge

 

Hallo, ich versuche gerade ein Marionette zu bauen, in welchem ich Rechenoperationen in Abhängigkeit zu gezeichneten Flächen ausführe.

An folgenden Punkten komme ich aktuell nicht weiter:

1. ich würde gerne einen festen Input - Wert von 10000 einsetzen, welcher später im Wrapper nicht als Eingabefeld erscheint - ähnlich den Math Constats

2. Ich möchte die berechneten Werte dann als Text auf einer Konstruktionsebene oder / und auf einer Layoutebene ausgeben. - Wie kann man das erreichen - inklusive Formatierung.

3. Im weiteren sollen sich bestimmte Node‘s dann Im Bezug auf einen Eingabewert ( Postleitzahl) andere Werte aus Tabellen holen. - Wie kann man diese Bezüge herstellen?

 

Ich hoffe mir kann hier jemand weiterhelfen.

Link zu diesem Kommentar

Hallo Christian

 

Schön, dass die Marionette-Gemeinde wächst.

 

1 Input

Um einen festen Wert in deine Marionette einzufügen brauchst du einen Node aus Inputs>Basic. Je nach dem ob du Text, Zahl usw. eingeben willlst halt einfach einen andren. Für eine Zahl ohne Kommastellen brauchst du am besten den Int-Node (Integer)

 

Wenn du den Node bennenst, wird er ausserhalb des Wrappers oder des Marionette-Objekts dargestellt. Wenn du ihm keinen Namen gibts, hast du einfach eine Konstante. Damit du trotzdem weisst, für was die Konstante steht, kannst du ein Textfeld über dem Node einfügen.

 

2 Ausgabe

Für die Ausgabe erstellst du grundsätzlich ein Textfeld mit dem Text-Node zu finden unter Object>Text. Die Textattribute kannst du mit den anderen Nodes aus diesem Ordner ändern. Als Option kannst du auch einen Easy Text-Node verwenden. Dort sind die wichtigsten Eigenschaften bereits am Node einstellbar.

 

Grundsätzlich würde ich dir empfehlen für das fertige Netzwerk immer ein Marionette-Befehl oder ein Marionette-Objekt zu erstellen. Wrapper in die Zeichnung einzufügen funktioniert schon, ist aber ein wenig unschön, da du sie immer wieder weglöschen musst. In deinem Fall wäre es wahrscheinlich ein Marionette-Objekt. (Um aber es definiv sagen zu können, wären noch ein paar Infos über die Funktionsweise und den Zweck der Mariontte nötig.)

Bei einem Marionette-Objekt hast du im Inneren ein eigenes Koordinatensystem. Das bedeutet, dass du den oben erwähnten Text einfach am Punkt (0,0) einfügen kannst.

Wenn du einen Befehl oder einen Wrapper brauchen willst, musst du den Einfügepunkt bezogen auf den aktiven Nullpunkt angeben.

 

3 Bezüge

Grundsätzlich ist es möglich, solche Bezüge zu verwenden. Je nach Datenquelle unterscheidet sich das Vorgehen allerdings recht stark. Hier wären noch ein wenig mehr Infos nötig.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Vielen Dank zunächst.

Das Netzwerk möchte ich für eine Entwässerungsberechnung aufbauen, da ich hierfür mehrere Flächen berechnen muss und auch einzelne Wrapper dann Projektbezogen miteinander verbinden muss, werde ich diese Sichtbar auf dem Layer platzieren müssen. Idealerweise möchte ich den Text dann in Bezug auf die Platzierung des Wrappers anordnen oder an einem separat gezeichneten Punkt. Um den gesamten Text ( mehrere Ausgaben soll dann automatisch ein Rechteck erzeugt werden.

Für weitere Hilfe wäre ich dankbar.

Link zu diesem Kommentar

Hallo Christian

 

Ich denke, dass es in deinem Fall sinnvoller wäre ein Marionette-Objekt zu erstellen. So kannst deine Nodes trotzdem projektbezogen zusammenfügen, hast sie aber vor zerstörungswütigen Kollegen geschützt. ?

Zudem erhälst du in diesem Fall einen Block mit deinen Texten, den du frei auf dem Plan herumschieben kannst und nicht bei jeder Aktualisierung die Position wiederherstellen musst. Auch die Berechnung der Positionen für die Texte und das Rechteck sind so einfacher zu gestallten, da du dich nicht um verschiedene Koordinatensysteme kümmern musst.

 

Unabhänig von deiner Wahl, hilft es oftmals vor dem Start des Projekts seine Idee aufzuschreiben. Damit kannst du Punkt für Punkt abarbeiten und nach jedem Punkt kontrollieren, ob das Ergebnis wie gewünscht ausfällt. Wenn zu grosse Schritte gemacht werden, schleicht sich jedem irgendwo einen Fehler ein und den in einem grossen Script zu finden ist um einiges schwerer als in einem kleinen Teil davon.

 

 

Bei dir könnten die Punkte wie folgt aussehen. Oftmals ist die Reihenfolge sehr ähnlich, wie wenn du manuell zeichnen würdest.

 

01. Berechnungen aufgrund von anderen Objekten auf KE und Datenquelle durchführen. (Um mit der Datenbanksuche zu helfen bräuchte ich noch mehr Infos.)

02. Erstes Textfeld erstellen auf Koordinaten (0,0) für Mrnt-Objekt oder auf berechneten Koordinaten für Wrapper in Zeichnung

03. Textfeld formatieren

04. Koordinaten vom Eckpunkt unten links vom ersten Textfeld auslesen

05. Zweites Textfeld an ausgelesenen Koordinaten einfügen.

06. Schritt 3-5 für alle weiteren Textfelder wiederholen

07. Alle Textfelder gruppieren (Ich hoffe, dass dies in einem Mrnt-Objekt funktioniert. Ansonsten liesst du einfach alle BBoxes von den Textfeldern aus und ziehst die maximalen bzw. minimalen Werte aus deiner Liste.)

08. BBox von Gruppe auslesen

09. Eckpunkte von Rechteck berechnen

10. Rechteck erzeugen und formatieren

 

 

Ich werde dir kein Marionette-Netzwerk erstellen, bei weiteren Fragen kannst du dich aber gerne wieder melden.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Als Datenbank hätte ich zum einen Excel-Tabellen auszulesen, welche vom Deutschen Wetterdienst zur Verfügung gestellt werden (kann ich aber zur Not auch separat auslesen und nur die Werte eingeben).

Zum zweiten muss ich im Nachgang Werte aus einer Tabelle auslesen um diese in die Berechnung zu integrieren.


zum letzten Tipp hätte ich noch Fragen:

zu 02: Welcher Node ist der Richtige für die Berechnung der Koordinaten für Wrapper

zu 04. Welcher Node ist der Richtige zum auslesen der Koordinaten vom Eckpunkt unten links vom Textfeld

 

00490610-C061-49A5-BEC9-AFCE7CF8069B.jpeg

7C0C8430-F50C-4032-A362-EFCEB2F6C2E2.jpeg

EB5257A8-4C90-48D1-83AB-0B7F9F725EC0.jpeg

Link zu diesem Kommentar

Hallo Christian

 

Zuerst zu deinen Fragen

vor 14 Stunden schrieb Chritian W.:

Welcher Node ist der Richtige für die Berechnung der Koordinaten für Wrapper

Um die Koordinaten des Wrappers auszulesen, brauchst du zuerst den Handle des Wrappers. Dies ist mit den Standardnodes nicht möglich. Ich habe aber vor einiger Zeit einen Node erstellt, der diesen Handle ausgibt. Mein Studentetnversionfile kannst du aber wahrscheinlich nicht öffnen, wesshalb du den Code unten in einen beliebigen Node einfügen musst.

#MRoth

@Marionette.NodeDefinition
class Params(metaclass = Marionette.OrderedClass):
#APPEARANCE		
	#Name
	this = Marionette.Node( 'Parent Wrapper' )
	this.SetDescription( 'Get the handle to the wrapper in wich the node is placed.' )
	
	#Input Ports
	
	#OIP Controls
	
	#Output Ports
	obj = Marionette.PortOut('h')
	obj.SetDescription('The handle')
	
#BEHAVIOR
	this.SetLinksObjects()
	
def RunNode(self):
	#inputs
		
	#script
	obj = vs.GetParent(vs.GetParent(self.Handle))
	
	#outputs
	self.Params.obj.value = obj

Die Koordinaten vom Einfügepunkt des Wrappers erhälst du mit Get Symbol Location.

 

vor 14 Stunden schrieb Chritian W.:

Welcher Node ist der Richtige zum Auslesen der Koordinaten vom Eckpunkt unten links vom Textfeld

Generell kannst du die Bounding Box mit dem Get Bounding Box-Node auslesen. Die BBox ist das kleinste orthogonale Rechteck, dass dein Objekt komplett einschliesst. Oder anders ausgedrückt, wenn du das Objekt mit sich selbst gruppierst, entspricht die BBox der orangen Fläche bei selektierter Gruppe. Sie ist planrotationsabhänig.

 

Zu den Tabellen

Ich verstehe noch nicht ganz, wie die Tabellen zusammenhängen. Ist aber auch nicht so wichtig.

 

Sind die Werte in der Exceltabelle statisch oder werden sie vom Wetterdienst laufend aktualisert?

Wenn sie aktualisiert werden, müsste mit dem neuen Excelimport von VW21 gearbeitet werden. Dann wird es aber richtig komplex und ich bezweifle, dass dafür schon Nodes existieren.

In einem ersten Schritt würde ich die Daten noch von Hand in die Marionette eingeben, damit du ausschliessen kannst, dass du Fehler in den Datenquellen hast. Wenn du dein Script ansonsten beendet hast, kannst du hier weitermachen.

 

Die letzte Tabelle ist nicht sehr umfangreich und ändert sich wahrscheinlich nur alle 100 Jahre. Desshalb würde ich sie mit einem Any-Node direkt ins Netzwerk einbinden.

Mit diesem Node kannst du dir die Werte in Marionette sehr einfach zugänglich machen, da er Listen, Tuples oder Dictinarys (und Kombinationen davon) ausgeben kann. Listen sind Standardmarionettecontent, Tuples bis zu einer Grösse von 3 Feldern je Tuple auch und für die Dicts brauchst du ein paar Spezialnodes aus DomC's Sammlung. Die Dicts würden sich meiner Meinung nach hier aber sehr gut eignen. Geht aber auch mit Listen in Kombination mit Tuples. Überlege dir einfach im voraus, wie du deine Daten strukturieren möchtest, damit du einen bestimmten Wert abgreifen kannst. (Vorallem wenn du mit Listen arbeitst, sind Tuples in Listen sehr zu empfehlen.)

Um mit dem Any-Node zum Beispiel eine Liste auszugeben gibst du in den Input des Any-Nodes [1, 2, 3] ein. Die Syntax findest du unter den Links oben. Zahlen brauchen keine Anführungszeichen, weil sie sonst als Text behandelt würden.

 

Wenn ich meinen Roman hier lese, bin ich mir nicht sicher, ob ich den bei meinen ersten Scriptingveruschen verstanden hätte. Wenn du Fragen dazu hast oder irgendwo genauere Infos brauchst, hacke einfach nach.

Bearbeitet von Manuel Roth

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Hallo Christian

Wahrscheinlich hast du den Code abgeschrieben. Dabei ist dir in der letzten Zeile einen Tipfehler unterlaufen. Anstelle von self.Params.opj.value sollte es self.Params.obj.value heissen. (b statt p)

 

Diese Zeile gibt den Output an den Port weiter. Der Port ist unter #Output Ports definiert und heisst obj. Du erhälst die Fehlermeldunge, weil du versuchst, deine Ausgabe an den inexistenten Port opj weiterzuleiten.

 

 

Nur so nebenbei obj  ist eine Abkürzung für Object und stellt in VW meist einen Handle dar.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Hallo Manuel, so klappt es ganz gut.

Habe jedoch zwei weitere Probleme:

1. wenn ich den Wrapper über verschieben, kopieren einfügen kopiere, dann habe ich den Text zweimal, einmal direkt unter dem Wrapper wo er sein soll und zusätzlich auf der Position wo er her kopiert wurde. Kann man dagegen etwas tun?

2. In einer zweiten Variante habe ich versucht einen Bezug zu einer zweiten Fläche aufzubauen. Was auch gut funktioniert. Gibt man jedoch keine Fläche ein, da sie einfach nicht existiert, dann verschieben sich die Textpositionen willkürlich - ich habe auch schon versucht mit dem auslesen der XY Koordinaten die Textpositionen auf die entsprechende Position zu fixieren  aber auch da verschieben sich Texteile - gibt es dafür eine Art Platzhalter?

 

Marionette P1.pdf

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
      23,4Tsd
    • Beiträge insgesamt
      120,1Tsd
×
×
  • Neu erstellen...