Показать сообщение отдельно
Старый 21.05.2018, 15:11   #151
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
как получить список материалов используемых на сцене?
Нашёл вот это. А проще можно, это долго?

IndexOf))) в массиве
Вот решение быстрее:
Код:
function forEachInList(list, func){
    if (!func)
        return;
    for (var i = 0; i < list.Count; i++){
        var obj = list.Objects[i];
        func(obj);
        if (obj.List){
            forEachInList(obj.AsList(), func);
        }
    }
}

var matList = [];
forEachInList(Model, (obj)=>{
    var matName;
    if (obj.Material){
        matName = obj.Material.MaterialName;
        if (matList.indexOf(matName) < 0){
            system.log(matName);
        }
    }
    var panel = obj.AsPanel;
    if (panel){
        for (var i = 0; i < panel.Plastics.Count; i ++){
            var p = panel.Plastics.Plastics[i];
            matName = p.Material;
            if (matList.indexOf(matName) < 0){
                system.log(matName);
            }
        }
        for (var i = 0; i < panel.Butts.Count; i ++){
            var b = panel.Butts.Butts[i];
            matName = b.Material;
            if (matList.indexOf(matName) < 0){
                system.log(matName);
            }
        }
    }
})
Есть одно но: проверял и Ваш и свой скрипт на большой модели - Ваш скрипт выдаёт больше имён материалов, хотя часть этих имен не показываются в окне замены материала. Не знаю, с чем это связано.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (21.05.2018)