Zum Inhalt springen

Große Anzahl an Symbolen in sich rotieren


Mitch

Empfohlene Beiträge

Kann mir jemand auf die Sprünge helfen?

Ich müsste eine große Anzahl (ca 480) an 3D-Symbole jeweils in sich um 180° drehen. Ich müchte das ungern einzeln machen müssen...

 

VW2019 SP4

 

Danke schonmal.

Liebe Grüße

Michael

Michael Gärttling

 

licht . technik . design

Osterholzallee 140-1

71636 Ludwigsburg

 

mail@lightingtheworld.de

 

Link zu diesem Kommentar

Kein VW zur Hand.

 

Aber ist nicht in der OIP eine Eingabe für den Winkel von Symbolen ?

Allerdings drehen sie sich dann um ihren Einfügepunkt und

würden, wenn alle ausgewählt, mit neuer Winkeleingabe, alle

dem selben Winkel übernehmen.

Also sich nicht nur um 180• drehen, sondern auf den absoluten Winkel.

📦 Mac Mini M1 16 GB M1  macOS 14 Sonoma PB

🗑️ Mac Pro 6c 24 GB D700  macOS 12.5 Monterey, in Rente ...
📺 PC RYZEN 3950X 64 GB RX6800 16 GB  🐧 Manjaro + OpenSUSE Tumbleweed + ElementaryOS
VW 2023 ARCH US
🇪🇺 Europe

Link zu diesem Kommentar
vor 11 Stunden schrieb zoom:

Aber ist nicht in der OIP eine Eingabe für den Winkel von Symbolen ?

Allerdings drehen sie sich dann um ihren Einfügepunkt und

würden, wenn alle ausgewählt, mit neuer Winkeleingabe, alle

dem selben Winkel übernehmen.

Also sich nicht nur um 180• drehen, sondern auf den absoluten Winkel.

Theoretisch geht das über OIP, allerdings genau wie Du sagst nur auf einen absoluten Winkel, ich müsste um einen relativen Winkel drehen.

Und, mir wird leider kein Feld angeboten um den Winkel einzutragen, vermutlich weil die Instanzen alle unterschiedliche 3D-Ausrichtungen haben.

3D-Rotieren fällt leider auch aus, da ich dort Alle nur um einen gemeinsamen Punkt drehen kann.

Michael Gärttling

 

licht . technik . design

Osterholzallee 140-1

71636 Ludwigsburg

 

mail@lightingtheworld.de

 

Link zu diesem Kommentar

Sind es überall die selben Symbole?

 

In diesem Fall könntest du die Objekte im Symbol drehen.

Wenn du noch andere nicht drehbare Instanzen von diesem Symbol im Plan hast, kannst du ein neues Symbol erstellen. Der Inhalt von diesem ist das alte Symbol, allerdings so rotiert wie du gerne möchtest. Nun kannst du alle zu rotierende Symbole ersetzen. Bei einer Bearbeitung vom alten Symbol, würde sich so auch das neue anpassen.

 

Oder als weitere Option könnte auch Marionette dienen.

  • Like 1

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Also generell scheint es diese verbreitete Möglichkeit,

Elemente lokal um ihr Zentrum zu drehen oder skalieren zu können

in VW nicht zu geben.

Aber ich meine Pat Stanford hätte auf dem US Forum dafür ein

Script gebastelt ....

📦 Mac Mini M1 16 GB M1  macOS 14 Sonoma PB

🗑️ Mac Pro 6c 24 GB D700  macOS 12.5 Monterey, in Rente ...
📺 PC RYZEN 3950X 64 GB RX6800 16 GB  🐧 Manjaro + OpenSUSE Tumbleweed + ElementaryOS
VW 2023 ARCH US
🇪🇺 Europe

Link zu diesem Kommentar

Ja, über ein Duplikat des Symbols habe ich es jetzt auch gelöst.

 

Allerdings finde ich, dass eine entsprechende Funktion möglich sein sollte, bzw. dass die Option "um Objektmittelpunkt rotieren" im 3D-Rotieren-Menü genau das tun sollte, jedes Objekt um SEINEN Mittelpunkt rotieren. Und nicht die komplette Selektion als ein Objekt zu interpretieren.

