Работа с интерфейсами (свойствами) функций

Операции, доступные над объектами (например Editable Poly), называются интерфейсами.

С точки зрения публикации функций интерфейс представляет собой ряд свойств, методов и связанными с интерфейсами действий, доступных для объекта. Это понятие не следует путать с пользовательским интерфейсом.

Чтобы узнать все интерфейсы любого типа объекта, можно вызвать команду showinterfaces $. (showinterfaces работает не только для Editable_Poly, но и для других типов объектов!) Если в этот момент будет выделен объект типа Editable Poly, то в листенере выскочить огромная куча интерфейсов, то - есть операций, которые можно совершить над объектом.

Interface: EditablePoly

Properties:

Methods:

<bool>Hide <enum>mnSelLevel flags:<DWORD>

  mnSelLevel enums: {#Object|#Vertex|#Edge|#Face|#CurrentLevel}

    flags default value: 1

<bool>unhideAll <enum>mnSelLevel

  mnSelLevel enums: {#Object|#Vertex|#Edge|#Face|#CurrentLevel}

<void>SmGrpFloater()

<boolean>MatIDFloaterVisible()

<void>MatIDFloater()

Actions:

OK

Один из которых есть интерфейс buttonOp, его мы и рассмотрим.

Из официальной справки MaxScript Help:

<void><EditablePoly>.buttonOp <enum>buttonOpID

buttonOpID enums: {#GrowSelection | #ShrinkSelection | #SelectEdgeLoop | #SelectEdgeRing | #HideSelection | #HideUnselected | #UnhideAll | #NamedSelectionCopy | #NamedSelectionPaste | #Cap | #Delete | #Remove | #Detach | #AttachList | #SplitEdges | #BreakVertex | #Collapse | #ResetSlicePlane | #Slice | #WeldSelected | #CreateShape | #MakePlanar | #AlignGrid | #AlignView | #RemoveIsoVerts | #MeshSmooth | #Tessellate | #Update | #SelectByVertexColor | #Retriangulate | #FlipNormals | #SelectByMatID | #SelectBySmoothingGroups | #Autosmooth | #ClearSmoothingGroups|

#Extrude | #Bevel | #Inset | #Outline | #ExtrudeAlongSpline | #HingeFromEdge |

#ConnectEdges | #ConnectVertices | #Chamfer | #Cut | #RemoveIsoMapVerts |

#ToggleShadedFaces | #MakePlanarInX | #MakePlanarInY |#MakePlanarInZ }

Где

<void> -- ссылка на объект (как правило это $)

<EditablePoly> -- указатель объекта типа Editable_Poly

.buttonOp -– Очевидно это есть интерфейс, как свойство, принадлежащее Editable_Poly

<enum>buttonOpID –- enum идентификатор операции.

Таким образом, готовый код будет выглядеть например вот так:

$. EditablePoly.buttonOp #Tessellate –- операция тесселяции полигона.

Это не самый сложный интерфейс для понимания, поэтому в данном случае происходит простая подстановка под маску

<void><EditablePoly>.buttonOp <enum>buttonOpID

_______________________________________________________________

Меняем местами подэлементы двумерного массива

Задача: поменять в двумерном массиве числа A и B местами

Меняем трёхэтапным способом

 

Arr=#(#(13, 31, 59), #(13, 32, 60), #(13, 35, 58), #(13, 36, 68), #(13, 31, 58), #(13, 32, 59), #(13, 35, 68), #(13, 36, 60))
A=13
B=58
 
tmp=0
for i = 1 to Arr.count do -- Для каждого элемента, начиная с i=1 до i=количеству элементов массива (то-есть среди восьми скобок в главном массиве) делать
for j = 1 to Arr[i].count do -- Для каждого элемента, начиная с j=1 до j=количеству элементов подмассива массива (то-есть того массива содержащего по 3 числа) делать
if Arr[i][j]==A do Arr[i][j]=tmp -- Если каждый элемент подмассива Arr[i][j] есть число A (то-есть равное 13) то делать: Этот элемент Arr[i][j] сделать равным tmp (то-есть временно нулю)
Arr -- проверяем что получилось (но не обязательно)
-- Далее то же самое что и в первом блоке
for i = 1 to Arr.count do -- Для каждого элемента, начиная с i=1 до i=количеству элементов массива...
for j = 1 to Arr[i].count do -- Для каждого элемента, начиная с j=1 до j=количеству элементов подмассива...
if Arr[i][j]==B do Arr[i][j]=A -- Если каждый элемент подмассива Arr[i][j] есть число B (то-есть равное 58) то делать: Этот элемент Arr[i][j] сделать равным A (то-есть 13)
Arr -- проверяем что получилось (но не обязательно)
-- И меняем оставшееся временное значение tmp на нужное значение B
for i = 1 to Arr.count do
for j = 1 to Arr[i].count do
if Arr[i][j]==tmp do Arr[i][j]=B -- Если каждый элемент подмассива Arr[i][j] есть число tmp (то-есть равное 0) то делать: Этот элемент Arr[i][j] сделать равным B (то-есть 58)
Arr -- проверяем что получилось

Листенер вернёт:

#(#(58, 31, 59), #(58, 32, 60), #(58, 35, 13), #(58, 36, 68), #(58, 31, 13), #(58, 32, 59), #(58, 35, 68), #(58, 36, 60))

_______________________________________________________________



















Немного логики и интересный способ присвоения значений переменным.

a=0 --эту переменную надо обязательно объявить, иначе код не будет работать

tmp = (-- переменная tmp не была объявлена, поэтому пока её значение undefined

       a+=1 -- это то же самое что и a=a+1

1 -- /*просто любая цифра, которая вернётся в листенер и присвоится переменной tmp*/

)

tmp==1 -- проверяем, tmp есть 1?

-- Листенер вернет

true

 

А вот такой же пример, но с маленькими изменениями

a=0

tmp = (

       a+=1

off -- булевое значение, тоже самое что и false ( on соответствует true)

)

tmp==false -- Проверяем, переменная имеет значение false?

-- Листенер вернёт

true

В общем на последнюю линию в блоке можно ставить всё что угодно, чему мы хотим, чтобы равнялась переменная, которой приравнивается блок

_______________________________________________________________

Работа с внешним текстовым файлом

 

Просьба дополнить по-возможности:

Как удалять строку (или узнать длину строки), как записывать текст на кириллице

 

Основные операции с файлом

--Создание текстового файла "test.txt" в корне диска "С"
f = createFile "C: \\ test.txt"
--Открытие текстового файла "test.txt" из корня диска "С"
f = createFile "C: \\ test.txt"
--Закрытие текстового файла "test.txt" используя переменную f
close f
--Запуск текстового файла "test.txt" из корня диска "С" сторонней программой, заданной по-умолчанию (Например: блокнот)
ShellLaunch "explorer.exe" "C: \\ test.txt"

 

Примечание: Файл обязательно нужно закрывать командой "close",

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

с редактированием и удалением файла (пока не будет закрыт 3ds Max)

 









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



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