|
|
|
|
|
06.06.2017, 09:56
|
|
БАЗИС 10 - Скрипты
systland
Модератор
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 560
Сказал(а) спасибо: 291
Поблагодарили 427 раз(а) в 179 сообщениях

06.06.2017, 09:56
Рейтинг:
(3 голосов - 4.00 средняя оценка)
Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
Последний раз редактировалось systland; 26.12.2017 в 11:52..
|
Просмотров: 67481
|
17.05.2018, 14:26
|
#141
|
Новичок
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 17
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 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" уже не пройдет проверку таким регулярным выражением). Поэтому интересно, как именно Вы хотите проверять имя объекта, или Вам достаточно того, как проверка происходит на данный момент (тогда логичнее было бы проверять имя на равенство без всяких регулярных выражений)?
|
У меня там куча различных вариаций слов на удаление. В зависимости от модели, над которой я работаю. Я приложил лишь самый простой.
|
|
|
17.05.2018, 14:48
|
#142
|
Консультант
Регистрация: 28.06.2017
Сообщений: 266
Сказал(а) спасибо: 53
Поблагодарили 472 раз(а) в 178 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от Kartuz
У меня там куча различных вариаций слов на удаление. В зависимости от модели, над которой я работаю. Я приложил лишь самый простой.
|
Попробуйте заменить код, как указано выше. Если заработает - хорошо. Если нет - опишите, какой результат вы хотели бы увидеть (Объекты с какими именами должны были выделиться), и какой результат оказался на самом деле.
|
|
|
Пользователь сказал cпасибо:
|
|
18.05.2018, 13:35
|
#143
|
Новичок
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 17
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
|
Letos, Всё работает. Хотя странно, старые непеределанные тоже заработали.
|
|
|
19.05.2018, 13:23
|
#144
|
Местный
Регистрация: 02.07.2011
Сообщений: 102
Сказал(а) спасибо: 51
Поблагодарили 40 раз(а) в 17 сообщениях
Вес репутации: 111
|
как узнать тип панели вертикальная, горизонтальная, фронтальная ?
Видел тут на форуме эту тему, но перелопатив 100 страниц не нашёл
|
|
|
20.05.2018, 00:24
|
#145
|
Консультант
Регистрация: 28.06.2017
Сообщений: 266
Сказал(а) спасибо: 53
Поблагодарили 472 раз(а) в 178 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от 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, 21:52
|
#146
|
Новичок
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 17
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
|
Требуется два простеньких скрипта. Первый скрипт переворачивает блок на 180 градусов по оси Z ( как бы спиной), второй скрипт поворачивает тоже на 180 градусов вдоль оси Y. По простому, хочется реализовать вид на модель сзади и снизу.
|
|
|
21.05.2018, 08:53
|
#147
|
Местный
Регистрация: 02.07.2011
Сообщений: 102
Сказал(а) спасибо: 51
Поблагодарили 40 раз(а) в 17 сообщениях
Вес репутации: 111
|
Цитата:
Сообщение от 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, 10:06
|
#148
|
Консультант
Регистрация: 28.06.2017
Сообщений: 266
Сказал(а) спасибо: 53
Поблагодарили 472 раз(а) в 178 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от Kartuz
Требуется два простеньких скрипта. Первый скрипт переворачивает блок на 180 градусов по оси Z ( как бы спиной), второй скрипт поворачивает тоже на 180 градусов вдоль оси Y. По простому, хочется реализовать вид на модель сзади и снизу.
|
Вот оба скрипта:
Код:
var obj = Model.Selected;
obj.RotateGCS(AxisZ, 180);
var obj = Model.Selected;
obj.RotateGCS(AxisY, 180);
В этом примере поворачивается выделенный объект (если выделенных объектов несколько, то повернётся только один из них)
|
|
|
Пользователь сказал cпасибо:
|
|
21.05.2018, 10:10
|
#149
|
Консультант
Регистрация: 28.06.2017
Сообщений: 266
Сказал(а) спасибо: 53
Поблагодарили 472 раз(а) в 178 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от wizardpnz
а если допустим панель фронтальная, а потом её "руками" повернули по Z она стала как бы вертикальная , то как быть
|
Думаю, никак. Никаких атрибутов, определяющих ориентацию панели (фронт/верт/гор) нет. Есть еще вариант проверять имя панели, но, думаю, он менее полезен, чем проверка по оси толщины.
|
|
|
21.05.2018, 13:12
|
#150
|
Местный
Регистрация: 02.07.2011
Сообщений: 102
Сказал(а) спасибо: 51
Поблагодарили 40 раз(а) в 17 сообщениях
Вес репутации: 111
|
как получить список материалов используемых на сцене?
Нашёл вот это. А проще можно, это долго?
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 в 14:03.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 07:31. Часовой пояс GMT +3.
|