Grafik Werbung
Grafik Werbung
Grafik Werbung

Programmierung in einer Messsoftware - 1. Variante des Skripts

Das erste Python Skript für die ATOS Messsoftware bildet die Ausgangsbasis für eine Variante des Skripts, die im folgenden erläutert wird. Es gibt wieder eine Funktion, die bestimmte Berechnungen durchführt und ein Hauptprogramm, welches diese Funktion aufruft. Jedoch liefert die Funktion diesmal keine Daten an das Hauptprogramm zurück, die dort verarbeitet werden könnten, sondern - es passiert etwas anderes...

Das folgende Bild zeigt wieder die Sollgeometrie des Messobjekts mit mehreren Soll-Flächenpunkten, wobei der Punkt "P5" vom Anwender selektiert wurde. Das Hauptprogramm bildet aus den slektierten Sollelementen eine Liste und ruft die Funktion auf, wobei die Liste als Parameter übergeben wird.

Bild mit einem CAD-Körper und neun Messpunkten

Die Funktion sucht wieder nach benachbarten Elementen innerhalb des definierten Suchradius, baut mit diesen Informationen aber kein Dictionary auf, welches dem Hauptprogramm zurückgegeben wird, sondern selektiert alle diese Elemente innerhalb des Suchradius um das oder um die Elemente, welche der Funktion übergeben wurden.


# Funktion
def benachbarte_elemente( liste_soll_elemente, suchradius):
	
	import math
	wurzel = math.sqrt
	
	DEFAULT_NACHKOMMASTELLEN = 3
	
	# interne Funktion zur Berechnung des Abstands zwischen zwei Elementen bzw. zwischen deren "Mittelpunkten"
	def abstand(element1, element2):
		try:
			# Versuchen, die Koordinaten der beiden Elemente zu holen
			x1 = element1.center_coordinate.x
			y1 = element1.center_coordinate.y
			z1 = element1.center_coordinate.z
			x2 = element2.center_coordinate.x
			y2 = element2.center_coordinate.y
			z2 = element2.center_coordinate.z
		except RuntimeError:
			# Fehler: eines der Elemente hat keine "Mittelpunkt"-Koordinaten, also Rueckgabe eines Abstands 
			# nicht moeglich
			return(None)
		else:
			# Koordinaten sind vorhanden, also Abstand zwischen den "Mittelpunkten" berechnen und zurueckgeben
			abstand = wurzel( (x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2 )
			return(round(abstand, DEFAULT_NACHKOMMASTELLEN))
	
	# leere Elementliste oder Suchradius <= Null abfangen
	if len(liste_soll_elemente)==0 or suchradius<=0:
		return(None)
	# Parameter ok
	else:
		# alle Soll-Elemente in eine Liste
		liste_soll_elemente_alle = [i for i in gom.ElementSelection ({'category': ['key', 'elements', 'explorer_category', 'nominal', 'object_family', 'geometrical_element']})]
		
		# Liste erzeugen mit allen Kombinationen aus den beiden Listen (selektierte Soll-Elemente und alle Elemente)
		liste_alle_kombinationen = [(x,y,abstand(x,y)) for x in liste_soll_elemente for y in liste_soll_elemente_alle if (x!=y and abstand(x,y)<suchradius)]
		
		# in Liste enthaltene Elemente herausziehen, die innerhalb des Suchradius liegen...
		liste_soll_elemente_fuer_selektion = [i[1] for i in liste_alle_kombinationen]
		
		# ... und selektieren (sowie die vom Anwender selektierten Soll-Elemente selbst)
		gom.script.explorer.apply_selection (selection= liste_soll_elemente_fuer_selektion + liste_soll_elemente)


Nach dem Ablauf des Skripts sind alle ursprünglich vom Anwender angeklickten Elemente selektiert sowie zusätzlich alle Elemente, die sich innerhalb des Suchradius befinden. Im Beispiel ist also der ursprünglich ausgewählte Punkt "P5" selektiert sowie seine Nachbarn "P3" und "P6", die sich innerhalb des Suchradius von 200mm befinden:

Bild mit einem CAD-Körper und neun Messpunkten

Das Hauptprogramm ist recht unspektakulär und durch die fehlende Ausgabe im Editorfenster kürzer als die ursprüngliche Version. Es wird lediglich untersucht, ob Sollelemente selektiert sind und, falls ja, so werden diese in einer Liste an die Funktion übergeben.


# Hauptprogramm
# alle selektierten Soll-Elemente in eine Liste
liste_soll_elemente_selektiert=[i for i in gom.ElementSelection (gom.app.project.inspection.filter( 'is_selected', True))]

# Funktion zur Bestimmung der benachbarten Elemente aufrufen, falls Soll-Elemente selektiert wurden
if len(liste_soll_elemente_selektiert) > 0:
	ergebnis = benachbarte_elemente( liste_soll_elemente_selektiert, 200)



Grafik DownloadDownload Skript (Version 2, PY-Datei als ZIP-Datei, ohne Gewähr auf fehlerfreie Funktionalität)


Weiter zu einer nochmals geänderten Skript-Version   Grafik Pfeil nach rechts