Я не пользуюсь модификаторами турбо и меш смус. Предпочитаю функцию у Editable_Poly – surfSubdivide.
Вот скрипт, которым я пользуюсь:
(
if classof $ == Editable_Poly
then
(
macros.run "Editable Polygon Object" "EPoly_NURMS_Toggle"
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
)
Он действует на один объект, и только в случае если тот Editable_Poly. Остальные игнорирует.
Цель:
Хочу сделать скрипт который при выделении большого количества разных объектов, включал и выключал у Editable_Poly сглаживание с настройками .iterations = 2 .showCage = off .isolineDisplay = off. В случае если у нескольких выделенных объектах включено а у остальных нет, при первом запуске скрипта у все удалял, а при повторном включал сглаживание.
Процесс:
Вот код который работает
for o in $ where hasProperty o "surfSubdivide" do o.surfSubdivide = off или on
Но:
Во первых – для него нужно 2 кнопки (ON и OFF)
Во вторых – он включает родные настройки объекта (1 уровень сглаживания и т.д.)
Создал вот такой код:
(
for i in selection do
(
check_Subdiv = i.surfSubdivide
if check_Subdiv == off
then
(
$.surfSubdivide = on
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
else
(
$.surfSubdivide = off
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
)
)
Странно, но код работает исключительно с нечетным количеством объектов.
Выделяешь 2 объекта Макс Лисинер отвечает – OK, но ничего не делает.
При попадании в выделение объекта Mesh выдает - -- Unknown property: "surfSubdivide" in $Editable_Mesh:Box11
Я изменил первую текстовую строчку - for i in selection where hasProperty i "surfSubdivide" do
По идеи он:
1 строка – определят объекты в которых есть функция surfSubdivide (то есть Editable_Poly )
2 - Проверяет включена ли эта функция
3 - если у всех объектов эта функция не включена, отправляет в else и выключает ее.
При повторном запуске скрипта у всех объектов Editable_Poly включает сглаживание.
Ура, Ура, Ура.
Но на самом деле не черта не работает!!!
Все так же срабатывает при выделение нечетного количества объектов.
И выдает -- Unknown property: "surfSubdivide" in $Editable_Mesh:Box11 (если в выделении есть Mesh)
Попробуй так:
objects_EP=#();objects_temp=#();
for o in $selection where classof o==Editable_Poly do (append objects_EP o;
if(o.surfSubdivide==false)then append objects_temp "false"😉
for o in objects_EP do (o.isolineDisplay=false;o.showCage=false;o.iterations=2;
if(objects_temp.count < objects_EP.count)then o.surfSubdivide=false;else o.surfSubdivide=true😉
Большущие спасибо!!!
Я два дня промудохался просматривая уроки CG Academy MaxScript (2DVD) Прорабатывал совершенно безумные варианты и все бес толку. Я признаться почти ни чего не понимаю в этом коде, Но все работает как часы.
Что б не отрывать новую тему, тут же еще один вопрос.
$.modifiers[#unwrap_uvw].setTVElementMode off или on
Срабатывает когда в стеке объекта (неважно поли, мэшь) есть модификатор Unwrap UVW.
Если нет, естественно выбивает ошибку. Как это можно ограничеть?
Цель: Хочу на одну кнопу посадить 2 скрипта
Грубый пример:
If условия ограничения uvw = правда
Then $.modifiers[#unwrap_uvw].setTVElementMode off или on – включается кнопка в edit UVWs
Else другой скрипт сохраненный в отдельно файле (а внутри него действие происходит только если объект поли (ограничено через If classof $ == Editable_Poly).)
Добавил к условию ограничения «and (classof $ == PolyMeshObject)»,
так как без этого скрипт безошибочно работал только при каком то выделенном объекте.
Конечный скрипт выглядит так:
(
if (classof $ == PolyMeshObject) and ($.modifiers[#unwrap_uvw]!=undefined)
then
(
$.modifiers[#unwrap_uvw].setTVElementMode off -- или on
)
else
(
macros.run "Editable Polygon Object" "EPoly_Detach" -- любой другой скрипт
)
)
Kolts если не сложно объясните хотя бы теоретически как можно воспользоваться try( ....) catch() в данном случае. У меня в Библии пользователя 2008 вообще про макс скрипт очень мало написано. Вот и леплю все через Иф, Тхен, Элс 🙂
И еще одно, посмотрите пожалуйста картинку. Может кто то знает как у Эдит сплайн в Макс скрипте прописываются функции помеченные красными крестиками. В хелпе не нашел. Там только дублируются кнопки которые и так доступны через интерфейс. Хочу и им назначить кнопки.
После долгих мучений и переборов разных функций, смог создать малополезный кусок кода полностью ручного управления:
setKnotType $ 1 3 (#corner)
updateshape $
В котором точка под номером 3 переводится в Корнер. Если сплайнов приатаченно несколько, переводится 3 точка в сплайне с индексом 1.
Думаю, что для нормальной работы, должно быть что то вроде этого (в коде не срабатывает не одна строчка)
a = getSplineSelection ($) -- Определяет индекс сплайна
b = getKnotSelection $ а -- Определяет выделенные точки на сплайне
setKnotType $ a b (#corner) -- Выделенные точки становятся Корнер.
updateshape $
При использовании функции, getSplineSelection ($). Корректно определяет индекс только в режиме сплайна, если к примеру выделяешь вертексы на другом сплайне, его индекс не определяется. После определения индекса создается как я понимаю массив.
Во время определения точек на сплайне b = getKnotSelection $ а, где по идеи А индекс сплайна, выдает ошибку -- Unable to convert: #(2) to type: Integer. Поэтому вручную указываем индекс, после чего создается массив с выделенными точками на сплайне и в третьей строчке офибки повторяются.
Вот и заканчивается вся эта эпопея ручным вводом индекса сплайна и точки, которая будет переведена в Корнер 🙂
Нашел код, который переводит все точки на всех приатаченных сплайнах в Корнер. Как ни старался его переделать, не вышло.
for s = 1 to (numSplines $) do
(
for k = 1 to (numKnots $ s) do
(
knt = getKnotPoint $ s k
setKnotType $ s k (#corner)
)
)
updateshape $
Может кто-то подскажет как его модернизировать, что б он срабатывал только на выделенных вертексах (возможно разных приатаченных сплайнов (с разными индексами))
Я в скриптах вообще ничаго не понимаю, но круг познаний умножаю=)
Вопрос следующий! А как вы назначили "Nurms" скрипт на кнопку мыши?!
Запустить скрипт то я запустил, а как его назначить на кнопку мыши сообразить не могу.
Буду рад любой подсказке=)!
Насколько я понимаю, речь идет о скрипте из сообщения №2.
Во первых нужна мышь с дополнительными кнопками (у меня такая рис). А дальше все зависит от драйверов мыши. Я назначил на дополнительные клавиши мыши, кнопки [Num7], [Num8], [Num9] (это цифры в провой части клавиатуры), и [,]. А на них уже в максе поставил скрипты. Вот и получается что скрипт назначен на дополнительную кнопку мыши.
Хорошая мышка!=) А колличество кнопок, только позавидовать заставляет 😉)
Опробовал метод и всё заработало))) Теперь все кнопки использую на мышке....
Низкий поклон и Большое СПА СИ БО!!! 5+ =)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Александр Чернега
Я не пользуюсь модификаторами турбо и меш смус. Предпочитаю функцию у Editable_Poly – surfSubdivide.
Вот скрипт, которым я пользуюсь:
(
if classof $ == Editable_Poly
then
(
macros.run "Editable Polygon Object" "EPoly_NURMS_Toggle"
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
)
Он действует на один объект, и только в случае если тот Editable_Poly. Остальные игнорирует.
Цель:
Хочу сделать скрипт который при выделении большого количества разных объектов, включал и выключал у Editable_Poly сглаживание с настройками .iterations = 2 .showCage = off .isolineDisplay = off. В случае если у нескольких выделенных объектах включено а у остальных нет, при первом запуске скрипта у все удалял, а при повторном включал сглаживание.
Процесс:
Вот код который работает
for o in $ where hasProperty o "surfSubdivide" do o.surfSubdivide = off или on
Но:
Во первых – для него нужно 2 кнопки (ON и OFF)
Во вторых – он включает родные настройки объекта (1 уровень сглаживания и т.д.)
Создал вот такой код:
(
for i in selection do
(
check_Subdiv = i.surfSubdivide
if check_Subdiv == off
then
(
$.surfSubdivide = on
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
else
(
$.surfSubdivide = off
$.iterations = 2
$.showCage = off
$.isolineDisplay = off
)
)
)
Странно, но код работает исключительно с нечетным количеством объектов.
Выделяешь 2 объекта Макс Лисинер отвечает – OK, но ничего не делает.
При попадании в выделение объекта Mesh выдает - -- Unknown property: "surfSubdivide" in $Editable_Mesh:Box11
Я изменил первую текстовую строчку - for i in selection where hasProperty i "surfSubdivide" do
По идеи он:
1 строка – определят объекты в которых есть функция surfSubdivide (то есть Editable_Poly )
2 - Проверяет включена ли эта функция
3 - если у всех объектов эта функция не включена, отправляет в else и выключает ее.
При повторном запуске скрипта у всех объектов Editable_Poly включает сглаживание.
Ура, Ура, Ура.
Но на самом деле не черта не работает!!!
Все так же срабатывает при выделение нечетного количества объектов.
И выдает -- Unknown property: "surfSubdivide" in $Editable_Mesh:Box11 (если в выделении есть Mesh)
Помогите пожалуйста.
igorznag
objects_EP=#();objects_temp=#();
for o in $selection where classof o==Editable_Poly do (append objects_EP o;
if(o.surfSubdivide==false)then append objects_temp "false"😉
for o in objects_EP do (o.isolineDisplay=false;o.showCage=false;o.iterations=2;
if(objects_temp.count < objects_EP.count)then o.surfSubdivide=false;else o.surfSubdivide=true😉
Александр Чернега
Я два дня промудохался просматривая уроки CG Academy MaxScript (2DVD) Прорабатывал совершенно безумные варианты и все бес толку. Я признаться почти ни чего не понимаю в этом коде, Но все работает как часы.
Александр Чернега
$.modifiers[#unwrap_uvw].setTVElementMode off или on
Срабатывает когда в стеке объекта (неважно поли, мэшь) есть модификатор Unwrap UVW.
Если нет, естественно выбивает ошибку. Как это можно ограничеть?
Цель: Хочу на одну кнопу посадить 2 скрипта
Грубый пример:
If условия ограничения uvw = правда
Then $.modifiers[#unwrap_uvw].setTVElementMode off или on – включается кнопка в edit UVWs
Else другой скрипт сохраненный в отдельно файле (а внутри него действие происходит только если объект поли (ограничено через If classof $ == Editable_Poly).)
Вложения
igorznag
Александр Чернега
Спасибо.
Александр Чернега
так как без этого скрипт безошибочно работал только при каком то выделенном объекте.
Конечный скрипт выглядит так:
(
if (classof $ == PolyMeshObject) and ($.modifiers[#unwrap_uvw]!=undefined)
then
(
$.modifiers[#unwrap_uvw].setTVElementMode off -- или on
)
else
(
macros.run "Editable Polygon Object" "EPoly_Detach" -- любой другой скрипт
)
)
Александр Чернега
Оказывается при назначении модификатора unwrap_uvw примитиву он для макс скрипта становится Editable_mesh.
Так что первая строчка условия должна быть:
if (classof $ == PolyMeshObject) or (classof $ == Editable_mesh) and ($.modifiers[#unwrap_uvw]!=undefined)
kolts
Александр Чернега
И еще одно, посмотрите пожалуйста картинку. Может кто то знает как у Эдит сплайн в Макс скрипте прописываются функции помеченные красными крестиками. В хелпе не нашел. Там только дублируются кнопки которые и так доступны через интерфейс. Хочу и им назначить кнопки.
Вложения
Savin Denis
Про остальные читай в главе SplineShape : Shape
Александр Чернега
В котором точка под номером 3 переводится в Корнер. Если сплайнов приатаченно несколько, переводится 3 точка в сплайне с индексом 1.
Думаю, что для нормальной работы, должно быть что то вроде этого (в коде не срабатывает не одна строчка)
При использовании функции, getSplineSelection ($). Корректно определяет индекс только в режиме сплайна, если к примеру выделяешь вертексы на другом сплайне, его индекс не определяется. После определения индекса создается как я понимаю массив.
Во время определения точек на сплайне b = getKnotSelection $ а, где по идеи А индекс сплайна, выдает ошибку -- Unable to convert: #(2) to type: Integer. Поэтому вручную указываем индекс, после чего создается массив с выделенными точками на сплайне и в третьей строчке офибки повторяются.
Вот и заканчивается вся эта эпопея ручным вводом индекса сплайна и точки, которая будет переведена в Корнер 🙂
Нашел код, который переводит все точки на всех приатаченных сплайнах в Корнер. Как ни старался его переделать, не вышло.
for s = 1 to (numSplines $) do ( for k = 1 to (numKnots $ s) do ( knt = getKnotPoint $ s k setKnotType $ s k (#corner) ) ) updateshape $Может кто-то подскажет как его модернизировать, что б он срабатывал только на выделенных вертексах (возможно разных приатаченных сплайнов (с разными индексами))Savin Denis
на
Anti Pirate
Вопрос следующий! А как вы назначили "Nurms" скрипт на кнопку мыши?!
Запустить скрипт то я запустил, а как его назначить на кнопку мыши сообразить не могу.
Буду рад любой подсказке=)!
Александр Чернега
Во первых нужна мышь с дополнительными кнопками (у меня такая рис). А дальше все зависит от драйверов мыши. Я назначил на дополнительные клавиши мыши, кнопки [Num7], [Num8], [Num9] (это цифры в провой части клавиатуры), и [,]. А на них уже в максе поставил скрипты. Вот и получается что скрипт назначен на дополнительную кнопку мыши.
Вложения
Anti Pirate
Опробовал метод и всё заработало))) Теперь все кнопки использую на мышке....
Низкий поклон и Большое СПА СИ БО!!! 5+ =)