Maxcript: поиск определенного объекта в моем выборе, по имени - PullRequest
0 голосов
/ 15 октября 2018

Я хочу найти конкретный объект по имени в моем выборе.

Например: в 3ds max я выбираю 2 объекта.

в Selection поискдля объекта с именем "BOX" и переименуйте его в "test"

, сейчас я могу фильтровать только с помощью [1] и [2].То, что я хочу, было бы больше ["BOX"], но это не работает.

on button1 pressed do with undo on
(
    object1 = selection[1]
    object2 = selection[2]
    if selection.count == 2 and Superclassof object1 == Geometryclass and Superclassof object2 == Geometryclass then 

            for i in selection do
            (
                object1.name = "test"
                object2.name = "test2"
                freeze object2
            ) 
    else
            messagebox ("!") title:"ERROR:"
        )

Благодаря Swordslayer мне удается сделать это:

on button pressed do with undo on
(
    if selection.count == 2 and Superclassof obj1 == Geometryclass and Superclassof obj2 == Geometryclass then
        (
                    for obj1 in selection where obj1.name == "BOX" do
                        (obj1.name = "test")
                    for obj2 in selection where obj2.name == "_high" do
                        (obj.name = "test2")
                )
    else
            messagebox ("!") title:"ERROR:"
        )

к сожалению ограничениеSuperclassof больше не работает!

1 Ответ

0 голосов
/ 15 октября 2018

Как обычно, в зависимости от того, как вы хотите его использовать, есть много способов сделать это, например,

for obj in selection where obj.name == "BOX" do obj.name = "test"

или

for obj in getNodeByName "BOX" ignoreCase:on all:on where obj.isSelected do obj.name = "test"

или даже

$selection/*Box.name = "test"

Редактировать: если вы действительно выбрали только два объекта:

if selection.count == 2 do case of
(
    (selection[1].name as name == #box) : selection[1].name = uniqueName selection[2].name
    (selection[2].name as name == #box) : selection[2].name = uniqueName selection[1].name
    default: messageBox "Error"
)
...