Zum Inhalt springen

Symbole in Symbolen erreichen?


Fruitpunsh

Frage

Geschrieben

Gibt es eine Möglichkeit Symbole die wiederum in anderen Symbolen verschachtelt sind zu erreichen?

Um diese z.B. zu löschen oder in Gruppen umzuwandeln...

 

Ich habe ein Script geschrieben, welches alle Symbole mit spezifischem Namen in eine Gruppe umwandelt.

Das Script trifft alle Symbole die frei oder in Gruppen liegen, aber keine die innerhalb anderer Symbole stecken.

 

# Eingabedialog: Symbolname
name = vs.StrDialog("Symbolname: ", "")

# Kriterium: Symbolname ist ...
krit = "(S='" + name + "')"

def aufloesen(h):
	vs.SymbolToGroup(h, 0)

vs.ForEachObject(aufloesen, krit)

 

Anbei meine Testdatei mit freien und verschachtelten Symbolen

symbole.vwx

4 Antworten auf diese Frage

Empfohlene Beiträge

Geschrieben

Hallo

 

Wenn ich dich richtig verstehe, sollte diese kleine Änderung genügen.

krit = "NOTINREFDLVP & NOTINDLVP & INSYMBOL & (S='" + name + "')"

 

Wenn du das ganze noch ein wenig schöner lösen willst, kannst du es mit dem Get Symbol from Folder-Node verheiraten.

def aufloesen(h):
	vs.SymbolToGroup(h, 0)
	
def SymbolSelDialog( showall ):
	SetupDialogC	= 12255	 # Dialog open event ID
	CloseDialogC	= 12256	 # Dialog close event ID

	# alignment constants
	kRight		= 1
	kBottom		= 2
	kLeft		= 3
	kColumn		= 4
	kResize		= 0
	kShift		= 1

	# default and cancel button IDs
	kOK			= 1
	kCancel		= 2

	# control IDs
	kSymPopup	= 4

	def DialogHandler( item, data ):
		# setup of the dialog content ...
		if ( item == SetupDialogC ):
			resourceListID, numItems = vs.BuildResourceList( 16, 0, '' )
			if showall:		# show all symbols
				for cnt in range( numItems + 1 ):
					int = vs.InsertImagePopupResource( dialog, kSymPopup, resourceListID, cnt )
				#END for	
			else:			# show only symbols in user defined symbol folder
				for cnt in range( numItems + 1 ):
					tempStr = vs.GetNameFromResourceList( resourceListID, cnt )
					objH	= vs.GetObject( tempStr )
					parentH = vs.GetParent( objH )
					if ( objH != None ) and ( parentH == sFolderH ):
						int = vs.InsertImagePopupResource( dialog, kSymPopup, resourceListID, cnt )
				#END for
			#END if
	
		elif ( item == kOK ):
			objIndex = vs.GetImagePopupSelectedItem( dialog, kSymPopup )
			objName  = vs.GetImagePopupObject( dialog, kSymPopup, objIndex )
			
			# Kriterium: Symbolname ist ...
			krit = "NOTINREFDLVP & NOTINDLVP & INSYMBOL & (S='" + objName + "')"

			vs.ForEachObject(aufloesen, krit)
			
		#END if
	#END def DialogHandler()

	dialog = vs.CreateLayout( 'Dialog', True, 'OK', 'Abbrechen' )

	# create controls
	vs.CreateThumbnailPopup( dialog, kSymPopup )

	# set relations
	vs.SetFirstLayoutItem( dialog, kSymPopup )

	if ( vs.RunLayoutDialog( dialog, DialogHandler ) == 1 ):
		pass

#END def SymbolSelDialog()

SymbolListID, numSymItems = vs.BuildResourceList( 16, 0, '' ) #make list of all symbols
SymbolSelDialog( True ) #show all symbols
			
#END if

 

Dadurch wird dir ein Dialog mit einem Symbolpicker gezeigt. Dadurch entstehen bestimmt keine Rechtschreibefehler.

 

 

 

 

Beide Varianten lösen auch die verschachtelten Symbole auf. Dort hast du aber das Problem, dass die neue Gruppe als 3D-deklariert wird und demnach auch nur im 3D-Teil des Symbols angezeigt wird. Eher unschön, weil sie ja eigentlich nur 2D-Geometrie enthält. @Marc Wittwer Dieses Verhalten tritt aber auch beim manuellen Auflösen auf. Das innere 2D-Symbol wird aufgelöst und entschwindet in den 3D-Teil. Ist meiner Meinung nach ein Bug.

 

@Fruitpunsh Die 2D/3D Thematik wirst du aber sowieso noch bearbeiten müssen, weil soweit ich weiss auch mit dem Scriptbefehl immer nur die Geometrie der aktuellen Ansicht konvertiert wird.

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Geschrieben (bearbeitet)

Hallo

Die Antwort sollte bald erscheinen, sobald sie nicht mehr versteckt ist. (Was auch immer das heisst. Eventuell ist sie zu lang.)

Bearbeitet von Manuel Roth

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Geschrieben
vor 32 Minuten schrieb Manuel Roth:

Dieses Verhalten tritt aber auch beim manuellen Auflösen auf. Das innere 2D-Symbol wird aufgelöst und entschwindet in den 3D-Teil. Ist meiner Meinung nach ein Bug.

Hängt dies nicht damit zusammen in welchem Modus man sich befindet - 2D-Plan Draufsicht bzw. 3D Ansicht (oben, etc.)?

 

vor 35 Minuten schrieb Manuel Roth:

sobald sie nicht mehr versteckt ist. (Was auch immer das heisst.

Du hast hier wahrscheinlich irgend ein Begriff verwendet der auf der "Blacklist" steht. Ist mir auch schon passiert.

VW2024 SP7 R1 (Build 773964) Architektur

 

iMac 5K i5-6500 16GB R9 M390 2GB macOS 12.7

Ryzen 9 7900X 64GB RX 7800XT 16GB Win11

Geschrieben

Normalerweise schon. Auf der KE funktioniert das auch tip-top, aber wenn ich ein 2D-Symbol, welches im 2D-Teil eines Symbols (ebenfalls 2D und nicht hybrid) in eine Gruppe auflöse und mich dabei in der 2D-Draufsicht befinde, wird es mir trotzdem in den 3D-Teil des Umgebungssymbols gelegt.

  • Like 2

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

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