Здравствуйте, я не специалист в этой области скриптов, но возникла необходимость использовать скрипт Gear (http://www.scriptspot.com/3ds-max/scripts). Пытался внедрить его в 3DMAX7 согласно инструкции, при старте выдает ошибку
Этот скрипт был написан для 3DMAX4.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 (ссылка), но, наверняка можно найти и более ранние версии.
Необходимо убрать из текста все литералы d0, указывающие на использование чисел с двойной точностью. То есть, в приведённой в сообщении об ошибке строке, должно быть не 18d0, а просто 18.
Убрать литерал L в строке 103:
было: bit.and 1L nr != 0
должно быть: bit.and 1 nr != 0
Отлично. Теперь нужно при закрытом 3ds max, распаковать файл avg_dlx70.dlx в папку Plugins, которая находится корневой папке 3ds max. В результате функция close_enough будет доступна, и по её поводу ошибка не возникнет.
По поводу того, что на скриншоте, да, я проглядел в прошлый раз. Функция free появилась только в 3ds Max 9 (Free() Method). Данная функция призвана немедленно освобождать неиспользуемую память. В принципе, эти две строчки: free involutePoints free trochoidPoints
можно просто удалить, добавив вместо них: involutePoints = #() trochoidPoints = #()
В результате, память будет высвобождаться с некоторой задержкой, что теоретически может снижать стабильность работы скрипта, а может пройти и без последствий.
Все получилось! Вы для меня сделали прекрасный новогодний подарок!
Благодарю Вас за участие в решении вопроса.
С наступающим Вас Новым Годом! Здоровья, удачи и всего доброго! 😃
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Александр Кашин
Этот скрипт был написан для 3DMAX4.2, но, как я понял из комментариев, должен работать и с более поздними версиями. Пожалуйста, помогите разобраться, в чем тут дело.
LastJedi
Теоретически, можно понизить требование, отредактировав скрипт, но нельзя гарантировать, что он будет стабильно работать. Возможно потребуются дополнительные доработки.
Если хотите, можете попробовать самостоятельно:
- Необходимо убрать из текста все литералы d0, указывающие на использование чисел с двойной точностью. То есть, в приведённой в сообщении об ошибке строке, должно быть не 18d0, а просто 18.
- Убрать литерал L в строке 103:
Эти литералы появились только в 3ds Max 9.было: bit.and 1L nr != 0
должно быть: bit.and 1 nr != 0
Функция добавлена в MAXScript начиная с 3ds max 2008. Её описание можно посмотреть тут: Float Close Enough Method. Ранее функция была доступна в Avguard DLX Extension. Насколько я видел, сейчас на ScriptSpot доступна версия для 3ds Max 9 (ссылка), но, наверняка можно найти и более ранние версии.
Александр Кашин
Александр Кашин
Попробовал запустить скрипт:
Обрадовался🙂
При попытке изобразить примитив получил это:
Опечалился😕
По третьему пункту: нашел версию для 3ds Max 7 (https://www.scriptspot.com/3ds-max/plugins/avguard-maxscript-extension-package-0). И что с этим надо сделать?
LastJedi
По поводу того, что на скриншоте, да, я проглядел в прошлый раз. Функция free появилась только в 3ds Max 9 (Free() Method). Данная функция призвана немедленно освобождать неиспользуемую память. В принципе, эти две строчки:
free involutePoints
free trochoidPoints
можно просто удалить, добавив вместо них:
involutePoints = #()
trochoidPoints = #()
В результате, память будет высвобождаться с некоторой задержкой, что теоретически может снижать стабильность работы скрипта, а может пройти и без последствий.
Александр Кашин
Благодарю Вас за участие в решении вопроса.
С наступающим Вас Новым Годом! Здоровья, удачи и всего доброго! 😃
LastJedi
И Вас с наступающим!