Zum Inhalt springen

Marionette / Python Modifikationspunkt für EINE Achse


hölzli

Empfohlene Beiträge

Hallo zusammen

 

Ich möchte für meine PIOs, welche ich mit Marionette erstellt habe gerne Modifikationspunkte erstellen. Grundsätzlich wäre dies ja über "ControlPoint" als 2D oder 3D einfach möglich. Allerdings wünsche ich nur Modifikationspunkte welche jeweils nur EINE Achse bearbeiten. Ähnlich wie die mittleren Modifikationspunkte z.B. bei einem Rechteck:

image.png.9fc1177b8c4be6cb7323fcaa090b9495.png

 

Damit möchte ich z.B. ein Rohr lediglich in die Länge ziehen, der Modifikationspunkt bleibt dabei immer auf seiner Flucht und in der Infopalette möchte ich auch lediglich EIN Feld (Länge) angezeigt bekommen.

 

Alle meine Versuche bei der Bearbeitung des Nodes sind gescheitert. Ich konnte auch noch keine Informationen finden, wie ein solcher Punkt mit Python erzeugt werden kann.

 

Bin um jede Hilfe dankbar.

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

Das regelt man über den Plugin-Manager, indem man dem Script ein Plugin macht und diesem dann sagt, wie das Objekt gezeichnet wird. Da gibts zur Auswahl Punktobjekt, Linienobjekt, Rechteckobjekt 2D-Pfadobjekt etc. mit 1, 2, 4 oder x Modifikationspunkten.

Es gibt jedoch keine Möglichkeit z.B. bei einem Rechteckobjekt nur die zwei mittleren Modifikationspunkte aktiv zu schalten. Das Plugin wird einfach immer wie ein Rechteck bearbeitet.

Vectorworks 2024 - Architektur - Win 10

Link zu diesem Kommentar

Besten Dank für den Input. Erste Versuche konnte ich bereits machen. für 3D Objekte habe ich aber noch nicht viel gefunden.

 

Liege ich richtig in der Annahme, dass ich dafür wohl einzelne solche Plugins erstellen muss, welche ich dann in den Scripts abrufen und positionieren kann?

 

Ich merke, dass ich da ein je länger je grösseres Feld aufmache - interessant!

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

Ich komme leider nicht weiter.

Ich versuche, in Marionette ein Node zu erstellen, welches mir das Plugin-Object einfügt, damit ich mit dieser Form dann ein parametrisiertes Objekt erstellen kann, welches nebst den Variablen in der Infopalette auch die entsprechenden Modifikationspunkte hat.

 

Zum testen erstellte ich ein "einfaches" Rechteck-Plugin-Object (mit Python-Code hatte ich die Modifikationspunkte nicht....):

PROCEDURE Example;
BEGIN
RectangleN(0, -PBoxWidth/2, 1, 0, PLineLength, PBoxWidth);
END;
RUN(Example);

wenn ich dieses "normal" Einfüge, erhalte ich das gewünschte Ergebnis und kann das Rechteck sowohl über die Infopalette als auch über die Modifikationspunkte bearbeiten.image.png.c02d9e0fc484007de5107805dfdcb74d.png

 

Nun habe ich ein Marionette Node so bearbeitet, dass es dieses Plugin-Object einfügen soll:

#Created January 2018
#Updated August 2018
@Marionette.NodeDefinition
class Params(metaclass = Marionette.OrderedClass):
#APPEARANCE
	#Name
	this = Marionette.Node('Customobj')
	this.SetDescription('Creates a 3D reshape handle when used in a Marionette Object. Initial values are defined in the Object Info Palette.')

	#Input Ports
	#OIP Controls
	x = Marionette.OIPControl( 'X', Marionette.WidgetType.RealCoord, 0.0)
	x.SetDescription('A value representing the distance from the origin along the x axis')
	y = Marionette.OIPControl( 'Y', Marionette.WidgetType.RealCoord, 0.0)
	y.SetDescription('A value representing the distance from the origin along the y axis')
	#Output Ports
	pt = Marionette.PortOut('p')
	pt.SetDescription('A Control 3D point')

#BEHAVIOR

