Seite 1 von 1

Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 13:27
von StuEv
Hallo zusammen,

ich habe ein kleines Problem:

ich möchte den normalenvektor einer Ebene ermittel nachdem ich die Ebene gedreht habe.

leider lässt sich nur der Normalenvektor vor der verdrehung ermitteln welcher standardmäßig in Richtung Z-Achse zeigt <Vector (0.0000, 0.0000, 1.0000)>

Sinn de Skripts soll es sein unabhängis von der Verdrehung, die Distanz eines Punktes von einer Ebene zu bestimmen.

Bisher sieht mein code so aus:
import mathutils
import bpy
from math import radians

bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align=‘WORLD’, location=(0, 0, 0), scale=(1, 1, 1))

bpy.ops.transform.rotate(value=radians(90), orient_axis=‘X’)

obj = bpy.context.active_object

p = obj.data.polygons[0]

norm_vec = p.normal

def main():

Plane_point = mathutils.Vector((0.0, 0.0, 0.0))

point = mathutils.Vector((0.0, 0.0, 2.0))

distance = mathutils.geometry.distance_point_to_plane(point, Plane_point, norm_vec)

print(norm_vec)
return distance

if name == ‘main’:
print(main())
Danke
StuEv

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 13:35
von __deets__
Warum drehst du den Normalenvektor nicht auch mit der gleichen Transformation?

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 13:42
von StuEv
Du meinst direkt in: bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align=‘WORLD’, location=(0, 0, 0), scale=(1, 1, 1)) ??

das geht leider nicht... es sind nur die Paramter in der Klammer möglich, deshalb im nachhinein die Drehung

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 13:50
von __deets__
norm_vec kann doch auch einfach um 90 grad um die X Achse gedreht werden.

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 14:26
von StuEv
Habe es nun so probiert aber es kommt immer ein Fehler:

.....

bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align='WORLD', location=(0, 0, 0), rotation=(0.0, 0.0, 0.0), scale=(1, 1, 1))

rot = 90

bpy.ops.transform.rotate(value=radians(rot), orient_axis='X')

obj = bpy.context.active_object

p = obj.data.polygons[0]

norm_vec = p.normal

eul = mathutils.Euler((0.0, radians(rot), 0.0), 'XYZ')

norm_vec.rotate(eul)

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 15:27
von StuEv
bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align='WORLD', location=(0, 0, 0), rotation=(radians(90), 0.0, 0.0), scale=(1, 1, 1))


obj = bpy.context.active_object

p = obj.data.polygons[0]

norm_vec = p.normal

norm_vec = mathutils.Vector(norm_vec)

norm_vec.rotate(mathutils.Euler((radians(90), 0, 0), 'XYZ'))

Habe es hinbekommen, aber der Vektor hat nun rundungsfehler. Abstand zum Punkt sollte 0 sein da der Punkt nun auf der Ebene liegt und raus kommt:

<Vector (0.0000, -1.0000, -0.0000)>
-8.742277657347586e-08

Re: Blender Normalenvektor Ebene

Verfasst: Donnerstag 16. September 2021, 15:35
von __deets__
Das ist halt so. Ein 10millionstel Meter ist recht nah dran. Bei sowas Muss man dann mit einem epsilon für tolerierbare Abstände arbeiten.