Измерение расстояния от точки до поверхности с помощью радиопередач - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь измерить расстояние от заданной точки до каждой из вершин в сетке, а также получить точку пересечения с сеткой, содержащейся в сетке. Я измеряю расстояния до вершин.

Я запускаю новый файл Blender и удаляю объекты по умолчанию.Затем я создаю цилиндр и круг и масштабирую круг в два раза.Сначала я выбираю круг, затем цилиндр и запускаю следующий скрипт.Я получаю вывод:

31.999999889172614
127.99999830127179

Затем я выбираю оба объекта и перевожу их в направлении x на единицу.Я выбираю круг, затем цилиндр и снова запускаю сценарий, получая следующий вывод:

0.154086219612509
127.99999919534139

Вариант второго числа, который я записал в raycast, немного неточен, поскольку он никогда не меняется слишком сильно.Первое число, однако, сильно меняется в зависимости от того, куда я перемещаю объекты, и это меня смущает.

import bpy
import mathutils
import bmesh

def bmesh_copy_from_object(obj):
    me = obj.data
    bm = bmesh.new()
    bm.from_mesh(me)

    bm.transform(obj.matrix_world)

    return bm

inner = bpy.context.object
outer = (ob for ob in bpy.context.selected_objects if ob != inner).__next__()

inner_bm = bmesh_copy_from_object(inner)
outer_bm = bmesh_copy_from_object(outer)

inner_tree = mathutils.bvhtree.BVHTree.FromBMesh(inner_bm)
outer_tree = mathutils.bvhtree.BVHTree.FromBMesh(outer_bm)

cl = bpy.context.scene.cursor_location

innermw = inner.matrix_world
innermw_inv = innermw.inverted()

sum = 0

for v in outer_bm.verts:
    origin = innermw_inv * cl 
    dest = innermw_inv * v.co
    direc = (dest - origin).normalized()

    res, co, no, index = inner_tree.ray_cast(origin, direc)
    if res:
        co_adj = innermw * co
        between = co_adj.dot(co_adj)
        sum += between
    else:
        print(res)

print(sum)

sum = 0

for v in outer_bm.verts:
    vec = v.co - cl
    between = vec.dot(vec)
    sum += between

print(sum)

Я бы ожидал, что оба числа останутся одинаковыми, так как я просто перевожуформы без какого-либо масштабирования.Очевидно, я не понимаю, что происходит с Raycast.Я пробовал наносить на карту пустые места в местах отправления / назначения, и это совсем не помогло моему пониманию.

...