Слабонервных и совсем начинающих пользователей MAYA я попрошу не читать этот раздел
- особенно же тех, кто никогда не программировал. Возможность читать данные из файла или писать их туда вам, возможно, все равно не пригодится, но зато вы сохраните свои нервы в полном порядке.
Остальным ненасытным исследователям MELa, я предложу наделить кнопки Save и Load фунциями сохранения и загрузки наиболее приглянувшихся значений атрибутов из текстового файла на диске. Научившись писать и читать из файлов, аы сможете писать свои конверторы данных, полученных из непроверенных источников в виде набора чисел.
Займемся кнопкой Save. Допишите к ней вызов команды saveAll: button -I ‘‘Save’’ -w 94 -с “saveAU”; А внизу создайте новую процедуру: global proc saveAU()
{
fileDialog;
}
Теперь при нажатии на кнопку Save будет выскакивать диалог со списком файлов, который, впрочем, не производит никаких действий.
На самом деле команда fileDialog возвращает имя выбранного пользователем файла в виде строки и кроме того позволяет задать имя каталога, в котором открывается окошко со списком файлов.
global proc saveAUQ {
string SfileName = 'fileDialog -dm “c:/temp/” int SfileNumber = 'fopen SfileName V '; fclose SfileNumber;
}
Обратите внимание, что косые черты в имени папки - прямые, как в Unix, а не обратные, как в Windows. Это важно.
Команда fopen открывает файл с указанным в качестве первого аргумента именем. Второй аргумент (*w») определяет, что файл открывается для записи, то есть что все его содержимое при открытии стирается. Причем команда fopen возвращает уникальный номер только что открытого файла, на который будут ссылаться все дальнейшие команды чтения-записи в файл. Для любопытствующих умов замечу, что операционная система работает не с текстовыми именами файлов, а с их номерами (каналами), поэтому при открытии файла для работы ему присваивается уникальный номер, возвращаемый командой fopen.
Команда fclose просто закрывает файл с указанным номером (а не именем). Файлы положено закрывать после работы с ними.
Представляйте себе мысленно открытие файла в скрипте как открытие нового документа в MS Word или Notepad.
Между командами fopen и fclose можно вставить необходимые строки, производящие запись значений атрибутов в открытый файл.
Если на экран значения переменных можно вывести командой print, то в файл их можно напечатать командой fprint
global proc saveAll()
{
string SfileName = 'fileDialog -dm “c:/temp/” ’; int SfileNumber = ' fopen SfileName “w” '; float Svalue;
Svalue = 'getAttr “pushField.magnitude” fprint SfileNumber Svalue;
Svalue = 'getAttr "pushField.attenuation” '; fprint SfileNumber Svalue;
Svalue = 'getAttr “pushField.maxDistance” '; fprint SfileNumber Svalue;
Svalue = 'getAttr “pullField.magnitude" '; fprint SfileNumber $value;
Svalue = 'getAttr “pullField.attenuation” '; fprint SfileNumber $value;
$value = 'getAttr “pullField.maxDistance” '; fprint SfileNumber $va(ue;
Svalue = 'getAttr “dropShape.conserve” '; fprint SfileNumber Svalue; fclose SfileNumber;
}
Теперь, чтобы записать значения атрибутов на диск, нужно выбрать существующий файл на диске (желательно пустой или ненужный) и нажать кнопку Open в файловом диалоге. Ограничением команды fileDialog является то, что при задании вручную имени несуществующего файла она возвращает пустую строку и файл не открывается для работы с ним. Как решить эту проблему, я расскажу чуть позже, в разделе для взрослых.