Michael Gärttling

 

licht . technik . design

Osterholzallee 140-1

71636 Ludwigsburg

 

mail@lightingtheworld.de

 

Link zu diesem Kommentar
vor 14 Minuten schrieb Manuel Roth:

In diesem Fall könntest du die Objekte im Symbol drehen.

 

Das scheint mir im Moment auch die zuverlässigste Variante zu sein.

📦 Mac Mini M1 16 GB M1  macOS 14 Sonoma PB

🗑️ Mac Pro 6c 24 GB D700  macOS 12.5 Monterey, in Rente ...
📺 PC RYZEN 3950X 64 GB RX6800 16 GB  🐧 Manjaro + OpenSUSE Tumbleweed + ElementaryOS
VW 2023 ARCH US
🇪🇺 Europe

Link zu diesem Kommentar
vor 10 Minuten schrieb Mitch:

Ja, über ein Duplikat des Symbols habe ich es jetzt auch gelöst.

 

Allerdings finde ich, dass eine entsprechende Funktion möglich sein sollte, bzw. dass die Option "um Objektmittelpunkt rotieren" im 3D-Rotieren-Menü genau das tun sollte, jedes Objekt um SEINEN Mittelpunkt rotieren. Und nicht die komplette Selektion als ein Objekt zu interpretieren.

 

 

Ja, wäre schön.

 

In 3D Apps wie C4D oder Modo verwende ich das ständig (lokales Action Center)

Z.B. Um Baumsymbole in zufälligen Winkeln in 3 Achsen zu verdrehen und zu skalieren.

 

Allerdings frage ich mich ob das so im CAD noch so viel Sinn ergibt.

Bei Symbolen mit bewusstem Einfügepunkt mag das noch funktionieren.

(wobei meine Symbolursprünge meist eher für eine sinnvolle Platzierung als für eine

Rotation gedacht sind),

Aber bei anderen Objekten, wie z.B. einfachen Grundkörpern, geht mir das Ändern von

der geometrischen Mitte aus, eigentlich schon immer auf den Zeiger, weil ich sie

jedesmal wieder nachschieben muss.

Bearbeitet von zoom
  • Like 1

📦 Mac Mini M1 16 GB M1  macOS 14 Sonoma PB

🗑️ Mac Pro 6c 24 GB D700  macOS 12.5 Monterey, in Rente ...
📺 PC RYZEN 3950X 64 GB RX6800 16 GB  🐧 Manjaro + OpenSUSE Tumbleweed + ElementaryOS
VW 2023 ARCH US
🇪🇺 Europe

Link zu diesem Kommentar

Hab dir ein Script gemacht, das alle markierten Symbole um einen zufälligen Wert dreht.

#by herbieherb, 16.07.2019
#rotates all selected symbols by random value
#ignores other object types

def Rotate(h):
	if vs.GetTypeN(h) == 15:
		x, y = vs.GetSymLoc(h)
		vs.HRotate(h, x, y, vs.Random() * 360)

vs.ForEachObjectInLayer(Rotate, 2, 0, 2)

Du kannst den Code in der Bibliothek als Python Script ablegen, dann kannst du den per Doppelklick da nutzen. Oder du kopierst diese Datei in deinen Benutzerordner unter Plugins, danach findest du den Menübefehl 'Symbole zufällig rotieren' welchen du in deine Arbeitsumgebung einbauen und auch per Shortcut nutzen kannst.

Symbole zufällig rotieren.vsm

  • Like 3

Vectorworks 2024 - Architektur - Win 10

Link zu diesem Kommentar
  • 3 Jahre später...

Versuche gerade, das Script so zu modifizieren, dass die ausgewählten Symbole zufällig skaliert werden:

 

def Resize(h):
    if vs.GetTypeN(h) == 15:
        x, y = vs.GetSymLoc(h)
        vs.HScale2D(h, x, y, vs.Random() * 1.5, vs.Random() * 1.5, True)

