Zum Inhalt springen

Marionette - Geschoss mit bestehenden Layer verbinden


KroVex

Empfohlene Beiträge

Salü Zusammen

 

Ich hab schon vor längerer Zeit mal das Marionette auf dem US-Forum gefunden, mit welchem Geschosse mit Beilagen erzeugt werden können.

Allerdings werden da auch gleich Konstruktionsebenen erzeugt, was ich nicht benötigen kann -> ich habe bereits ein Marionettescript, welches mir Konstruktionsebenen erzeugt und dieses hier bringt meine Reihenfolge nur durcheinander und lässt mir zu wenig Spielraum für die Zuweisung von den REF-Höhen zu bestimmten Ebenen.

 

Deshalb versuche ich hier meinen eigenen Node zu erstellen und sollte dafür drei Befehle benötigen:
1. Geschoss der Konstruktionsebene zuweisen   (vs.AssociateLayerWithStory)

2. Referenzhöhentyp erzeugen  (vs.SetLayerLevelType)

3. Referenzhöhentyp dem Geschoss mit der korrekten Höhe zuweisen (vs.AddStoryLevel)

 

Nun habe ich das Problem, das entweder das Geschoss mit dem Referenzhöhentyp der Konstruktionsebene hinzugefügt wird, oder dass die Referenzhöhe dem Geschoss mit der korrekten  Höhe zugewiesen wird - beides gleichzeitig will nicht gehen. Verlange ich da zu viel von einem einzelnen Node und muss dies aufteilen oder habe ich da einfach nur zu stark gebastelt?

 

#KroVex-Bastelstunde
@Marionette.NodeDefinition
class Params(metaclass = Marionette.OrderedClass):
#APPEARANCE
	#Name
	this = Marionette.Node( "layerLevelType" )
	this.SetDescription( 'Returns the name of the referenced layer' )

	#Input Ports
	obj = Marionette.PortIn(vs.Handle(0), 'hLayer')
	obj.SetDescription( "The input layer object" )
	sLevel = Marionette.PortIn( '' )
	sLevel.SetDescription( "The level assigned to the layer to be created" )
	hStory = Marionette.PortIn( vs.Handle( 0 ) )
	hStory.SetDescription( "The handle to the Story" )
	nElevation = Marionette.PortIn( 120 )
	nElevation.SetDescription( "The Elevation height to be assigned to the layer to be created" )
	
	#OIP Controls

	#Output Ports
	b0 = Marionette.PortOut()	
	b0.SetDescription( "whether the layer template was successfully created" )
	b1 = Marionette.PortOut()	
	b1.SetDescription( "whether the layer template was successfully created" )
	b2 = Marionette.PortOut()	
	b2.SetDescription( "whether the layer template was successfully created" )

#BEHAVIOR
	
def RunNode(self):
	#inputs
	h = self.Params.obj.value
	layerLevelType = self.Params.sLevel.value
	storyHandle = self.Params.hStory.value
	elevation = self.Params.nElevation.value

	#script
	layer = vs.GetLayer(h)
	units = vs.GetPrefReal(150)
	elevation = elevation * units
	boolean0 = vs.AssociateLayerWithStory(h, storyHandle)	#Sollte das Geschoss dem Layer zuweisen
	boolean1 = vs.SetLayerLevelType(h, layerLevelType) #Generiert Referenzhöhentyp
	boolean2 = vs.AddStoryLevel(storyHandle, layerLevelType, elevation, h) #Fügt Referenzhöhen zum Geschoss
	
	

	#outputs
	self.Params.b0.value = boolean0
	self.Params.b1.value = boolean1
	self.Params.b2.value = boolean2

 

Geschosse_Marionette.vwx

 

Gruss KroVex

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

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo KroVex,

 

nach meinen Erfahrungen mit dem Geschosskopierer

https://forum.vectorworks.net/index.php?/files/file/270-story-replicator-geschosskopierer/

 

muss vs.SetLayerLevelType

vor vs.AssociateLayerWithStory ausgeführt werden.

 

So ist es auch im Wiki kommentiert:

