|
|
|
|
|
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..
|
Просмотров: 425284
|
06.12.2018, 11:04
|
#311
|
Новичок
Регистрация: 11.07.2018
Сообщений: 13
Сказал(а) спасибо: 22
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Ovsyanicov,
Огромное спасибо!
Вообще их поддержка не вдохновила, задал вопрос по тому как считать ЛДСП шт а не кв.м, получил сухие ответы, например на форуме расписали этот вопрос по полочкам.
|
|
|
10.12.2018, 10:37
|
#312
|
Местный
Регистрация: 18.02.2008
Адрес: Санкт-Петербург
Сообщений: 508
Сказал(а) спасибо: 531
Поблагодарили 401 раз(а) в 127 сообщениях
Вес репутации: 327
|
Господа скрипто писатели, пожалуйста, кому не сложно сделайте скриптик чтоб на модели выделялись все детали с торцевыми отверстиями.
__________________
|
|
|
10.12.2018, 14:43
|
#313
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от potomu4to
Господа скрипто писатели, пожалуйста, кому не сложно сделайте скриптик чтоб на модели выделялись все детали с торцевыми отверстиями.
|
Сделано:
Код
Код:
function Equals(n1, n2){
return Math.abs(n1 - n2) < 0.001;
}
function EqualsV(v1, v2) {
return Equals(v1.x, v2.x) &&
Equals(v1.y, v2.y) &&
Equals(v1.z, v2.z);
}
function CheckWithPanel(gDir, panel){
return (EqualsV(gDir, panel.NToGlobal(AxisX)) ||
EqualsV(gDir, panel.NToGlobal(Axis_X)) ||
EqualsV(gDir, panel.NToGlobal(AxisY)) ||
EqualsV(gDir, panel.NToGlobal(Axis_Y)))
}
function CheckHole(hole, fast, panel){
var holeCenter = fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * (hole.Depth / 2),
y: hole.Position.y + hole.Direction.y * (hole.Depth / 2),
z: hole.Position.z + hole.Direction.z * (hole.Depth / 2),
})
holeCenter = panel.ToObject(holeCenter);
return (holeCenter.x > panel.GMin.x) && (holeCenter.x < panel.GMax.x) &&
(holeCenter.y > panel.GMin.y) && (holeCenter.y < panel.GMax.y) &&
(holeCenter.z > panel.GMin.z) && (holeCenter.z < panel.GMax.z);
}
Model.UnSelectAll();
Model.forEachPanel(function (panel) {
var fasts = panel.FindConnectedFasteners();
for (var i = 0; i < fasts.length; i++) {
var fast = fasts[i];
var holes = fast.Holes;
if (holes && holes.Count > 0) {
for (var j = 0; j < holes.Count; j++) {
var hole = holes[j];
if (CheckWithPanel(fast.NToGlobal(hole.Direction), panel) &&
CheckHole(hole, fast, panel)){
panel.Selected = true;
break;
}
}
}
else {
fastDir = fast.NToGlobal(AxisX);
if (CheckWithPanel(fastDir, panel))
panel.Selected = true;
}
}
})
[свернуть]
Проверял на параметрической фурнитуре (стяжки, евровинты), насчёт произвольной ничего сказать не могу. Если скрипт будет работать неправильно - приложите простой пример, спробуем разобраться.
Обновление 15:09
Поправил код. Добавил сравнение с точностью 0.001 - из-за погрешностей в числах с плавающей точкой могли не выделяться панели.
Обновление 15:22
В очередной раз поправил код. Исправил ошибку, что проверка равности векторов была только по оси Х
Обновление 21.12.18 11:30
В очередной раз поправил последствия копипасты. До этого не было проверки равности направления отверстия с направлением +У панели, поэтому не все панели могли выделяться.
Последний раз редактировалось Letos; 21.12.2018 в 11:33.
Причина: Поправил в очередной раз код
|
|
|
12 пользователя(ей) сказали cпасибо:
|
|
10.12.2018, 15:03
|
#314
|
Местный
Регистрация: 18.02.2008
Адрес: Санкт-Петербург
Сообщений: 508
Сказал(а) спасибо: 531
Поблагодарили 401 раз(а) в 127 сообщениях
Вес репутации: 327
|
Цитата:
Сообщение от Letos
Проверял на параметрической фурнитуре (стяжки, евровинты), насчёт произвольной ничего сказать не могу. Если скрипт будет работать неправильно - приложите простой пример, спробуем разобраться.
|
Спасибо вам большое что помогли.Пока проблем не нашел, случай чего в личку напишу.
__________________
|
|
|
25.12.2018, 21:55
|
#315
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,946
Сказал(а) спасибо: 3,974
Поблагодарили 3,530 раз(а) в 1,157 сообщениях
Вес репутации: 1043
|
Что представляют из себя объекты импортированные из AutoCad? Можно ли при вести эти объекты к типу Panel? На всякий случай прикрепил импортированную модель.
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
26.12.2018, 09:53
|
#316
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от bbb i ko
Что представляют из себя объекты импортированные из AutoCad? Можно ли при вести эти объекты к типу Panel?
|
Импортированные 3д объекты представляют из себя TImportedMesh и просто так их к панели не приведёшь. Самый простой способ - анализировать треугольники объекта и на основе их данных создавать панель. Но это только для простых панелей просто. Обычная прямоугольная панель - 12 треугольников (по 2 треугольника на каждую плоскость). Одну линию контура заменил на дугу - всё, уже 212 треугольников. А если с пазами - так это вообще замучаешься.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
27.12.2018, 11:00
|
#317
|
Новичок
Регистрация: 27.12.2018
Адрес: Кузнецк
Сообщений: 1
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Скрипт "Замена фурнитуры и блоков"
Добрый день. Интересует, есть ли скриптовая команда которая позволит запустить функцию БМ10 "Замена фурнитуры и блоков"? Цель следующая: на производство поступает файл в котором указанны изменения стандартного модуля, оператор запускает скрипт и автоматически производится замена параметров, указанных в файле.
|
|
|
27.12.2018, 14:41
|
#318
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от KLIM_58
Добрый день. Интересует, есть ли скриптовая команда которая позволит запустить функцию БМ10 "Замена фурнитуры и блоков"? Цель следующая: на производство поступает файл в котором указанны изменения стандартного модуля, оператор запускает скрипт и автоматически производится замена параметров, указанных в файле.
|
Функция замены фурнитуры есть (Action.ReplaceFurniture), но второй параметр - массив объектов фурнитуры, а не строк. Но если серьёзно заморочиться, можно написать скрипт. Один из вариантов - сохранять информацию о фурнитуре в строку и использовать её (строку) для загрузки объекта фурнитуры в скрипте. Вот самый простой пример:
Код:
var furn = Action.Properties.NewFurnitureValue();
furn.Choose();
var furnStr = furn.EncodeToString();
В переменной furnStr будет строка, которую можно сохранить и потом использовать в скрипте замены. А для загрузки параметров фурнитуры из строки есть следующая функция:
Код:
furn.DecodeFromString(furnStr);
По поводу самой функции Action.ReplaceFurniture. У неё три параметра:
1. Старая фурнитура (массив строк)
2. Новая фурнитура (массив объектов фурнитуры (тип InfFurniture в подсказке))
3. Крепёж для замены (массив 3д объектов).
И одна загвоздка - первые два массива должны быть одинаковой длины, иначе не заработает замена.
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
10.01.2019, 11:23
|
#319
|
Пользователь
Регистрация: 26.09.2014
Сообщений: 46
Сказал(а) спасибо: 55
Поблагодарили 15 раз(а) в 5 сообщениях
Вес репутации: 123
|
Уважаемые форумчане. Как-то коснулся задачи определения веса изделия. Был у меня скрипт (не помню автора), так в 9-ке работал отлично, но в 10-ке он не работает. Подскажите, где поправить?
Код:
Скрытый текст
Плотность = 0.68;
weight = 0;
spam = confirm ('Подсвечивать панели в процессе взвешивания?');
for (i=0; i<Model.Count; i++) {
Model.Objects [i].Selected = true;
// if (ispanel (Model.Objects [i].GSize.x, Model.Objects [i].GSize.y, Model.Objects [i].GSize.z)){
if (Model.Objects [i].AsPanel){
weight = weight +
(Model.Objects [i].GSize.x) *
(Model.Objects [i].GSize.y) *
(Model.Objects [i].GSize.z) / 1000 / 1000 * Плотность;
if (spam) { alert ('Панель взвешена'); }
}
Model.Objects [i].Selected = false;
}
alert ('Примерный вес изделия: ' + Math.round (weight) + 'кг');
function ispanel (a, b, c) {
aa = a;
bb = b;
cc = c;
if (aa > bb) {
t = aa;
aa = bb;
bb = t;
}
if (bb > cc) {
t = bb;
bb = cc;
cc = t;
}
if (aa > bb) {
t = aa;
aa = bb;
bb = t;
}
if ((aa < 50) && (bb > 50)) { return 1; }
else { return 0; }
}
[свернуть]
|
|
|
10.01.2019, 12:11
|
#320
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от fanest
Уважаемые форумчане. Как-то коснулся задачи определения веса изделия. Был у меня скрипт (не помню автора), так в 9-ке работал отлично, но в 10-ке он не работает. Подскажите, где поправить?
Код:
Скрытый текст
Плотность = 0.68;
weight = 0;
spam = confirm ('Подсвечивать панели в процессе взвешивания?');
for (i=0; i<Model.Count; i++) {
Model.Objects [i].Selected = true;
// if (ispanel (Model.Objects [i].GSize.x, Model.Objects [i].GSize.y, Model.Objects [i].GSize.z)){
if (Model.Objects [i].AsPanel){
weight = weight +
(Model.Objects [i].GSize.x) *
(Model.Objects [i].GSize.y) *
(Model.Objects [i].GSize.z) / 1000 / 1000 * Плотность;
if (spam) { alert ('Панель взвешена'); }
}
Model.Objects [i].Selected = false;
}
alert ('Примерный вес изделия: ' + Math.round (weight) + 'кг');
function ispanel (a, b, c) {
aa = a;
bb = b;
cc = c;
if (aa > bb) {
t = aa;
aa = bb;
bb = t;
}
if (bb > cc) {
t = bb;
bb = cc;
cc = t;
}
if (aa > bb) {
t = aa;
aa = bb;
bb = t;
}
if ((aa < 50) && (bb > 50)) { return 1; }
else { return 0; }
}
[свернуть]
|
А что не так со скриптом? У меня он запустился и выдал примерный вес. Сразу по скрипту могу сказать, что он считает вес только на корневом (верхнем) уровне модели, поэтому, если вес не совпадает, это можно исправить. А если не в этом дело, то опишите, что неправильно работает.
Если вообще не запускается, запустите через редактор скриптов и пришлите скриншот с тем, что записалось в лог редактора
|
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 23:48. Часовой пояс GMT +3.
|