Render.ru

Смеженные вершины в EditablePoly

Erik_945

Знаток
Рейтинг
36
#1
Собственно, сабж. Нужно получить что-то вроде grow, только без выделения - чисто массив вершин.

function getNeighborVertex geom vertex = (
j = 1
tmp_vert_ar1 = #()

while(j <= geom.GetVertexEdgeCount vertex) do (
tmp_edge = geom.GetVertexEdge vertex j
v1 = geom.GetEdgeVertex tmp_edge 1
v2 = geom.GetEdgeVertex tmp_edge 2

if(v1 != vertex ) do append tmp_vert_ar1 v1
if(v2 != vertex ) do append tmp_vert_ar1 v2
j = j + 1
)
return tmp_vert_ar1
)

Оно работает, но ОЧЕНЬ медленно. Я даже не понимаю почему так.
 

Владислав Бодюл

Активный участник
Рейтинг
15
#2
Можно перед циклом написать epoly = geom.EditablePoly и в цикле вызывать методы у epoly, или для каждого метода объявить по переменной. У меня код ускорился со 100 до 20мс.
Советую посмотреть раздел How To Make It Faster? а там Cache frequently used functions and objects.

А ещё можно вот так.
Код:
function getNeighborVertex geom vertex =
(
    local verts = polyop.getVertsUsingEdge geom (polyop.getEdgesUsingVert geom vertex)
    verts[vertex] = false
    return verts
)
Тут уже 1000 итераций выполнились за 24мс.
 
Сверху