https://developer.vectorworks.net/index.php/VS:AssociateLayerWithStory

Zitat

(_c_, 2018.10.23): This needs the layer to be linked to a level with VS:SetLayerLevelType or it will fail. In the example below you have the sequence to make that work.

 

Probier es bitte so herum.

Gruß


Antonio Landsberger

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar

Salü Antonio Landsberger

 

Danke für deine Antwort auf diese eher komplexe Frage ?
Ich bin da schon ein wenig weiter, aber das Problem wird leider so nicht gänzlich gelöst, weil beim vs.SetLayerLevelType zwar ein Referenzhöhentyp angelegt wird und ich diesen dann mit der Ebene verknüpfen kann, aber bei diesem Befehl kann keine Höhenangaben gesetzt werden. Mit dem Befehl vs.CreateStoryLayerTemplate können Referenzhöhentypen auch mit Höhen angelegt werden, aber da werden auch Layer angelegt,  respektive mit dem kann ich keine bestehenden Layer mit dem Geschoss verknüpfen. Leider gibt es keinen "vs.SetLayerLevelTypeElevation" Befehl oder so ?:
2096608766_Bildschirmfoto2021-07-29um17_08_54.png.c71300cfe41ac894f5ff84ae7cb67242.png 

Mehr gibts da nicht.. was ich ein wenig seltsam finde.

 

Gruss KroVex

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

Link zu diesem Kommentar

Es gibt den Befehl

vs.AddStoryLevel(storyHandle, levelType, elevation, layerName)

wobei layerName optional ist. Ohne das ist es dann ein LevelType ohne "layer association".

 

Das hier ist die komplette Reihenfolge, in der ich vorgegangen bin:

# - 1 - Create Layer Level Types

# - 2 - Create Stories + Set Story Elevation

# - 3 - Create Design Layers

# - 4 - Create Level Types in Stories

# - 5 - Create Story Level Templates

 

Ergänzung:

Dass es kein SetLayerLevelTypeElevation gibt, wundert mich nicht. Die Referenzhöhentypen enthalten diese Information nicht. Siehe Screenshot.

1621839583_Bildschirmfoto2021-07-29um17_42_17.png.d739bde97a2333efa8fc58277674b4ba.png

  • Lieben 1

Gruß


Antonio Landsberger

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar
  • 1 Monat später...

Salü @Antonio Landsberger

 

Ich hatte wieder einmal ein wenig Zeit daran weiter zu arbeiten und habe das Ganze nun aufgebaut, wie du geschildert hattest:

Am 29.7.2021 um 17:40 schrieb Antonio Landsberger:

# - 1 - Create Layer Level Types

# - 2 - Create Stories + Set Story Elevation

# - 3 - Create Design Layers

# - 4 - Create Level Types in Stories

# - 5 - Create Story Level Templates

 

Ich hab das Ganze mehr zerteilt und für jeden einzelnen Befehl einen Node erstellt, damit ich besser prüfen kann, was wie funktioniert:
1461473600_Bildschirmfoto2021-09-06um15_53_42.thumb.png.be6361ddc738a9d7e7ce20dc70953f8a.png

 

KE_Geschosse.vwx


Alles funktioniert (auch das mit den Referenzhöhen ist nun klar), bis auf das Assoziieren der Ebene mit dem Geschoss.

Am 29.7.2021 um 12:04 schrieb Antonio Landsberger:

muss vs.SetLayerLevelType

vor vs.AssociateLayerWithStory ausgeführt werden.

 

"vs.SetLayerLevelType" wird erfolgreich ausgeführt, aber "vs.AssociateLayerLevelType" scheitert weiterhin. Kann irgendwie gesteuert werden, welcher Node zuerst ausgeführt wird oder müsste dies in zwei Schritten ausgeführt werden, damit es funktioniert?
Und wenn dies nacheinander geschehen sollte, wie kann ich das Geschoss als Handle herleiten? Ein Befehl "GetStory/GetStoryByName" habe ich nicht gefunden.

 

Danke für deinen weisen Rat ?

Gruss KroVex

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

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