Zum Inhalt springen

Abfrage der Maße eines Symbols, ohne dass die Drehung berücksichtigt wird


Empfohlene Beiträge

Hallo Zusammen,
ich würde gerne meinen Symbolen die Maße, Länge/ Breite/ Höhe in Feldern einer Datenbank hinzufügen.

Das würde ich nur ungern von Hand tun, also habe ich die Daten via Datenmanager auslesen lassen.

Mein Problem ist, das die Werte sich auf das gedreht Objekt beziehen und nicht auf die Symboldefinition selber.

 

Gibt es da eine Lösung die ich nicht sehe, oder wird das Handarbeit?
Vielen Dank schon mal, in Hoffnungsvoller Erwartung.

 

VW-Design-Suite: 2023 / PC

Link zu diesem Kommentar

Hallo Tonfischertechnik,

 

mit Hilfe einer Tabelle und den unten stehenden Formeln,

können Sie über die Skalierungsfaktoren der Symbole, an Werte kommen.

 

Allerdings wird das nur recht einfache Geometrie klappen,
a die "Bounding Box" der Symbole damit abgefragt werden kann.

 

Es bietet sich an ein Symbol mit der Länge 1 x 1 x 1 cm zu erstellen

und dieses dann auf die entsprechende Größe zu asynchron zu skalieren.

 

Bei einer komplexere Geometrie könnte auch nur z.B. die Länge

ausgewertete werden unabhängig der Lage im 3D-Raum. 

 

Sind die Symbole gedreht und sie greifen mit Tabellenformeln wie: Länge, Breite usw.

darauf zu, dann wird die gedrehte "Bounding Box" der Symbole ausgewertet und die
Werte entsprechen nicht der Objektgröße.

 

Formeln für Symbol-Skalierungsfaktoren:

=OBJEKTDATEN('object variable'; 102)  = Symbol-Skalierungsfaktor X

=OBJEKTDATEN('object variable'; 103)  = Symbol-Skalierungsfaktor Y

=OBJEKTDATEN('object variable'; 104)  = Symbol-Skalierungsfaktor Z

 

  • Like 1

Gruß

Tobias Kern

 

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar

Hallo Zusammen,

Meine Situation ist folgende:
Ich möchte über den Datenmanager Symbolen ihre Länge, Breite, Höhe abfragen und im IFC-Export mitgeben.
Aber eben die orginalen Symbol-Maße und nicht die der gedrehten Objekte im Plan.
Die Symbole sind bereits erstellt, Medientechnik in 3 Detailierungsgraden.
Ich kann natürlich hingehen und die Boundingbox rausmessen und in Der Symboldatenbank händisch eingeben, dachte aber dass das über eine Funktion wie "nehme das Symbol, gib mir die Breite der Boundingbox" auch zu lösen wäre.
Skalierung gibt es bei mir nicht.
Geht nur händisch?

 

Link zu diesem Kommentar

Hallo,

 

wenn es keinen einfacheren Weg gibt (bin diesbezüglich kein Experte), könnte es natürlich eine Möglichkeit sein ein kleines Python Script für dieses Problem zu schreiben.

 

In einem Test konnte ich so die Abmessungen aller Symboldefinitionen einer Datei ermitteln und diese in eine zuvor angelegte Datenbank in die entsprechenden Symbolinstanzen schreiben die in der Datei platziert worden sind.

 

Das Script dafür könnte z.B. so aussehen:

(Ich habe im Vorfeld eine Datenbank angelegt die "eigen" heißt. Diese Datenbank hat 3 Zahlenfelder x, y und z. Es ist davon auszugehen, dass man so aber auch in andere bestehende Datenbanken schreiben kann)

# FUNCTIONS
def criteria_to_handle(criteria):
	handles = []
	def callback_criteria_to_handle(handle):
		handles.append(handle)
	vs.ForEachObject(callback_criteria_to_handle, criteria)
	return(handles)


# SCRIPT
# erste symboldefinition in der datei aufrufen
current_sym_def = vs.FSymDef()
while current_sym_def != None:
	# 2d abmessungen
	p1, p2 = vs.GetBBox(current_sym_def)
	dx = p2[0] - p1[0]
	dy = p1[1] - p2[1]
	
	# 3d abmessungen
	dy_3d, dx_3d, dz_3d = vs.Get3DInfo(current_sym_def)
	
	# symboldefinition mit der datenbank verknuepfen und diese mit den werten fuellen
	vs.SetRecord(current_sym_def, "eigen")
	vs.SetRField(current_sym_def, "eigen", "x", dx)
	vs.SetRField(current_sym_def, "eigen", "y", dy)
	vs.SetRField(current_sym_def, "eigen", "z", dz_3d)
	
	# alle symbolinstanzen der symboldefinition aufrufen
	symbols_in_drawing = criteria_to_handle(f"((S='{vs.GetSDName(current_sym_def)}'))")
	
	# jede symbolinstanz mit der datenbank verknuepfen und diese mit den werten fuellen
	for item in symbols_in_drawing:
		vs.SetRecord(item, "eigen")
		vs.SetRField(item, "eigen", "x", dx)
		vs.SetRField(item, "eigen", "y", dy)
		vs.SetRField(item, "eigen", "z", dz_3d)
	
	# die naechste symboldefinition aufrufen
	current_sym_def = vs.NextSymDef(current_sym_def)

Ein Nachteil dieser Vorgehensweise ist, dass die Werte in der Datenbank natürlich nicht dynamisch sind. D.h. wenn ein Symbol verändert / umgezeichnet wird dann muss das Script nochmals ausgeführt werden, sodass wieder die aktuellen / korrekten Werte in den Datenbanken der Symbolen stehen.

 

Falls kein einfacherer Weg zum gewünschten Ergebnis führt und Interesse daran besteht das mit einem Script zu lösen, helfe ich dabei gerne weiter.

 

 

Mit freundlichen Grüßen,

Letti

  • Like 5
  • Verwirrt 1
  • Lieben 2
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,9Tsd
    • Beiträge insgesamt
      123,3Tsd
×
×
  • Neu erstellen...