|
|
|
|
|
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..
|
Просмотров: 425228
|
10.01.2019, 12:37
|
#321
|
Пользователь
Регистрация: 26.09.2014
Сообщений: 46
Сказал(а) спасибо: 55
Поблагодарили 15 раз(а) в 5 сообщениях
Вес репутации: 123
|
Некоторые изделия не просчитывает. Ошибок нет, но выдает: Примерный вес изделия: 0 Кг
|
|
|
10.01.2019, 14:32
|
#322
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от fanest
Некоторые изделия не просчитывает. Ошибок нет, но выдает: Примерный вес изделия: 0 Кг
|
Попробуйте такой скрипт:
Код
Код:
var Плотность = 0.68;
var weight = 0;
var spam = confirm('Подсвечивать панели в процессе взвешивания?');
Model.forEachPanel(function (panel){
panel.Selected = true;
if (panel.AsPanel) {
weight = weight +
(panel.GSize.x) *
(panel.GSize.y) *
(panel.GSize.z) / 1000 / 1000 * Плотность;
if (spam) { alert('Панель взвешена'); }
}
panel.Selected = false;
})
alert('Примерный вес изделия: ' + Math.round(weight) + 'кг');
[свернуть]
|
|
|
11 пользователя(ей) сказали cпасибо:
|
|
10.01.2019, 15:16
|
#323
|
Пользователь
Регистрация: 26.09.2014
Сообщений: 46
Сказал(а) спасибо: 55
Поблагодарили 15 раз(а) в 5 сообщениях
Вес репутации: 123
|
Отлично! Все работает! Спасибо большое!
|
|
|
18.01.2019, 17:40
|
#324
|
Местный
Регистрация: 16.06.2008
Адрес: Подольск Мск Обл
Сообщений: 685
Сказал(а) спасибо: 1,486
Поблагодарили 801 раз(а) в 237 сообщениях
Вес репутации: 421
|
поясните пжл, возможно ли скриптами сделать вычитание одной операцией одного тела из нескольких-многих тел? Т.е. допустим есть сборный фасад с филенкой и штапиками, я делаю прямоугольное тело больше фасада и которое наполовину пересекает фасад, выделяю фасад (целиком несколько деталей) и говорю вычесть прямоугольное тело, получаем пол фасада...,далее я копирую его в буфер вставляю в 2д получаю сечение фасада. Тоже самое допустим для целого шкафа получим его разрез... Скрипты такое могут?
|
|
|
18.01.2019, 17:47
|
#325
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Dima1313
поясните пжл, возможно ли скриптами сделать вычитание одной операцией одного тела из нескольких-многих тел? Т.е. допустим есть сборный фасад с филенкой и штапиками, я делаю прямоугольное тело больше фасада и которое наполовину пересекает фасад, выделяю фасад (целиком несколько деталей) и говорю вычесть прямоугольное тело, получаем пол фасада...,далее я копирую его в буфер вставляю в 2д получаю сечение фасада. Тоже самое допустим для целого шкафа получим его разрез... Скрипты такое могут?
|
Нет. Скриптами сделать вычитание тел не получится.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
01.02.2019, 11:39
|
#326
|
VIP
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
|
Господа, я так понял, эластичные фрагменты установить скриптом пока никак?
|
|
|
05.02.2019, 17:27
|
#327
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Ozimko
Господа, я так понял, эластичные фрагменты установить скриптом пока никак?
|
Есть способ: загружать их как фурнитуру.
Код:
var frag = OpenFurniture('D:\\Полки.fr3d');
if (frag){
var obj = frag.Make(0, 0);
if (obj){
obj.ElasticResize({
x: 800,
y: 1000,
z: 400
});
obj.Owner = Model.Temp;
}
}
По порядку, что происходит
1. Загружаем как фурнитуру файл "D:\Полки.fr3d"
2. Если файл загрузился создаём 3д объект (два параметра функции Make для фурнитуры - толщина первой и второй панели - не должны никак влиять на установку фрагмента).
3. Если объект создался, меняем его размеры на (800, 100, 400) и назначаем ему Owner (временная область модели, чтобы по завершении скрипта Базис сам автоматически добавил его в историю).
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
05.02.2019, 22:24
|
#328
|
VIP
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
|
Спасибо. Работает. Осталось только заставить фрагмент устанавливать на определенной высоте..... Помогайте.
SetCamera(p3dFront);
Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
SetCamera(p3dTop);
Back = GetEdge('Укажите заднюю границу', AxisX).First.z;
Front = GetEdge('Укажите переднюю границу', AxisX).First.z;
SetCamera(p3dFront);
x1 = Bok1.GabMax.x + 0;
x2 = Bok2.GabMin.x - 0;
z1 = Back;
z2 = Front;
var frag = OpenFurniture('C:\\Bazis 10\\Фрагменты\\35\\11.fr3d');
if (frag){
var obj = frag.Make(0, 0);
if (obj){
obj.ElasticResize({
x: x2,
y: Action.Pos3.y,
z: z2
});
obj.Owner = Model.Temp;
}
}
Упс. И не только высоту.... еще и первая точка фрагмента - начало координат....
|
|
|
06.02.2019, 09:45
|
#329
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Ozimko
Спасибо. Работает. Осталось только заставить фрагмент устанавливать на определенной высоте.
И не только высоту.... еще и первая точка фрагмента - начало координат....
|
Дополнил ваш код и добавил немного комментариев.
Странно, что вы решили взять для высоты координату "Action.Pos3.y", ведь позиция курсора в этот момент может быть любой. Я решил, что будет логичнее брать границы высоты по границам указанных вертикальных панелей. Также изменил вычисление размера объекта и добавил назначение позиции (трёхмерной точки).
Код
Код:
const filename = 'C:\\Bazis 10\\Фрагменты\\35\\11.fr3d';
SetCamera(p3dFront);
var Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
var Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
SetCamera(p3dTop);
var Back = GetEdge('Укажите заднюю границу', AxisX).First.z;
var Front = GetEdge('Укажите переднюю границу', AxisX).First.z;
SetCamera(p3dFront);
var x1 = Bok1.GabMax.x + 0;
var x2 = Bok2.GabMin.x - 0;
// Максимальная координата по высоте из двух минимальных координат панелей
var y1 = Math.max(Bok1.GabMin.y, Bok2.GabMin.y);
// Минимальная координата по высоте из двух максимальных координат панелей
var y2 = Math.min(Bok1.GabMax.y, Bok2.GabMax.y);
var z1 = Back;
var z2 = Front;
var frag = OpenFurniture(filename);
if (frag) {
var obj = frag.Make(0, 0);
if (obj) {
// размер по оси = максимум - минимум
obj.ElasticResize({
x: x2 - x1,
y: y2 - y1,
z: z2 - z1
});
obj.Owner = Model.Temp;
}
// минимальная координата идёт в координату позиции
obj.Position = {
x: x1,
y: y1,
z: z1
}
}
[свернуть]
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
06.02.2019, 09:58
|
#330
|
VIP
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
|
Огромное спасибо, все работает. Что бы мы, дилетанты, без вас делали....
А по этому скрипту - нельзя ли сделать точку вставки фрагмента привязанной либо к положению курсора, либо вводом высоты полки в выпадающее окно либо в панели свойств? Добили бы тогда офигенный скрипт.
с вводом высоты справился. А вот с привязкой к курсору мыши не могу....
const filename = 'C:\\Bazis 10\\Фрагменты\\35\\11.fr3d';
pozY = NewNumberInput('высота полки');
pozY.Value = 30;
SetCamera(p3dFront);
var Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
var Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
SetCamera(p3dTop);
var Back = GetEdge('Укажите заднюю границу', AxisX).First.z;
var Front = GetEdge('Укажите переднюю границу', AxisX).First.z;
SetCamera(p3dFront);
var x1 = Bok1.GabMax.x + 0;
var x2 = Bok2.GabMin.x - 0;
// Максимальная координата по высоте из двух минимальных координат панелей
var y1 = Math.max(Bok1.GabMin.y, Bok2.GabMin.y);
// Минимальная координата по высоте из двух максимальных координат панелей
var y2 = Math.min(Bok1.GabMax.y, Bok2.GabMax.y);
var z1 = Back;
var z2 = Front;
var frag = OpenFurniture(filename);
if (frag) {
var obj = frag.Make(0, 0);
if (obj) {
// размер по оси = максимум - минимум
obj.ElasticResize({
x: x2 - x1,
y: y2 - y1,
z: z2 - z1
});
obj.Owner = Model.Temp;
}
// минимальная координата идёт в координату позиции
obj.Position = {
x: x1,
y: y1 + pozY.Value,
z: z1
}
}
|
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 19:43. Часовой пояс GMT +3.
|