Цитата:
Сообщение от 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);
}
}
}
})
Есть одно но: проверял и Ваш и свой скрипт на большой модели - Ваш скрипт выдаёт больше имён материалов, хотя часть этих имен не показываются в окне замены материала. Не знаю, с чем это связано.