def RunNode(self):
	#inputs
	x = self.Params.x.value
	y = self.Params.y.value
	#script
	vs.CreateCustomObject('rec3', 0,0, 0)
	#vs.AddToPIOStyleEdit(vs.LNewObj(), 'vs.PLineLength', 1, 'Länge')
	#vs.DefineCustomObj('rec3', 1)
	#vs.EnableParameter(vs.LNewObj(), 'LineLength', 0)
	vs.GetCatalogItem(vs.LNewObj())
	
	#outputs
	self.Params.pt.value = (100)
	

Wenn ich dieses Ausführe, erhalte ich das gleiche Ergebnis wie zuvor. Erstelle ich aber mit diesem einen Node ein MarionetteObject, so erhalte ich zwar noch das Rechteck, jedoch habe ich weder die Modifikationspunkte noch kann ich in der Infopalette dessen Parameter verändern.

 

Bin ich hier auf dem absoluten Holzweg? oder wie könnte ich dies erreichen?

 

Mein Ziel ist es, nicht auf den ControlPoint3D angewiesen zu sein, da ich mehrere MarionetteObject's habe, welche ich jeweils nur in der Länge oder in der Länge&Breite bearbeiten möchte, ohne dass dabei der Hilspunkt irgendwo im 3D Raum landet... 

scheint eine ziemliche "Knacknuss" zu sein.

 

Besten Dank für jeden Denkanstoss!

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

Nun ja, mir gehts genau darum "sowohl als auch" zu erreichen.

Aktuell habe ich diverse PIOs erstellt. in der Praxis zeigt sich jedoch, dass das Einfügen und auf die richtige Grösse setzen ziemlich aufwändig wäre. Dies ginge mit Modifikationspunkten deutlich intuitiver.

 

Da es aber oft auch vorkommt, dass ein Wert fix ist, oder um einen fixen Wert korrigiert werden soll, ist die Eingabe über die OIP deutlich komfortabler - besonders wenn ich mehrere Objekte um den gleichen Wert verändern möchte.

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

So wie du oben vorgehst, ist dein Plug-in Objekt im Marionette Objekt drin. D.h. du hast dann nur noch Zugriff auf die Kontrollmechanismen der Marionette. Das was du möchtest, würd ich mit einem reinen Python-Plugin machen. Allerdings ist auch das kompliziert. Du brauchst zwei verschiedene Abläufe für die verschiedenen Inputmöglichkeiten. Zusätzlich musst du ja auch herausfinden, welcher der beiden Inputs geändert wird, d.h. du musst den alten Status in einer Datenbank speichern und die Eingaben damit abgleichen.

Vectorworks 2024 - Architektur - Win 10

Link zu diesem Kommentar

Ich versuche eigentlich primär, innerhalb Marionette den "ControlPoint3D" so zu modifizieren, dass ich entweder eine bis zwei Achsen "blockiere", also statisch festlege, scheitere aber.

 

Leider finde ich keinerlei Angaben, wie

Marionette.CreateControlPointCoord3D(self.Handle, x, y, z) 

oder 

vs.Mrntte_ControlPoint(nodeHandle, coordX, coordY, coordZ, False) #3D


vs.Mrntte_ControlPoint(nodeHandle, coordX, coordY, 0, True) #2D

Funktionieren.

 

Mein Hauptproblem ist, dass z.B. "coordY" IMMER direkt auf die zweite Variable aus "class Params" zugreift, auch wenn ich dort einen absoluten Wert eingebe.

Wenn es für Marionette ein OIP-Widget-Type geben würde, welcher nichts anzeigt (auch keine Separator-Linie) dann hätte ich beinahe einen Lösungsansatz gefunden:

def RunNode(self):
	#inputs
	x = self.Params.x.value
	y = self.Params.y.value = 100 #Diesen Wert möchte ich aber Restlos aus dem OIP entfernen
	z = self.Params.z.value = 100 #Diesen Wert möchte ich aber Restlos aus dem OIP entfernen
	#script
	
	appMajor, appMinor, appMaint, platform = vs.GetVersion()	
	units = vs.GetPrefReal(150)	
	pioHandle = vs.Handle(Marionette.parametric_handle) 
	if pioHandle != vs.Handle(0):
		if appMajor >=24:
			Marionette.CreateControlPointCoord3D(self.Handle, x, y, z)
			units = vs.GetPrefReal(150)	
			x = x/units
			y = y/units	
			z = z/units
		else:
			x = x/units
			y = y/units	
			z = z/units
	else:
		x = x/units
		y = y/units
		z = z/units
	#outputs
	self.Params.pt.value = (x, y, z)

 

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

