Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Запись в двоичный файл




Ввод-вывод в двоичные файлы

Открытие диалогового окна сохранения файлов

Диалоговое окно сохранения файлов(Save) открывается с помощью функции getSaveFileName:

fileName = getSaveFileName\

caption:"Select a File Name"\

types:" Text(*.txt)|(*.txt)|"

Функция getSaveFileName возвращает имя выбранного файла. Если файл уже существует, пользователю предлагается подтвердить продолжение операции сохранения данных в этом файле. Аналогично функции getOpenFileName функция getSaveFileName на самом деле не сохраняет данные в файле. Она лишь извлекает имя выбранного файла. Этот файл следует открыть в сценарии, записать в него данные и закрыть его с помощью рассмотренных ранее функций.


Приложение

Числа хранятся в компьютере в компактном двоичном формате. Такой формат дает ряд преимуществ при сохранении числовых данных в файлах.

Прежде всего, файл получается компактным. Так, если для хранения числового значения с плавающей точкой в двоичном формате требуется четыре байта, то для его сохранения в текстовом формате с помощью упоминавшихся выше функций требуется по одному байту на каждую цифру плюс еще один байт на десятичную точку. Например, для сохранения числа 1,4565 в текстовом файле требуется 6 байт.

Следует, однако, иметь в виду, что не все числовые значения, сохраняемые в двоичном формате, приводят к сокращению размера файла. Для сохранения в двоичном формате любого целого числа требуется, по крайней мере, четыре байта, поэтому строковое представление целых чисел от 0 до 100 получается более компактным, чем двоичное.

Еще одно преимущество сохранения в двоичном формате состоит в том, что в сценарии не нужно преобразовывать строки в числа при чтении данных из файла. В рассмотренной выше функции readValue строковые данные читаются из файла и автоматически преобразуются в числовые значения для того, чтобы их можно было использовать при выполнении числовых операций на компьютере. А при чтении двоичных данных из файлов необходимость в таком преобразовании отпадает.

Для открытия файла с целью чтения или записи двоичных данных служит функция fopen. Эта функция возвращает значение BinStream, которое исполь­зуется для последующего доступа к файлу.

В следующем упражнении вам предстоит создать сферу, записать в файл коор­динаты ее вершин, а затем установить 3dsMax в исходное состояние и прочитать из файла сохраненные координаты вершин.

1. Установите 3dsMax в исходное состояние.

2. Создайте в любом видовом окне сферу радиусом около 50 единиц. Этой сфере должно быть присвоено имя Sphered.

3. Преобразуйте сферу в редактируемый каркас.

4. Введите в окне редактора MAXScript Editor приведенную ниже строку кода сценария. Если на диске С вашего компьютера отсутствует каталог temp, выберите любой другой каталог по своему усмотрению, соответственно видоизменив сценарий:

stream = fopen "c:\\temp\\bintest.bin" "wb"

Параметр wb в этой строке кода означает только запись двоичных данных. Этот режим будет использован в сценарии для записи данных в файл.

5. Продолжите ввод кода сценария:

-- Получить число вершин сферы

num = getNumVerts $Sphere01

for i = 1 to num do


Приложение

(

-- Получить координаты положения вершин

pos = getVert $Sphere01 i

-- Записать координаты x, y, z в файл

writeFloat stream pos.x

writeFloat stream pos.y

writeFloat stream pos.z

)

Метод getNumVerts возвращает число вершин редактируемого каркаса, а метод getVert воспринимает каркасный объект в качестве своего первого параметра и число вершин в качестве своего второго параметра. Он возвращает значение типа Point3, обозначающее координаты x, y и z отдельной вершины.

6. Закройте файл, введя следующую заключительную строку кода сценария:

fclose stream

7. Выполните сценарий.

В итоге будет создан файл.

8. Попробуйте открыть созданный файл bintest.bin в текстовом редакторе Notepad или Wordpad.

Данные в этом файле записаны в двоичном формате. Их можно прочитать средствами MAXScript, но не текстового редактора. Поэтому измените тип вывода данных в файл, чтобы прочитать их.

9. Внесите приведенные ниже изменения в сценарий, используя на этот раз строковые данные. И в этом случае указывается параметр wb, поскольку строковые данные также состоят из отдельных байтов. Кроме того, необходимо изменить имя файла.

stream = fopen "c:\\temp\\bintest2.bin" "wb"

num = getNumVerts $Sphere01

for i = 1 to num do

(

pos = getVert $Sphere01 i

writeString stream (pos.x as string)

writeString stream (pos.у as string)

writeString stream (pos.z as string)

)

fclose stream

10. Откройте файл bintest2.bin втекстовомредакторе Notepad или Wordpad. На этот раз данные записаны в стандартном текстовом формате. Как показывает Проводник Windows, размер данного файла больше, чем предыдущего. Если же добавить символ перевода строки после каждого элемента данных, размер файла bintest2.bin станет еще больше.

При записи данных в двоичном формате могут быть использованы самые разные их представления. В частности, читать и записывать можно длинные цело­численные значения, хотя для их хранения потребуется больше байтов. Если ко­роткие целочисленные значения записываются с помощью функции writeShort и хранятся в двух байтах, то для записи длинных целочисленных значений с помощью функции writeShort требуется уже четыре байта.


Приложение

Кроме того, целочис­ленные значения могут храниться со знаком (плюс или минус) или без знака (только положительные значения).

Ниже приведены диапазоны для чисел, сохраняемых с помощью функций writeByte, writeShort и writeLong. Соответствующие значения указаны приближенно.

• Числа, сохраняемые с помощью функции writeByte

• Однобайтовое целое число со знаком: +/-127

• Однобайтовое целое число без знака: 0-255

• Числа, сохраняемые с помощью функции writeShort

• Двухбайтовое целое число со знаком: +/-32000

• Двухбайтовое целое число без знака: 0-65000

• Числа, сохраняемые с помощью функции writeLong

• Четырехбайтовое целое число со знаком: +/—2000000000

• Четырехбайтовое целое число без знака: 0-4000000000

Полный перечень представлений чисел, доступных в MAXScript, можно найти в следующем разделе справочного руководства но MAXScript: MAXScript Tools and Interaction with 3dsMax ⇨ FileAccess ⇨ Text and Binary File Input and Output ⇨ BinStream for Binary Reading and Writing (Инструменты MAXScript и взаимодействие с 3dsMax ⇨ Доступ к файлам ⇨ Ввод-вывод в текстовые и двоичные файлы ⇨ Методы класса BinStream для чтения и записи двоичных данных).




Поделиться с друзьями:


Дата добавления: 2014-10-15; Просмотров: 1255; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.