and finally:
fn shiftPolyMapAllElements node ch:1 =
(
local faces = #{1..node.numfaces}
local numtverts = polyop.getnummapverts node ch
local verts = for v = 1 to numtverts collect #()
local undone = #{1..numtverts}
local elements = #()
getmapface = polyop.getmapface
getmapvert = polyop.getmapvert
setmapvert = polyop.setmapvert
for f in faces do
(
tvv = getmapface node ch f
for tv in tvv do append verts[tv] f
)
for i in faces do
(
element = #(i)
tverts = #()
for j in element where faces[j] do
(
faces[j] = off
f = getmapface node ch j
for k=1 to f.count do
(
v = f[k]
if undone[v] do
(
join element verts[v]
append tverts v
undone[v] = off
)
)
)
u = 1e9
v = 1e9
pp = for tv in tverts collect
(
p = getmapvert node ch tv
if p.x < u do u = p.x
if p.y < v do v = p.y
p
)
shift = [u,v,0]
k = 1
--format ">> % = %\n" tverts.count tverts
for tv in tverts do
(
setmapvert node ch tv (pp[k] - shift)
k += 1
)
append elements tverts.count
)
update node
elements
)
undo "Shift POLY Elements" on
(
gc()
node = $
converttopoly node -- for undo!!!
t1 = timestamp()
m1 = heapfree
elements = shiftPolyMapAllElements node
format "MXS POLY elements:% time:% memory:% >> %\n" (try(elements.count) catch(-1)) (timestamp() - t1) (m1 - heapfree) elements
)
WALLS:
MXS POLY elements:137464 time:4237 memory:268027116L >> #(5, 4, 5, 4, 5, 4, 5, 4, 13, 12, 11, 12, 7, 4, 4, 8, 4, 19, 4, 4, …)
pure MXS is ~4 sec on my machine (!)
Blender sucks! 