Render.ru

Вопрос по скрипту Gear

Александр Кашин

Пользователь сайта
Рейтинг
4
#1
Здравствуйте, я не специалист в этой области скриптов, но возникла необходимость использовать скрипт Gear (http://www.scriptspot.com/3ds-max/scripts). Пытался внедрить его в 3DMAX7 согласно инструкции, при старте выдает ошибку
error1.jpg

Этот скрипт был написан для 3DMAX4.2, но, как я понял из комментариев, должен работать и с более поздними версиями. Пожалуйста, помогите разобраться, в чем тут дело.
 

LastJedi

Знаток
Рейтинг
27
#2
На сайте указана неверная версия 3ds max. В том виде, как сейчас, скрипту требуется минимум 3ds max 2008.

Теоретически, можно понизить требование, отредактировав скрипт, но нельзя гарантировать, что он будет стабильно работать. Возможно потребуются дополнительные доработки.

Если хотите, можете попробовать самостоятельно:
  • Необходимо убрать из текста все литералы d0, указывающие на использование чисел с двойной точностью. То есть, в приведённой в сообщении об ошибке строке, должно быть не 18d0, а просто 18.
  • Убрать литерал L в строке 103:
    было: bit.and 1L nr != 0
    должно быть: bit.and 1 nr != 0
Эти литералы появились только в 3ds Max 9.​
  • Найти готовую или написать собственную реализацию функции close_enough. Она вызывается в строке 126.
    Функция добавлена в MAXScript начиная с 3ds max 2008. Её описание можно посмотреть тут: Float Close Enough Method. Ранее функция была доступна в Avguard DLX Extension. Насколько я видел, сейчас на ScriptSpot доступна версия для 3ds Max 9 (ссылка), но, наверняка можно найти и более ранние версии.
 

Александр Кашин

Пользователь сайта
Рейтинг
4
#4
Если хотите, можете попробовать самостоятельно:
  • Необходимо убрать из текста все литералы d0, указывающие на использование чисел с двойной точностью. То есть, в приведённой в сообщении об ошибке строке, должно быть не 18d0, а просто 18.
  • Убрать литерал L в строке 103:
    было: bit.and 1L nr != 0
    должно быть: bit.and 1 nr != 0
Эти два пункта выполнил.
Попробовал запустить скрипт:
Gear.jpg

Обрадовался:)
При попытке изобразить примитив получил это:
Gear1.jpg

Опечалился:confused:
По третьему пункту: нашел версию для 3ds Max 7 (https://www.scriptspot.com/3ds-max/plugins/avguard-maxscript-extension-package-0). И что с этим надо сделать?
 

LastJedi

Знаток
Рейтинг
27
#5
Отлично. Теперь нужно при закрытом 3ds max, распаковать файл avg_dlx70.dlx в папку Plugins, которая находится корневой папке 3ds max. В результате функция close_enough будет доступна, и по её поводу ошибка не возникнет.

По поводу того, что на скриншоте, да, я проглядел в прошлый раз. Функция free появилась только в 3ds Max 9 (Free() Method). Данная функция призвана немедленно освобождать неиспользуемую память. В принципе, эти две строчки:
free involutePoints
free trochoidPoints
можно просто удалить, добавив вместо них:
involutePoints = #()
trochoidPoints = #()
В результате, память будет высвобождаться с некоторой задержкой, что теоретически может снижать стабильность работы скрипта, а может пройти и без последствий.
 

Александр Кашин

Пользователь сайта
Рейтинг
4
#6
Все получилось!
Gear2.jpg
Вы для меня сделали прекрасный новогодний подарок!
Благодарю Вас за участие в решении вопроса.
С наступающим Вас Новым Годом! Здоровья, удачи и всего доброго! :D
 
Сверху