User Tools

Site Tools


blog:farbige_darstellung_von_werten

Farbige Darstellung von Werten

Für einen objektabhängigen Wert soll seine Abweichung von einem Wunschwert angezeigt werden. Im konkreten Beispiel geht es um die Länge einer Kurve (BSpline). Wird die Kurve bei der Bearbeitung zu lang, soll sie sich rot färben, wird sie zu kurz, soll sie blau werden.

Die einfachste Lösung ist ein Part::FeaturePython Objekt, welches die Kurve als Parameter verwendet und bei jeder Veränderung der Kurve deren Länge berechnet und mit den Vorgaben vergleicht.

spline = Draft.makeBSpline(points,closed=False,face=True,support=None)

a=FreeCAD.activeDocument().addObject("Part::FeaturePython","MyMonitor")
m=Monitor(a)

a.source=spline
a.minVal= spline.Shape.Length*0.95
a.maxVal= spline.Shape.Length*1.05

Die Monitor-Klasse erledigt die Überwachungs- und Färbearbeit. Sie ist im Skript enthalten.

Bei Abweichungen über die Genzen hinaus wird die Kurve neu gefärbt. Das erledigt die execute-Methode.

def execute(proxy,obj):
	mm=20
	if obj.source <> None:
			print ("Value and interval:", round(obj.source.Shape.Edge1.Length,1),obj.minVal,obj.maxVal)
			obj.source.ViewObject.LineColor=(1.0,1.0,1.0)
			if obj.source.Shape.Edge1.Length<obj.minVal:
				obj.source.ViewObject.LineColor=(0.0,.0,1.0)
			elif obj.source.Shape.Edge1.Length>obj.minVal and obj.source.Shape.Edge1.Length<obj.minVal+mm:
				j=1-(obj.minVal+mm-obj.source.Shape.Edge1.Length)/mm
				j=j*0.5
				obj.source.ViewObject.LineColor=(j,j,1.0)
			elif obj.source.Shape.Edge1.Length<obj.maxVal and obj.source.Shape.Edge1.Length>obj.maxVal-mm:
				j=(obj.maxVal-obj.source.Shape.Edge1.Length)/mm
				j=j*0.5
				obj.source.ViewObject.LineColor=(1.0,j,j)
			elif obj.source.Shape.Edge1.Length>obj.maxVal:
				obj.source.ViewObject.LineColor=(1.0,0.0,.0)

blog/farbige_darstellung_von_werten.txt · Last modified: 2017/04/24 23:59 by freek