Получение массива рёбер от вершин 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Получение массива рёбер от вершин



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

 

Способ формирования массива

Кусок выдернут из скрипта, поэтому переменные связаны с рёбрами и вершинами. Но уж пусть лучше с ними будет, чем a и b. Так лучше привыкаешь к синтаксису.

 

theVerts=#() -- создаём пустой массив
index = 1 -- первый индекс этого массива будет равен 1
for i in arVert do -- для каждого элемента i из набора вершин делать
if ($.GetVertexEdgeCount i == 2) do -- если вершине принадлежат 2 ребра то
       (
                   theVerts[index] = i -- первому индексу вначале созданного массива присваивается значение i
                   index += 1 -- индекс увеличиваем на единицу для дальнейшего присвоения ему следующих значений, удовлетворяющих условиям
      )

Внимание! Ещё проще конструкция делает то же самое вот так:

theVerts = for i in arVert where ($.GetVertexEdgeCount i == 2) collect i -- theVerts (новый массив) = для каждого элемента i в массиве arVert где выполняется условие (fnO.GetVertexEdgeCount i == 2), собрать в новый массив каждый i, удовлетворяющий условию

_______________________________________________________________

 

Интересный момент для BitArray массива

Poly объект Teapot при невыделенных рёбрах

Es=$.getselection #Edge -- #{} битовый массив
Es.numberset -- Количество выделенных рёбер 0
Es.count                         -- Всего ребер в объекте, возвращает число 1040
polyop.getNumEdges $ -- Всего ребер в объекте, возвращает число 1040
$.GetNumEdges()   -- Всего ребер в объекте, возвращает число 1040

_______________________________________________________________

И ещё один интересный момент

fn fEs =(Es=$.GetSelection #Edge) as array -- функция с переменной
fEs() -- Возвращает массив as Array

#(6)

Es -- Возвращает битовый массив

#{6}

_______________________________________________________________

Учимся Скрывать/открывать обновление командной панели Modify при выполнении скрипта

Функции

suspendediting() -- скрыть

resumeediting() -- открыть

--Используется только тогда и таким образом, чтобы скрипт не использовал инструменты командной панели, иначе скрипт НЕ будет работать так как использовать из инструментов ему будет нечего, потому что эти инструменты командной панели, собственно и скрываются.
Вот пример: Чтобы работал скрипт и при этом командная панель была бы скрыта при выполнении скрипта, не нужно использовать в коде её команды, например конвертацию подобъектов типа

$.EditablePoly.ConvertSelection #Edge #Vertex
В данном случае необходимо использовать другие методы,

а именно

polyop. getVertsUsingEdge <Poly poly> <edgelist>

Предварительно конечно же позаботиться о создании массива вершин, передаваемых этой функции.

Код получится такой:

edgelist = $.EditablePoly.getSelection #Edge9

EtoVERT = polyop.getVertsUsingEdge $ edgelist

$.EditablePoly.setSelection #Vertex EtoVERT

При этом уже никаких обращений к объекту через

curObj = modPanel.getCurrentObject() не допускается, так как это и есть использование панели Modify, которую мы скрываем.

Таким образом код будет немного длиннее, но за то скрипт всё равно будет работать быстрее за счёт того, что командная панель не будет перемигивать, обновляться.

Кстати команду subobjectlevel = 1 - так же невозможно использовать при скрытии панели. И вообще зачастую бывает так, что, необходимо, для выполнения скрипта, чтобы явно был включен подобъект или ещё какой нибудь атрибут панели Modify, в таком случае, ничего не поделаешь - приходится обходиться без скрытия.

Так же для скрытия обновления панели Modify можно пробовать использовать переключение в панель Create

max create mode

max modify mode -- бывает работает даже быстрее чем

suspendediting()

resumeediting()

Если при конструировании, выполнении кода панель скрылась и не открылась, то надо ещё раз вызвать просто отдельно команду resumeediting()

_______________________________________________________________



Поделиться:


Последнее изменение этой страницы: 2021-04-13; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.140.108 (0.006 с.)