3dsmax maxscript: как получить массив / список вершин в порядке их выбора? - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу инструмент для 3dsmax, который требует, чтобы пользователь получал выбранные вершины в том порядке, в котором они были выбраны в массиве, но пока прохождение этого возвращает вершины в их созданном порядке:

sel = getCurrentSeletion()
selvets = vsel[1].selectedVerts

Как получить выбранные вершины в том порядке, в котором я их выбрал в 3ds max, используя maxscript?

Если в maxscript нет способа, есть ли способ сделать это в python?

1 Ответ

0 голосов
/ 29 сентября 2019

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

try destroyDialog selectVerts catch()
rollout selectVerts ""
(
    local verts, currentSel

    fn collectVerts event nodes =
    (
        local sel = polyop.getVertSelection $
        local newVerts = sel - currentSel
        local removedVerts = currentSel - sel

        for v in removedVerts do if (local index = findItem verts v) > 0 do deleteItem verts index
        for v in newVerts do append verts v
        currentSel = sel
    )

    local callback = nodeEventCallback mouseUp:on enabled:off subobjectSelectionChanged:collectVerts

    checkButton chbSwitchCallback "Select verts"

    on chbSwitchCallback changed state do
    (
        if state and isKindOf $ Editable_Poly then
        (
            verts = #()
            currentSel = polyop.getVertSelection $
            callback.enabled = on
        )
        else
        (
            callback.enabled = off
            print verts #noMap
        )
    )
)
createDialog selectVerts
...