Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1617:dreieckologie_30.01.17

30.01.2017

Heute haben wir uns mit der sauberen Sortierung der Listen bzw. Tupel mit den Eckpunkten beschäftigt. Denn diese mpssen zunächst formatiert werden, damit unser Programm vernünftig funktioniert. Unser aktueller Code besteht aus zwei Programmen.

Das Programm „raw“ bereitet die Listen so um, dass sie mit dem anderen Programm als stl-Datei dargetsllt und gespeichert werden kann:

def raw_list_to_cooked_list(raw_list):
	"""Bekommt eine Liste mit mehreren benen von Listen uebergeben 
	und gibt eine liste zurueck, die aus Listen mit je 8 Eintraegen 
	besteht. Bedingung: Es sind keine der Tupel, die am Ende in die
	neue Liste sollen, auf der ersten Ebene. Und es sind immer exakt 
	8 Tupel in einer liste """
 
	cut_list=[]
	cooked_list=[]
 
	for l2 in raw_list:
		if type(l2)==tuple:
			cut_list.append(l2)
		elif type(l2)==list:
			for l3 in l2:
				if type(l3)==tuple:
					cut_list.append(l3)
				elif type(l3)==list:
					for l4 in l3:
						if type(l4)==tuple:
							cut_list.append(l4)
						elif type(l4)==list:
							for l5 in l4:
								if type(l5)==tuple:
									cut_list.append(l5)
								elif type(l5)==list:
									print "Warnung: Zu tiefe gehende Liste!"
	merk_liste=[]
	for eintrag in cut_list:
		merk_liste.append(eintrag)
		if len(merk_liste)==8:
			cooked_list.append(merk_liste)
			merk_liste=[]
	return cooked_list
 
 
raum =[[(5.0, -1.5, -2.35), (5.0, -1.5, -2.65), (-5.0, -1.5, -2.65), (-5.0, -1.5, -2.35), (5.0, 1.5, -2.35), (5.0, 1.5, -2.65), (-5.0, 1.5, -2.65),(-5.0, 1.5, -2.35)],
		[(5.0, -1.5, 2.65), (5.0, -1.5, 2.35), (-5.0, -1.5, 2.35), (-5.0, -1.5, 2.65), (5.0, 1.5, 2.65), (5.0, 1.5, 2.35), (-5.0, 1.5, 2.35), (-5.0, 1.5, 2.65)],
		[	
			[(-4.561538461538461, -1.5, -1.9115384615384619), (-4.561538461538461, -1.5, -2.2115384615384617), (-5.438461538461539, -1.5, -2.2115384615384617), (-5.438461538461539, -1.5, -1.9115384615384619), (-4.561538461538461, 1.5, -1.9115384615384619),(-4.561538461538461, 1.5, -2.2115384615384617), (-5.438461538461539, 1.5, -2.2115384615384617), (-5.438461538461539, 1.5, -1.9115384615384619)],
			[(-4.4, -0.5, -0.8730769230769234), (-4.4, -0.5, -1.1730769230769234), (-5.6, -0.5, -1.1730769230769234), (-5.6, -0.5, -0.8730769230769234), (-4.4, 2.5, -0.8730769230769234), (-4.4, 2.5, -1.1730769230769234), (-5.6, 2.5, -1.1730769230769234), (-5.6, 2.5, -0.8730769230769234)],
			[(-3.5384615384615383, -1.5, 1.1884615384615378), (-3.5384615384615383, -1.5, 0.8884615384615379), (-6.461538461538462, -1.5, 0.8884615384615379), (-6.461538461538462, -1.5, 1.1884615384615378), (-3.5384615384615383, 1.5, 1.1884615384615378), (-3.5384615384615383, 1.5, 0.8884615384615379), (-6.461538461538462, 1.5, 0.8884615384615379), (-6.461538461538462, 1.5, 1.1884615384615378)]
		],
		[
			[(6.0, -1.5, -1.35), (6.0, -1.5, -1.65), (4.0, -1.5, -1.65), (4.0, -1.5, -1.35), (6.0, 1.5, -1.35), (6.0, 1.5, -1.65), (4.0, 1.5, -1.65), (4.0,1.5, -1.35)],
			[(5.5, -2.5, 0.15), (5.5, -2.5, -0.15), (4.5, -2.5, -0.15), (4.5, -2.5, 0.15), (5.5, 0.5, 0.15), (5.5, 0.5, -0.15), (4.5, 0.5, -0.15), (4.5, 0.5, 0.15)],
			[(6.0, -1.5, 1.65), (6.0, -1.5, 1.35), (4.0, -1.5, 1.35), (4.0, -1.5, 1.65), (6.0, 1.5, 1.65), (6.0, 1.5, 1.35), (4.0, 1.5, 1.35), (4.0, 1.5, 1.65)],
			[(5.5, -0.5, 0.15), (5.5, -0.5, -0.15), (4.5, -0.5, -0.15), (4.5, -0.5, 0.15), (5.5, 2.5, 0.15), (5.5, 2.5, -0.15), (4.5, 2.5, -0.15), (4.5, 2.5, 0.15)]
		]
	]
 
