Можно перед циклом написать [ICODE]epoly = geom.EditablePoly[/ICODE] и в цикле вызывать методы у [ICODE]epoly[/ICODE], или для каждого метода объявить по переменной. У меня код ускорился со 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
)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Erik945
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
)
Оно работает, но ОЧЕНЬ медленно. Я даже не понимаю почему так.
Владислав Бодюл
Советую посмотреть раздел 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мс.Erik945