|
|
|
|
|
06.06.2017, 08:56
|
|
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565
Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
06.06.2017, 08:56
Рейтинг:
()
Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
Последний раз редактировалось systland; 26.12.2017 в 11:52..
|
Просмотров: 439343
|
17.05.2018, 13:26
|
#141
|
Пользователь
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Letos
На всякий случай замените вызов Model.forEach на следующий код:
Код:
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);
}
}
}
forEachInList(Model, function (Object) {
for (var i = 0; i < RegExps.length; i++) {
if (RegExp(RegExps[i]).test(Object.Name))
Object.Selected = true;
};
});
В 10 криво работает Model.forEach и вместо некоторых объектов он передает undefined.
И еще меня смутили конечные регулярные выражения, которыми проверяются объекты. У меня выдало такой массив: [/^УДАЛИТЬ$/, /^Отрезок$/, /^Размер$/]. Судя по синтаксису RegExp, такое выражение эквивалентно проверке имени на равенство (то есть, объект с именем "Отрезок2" уже не пройдет проверку таким регулярным выражением). Поэтому интересно, как именно Вы хотите проверять имя объекта, или Вам достаточно того, как проверка происходит на данный момент (тогда логичнее было бы проверять имя на равенство без всяких регулярных выражений)?
|
У меня там куча различных вариаций слов на удаление. В зависимости от модели, над которой я работаю. Я приложил лишь самый простой.
|
|
|
Пользователь сказал cпасибо:
|
|
17.05.2018, 13:48
|
#142
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от Kartuz
У меня там куча различных вариаций слов на удаление. В зависимости от модели, над которой я работаю. Я приложил лишь самый простой.
|
Попробуйте заменить код, как указано выше. Если заработает - хорошо. Если нет - опишите, какой результат вы хотели бы увидеть (Объекты с какими именами должны были выделиться), и какой результат оказался на самом деле.
|
|
|
Пользователь сказал cпасибо:
|
|
18.05.2018, 12:35
|
#143
|
Пользователь
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
|
Letos, Всё работает. Хотя странно, старые непеределанные тоже заработали.
|
|
|
19.05.2018, 12:23
|
#144
|
Местный
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
|
как узнать тип панели вертикальная, горизонтальная, фронтальная ?
Видел тут на форуме эту тему, но перелопатив 100 страниц не нашёл
|
|
|
19.05.2018, 23:24
|
#145
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от wizardpnz
как узнать тип панели вертикальная, горизонтальная, фронтальная ?
Видел тут на форуме эту тему, но перелопатив 100 страниц не нашёл
|
Самый простой способ:
var axis = panel.NToGlobal(AxisZ);
Где panel - необходимая панель. Если у вектора axis - x=1, то панель вертиакльная
- y=1, то панель горизонтальная
- z=1, то панель фронтальная
P.S. Лучше сделать какую-нибудь функцию проверки на равенство с определённой точностью, например:
Код:
function Equals(a, b){
return Math.abs(a - b) < 0.001;
}
|
|
|
20.05.2018, 20:52
|
#146
|
Пользователь
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
|
Требуется два простеньких скрипта. Первый скрипт переворачивает блок на 180 градусов по оси Z ( как бы спиной), второй скрипт поворачивает тоже на 180 градусов вдоль оси Y. По простому, хочется реализовать вид на модель сзади и снизу.
|
|
|
21.05.2018, 07:53
|
#147
|
Местный
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
|
Цитата:
Сообщение от Letos
Самый простой способ:
var axis = panel.NToGlobal(AxisZ);
Где panel - необходимая панель. Если у вектора axis - x=1, то панель вертиакльная
- y=1, то панель горизонтальная
- z=1, то панель фронтальная
P.S. Лучше сделать какую-нибудь функцию проверки на равенство с определённой точностью, например:
Код:
function Equals(a, b){
return Math.abs(a - b) < 0.001;
}
|
а если допустим панель фронтальная, а потом её "руками" повернули по Z она стала как бы вертикальная , то как быть
|
|
|
21.05.2018, 09:06
|
#148
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от Kartuz
Требуется два простеньких скрипта. Первый скрипт переворачивает блок на 180 градусов по оси Z ( как бы спиной), второй скрипт поворачивает тоже на 180 градусов вдоль оси Y. По простому, хочется реализовать вид на модель сзади и снизу.
|
Вот оба скрипта:
Код:
var obj = Model.Selected;
obj.RotateGCS(AxisZ, 180);
var obj = Model.Selected;
obj.RotateGCS(AxisY, 180);
В этом примере поворачивается выделенный объект (если выделенных объектов несколько, то повернётся только один из них)
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
21.05.2018, 09:10
|
#149
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от wizardpnz
а если допустим панель фронтальная, а потом её "руками" повернули по Z она стала как бы вертикальная , то как быть
|
Думаю, никак. Никаких атрибутов, определяющих ориентацию панели (фронт/верт/гор) нет. Есть еще вариант проверять имя панели, но, думаю, он менее полезен, чем проверка по оси толщины.
|
|
|
21.05.2018, 12:12
|
#150
|
Местный
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
|
как получить список материалов используемых на сцене?
Нашёл вот это. А проще можно, это долго?
IndexOf))) в массиве
Цитата:
Сообщение от Briz
PHP код:
var Materials = Action.DS.MtList.Values.ToArray(); for (var k = 0; k < Materials.length; ++k) if (Model.IsMaterialUse(Materials[k])) { system.log(Materials[k].MaterialName); }
|
Последний раз редактировалось wizardpnz; 21.05.2018 в 13:03.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 23:56. Часовой пояс GMT +3.
|