Создание нового файла

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

--Запись текста в конце строки

format "Какой-то текст" to:f

Результат повторного выполнения:

"Какой-то текстКакой-то текст"

 

--Переход на следующую строку

"\n" (Например: format "Какой-то текст\n" to:f)

Результат повторного выполнения:

"Какой-то текст

Какой-то текст"

 

--Пример кода полностью:

f = createFile "C: \\ test.txt"
format "The first line \n " to:f
format "The second line \n " to:f
for i = 3 to 6 do
(
format ("Line #" + i as string + " \n ") to:f
)
close f
ShellLaunch "explorer.exe" "C: \\ test.txt"

 

Результат:
“The first line

The second line

Line #3

Line #4

Line #5

Line #6”

 

3) Открытие файла:

f = openFile "C: \\ test.txt" mode:"r+"

 

Есть множество режимов открытия файла (mode:) Основные:

r - чтение

rt - чтение текста

rb - чтение как бинарный код

r+ - чтение и запись (с сохранением содержимого)

w - запись

wt - запись текста (все содержимое удаляется)

wb - запись бинарного кода (все содержимое удаляется)

w+ - чтение/запись текста (все содержимое удаляется)

Внимание! эти атрибуты добавляются с кавычками, как строковые значения!

--Количество символов в файле:
filepos f
--Переход к десятому символу в строке:
seek f 10

 

Примеры кода полностью.

--Замена символов текстом "999999" в третьей позиции:
--(Допустим, в файле есть всего одна строка "The first line")
f = openFile "C: \\ test.txt" mode:"r+"
seek f 3
format "999999" to:f
close f
ShellLaunch "explorer.exe" "C: \\ test.txt"

 

Результат: "The999999 line"

 

--Вставка текста"999999" в третью позицию, без замены:

--(Допустим, в файле есть всего одна строка "The first line")

f = openFile "C: \\ test.txt" mode:"r+"
seek f #eof; maxlen=filepos f; seek f 3
res = readChars f maxlen errorAtEOF: false
seek f 3; format "999999" to:f; format res to:f
close f
ShellLaunch "explorer.exe" "C: \\ test.txt"

 

Результат: "The999999 first line"

 

-- Если файла по указанному пути не существует, то создать его

fPath=”c:\\tmp.txt”
if not doesFileExist fPath do (
       f = createFile fPath
       close f
)

 

Если файл существует, и надо добавлять в него данные, то:

f = openFile fPath mode:"a" -- файл открывается и готов к изменению, об этом говорит параметр “а”

format (“tmp” + \n) to:f -- печатать в файле строку “tmp” и перейти на следующую строку.

close f

 

Пример работы с файлами, скрипт выполняет чтение из файла вершин и выделяет их в объекте сцены 3dsMax

(
Arr = #()
try (s = openFile "c: \\ Vertex_ID_selector.txt") catch()
if (selection.count==1 and s!= undefined) then
       (
       while not eof s do -- пока не есть eof (конец файла s) делать
                   (
                   a = readValue s
                   append Arr a
                  )
       For i=1 to Arr.count do
       Arr[i] += 1
       try(PolyOp.SetVertSelection $ Arr) catch(messagebox("Some ID is not exist"))
       if getCommandPanelTaskMode()!= #modify then (max modify mode)
       subobjectlevel = 1
       redrawViews()
       close ssizeразмер
      )
)

 

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

_______________________________________________________________

Если скрипт выполняет то что нужно, но в каких-то ситуациях выдаёт ошибки, то можно их скрыть вот таким параметром, задаваемым в шапке макроскрипта.

macroScript UserScriptName category:"NewTools" tooltip:"toolName" silentErrors: true

Ну или можно локально сам код организовать с помощью конструкции перехвата ошибокtry () Catch (), по русски это можно понять как

try - пробовать выполнить ()

Catch если возникнет ошибка, тогда выполнять ()

Если при ошибке делать ничего не нужно, то Catch() так и остаётся с пустыми скобками.

_______________________________________________________________














































Выполнение следующего кода если не выполнился или выполнился код

И доступ к геометрии

Здесь рассмотрим такую проблему:

Как проверить изменения геометрии, если возвращаемый результат - есть бестолковое “OK”, причём в любом случае, хоть действия выполнились - хоть не выполнились. Ну и как заставить работать скрипт так, чтобы:

1) была выполнена команда или набор действий,

2) а затем в зависимости от результата выполнения этих действий, выполнялись бы другие задачи

Рассмотрим пример:

При написании скрипта для объекта под модификатором EditPoly была такая проблема, что я не мог получить доступ к геометрии средствами и методами этого самого модификатора EditPoly. Решением оказалось использование свойства.mesh выделенного объекта. Иначе говоря $.mesh даёт доступ к крайнему состоянию сетки после воздействия всех возможных модификаторов и с которым можно работать методами, предназначенными для <mesh> объекта

Код:

gco = modPanel.getCurrentObject()

(MeshCountF0 = getNumFaces $.mesh -- количество полигонов объекта первое состояние (засовываем это в переменную MeshCountF0)

gco.connectEdgeSegments = 1 -- какая то операция, ну в данном случае устанавливает количество рёбер коннекта между рёбрами.

gco.ButtonOp #ConnectEdges -- коннект

MeshCountF1 = getNumFaces $.mesh -- количество полигонов объекта второе состояние (засовываем это в переменную MeshCountF1)

MeshCountF0!= MeshCountF1 -- сравниваем значения переменных,

 РЕЗУЛЬТАТ СРАВНЕНИЯ В ПОСЛЕДНЕЙ СТРОКЕ БЛОКА КОДА - ЕСТЬ ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ ИЛИ РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ЭТОГО БЛОКА КОДА

) == <bool> и завершаем условный оператор if, сравнивая полученное значение выполняемого блока кода с тем вариантом, который нам необходим для дальнейших действий.

_______________________________________________________________

Выделение вершин функцией в Edit_Poly

Для модификатора Edit_Poly работает функция

setVertSelection <node> [<modifier_or_index>] (<sel_bitarray> | <sel_array>) [name:<name>] [keep:<boolean>]
 Пример
set_Vert=#{1..10}
gco = modPanel.getCurrentObject()
setVertSelection selection[1] gco set_Vert keep:on
)

Источник, как ни странно из методов Mesh Vertex Methods

http://docs.autodesk.com/3DSMAX/14/ENU/MAXScript%20Help%202012//index.html?url=files/GUID-90843EC5-AE3A-43EB-9406-A3631DAEADE-1092.htm,topicNumber=d28e386399,hash=WS3ED54CBA79FF2E3D-417FC02312B7835BF26-6B91

_______________________________________________________________

 







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



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