Сравнение элементов массивов

for i=1 to (MassivA).count do
for j=1 to (MassivB).count do
if MassivA[i] == MassivB[j] then ()
  --Example:
compare= false
arrOpenEdges = (polyop.getOpenEdges $) as array -- массив рёбер, принадлежащих дыре в геометрии
SelEdges = (polyop.getEdgeSelection $) as array -- массив выделенных рёбер
(
for i=1 to arrOpenEdges.count do
   for j=1 to SelEdges.count do
               if arrOpenEdges[i] == SelEdges[j]
               then compare = true
)
)

_______________________________________________________________

(
v=(getVertSelection $) as array -- массив выделенных вершин
if v.count==1 then -- если количество выделенных вершин есть 1 то
$.pivot=polyop.getVert $ (v[1]) -- pivot равен позиции в объекте выделенной вершины
)

_______________________________________________________________

hasProperty $ "radius" -- проверяется свойство объекта на наличие определённого свойства

_______________________________________________________________

select (join ($Point as array)($Box as array)) -- выделяем соединениe массивов

_______________________________________________________________

as array -- “как массив”, используется для сохранения набора (выделения) объектов в массиве. Если набор не будет массивом, то из-за этого часто возникают ошибки при обработке циклом.

as bitarray -- “как битовый массив”, создаёт из положительных чисел наборы положительных целых чисел и имеет сущность математического множества, что ускоряет операции вычисления.

_______________________________________________________________

-- вызов файла mse для исполнения скрипта

macroScript ScrtiptName category:"Custom" tooltip:"ScriptTool"

(

fileIn @"C:\\JosBalcaen_Batch_Exporter_Importer.mse")

____________________________________________________________

-- Количество выделенных рёбер

(polyop.getEdgeSelection $).numberset -- свойство numberset для битового массива

_______________________________________________________________

CurEdge_EtPy = obj.GetSelection #Edge as array -- Выбранные в Edit_Poly рёбра собрать в массив

CurEdge_EtPy.count -- Количество

_______________________________________________________________

oArray = $ as array -- выделение сохранено как массив в переменной

-- цикл замены имени каждого объекта массива на уникальное

for o in oArray do o.name = uniqueName "myObject"

_______________________________________________________________

-- случайно меняется цвет

for i in $ do i.wirecolor += random (-white/25.0) (white/25.0)

_______________________________________________________________

-- случайно меняется красный канал цвета

for o in $ do o.wirecolor.r += random -10.0 10.0

_______________________________________________________________

-- Выделить объекты, масштабом не 1 (полезно для вывернутых)

select(for o in $* where o.scale!= [1,1,1] collect o)

_______________________________________________________________

-- выделить объекты, удалённых до 100 от выбранного

select (for o in $* where distance o.center selection[1].pos /*|.center|*/ < 100 collect o)

_______________________________________________________________

-- выбрать объекты по материалу выделенного объекта

select(for i in $* where i.marerial == selection[1].material collect o)

_______________________________________________________________

-- выбрать объекты по материалу

select(for o in $* where o.marerial == medit.GetCurMtl() collect o)

_______________________________________________________________

-- Последний созданный объект

LastObj = (maxOps.getNodeByHandle (amax (for o in objects collect o.inode.handle)))

 

_______________________________________________________________

-- Отключаем обновление вьюпорта при выполнении скрипта

with redraw off

(

)

_______________________________________________________________

-- выделить объекты, которые были выделены до выполнения скрипта.

sel=selection as array

(

скрипт

)

select sel

_______________________________________________________________

-- В Unwrap_UVW сшить подобъект с диалогом

