|
|
|
|
|
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..
|
Просмотров: 433679
|
03.03.2020, 10:10
|
#501
|
Новичок
Регистрация: 09.04.2018
Сообщений: 11
Сказал(а) спасибо: 2
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Народ, не могу понять как сделать паз с лицевой и обратной стороны панели. Нужно снять фаску с торца радиусом 5 мм к примеру.
Подскажите пожалуйста.
|
|
|
03.03.2020, 12:13
|
#502
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от SUNR1se
Народ, не могу понять как сделать паз с лицевой и обратной стороны панели. Нужно снять фаску с торца радиусом 5 мм к примеру.
Подскажите пожалуйста.
|
Шаги следующие:
1. Добавить паз на панель
2. Задать траекторию паза (ориентация осей как у контура - относительно ЛСК панели)
3.Задать контур паза. У контура паза ориентация сложнее:
Ось Y контура сонаправлена оси Z ЛСК панели.
Ось X является векторным произведением оси Y и вектора направления траектории (должна быть ось Y или X в ЛСК панели в зависимости от того, как идёт траектория).
Самым сложным тут будет создание контура паза, поэтому, если есть возможность, лучше понасоздавать фрагментов и их подгружать в контур.
Вот небольшой пример создания паза (если грузить контур паза из фрагмента, то вместо добавления линий нужно просто вызвать cut.Contour.Load(filename))
Код
PHP код:
var panel = Model.Selected.AsPanel;
Undo.Changing(panel);
// нижний паз
{
var cut = panel.AddCut('Паз1');
cut.Trajectory.AddLine(panel.GMin.x, 0, panel.GMax.x, 0);
cut.Contour.AddArc({ x: 5, y: 0 },
{ x: 0, y: 5 },
{ x: 5, y: 5 });
cut.Contour.AddLine({ x: 0, y: 5 }, { x: 0, y: 0 });
cut.Contour.AddLine({ x: 0, y: 0 }, { x: 5, y: 0 })
}
// верхний паз
{
var t = panel.Thickness;
var cut = panel.AddCut('Паз2');
cut.Trajectory.AddLine(panel.GMin.x, 0, panel.GMax.x, 0);
cut.Contour.AddArc({ x: 0, y: t - 5 },
{ x: 5, y: t },
{ x: 5, y: t - 5 });
cut.Contour.AddLine({ x: 0, y: t - 5 }, { x: 0, y: t });
cut.Contour.AddLine({ x: 0, y: t }, { x: 5, y: t })
}
panel.Build();
[свернуть]
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
04.03.2020, 18:51
|
#503
|
Новичок
Регистрация: 09.04.2018
Сообщений: 11
Сказал(а) спасибо: 2
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Ребят, можно еще один вопросик и просьбу помочь=)
Есть проем,длина которого переменная, в этом проеме должно быть неизвестное кол-во деталей с известной шириной и зазором между собой. Расположения деталей относительно проема должно быть по центру, то есть зазор между первой и последней деталью относительно края проема, должны быть одинаковыми. А при изменении длины проема должно меняться количество деталей входящих в него.
Я так понимаю это нужно делать каким то циклом, но как это сделать не могу понять.
Точнее понимаю, но как написать это в скрипте, хз.
Если я правильно понял, то будет выглядеть что то типа:
Если сумма ширины панелей входящих в проем и сумма ширины зазоров между ними будут меньше чем ширина проема, то добавляется еще одна панель с началом отсчета координат от последней панели входящей в проем и цикл проверят условия по новой.
|
|
|
05.03.2020, 11:03
|
#504
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от SUNR1se
Ребят, можно еще один вопросик и просьбу помочь=)
Есть проем,длина которого переменная, в этом проеме должно быть неизвестное кол-во деталей с известной шириной и зазором между собой. Расположения деталей относительно проема должно быть по центру, то есть зазор между первой и последней деталью относительно края проема, должны быть одинаковыми. А при изменении длины проема должно меняться количество деталей входящих в него.
Я так понимаю это нужно делать каким то циклом, но как это сделать не могу понять.
Точнее понимаю, но как написать это в скрипте, хз.
Если я правильно понял, то будет выглядеть что то типа:
Если сумма ширины панелей входящих в проем и сумма ширины зазоров между ними будут меньше чем ширина проема, то добавляется еще одна панель с началом отсчета координат от последней панели входящей в проем и цикл проверят условия по новой.
|
Примерно такой алгоритм по размещению панелей внутри проёма:
Код
PHP код:
// Начало проёма
var min = 0;
// Конец проёма
var max = 600;
// "Ширина панели". Если между панелями есть зазор, то он добавляется в эту
// переменную. По сути, это расттояние между началом одной панели и началом следующей.
var panelw = 16;
// Ширина проёма
var width = max - min;
// кол-во панелей, умещающихсяя в проёме
var panelCount = Math.trunc(width / panelw);
// Отступ от края проёма = Ширина проёма - "Ширина панели" * кол-во панелей
var ident = width - (panelw * panelCount);
// Точка установки.
var pos = ident;
for (var i = 0; i < panelCount; i++){
// Какая-то функция по добавлению новой панели в точку
AddNewPanel(pos);
// Добавление "ширины панели" к точке установки, получение
// точки установки для следующей панели
pos += panelw;
}
[свернуть]
Цитата:
А при изменении длины проема должно меняться количество деталей входящих в него.
|
Если вы меняете длину проёма вручную вне скрипта (растяжение блока, например), то скрипт на это событие не повесить, соответственно нужно либо создавать парам. блок и вызывать его редактирование после каждого изменения длины проёма, либо реализовать всё это через парам. секции вместо скриптов.
|
|
|
Пользователь сказал cпасибо:
|
|
05.03.2020, 11:22
|
#505
|
Новичок
Регистрация: 09.04.2018
Сообщений: 11
Сказал(а) спасибо: 2
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Изделие строится только скриптом и все корректировки его размеров производятся именно скриптом. После завершения работы скрипта, готовую модель сразу можно отправлять в работу.
Есть форма с полями для изменения размера ширины изделия, соответственно при изменении этого параметра нужно понять сколько деталей поместится в этот проем.
Добавлено через 6 минут
И ещё оговорка у меня была. Детали которые находятся в проёме должны быть заключены в блок. У меня не получается получить количество деталей входящих в этот блок. Постоянно выдает ноль.
Добавлено через 3 минуты
То есть, нужно получить ширину проема, задать ширину создаваемого блока равной ширине проема, далее узнать количество деталей входящих в состав этого блока и если сумма ширины детали и зазора между ними меньше ширины блока, то добавить ещё деталь.
|
|
|
06.03.2020, 03:13
|
#506
|
Новичок
Регистрация: 09.04.2018
Сообщений: 11
Сказал(а) спасибо: 2
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Скрытый текст
// Начало проёма
var proem_Min = bpm.x + thick_Opora;
// Конец проёма
var proem_Max = bpm.x + x1_Rasp_Lamel;
// Ширина проёма
var w_proem = proem_Max - proem_Min;
// "Ширина панели".
var lamel_w = w_Lamel.Value;
// кол-во панелей и зазоров между ними, умещающихся в проёме
var countLamel = Math.round(w_proem / (lamel_w + w_zazor_Lamel.Value));
// Отступ от края проёма = (Ширина проёма - ((("Ширина панели" + Зазор между ламелями) * кол-во панелей) - зазор между ламелями)) / 2
var ident = (w_proem - (((lamel_w + w_zazor_Lamel.Value) * countLamel) - w_zazor_Lamel.Value)) / 2;
var pos = ident;
for (i = 0; i < countLamel; i++){
AddLamel(pos);
pos += lamel_w + w_zazor_Lamel.Value;
};
function AddLamel(pos){
m_Lamel.SetActive();
_Lamel = AddHorizPanel(bpm.x + thick_Opora + pos, bpm.z + z1_Lamel, bpm.x + thick_Opora + pos + w_Lamel.Value, bpm.z + z2_Lamel, bpm.y + y_Lamel);
_Lamel.Name = "Ламель";
_Lamel.TextureOrientation = TextureOrientation.Vertical;
_Lamel.AddPlastic(_Color_Lamel, true);
_Lamel.AddPlastic(_Color_Lamel, false);
if (r_Lamel.Value > 0) {
_val = r_Lamel.Value;
_panel = _Lamel;
_thick = m_Lamel.Thickness;
RadiusHorizPanel(_val, _panel, _thick);
};
_Lamel.Build();
};
[свернуть]
Чуть чуть подправил как надо и все работает.
Заменил Math.trunc (Округляет в наименьшую сторону) на Math.round (Округляет к ближайшему целому числу.
Немного доработал расчет отступа от края, теперь все ламели выстраиваются относительно проема по центру.
Спасибо большое за помощь.
Последний раз редактировалось SUNR1se; 06.03.2020 в 03:17.
Причина: Дополнения к сообщению.
|
|
|
09.03.2020, 11:13
|
#507
|
Пользователь
Регистрация: 19.02.2017
Сообщений: 38
Сказал(а) спасибо: 16
Поблагодарили 52 раз(а) в 9 сообщениях
Вес репутации: 101
|
Здравствуйте, объясните пожалуйста что означает сообщение об ошибке в скрипте, что нужно исправить? Скрипт создавался в 8-ом базисе.
https://yadi.sk/d/oamXtyGt6KWaRQ
|
|
|
09.03.2020, 20:45
|
#508
|
Пользователь
Регистрация: 19.02.2017
Сообщений: 38
Сказал(а) спасибо: 16
Поблагодарили 52 раз(а) в 9 сообщениях
Вес репутации: 101
|
Цитата:
Сообщение от Rafael M
Здравствуйте, объясните пожалуйста что означает сообщение об ошибке в скрипте, что нужно исправить? Скрипт создавался в 8-ом базисе.
https://yadi.sk/d/oamXtyGt6KWaRQ
|
Прочитал о null и undefined. Попробовал поменять "Action.OnMove = undefined" на "Action.OnMove = null". Разницу между ними не понял, но сообщение перестало выходить.
|
|
|
10.03.2020, 09:40
|
#509
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Rafael M
Прочитал о null и undefined. Попробовал поменять "Action.OnMove = undefined" на "Action.OnMove = null". Разницу между ними не понял, но сообщение перестало выходить.
|
Скорее всего косяк со стороны БМ - он пытался вызвать Action.OnMove(), не проверяя значение Action.OnMove, и получил соответствующую ошибку. Проверял в 11 - старый вариант нормально работает, в 10 - ошибка возникает на каждое движение мыши.
|
|
|
Пользователь сказал cпасибо:
|
|
10.03.2020, 17:12
|
#510
|
Пользователь
Регистрация: 19.02.2017
Сообщений: 38
Сказал(а) спасибо: 16
Поблагодарили 52 раз(а) в 9 сообщениях
Вес репутации: 101
|
Здравствуйте, еще один вопрос к этому скрипту, хочу вставлять опоры справа с помощью симметрии, (у передней правой ножки не правильно отображается клипса). Пробую использовать AddSymmetry, не получается...Может нужна другая команда?
|
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 12:26. Часовой пояс GMT +3.
|