Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
ещё бы вызвать её программно с установленной галкой спецификация хмл
такое можно сделать с помощью определенных костылей.
решал подобную задачу. пачка зависимостей но работает.
технологии: базис скрипты + robin-language
если только очень надо, такое стоит делать).
будет необходимо расскажу как сделать.
Добрый день!
Прошу помочь со скриптом. Как скриптом получить длину стороны панели вдоль которой построен паз?
Под спойлером пример, разбитый на вспомогательные функции. Всему постарался дать максимально понятные комментарии.
Вспомогательные функции нужны для нахождения элемента контура, ближайшего к траектории (проверяется только первый элемент траектории). Дальше всё просто - у любого элемента контура, как и у самого контура есть функция ObjLength(), которая высчитывает его длину.
P.S. Если нужна длина паза, то можно "без этого вот всего" у траектории паза вызвать вышеупомянутый метод.
Код
PHP код:
// Возвращает 2 крайних точки 2D элемента
function GetPointsFromElement(elem) {
if (elem.IsLine() || elem.IsArc()) {
return [elem.Pos1, elem.Pos2];
}
if (elem.IsCircle()) {
var p = elem.Center;
p.x += elem.CirRadius;
var p2 = elem.Center;
p2.x -= elem.CirRadius;
return [p, p2];
}
}
// Возвращает индекс элемента контура, ближайшего к траектории.
// Проверка ведётся по первому элементу траектории.
function GetContourElemIndexFromCutTrajectory(cutTraj, contour) {
// Получаем две крайних точки элемента траектории.
// Одна точка неэффективна, ибо точка траектории может лежать на стыке двух
// элементов контура, соответственно результатом будет первый найденный элемент контура
// (а вторая точка траектории может лежать как на нём, так и на следующем элементе)
var ps = GetPointsFromElement(cutTraj[0]);
// Проверяем первый элемент контура и заранее считаем его результатом.
// Проверяется половинная сумма расстояний от каждой крайней точки траектории
// до элемента контура. Чем она меньше - тем ближе траектория к элементу контура.
var result = 0;
var minDist = Math.abs(contour[0].DistanceToPoint(ps[0]) + contour[0].DistanceToPoint(ps[1])) / 2;
// Проверяем остальные элементы контура
for (var i = 1; i < contour.Count; i++) {
var dist = Math.abs(contour[i].DistanceToPoint(ps[0]) + contour[i].DistanceToPoint(ps[1])) / 2;
if (dist < minDist) {
minDist = dist;
result = i;
}
}
return result;
}
// Возвращает элемент контура, ближайшего к траектории.
function GetContourElemFromCutTrajectory(cutTraj, contour) {
var idx = GetContourElemIndexFromCutTrajectory(cutTraj, contour);
return contour[idx];
}
var pan = Model.Selected.AsPanel;
alert(GetContourElemFromCutTrajectory(pan.Cuts[0].Trajectory, pan.Contour).ObjLength());
Спасибо большое за подробную роспись, но я к сожалению не на том уровне чтобы все понять. Пока читал, перечитывал и пробовал что то получить, незаметно пролетело 3 часа(
Я хочу переделать вот такой скрипт:
Model.forEachPanel(function (obj){
var A = obj.Cuts[0];
var Cnt = A.Contour;
var otst = Math.min(Cnt.Min.x, Cnt.Max.x);
if (A.Sign.indexOf(', ')>0){
A.Sign = A.Sign.substring(0,A.Sign.indexOf(', '));
}
A.Sign = A.Sign + ', от края ' + otst + ' мм';
})
но чтобы в спецификацию дописывался не отступ до паза, а сторона вдоль которой идет паз. Причем пусть даже это будет самый простой случай - проходной паз, для других случаев будет чертеж.
но чтобы в спецификацию дописывался не отступ до паза, а сторона вдоль которой идет паз. Причем пусть даже это будет самый простой случай - проходной паз, для других случаев будет чертеж.
А как вы планируете писать стороны? Вот, например, самая простая панель - 800Х600, имеет четыре стороны, как каждая из них называется?
Если вы определяете по длине стороны, то тогда можно как в примере - вызвать функцию GetContourElemFromCutTrajectory, в которую передать траекторию паза и контур панели. Результат выполнения этой функции - элемент контура, к которому ближе всего находится траектория паза. А у этого элемента контура уже можно узнать его длину.
Если вы по-другому собирались определять сторону, опишите поподробнее, как вы себе представляете этот алгоритм.