Битовые массивы. Применение множеств

Разница между массивом и битовым массивом:

Просто массив 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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: