Функция
Выделенная строка извлекает завёрнутые (wrapped) меш-данные исходного объекта. Нам нужны завёрнутые данные, поскольку нам может понадобиться изменить координаты некоторых вершин. Следующие две строки извлекают копии меш-данных. Нам нужны эти копии, чтобы преобразование, которое мы выполним, не повлияло на фактические меш-данные. Вместо копирования мы могли бы пропустить аргумент
Затем, мы преобразуем эти копии мешей соответствующими их объектам матрицами преобразования. Использование метода этих мешей
from copy import copy
def impress(source,target):
srcmat=source.getMatrix()
srcinv=source.getInverseMatrix()
tgtmat=target.getMatrix()
orgsrc=source.getData(mesh=True)
mesrc=copy(source.getData(mesh=True))
metgt=copy(target.getData(mesh=True))
mesrc.transform(srcmat)
metgt.transform(tgtmat)
for v in mesrc.verts:
if metgt.pointInside(v.co):
d,pt = closest(metgt,v.co)
orgsrc.verts[v.index].co=pt*srcinv
Последняя часть функции
Этот оригинальный меш не преобразован, так что мы должны преобразовать эту ближайшую точку в пространство исходного объекта, умножая координаты на обратную матрицу преобразования. Поскольку вычисления преобразования являются дорогостоящими, модификация преобразованного меша и преобразование всего меша обратно в конечном счете может взять деликатное время. Содержание ссылки на не преобразованный меш и просто преобразование обратно отдельных точек может, следовательно, оказаться предпочтительным, если только сравнительно немного вершин попали в отпечаток. Полный скрипт доступен как