$.modifiers[#unwrap_uvw].stitchVertsDialog()

_______________________________________________________________

-- В Unwrap_UVW отрезать выделенное

$.modifiers[#unwrap_uvw].breakSelected()

_______________________________________________________________

-- добавить модификатор Normal

AddModifier $ (Normalmodifier ())

_______________________________________________________________

-- если панель команд не есть в режиме modify, то сделать её таковой

if getCommandPanelTaskMode()!= #modify then (max modify mode)

_______________________________________________________________

-- Автонажатие на кнопку умолчания в диалоговом окне

UIAccessor.PressDefaultButton()

_______________________________________________________________

-- Количество вершин выделенных в Edit_Poly

gco = modPanel.getCurrentObject() -- присвоение выделенный модификатор Edit_Poly переменной

selVertArr = gco.getSelection #Vertex -- Количество вершин выделенных

_______________________________________________________________

-- Количество элементов

$.count

_______________________________________________________________

-- Дэтачит сплайн с вызовом диалога создания имени нового объекта

splineOps.Detach $

_______________________________________________________________

-- get first knot in selected knots / номер сплайна [элемент массива узлов]

splineSelKnot=(getKnotSelection $ 1)[1]

_______________________________________________________________

-- позиция узла сплайна/ номер сплайна/ узел сплайна

splineKnotPos=getKnotPoint $ 1 1

_______________________________________________________________

-- количество выделенных узлов сплайна

(getKnotSelection $ 1).count

_______________________________________________________________

max select invert -- инвертировать выделение

_______________________________________________________________

-- присвоение уникального имени

(s = copy $

s.name = uniqueName ("MaskName"))

_______________________________________________________________

-- Выделяет Border (subobjectLevel 3)

PolyToolsSelect.NumericEdge false

_______________________________________________________________

-- доступ к модификатору Edit_Poly осуществляется весьма просто. Путём удаления $.modifiers[#Edit_Poly] и подстановкой переменной, которая есть выбранные объекты под этим модификатором.

(

gco = modPanel.getCurrentObject() -- назначение переменной объекту в стеке

if classof gco == Edit_Poly do () -- если класс объекта gco есть Edit_Poly делать...

)

-- Переменная должна быть объявлена после появления модификатора, иначе будет ошибка

_______________________________________________________________

-- В сцене устанавливается система координат #world

(

global isCS = getRefCoordSys()

csOUT = undefined

if isCS!= #world then csOUT = #world

setRefCoordSys csOUT -- установить систему координат

)

_______________________________________________________________

-- метод макс, копируется объект $, Тип копирования: копия новое имя:nnl

maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl

select nnl

_______________________________________________________________

-- Select Last Created Object

(

   objID = amax (for o in objects collect o.inode.handle)

   select (maxOps.getNodeByHandle objID)

)

_______________________________________________________________

-- случайный цвет

$.wirecolor = (color (random 0.0 255) (random 0.0 255) (random 0.0 255))

_______________________________________________________________

-- смотреть свойства любого объекта и модификатора

gco = modPanel.getCurrentObject() -- назначаем переменную стеку объекта

show gco -- 1 способ

showproperties gco -- 2 способ

_______________________________________________________________

-- если нажат Ctrl(Shift/Alt) - делать...

if keyboard.controlPressed then

if keyboard.shiftPressed then

if keyboard.altPressed then

_______________________________________________________________

-- Ещё интересный метод использования if

a=0

i=if a>2 then 4 else 5

i -- в конце функций и блоков скриптов ставится переменная с целью получить значение функции или блока кода.

_______________________________________________________________

-- конструкция проверки и выдачи булевого результата

on isEnabled return

   (if () and () or () 

               then true else false

  )

-- истина выражения возвращает нажатую кнопку

on ischecked return (try($.wirecolor == red)catch())

_______________________________________________________________


















Циклы

Прерываем выполнение нажатием Esc

for k=1 to 1000000 do if not keyboard.ESCpressed then (format "%\n" k)

_______________________________________________________________

-- Цикл Do-While (do выполняются, по крайней мере, один раз. При этом условие не проверяется до тех пор, пока не будет выполнено тело цикла)

(i = 0

do (

   t = teapot pos: [i*20, 0, i*20]

   i = i + 1

  ) while t.pos.x < 101

)

_______________________________________________________________

-- Цикл While-Do (сначала проверяется условие)

(i = 0   

testTrue = true

while testTrue do -- цил работает, получая значение true, поэтому после слова while стоит просто переменная, которая на начало цикла является true.

   (

   t = teapot pos: [i*20, 0, i*20]

   i = i+1

   testTrue = t.pos.x < 101

  )

)

_______________________________________________________________

Массивы

_______________________________________________________________

-- Создан пустой массив и к нему присоединён элемент - целое число 56

mуАrrау = #()

append mуАrrау 56

_______________________________________________________________

-- Сохраняем объекты в массиве и добавляем (append) в массив элемент

c = cylinder pos: [50,0,0]

b = box()

s = sphere pos: [-50,0,0]

objArray = #(c,b,s)

d = donut()

append objArray d

_______________________________________________________________

-- Ещё один способ создать массив из объектов, используя метасимвол "*"

coll = $teapot*

arr = coll as array

_______________________________________________________________

-- Обработка всех элементов массива в цикле

a = #("one", "word", "at", "a", "time")

for i = 1 to a.count do -- для каждого i от 1 до числа элементов массива делать

(print a[i]) -- печатать элемент массива

_______________________________________________________________

-- deleteItem

-- Удаляет элемент массива (в примере удалён элемент массива arr[2] и выведено сообщение с оставшимися элементами)

arr= #(1.0,.55,.3, 2.6)

deleteItem arr[2]

for i = 1 to arr.count do

messagebox (arr[i] as string)

_______________________________________________________________

-- join

-- Функция join объединяет два массива, а также совокупность и массив:

for i = 1 to 3 do

(

sphere()

box()

)

arr = $sphere* as array

join arr $box* -- то есть пишется join, а потом два параметра - два массива

for i = 1 to arr.count do

messagebox arr[i].name

_______________________________________________________________

-- sort

-- организует массив в порядке убывания. Если массив состоит из строк, он организуется в алфавитном порядке

sort arr

_______________________________________________________________

arr = #(2.4, 4, 3.2, 1.1)

index = findItem arr 3.2 -- Найденный индекс будет равен 3

messagebox (index as string)

-- Значение 3.3 отсутствует в массиве, поэтому возвращаемый индекс равен 0

index = findItem arr 3.3

messagebox (index as string)

-- findItem

-- возвращает индекс искомого значения. Если искомое значение отсутствует в массиве, функция findItem возвращает 0:

_______________________________________________________________

amax <array> -- максимальное значение массива

amin <array> -- минимальное значение массива

$.max -- максимальное значение габаритного контейнера объекта

$.min -- минимальное значение габаритного контейнера объекта

; -- позволяет записать несколько команд кода в одну строку.

? -- возвращает последний вычисленный результат

_______________________________________________________________

Допустим создан и выделен какой то объект

v = $.pos -- вектор позиции объекта

length v -- длина этого вектора


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



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