Показать сообщение отдельно
Старый 24.12.2020, 11:23   #19
Максим Титов
Новичок
 
Регистрация: 18.12.2020
Сообщений: 14
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
Максим Титов пока не определено
По умолчанию

Всем доброго!
У нас на фабрике два сверлильных станка, на одном мы сверлим детали у которых отверстия только в торцы и в пласть не дальше 50мм. от края. Если хотя бы одно отверстие удалено от карая больше 50мм. то деталь уходит на другой станок.
Нужно чтобы в смете определялась операция с соответствующим станком.

Я написал скрипт который вызывается из меню скриптов. он анализирует расположения отверстий в панели и выдаёт результат в виде сообщения. Он работает как надо.

Скрытый текст


// переводим измерения в локальные координаты панели
function FromFastTOPanel(fast, panel, v){
return panel.ToObject(fast.ToGlobal(v))
}

// определяем что работаем с выделенной панелью
var p1 = Model.Selected.AsPanel;
var fasts = p1.FindConnectedFasteners();

var bhx = false;

// в цикле проверяем позицию всех отверстий в панели
for (var i = 0; i < fasts.length; i++)
{
for (var x = 0; x < fasts[i].Holes.Count; x++)
{
var pos = FromFastTOPanel(fasts[i], p1, fasts[i].Holes[x].Position);

if ((pos.x <= 50 | pos.y <= 50) || (pos.y >= p1.ContourHeight-50 | pos.x >= p1.ContourWidth-50))
bhx = bhx;
else
{
bhx = true;
break;
}
}
}

// выдаём результаты проверки
if (bhx)
alert('BHX');
else
alert('ABD');
[свернуть]


Теперь я пытаюсь адаптировать его для операций в базис смете, что не очень то выходит. И проблема я так понимаю в том месте где определялась работа с выделенной деталью. Очевидно что такая реализация в смете не допустима, но вот как это обыграть ума не приложу.

Скрытый текст


function FromFastTOPanel(fast, panel, v){
return panel.ToObject(fast.ToGlobal(v))
}

var p1 = panel; //////////////////////////////////// собака зарыта
var fasts = p1.FindConnectedFasteners(); /////// где то здесь

var bhx = false;

for (var i = 0; i < fasts.length; i++)
{
for (var x = 0; x < fasts[i].Holes.Count; x++)
{
var pos = FromFastTOPanel(fasts[i], p1, fasts[i].Holes[x].Position);

if ((pos.x <= 50 | pos.y <= 50) || (pos.y >= p1.ContourHeight-50 | pos.x >= p1.ContourWidth-50))
bhx = bhx;
else
{
bhx = true;
break;
}
}
}

if (bhx)
Result = 1;
else
Result = 0;
[свернуть]

или можно сформулировать вопрос иначе. Как получить массив фурнитуры соединённых с панелью?

Последний раз редактировалось Максим Титов; 24.12.2020 в 14:49. Причина: дополнение вопроса
Максим Титов вне форума   Ответить с цитированием Вверх