Разница между массивом и битовым массивом:
Просто массив Array может в себя вмещать любые типы данных и в любом сочетании
А битовые bitArray массивы могут быть заполнены только целыми числами. Представляют из себя некие математические множества, с которыми можно производить математические операции.
A+B = логическое OR (или)
Для битовых массивов Maxscript это значит:
A=#{1,2,3,4}
B=#{5,6,7,4}
A+B
Листенер вернёт #{1.. 7}
_________________________________
Разность множеств
Для битовых массивов Maxscript это значит:
A=#{1,2,3,4}
B=#{5,6,7,4}
A-B
Листенер вернёт #{1..3}
B-A
Листенер вернёт #{5..7}
_________________________________
A*B = логическое AND (и)
A=#{1,2,3,4}
B=#{5,6,7,4}
A*B
Листенер вернёт #{4}
Для обычного массива количество элементов - это свойство.count, а для
битового массива количество элементов - свойство.numberset
_________________________________
Пример:
Выделение новых полигонов созданных после экструда:
a = #{1..(PolyOp.GetNumFaces $)}
-- Делаем вручную экструд
b = #{1..(PolyOp.GetNumFaces $)}
PolyOp.SetFaceSelection $ (b - a)
Подобные вещи можно делать не только с экструдом, но и с другими инструментами.
|
|
А также выделять не только полигоны, но и рёбра и вершины.
_______________________________________________________________
В битовом массиве проверка наличия элемента вместо finditem
Vs=#{23, 100, 3}
Vs[22]
false
Vs[100]
true
_______________________________________________________________
Получение открытых вершн
То есть таких вершин, которые находятся на краю по контуру
Метод для 2010 макса и выше
OpenE=#()
openEdges.Check currentTime selection[1] &OpenE
OpenVert=for e in OpenE collect selection[1].GetEdgeVertex e 1
OpenVert
Получение открытых рёбер
meshop.getOpenEdges <Mesh mesh>
polyop.getOpenEdges <Poly poly>
--------------------------------------------------------------
OpenE=#()
openEdges.Check currentTime selection[1] &OpenE
_______________________________________________________________
Получение массива рёбер от вершин
vrt=polyop.getVertselection $ as array
edg=(for i=1 to vrt.count-1 where (ed=((polyop.getEdgesUsingVert $ #{vrt[i]}*polyop.getEdgesUsingVert $ #{vrt[(i+1)]}) as array)[1])!=undefined collect ed)
setEdgeSelection $ edg