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 -- длина этого вектора