@hölzli

Das hier sieht schon sehr vielversprechend aus:

https://forum.vectorworks.net/index.php?/topic/69679-control-point-1-dimension/&do=findComment&comment=371453

 

Der Kontrollpunkt lässt sich nur in einer Achse verschieben. :)

Wenn man hier der Control Point Node noch den Namen nimmt, tauchen die Koordinatenfelder auch nicht mehr im OIP auf.

 

Gruß


Antonio Landsberger

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar

Guten Tag Antonio

 

Besten Dank für den Hinweis. Dieses Thema ist übrigens von mir, ich heisse im englischsprachigen Forum einfach Gregi - frag mich nicht warum ich mich da nicht für einheitliche Logins entschieden habe ?

 

Mein Wunsch ist, dass ich die Koordinatenfelder sehe, jedoch nur diejenigen, welche auch variabel sein sollen...

  • Lachen 1

Vectorworks 2022 interiorcad |  Windows11

Link zu diesem Kommentar

Hehe, alles klar! ?

 

Nun, dann würde ich die Inputs aus der Control Point Node herausnehmen und in jeweils eigene Input-Nodes packen und nur diejenigen mit Namen ausstatten, die angezeigt werden sollen.

Ansonsten - falls Informationen nur angezeigt, jedoch nicht geändert werden sollen, kannst du diesen Weg gehen:

Im OIP-Bereich:

OIPvalue = Marionette.OIPControl( 'WERTBEZEICHNUNG', Marionette.WidgetType.TextStaticParam, 'WERT' )

Im Skript:

self.Params.OIPvalue.SetValue( str(WERT) )

 

Gruß


Antonio Landsberger

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar
vor 8 Minuten schrieb Antonio Landsberger:

Nun, dann würde ich die Inputs aus der Control Point Node herausnehmen und in jeweils eigene Input-Nodes packen und nur diejenigen mit Namen ausstatten, die angezeigt werden sollen.

Ich glaube nicht das das funktioniert, weil der Node dann nur während der Laufzeit des Netzwerks weiss, wo der Kontrollpunkt hinkommt und ihn für die restliche Zeit bei 0, 0 (oder je nach Default auch anders) platzieren würde.

Das Problem gibt es zum Beispiel auch bei PopUp-Listen in der OIP. Die können auch nicht dynamisch, je nach Ergebnis im Script, gefüllt werden.

 

 

Ich bin nicht ganz nachgekommen mit lesen und verstehen, was du alles schon versucht hast, aber wenn

Marionette.CreateControlPointCoord3D(self.Handle, x, 100, 100)

nicht funktioniert, gibt es meiner Meinung nach keine Möglichkeit, dein Problem mit Marionette zu lösen.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Wie werden den die Nodes verteilt? Ich weiss von @M.Graf TH-OWL, dass er zusammen mit @Pascal Völz einige Nodes erstellt hat, diese aber wegen Uneinigkeiten, wie sie unter die Leute gebracht werden sollen noch nicht veröffentlicht wurden.

 

Wäre doch toll, wenn diese Nodes sich auch gleich auf dieser Liste befinden würden und direkt in die Standardlibary eingebunden würden.

 

Zählt übrigens auch für die breit anwendbaren Nodes aus der Sammlung von @Dominique Corpataux. Die sehr spezifischen würde ich auslassen.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Hallo Manuel,

zu internen Vorgängen kann ich leider keine Auskunft geben.
In der Marionette-Gallery findest du diverse Nodes, die von M.Graf und Pascal Völz für CWD erstellt wurden.

Bei der Übergabe der erwähnten Wishlist werden natürlich alle Nodes berücksichtigt.

Gruß


Antonio Landsberger

ComputerWorks GmbH

http://www.computerworks.de

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,5Tsd
    • Beiträge insgesamt
      121Tsd
×
×
  • Neu erstellen...