vs.ForEachObjectInLayer(Resize, 2, 0, 2)

 

Wo liegt der Fehler, bzw. was habe ich vergessen? Verstehe insbesondere nicht, was

scaleText   :

in der Funktion macht (siehe https://developer.vectorworks.net/index.php/VS:HScale2D). Und können Symbole überhaupt mit dieser Funktion skaliert werden?

 

 

 

Vectorworks Landschaft 2023

Mac Studio 2022 M1 Max - macOS Sonoma

Link zu diesem Kommentar

Das Problem ist, das sich Symbole beim Skaliern ein bisschen exotisch verhalten.

 

Grundsätzlich macht der Befehl, den du verlinkst genau das selbe wie der Befehl Ändern>Skalieren. Dort werden Symbole zwar verschoben, wenn sie mit mehreren anderen Objekten verschoben werden, sie werden aber nicht grösser oder kleiner weil das Symbol als fixer Block angesehen wird, der immer gleich aussehen soll. (Finde ich diskutabel, ist aber ein anderes Thema.)

Bei diesem Befehl hast du auch die Option, Text nicht zu skalieren. Oder schon, wenn du den Hacken setzt. Dies ist der letzte Parameter von deinem Befehl.

 

Damit das Script funktioniert, musst du für die Symbolskalierung einen anderen Ansatz nehmen. Sieht dann in etwa so aus.

def ran(min, max, kommastellen = None):
	r = vs.Random() * ( max - min ) + min
	
	if kommastellen != None:
		return round( r , kommastellen)
	else:
		return r
	
def Resize(h):
	if vs.GetTypeN(h) == 15:
		min = 0.5
		max = 1.5
		
		x = ran(min, max, 2)
		y = ran(min, max, 2)
		z = ran(min, max, 2)
		
		vs.SetObjectVariableInt(h, 101, 3)
		vs.SetObjectVariableReal(h, 102, x)
		vs.SetObjectVariableReal(h, 103, y)
		vs.SetObjectVariableReal(h, 104, z)
		
vs.ForEachObjectInLayer(Resize, 2, 0, 3)

 

ran gibt dir eine zufällige Zahl in einem gewissen Bereich, die wenn gewünscht auf eine gewisse Anzahl Nachkommastellen gerundet wurde. Brauche ich sehr gerne, weil ich sonst jedes mal wieder überlegen muss, wie ich auf den gewünschten Bereich komme. Dein Script oben könnte nähmlich theoretisch auch mit Faktor 0 skalieren, was zu unschönen Ergebnissen führen kann.

 

SetObjectVariableInt setzt im Prinzipt die Eingabe in der Infopalette. Ist aber nur für ausgewählte Parameter verfügbar. Variable 101 ist, welche Skalierungsoption genutzt werden soll. 102 bis 104 stellt die Skalierung in der entsprechenden Dimension ein.

 

Und zum Schluss noch zu ForEachObjectInLayer. Wenn du dort als letzter Parameter 2 angibst, werden alle selektierten Objekte auf allen sichtbaren Ebenen abgearbeitet. Dies heisst aber nicht zwingend, das die Objekte im Moment auch mit der Maus bearbeitbar sein müssen. Es kann vorkommen, das ein selektiertes Objekt sich auf einer angegrauten Ebene befindet und demnach trotzdem bearbeitet wird. Benutze besser die Option 3 für bearbeitbare Ebenen.

Bearbeitet von Manuel Roth
  • Like 1

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

HIer noch die Modifikation, um immer symmetrisch zu skalieren:

 

def ran(min, max, kommastellen = None):
    r = vs.Random() * ( max - min ) + min
    
    if kommastellen != None:
        return round( r , kommastellen)
    else:
        return r
    
def Resize(h):
    if vs.GetTypeN(h) == 15:
        min = 0.5
        max = 1.5
        
        x = ran(min, max, 2)
        
        vs.SetObjectVariableInt(h, 101, 2)
        vs.SetObjectVariableReal(h, 102, x)
        
vs.ForEachObjectInLayer(Resize, 2, 0, 3)

Bearbeitet von linosphere

Vectorworks Landschaft 2023

Mac Studio 2022 M1 Max - macOS Sonoma

Link zu diesem Kommentar

Da würdest du die Symbole auf symmetrische Skalierung einstellen und nur einen Random-Wert berechnen. Die dafür notwendige Objektvariable ist im Vectorscript Appendix unter Object Selectors zu finden. Das Script sieht dann so aus:

 

def ran(min, max, kommastellen = None):
	r = vs.Random() * ( max - min ) + min
	
	if kommastellen != None:
		return round( r , kommastellen)
	else:
		return r
	
def Resize(h):
	if vs.GetTypeN(h) == 15:
		min = 0.5
		max = 1.5
		
		x = ran(min, max, 2)
		# y = ran(min, max, 2) brauchts nicht mehr
		# z = ran(min, max, 2) brauchts nicht mehr
		
		vs.SetObjectVariableInt(h, 101, 2) # statt vs.SetObjectVariableInt(h, 101, 3), stellt Skalierung auf Symmetrisch
		vs.SetObjectVariableReal(h, 102, x)
		# vs.SetObjectVariableReal(h, 103, y) brauchts nicht mehr
		# vs.SetObjectVariableReal(h, 104, z) brauchts nicht mehr
		
vs.ForEachObjectInLayer(Resize, 2, 0, 3)

 

  • Like 1

Vectorworks 2024 - Architektur - Win 10

Link zu diesem Kommentar

Wenn du das ganze als Menübefehl bauen willst, würde ich empfehlen die Min und Max-Werte per Dialog abzufragen, da du sie ansonsten nur schwer ändern kannst.

 

Aufgefallen ist mir auch noch, dass ein bereits skaliertes Symbol nicht von der skalierten Grösse aus weiterskaliert wird, sondern auf eine absolute Skalierung von 0.5 - 1.5 eingestellt wird. Das Script unten regelt diese Problem.

def ran(min, max, kommastellen = None):
	r = vs.Random() * ( max - min ) + min
	
	if kommastellen != None:
		return round( r , kommastellen)
	else:
		return r
	
def Resize(h):
	if vs.GetTypeN(h) == 15:		
		k = round( ran(min, max) * vs.GetObjectVariableReal(h, 102) , 2)
		
		vs.SetObjectVariableInt(h, 101, 3)
		vs.SetObjectVariableReal(h, 102, k)

min = vs.RealDialog('Min', 0.5)
max = vs.RealDialog('Max', 1.5)

vs.ForEachObjectInLayer(Resize, 2, 0, 3)

 

  • Like 2

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

Cool, da hatte ich auch schon drüber nachgedacht.

 

Jetzt könnte ich mir noch vorstellen, dass die Abfrage ein Fenster öffnet, in dem min/max-Werte eingegeben und symmetrisch/asymmetrisch per radiobutton gewählt werden können. Dann könnte Computerworks das auch in das Standard-Toolset übernehmen ;)

 

Aber so ist auch schon toll, die Kollegen aus der Wettbewerbsabteilung freuen sich jetzt schon :)

 

Vectorworks Landschaft 2023

Mac Studio 2022 M1 Max - macOS Sonoma

Link zu diesem Kommentar

Hab den Beitrag eben erst gesehen: Gibt es im Kontextmenu (also Rechtsklick über aktiviertem Objekt) bei euch den Punkt "Rotieren und Spiegeln" den Punkt "Einzeln um 90° nach links / rechts drehen" nicht?

Kann sein, dass das nur den Spotlight-Anwendern zur Verfügung steht (was mich nicht wundern würde, habe eine durchaus merkwürdige Auswahloption auch nur in der Spotlight-Umgebung und bekomme sie nicht in andere Arbeitsumgebungen...)

 

Viele Grüße

Markus

Screenshot einzeln rotieren.png

 

VW 2023 SP6 R1 Designer - Braceworks (Deutsche Version) auf Windows 10 (64 Bit)

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...