if __name__ == "__main__":
	neu = raw_list_to_cooked_list(raum)
	print neu

In „stl, was wirklich funktioniert“ wird raw aufgerufen und die stl-Datei erstellt:

# -*- coding: utf-8 -*-
from __future__ import division
from __future__ import print_function
#from visual import *
import numpy as np
import stl
from stl import mesh
from matplotlib import pyplot
from raw import *   
 
# Listen von je drei Punkten, aus denen ein Dreieck gemacht werden soll
faces = np.array([[4,6,7],
                  [5,4,6],
                  [5,6,2],
                  [5,2,6],
                  [3,0,7],
                  [0,7,4],
                  [0,1,2],
                  [0,2,3],
                  [2,3,6],
                  [3,6,7],
                  [0,1,4],
                  [1,4,5]])
 
def eckpunkte_to_cube(liste, faces):
    for n, vertices in enumerate(liste):
        cube = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))
        for i, f in enumerate(faces):
            for j in range(3):
                print (i,j,f[j], type(f[j]), cube.vectors)
                cube.vectors[i][j] = vertices[int(f[j])]
 
        cube.save('cube'+str(n)+'.stl')
 
 
 
raum = [
    [(5.0, -1.5, -2.35), (5.0, -1.5, -2.65), (-5.0, -1.5, -2.65), (-5.0, -1.5, -2.35), (5.0, 1.5, -2.35), (5.0, 1.5, -2.65), (-5.0, 1.5, -2.65),(-5.0, 1.5, -2.35)],
    [(5.0, -1.5, 2.65), (5.0, -1.5, 2.35), (-5.0, -1.5, 2.35), (-5.0, -1.5, 2.65), (5.0, 1.5, 2.65), (5.0, 1.5, 2.35), (-5.0, 1.5, 2.35), (-5.0, 1.5, 2.65)],
    [(-4.561538461538461, -1.5, -1.9115384615384619), (-4.561538461538461, -1.5, -2.2115384615384617), (-5.438461538461539, -1.5, -2.2115384615384617), (-5.438461538461539, -1.5, -1.9115384615384619), (-4.561538461538461, 1.5, -1.9115384615384619),(-4.561538461538461, 1.5, -2.2115384615384617), (-5.438461538461539, 1.5, -2.2115384615384617), (-5.438461538461539, 1.5, -1.9115384615384619)],
    [(-4.4, -0.5, -0.8730769230769234), (-4.4, -0.5, -1.1730769230769234), (-5.6, -0.5, -1.1730769230769234), (-5.6, -0.5, -0.8730769230769234), (-4.4, 2.5, -0.8730769230769234), (-4.4, 2.5, -1.1730769230769234), (-5.6, 2.5, -1.1730769230769234), (-5.6, 2.5, -0.8730769230769234)],
    [(-3.5384615384615383, -1.5, 1.1884615384615378), (-3.5384615384615383, -1.5, 0.8884615384615379), (-6.461538461538462, -1.5, 0.8884615384615379), (-6.461538461538462, -1.5, 1.1884615384615378), (-3.5384615384615383, 1.5, 1.1884615384615378), (-3.5384615384615383, 1.5, 0.8884615384615379), (-6.461538461538462, 1.5, 0.8884615384615379), (-6.461538461538462, 1.5, 1.1884615384615378)],
    [(6.0, -1.5, -1.35), (6.0, -1.5, -1.65), (4.0, -1.5, -1.65), (4.0, -1.5, -1.35), (6.0, 1.5, -1.35), (6.0, 1.5, -1.65), (4.0, 1.5, -1.65), (4.0,1.5, -1.35)],
    [(5.5, -2.5, 0.15), (5.5, -2.5, -0.15), (4.5, -2.5, -0.15), (4.5, -2.5, 0.15), (5.5, 0.5, 0.15), (5.5, 0.5, -0.15), (4.5, 0.5, -0.15), (4.5, 0.5, 0.15)],
    [(6.0, -1.5, 1.65), (6.0, -1.5, 1.35), (4.0, -1.5, 1.35), (4.0, -1.5, 1.65), (6.0, 1.5, 1.65), (6.0, 1.5, 1.35), (4.0, 1.5, 1.35), (4.0, 1.5, 1.65)],
    [(5.5, -0.5, 0.15), (5.5, -0.5, -0.15), (4.5, -0.5, -0.15), (4.5, -0.5, 0.15), (5.5, 2.5, 0.15), (5.5, 2.5, -0.15), (4.5, 2.5, -0.15), (4.5, 2.5, 0.15)]
    ]
 
 
test_liste = raw_list_to_cooked_list(raum)
eckpunkte_to_cube(test_liste, faces)
ws1617/dreieckologie_30.01.17.txt · Zuletzt geändert: 2017/01/30 15:24 von SoenkeRoos96