Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1920:arbeitstermin_08

Dies ist eine alte Version des Dokuments!



Achter Arbeitstermin

30.01.2020

<< | Home | >>

Heute haben wir versucht, grundlegende Strukturen in Blender zu implementieren. Hierfür haben wir uns mit der Erstellung von Meshes durch Python in Blender informiert und eine Methode generateObj geschrieben, mit der wir Objekte einfach erstellen können, ohne uns jedes Mal mit den spezifischen Blender Python Befehlen herumschlagen zu müssen.

Die Parameter machen hierbei eine reibungslose Benutzung möglich:

  • name - Namen des Objektes
  • verts - die Punkte, die das Objekt beschreiben (in Blender werden diese vertecies genannt)
  • faces - eine Liste von verschiedenen Punktmengen, die die Flächen des Objektes beschreiben
  • loc - die Position des Objektes als xyz - Koordinate

Außerdem haben wir einen ersten Versuch getätigt, eine Delaunay-Tetraedisierung zu generieren. Dies klappt insofern, dass es von außen recht überzeugend aussieht. Leider klassifiziert das Programm noch nicht, sondern zeichnet lediglich alle Möglichkeiten der Bildung von Tetraeder aus der gegebenen Punktmenge.
(Klicke das Bild für die Originalgröße an)

Aktueller Code für Blender 3D:

import bpy
from random import *
from math import *
 
 
 
class Sphere:    
    def __init__(self, pos, radius):
        self.pos = pos
        self.radius = radius
 
    def punktInKugel(self, p):
        if (abstandPunkte(self.pos,p) < self.radius): print(">> Punkt in Kugel")
        else: print(">> Punkt außerhalb Kugel")
 
def abstandPunkte(p1,p2):
    a = sqrt(((p1[0]-p2[0])**2) + ((p1[1]-p2[1])**2) + ((p1[2]-p2[2])**2))
    return a
 
def genPunkt(pos):
    verts = [(0.1,0.1,0.1),(-0.1,0.1,0.1),(-0.1,-0.1,0.1),(0.1,-0.1,0.1)
            ,(0.1,0.1,-0.1),(-0.1,0.1,-0.1),(-0.1,-0.1,-0.1),(0.1,-0.1,-0.1)]
    faces = [(0,1,2,3),(4,5,6,7),(0,1,4,5),(1,2,4,5),(2,3,6,7),(3,0,7,4)]
    generateObj("Punkt",verts,faces,pos)
 
def generateObj(name,verts,faces,loc):
    mymesh = bpy.data.meshes.new(name)
    myobject = bpy.data.objects.new(name,mymesh)
 
    myobject.location = loc #(0,0,0) #bpy.context.scene.cursor.location
    bpy.context.collection.objects.link(myobject)
 
    mymesh.from_pydata(verts,[],faces)
    mymesh.update(calc_edges=True)
 
 
 
#v = [(-10,0,0),(10,10,0),(10,-10,0),(0,0,10)]    
 
#f = [(0,1,2),(1,2,3),(2,3,0),(3,0,1)]
 
#generateObj("tetraeder", v, f)
 
 
#   Variablen
anzahlKerne = 10    #   anzahl der Kerne, die generiert werden sollen
ker = []            #   Liste mit zufälligen Kernen drin
 
 
 
#   Setup Kerne
for i in range(0, anzahlKerne):
    x = randint(0,10);
    y = randint(0,10);
    z = randint(0,10);
 
    ker.append((x,y,z))
 
print(ker)
for i in ker:
    genPunkt(i)
 
#   Überprüfung, ob Kerne auf einem Kreis -> dann diese Tetraeder bauen
for i in range(0, len(ker)):
    for j in range(i+1, len(ker)):
        for k in range(j+1, len(ker)):
            for l in range(k+1, len(ker)):
 
                verts = (ker[i], ker[j], ker[k], ker[l])
                faces = [(0,1,2),(1,2,3),(2,3,0),(3,0,1)]
 
                generateObj("Tetraeder", verts, faces, (0,0,0))

ws1920/arbeitstermin_08.1581279582.txt.gz · Zuletzt geändert: 2020/02/09 21:19 von Zetraeder