Понадобилось почистить кирпичную кладку от "лишних вершин" после булевых операций:
Ссылки:
Vertex Cleaner
How do I remove mid-edge EPoly Vertices?
VGSelectBadVertices
111_selectBadVertices
После исследования скриптов по ссылкам, стало понятно, что они немного не подходят для поставленной задачи.
В скрипте ниже, по сути, тоже самое, только сбоку.
Добавил возможность работать с группой объектов, чтобы не перещелкивать каждый в больших сценах и постарался немного ускорить. Скрипт работает только с Editable Poly объектами!:
tr - threshold = 0.7 подбирается опытным путем.
---------------------------------------------------------------------
try destroyDialog RemoveMiVertex catch()
--function
fn getMiVertexPoly obj tr = (
arrVertInd = #()
for v in obj.verts do (
arEdge=(PolyOp.getEdgesUsingVert obj #(v.index)) as array
if arEdge.count==2 do (
edgeVerts = (polyop.getVertsUsingEdge obj arEdge) as array
p1 = polyop.getVert obj edgeVerts[1]
p2 = polyop.getVert obj edgeVerts[2]
p3 = polyop.getVert obj edgeVerts[3]
v1 = p1 - p2
v2 = p2 - p3
v3 = length (cross (normalize v1) (normalize v2))
if v3 <= tr do append arrVertInd v.index
)
)
format "%; % - removed vertices\n" obj.name arrVertInd.count
arrVertInd
)
--Interface
rollout RemoveMiVertex "RemoveMiVertex"
(
spinner tresh "Threshold:" range:[0,100,0.7] type:#float width:120 align:#left --offset:[10,0] enabled:false --across:2
checkbox onlySel "Only select (don't remove)" checked:false align:#left --offset:[10,0]
button theGo "Remove" width:175 height:30 align:#left --across:2
on theGo pressed do(
arSel = for i in selection where classOf i.baseobject == Editable_Poly collect i
max modify mode--switch to modify panel --set the base object as current level:
for obj in arSel do(
select obj--select it
modPanel.setCurrentObject obj.baseobject
subObjectLevel = 1--set sub-*object level to vertex level
polyOp.setVertSelection obj (getMiVertexPoly obj (tresh.value/100.0))
update obj
--pick button "Remove"
if not onlySel.state do (
h = windows.getChildHWND #max "Remove"
hc=windows.getChildrenHwnd h[2]
UIAccessor.PressButton hc[1][1] --button "Fit"
)
-----------------------
subobjectLevel = 0
update obj
)
) -- end on theGo pressed do
) --END rollout
createDialog RemoveMiVertex width:200
---------------------------------------------------------------------
Комментариев нет:
Отправить комментарий