User Tools

Site Tools


blog:zerlegen_eines_koerpers_mi_tpython

Zerlegen eines Körpers mitPython

Das Design eines Trichter-Modells im CAD ist eine Aufgabe, die sich dem Skript auf die Eingabe der Hauptmaße reduziert.

Will oder kann man den Trichter nicht als ein ganzes Teil fertigen, z. B. als 3D Druck oder Guss, wird man ihn aus vier zugeschnittenen und abgeschrägten Platten herstellen.

Um aus dem Gesamtmodell die Platten mit den pasenden Gehrungswinkeln zu bekommen, schneidet man den Trichtern an den Kanten in vier Teile. die Koordinaten der Schnittlinien bzw. lassen sich aus dem Modell auslesen.

Auf jede Ecke eines Modells wird über

meinModell.Shape.Vertexes[i]

zugegriffen.

Dabei durchläuft i die Zahlen 0 bis Anzahl der Ecken minus 1. Welche Ecke wo liegt, bekommt man beim Selektieren von Ecken heraus. Wählt man eine Ecke aus, so erscheint in der Selektionsansicht ein Eintrag wie

Unbenannt.Trichter.Vertex8(Trichter)

Man kann sich aber auch alle Ecken mi ihren Nummern im 3D Modell anzeigen lassen, indem bei jeder Ecke ein Textobjekt eingefügt wird.

import Draft

def zeigeEckNummern(obj):

	vxs=obj.Shape.Vertexes
	for i,v in  enumerate(vxs):
		t=Draft.makeText(["   "+str(i+1)],point=v.Point)
		t.ViewObject.DisplayMode = "Screen"
		t.ViewObject.FontSize=15
		App.ActiveDocument.ActiveObject.ViewObject.TextColor=(1.0,1.0,0.0)
		Draft.makePoint(v.Point)
		App.ActiveDocument.ActiveObject.Label="Vex " +str(i+1)
		

		App.ActiveDocument.ActiveObject.ViewObject.PointSize=6
		App.ActiveDocument.ActiveObject.ViewObject.PointColor=(1.0,1.0,0.0)
		App.ActiveDocument.ActiveObject.Label="Label " +str(i+1)


zeigeEckNummern(App.ActiveDocument.Trichter)

Die interne Nummerierung der Ecken, Kanten und Flächen unterscheidet sich von der Anzeige um eins, deshalb wird bei der Ausgabe str(i+1) statt str(i) verwendet.

Für den Trichter lassen sich die einzelnen Wände aus je 8 Ecken zusammensetzen.

Alle Teile sind gradlinig begrenzt und das Part-Modul iefert die Methoden zum Erzeugen der Kantenzüge (Polygone) und Flächen(Face).

Für die vier Seiten sind die jeweiligen Eckennummern und die Seiten zu bestimmen. Da der Trichter-Generator immer auf die gleiche Weise arbeitet, muss diese Arbeit auch nur einmal getan werden.

vxs=App.ActiveDocument.Trichter.Shape.Vertexes

seiten=[
	[[4,3,1,2],[1,2,9,10],[9,10,14,16],[14,16,4,3],[3,1,10,14],[4,2,9,16]],
	[[2,5,12,4],[12,4,16,15],[16,15,8,9],[8,9,2,5],[2,4,16,9],[5,12,15,8]],
	[[7,10,1,6],[1,6,11,3],[11,3,14,13],[14,13,7,10],[1,3,14,10],[6,11,13,7]],
	[[7,8,5,6],[5,6,11,12],[11,12,15,13],[15,13,7,8],[8,5,12,15],[6,11,13,7]]
]


for fls in seiten:
	faces=[]
	for fl in fls:
		pts=[vxs[v-1].Point for v in fl]
		fa=Part.Face(Part.makePolygon(pts,True))
		faces.append(fa)

	Part.show(Part.makeSolid(Part.makeShell(faces)))
	App.ActiveDocument.ActiveObject.ViewObject.Transparency=60

Die erzeugten Seitenteile sind in dieser Form (noch) nicht funktional vom Trichter abhängig. Bei Änderung des Parameter des Trichters passt sich dessen Form automatisch an. Die Teile müssen aber durch einen erneuten Aufruf des Skripts erzeugt werden.

blog/zerlegen_eines_koerpers_mi_tpython.txt · Last modified: 2017/03/22 11:26 by freek