Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
"бок о бок" - это в разных папках на одном компьютере и при абсолютно равных условиях.
(что уже не возможно, так как БМ10 и 11 накрыты БЦ разными версиями протекторов - читайте историю про параноиков защитников)
У меня ни на одной из версий 10.X ни на одной OS не возникало никаких AV.
Ваш случай со скриптами протестирован на W10 LTSC/LTSB, W7 ent, W8.1 - как часы.
Прочтите в интернете про Access violation чтобы понимать механизмы возникновения эксепшена.
В общем дальнейшее обсуждение не имеет отношения к теме скриптов.
Цитата:
Сообщение от andronf
Скрипты разные версии БМ берут из одного места, ну да-облачного.
Тестируйте на локальных файлах, в безопасном режиме, на демке 10-ки, пользуйтесь Process Hacker или подобных утилитах при процессе - вычислите в чем дело и кто виноват.
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 29.04.2020 в 18:44.
2.Ошибки появляются на бм10 всегда и , насколько помню, на другом компьютере тоже.
3.Насчет этой строчки if (obj.Cuts.Count > 0).
Я заметил что без какой то строчки отступ пишется только на одной панели. Методом научного тыка и с помощью хелпа из комплекта базиса дописал такую строчку: for (var i = 0; i < panel.Cuts.Count; i++) {
var A = panel.Cuts[i];
не знаю что это значит, но работает)
4.А как у вас в скрипте все так красиво цветом выделяется, прямь как то понятнее выглядит?
2. Всегда вообще или всегда при выполнении любого скрипта? Попробуйте открыть БМ, выполнить простой скрипт "var a = 23;" и закрыть БМ. Если будет ошибка, скорее всего какие-то косяки в работе скриптов.
3. Когда у вас было "panel.Cuts[0]", брался только первый паз. Вы же написали цикл, который проходит каждый паз.
Здравствуйте. Возможно, это скрипт переделать для БМ 8 народн. Ошибка в 5 стр: Cnt.Min is undefined
Получится примерно так:
Код
PHP код:
/**
* ДЛя БМ8
* @param {Contour2D} cont
*/
function GetMax(cont) {
var result = {
x: -100000000,
y: -100000000
}
for (var i = 0; i < cont.Count; i++) {
var item = cont.Objects[i];
switch (item.ElType) {
case (1): //ElementType.Line
var p1 = item.AsLine().Pos1;
var p2 = item.AsLine().Pos2;
result.x = Math.max(result.x, p1.x, p2.x);
result.y = Math.max(result.y, p1.y, p2.y);
break;
case (2): //ElementType.Arc
var p1 = item.AsArc().Pos1;
var p2 = item.AsArc().Pos2;
var c = item.AsArc().Center;
result.x = Math.max(result.x, p1.x, p2.x, c.x);
result.y = Math.max(result.y, p1.y, p2.y, c.y);
break;
case (3): //3ElementType.Circle
var cir = item.AsCircle();
var c = cir.Center;
result.x = Math.max(result.x, c.x + cir.CirRadius);
result.y = Math.max(result.y, c.y + cir.CirRadius);
}
}
return result;
}
/**
* ДЛя БМ8
* @param {Contour2D} cont
*/
function GetMin(cont) {
var result = {
x: 100000000,
y: 100000000
}
for (var i = 0; i < cont.Count; i++) {
var item = cont.Objects[i];
switch (item.ElType) {
case (1): //ElementType.Line
var p1 = item.AsLine().Pos1;
var p2 = item.AsLine().Pos2;
result.x = Math.min(result.x, p1.x, p2.x);
result.y = Math.min(result.y, p1.y, p2.y);
break;
case (2): //ElementType.Arc
var p1 = item.AsArc().Pos1;
var p2 = item.AsArc().Pos2;
var c = item.AsArc().Center;
result.x = Math.min(result.x, p1.x, p2.x, c.x);
result.y = Math.min(result.y, p1.y, p2.y, c.y);
break;
case (3): //ElementType.Circle
var cir = item.AsCircle();
var c = cir.Center;
result.x = Math.min(result.x, c.x - cir.CirRadius);
result.y = Math.min(result.y, c.y - cir.CirRadius);
}
}
return result;
}
// В БМ8 у контура нет свойств Min и Max, поэтому приходится выкручиваться.
// Берём наиболее удалённую точку и ищем ближайшую точку контура.
// На непрямоугольных панелях может некорректно работать.
function GetContourMin(cont) {
if (cont.Min) {
return cont.Min
}
else { //ДЛя БМ8
return GetMin(cont)
}
}
function GetContourMax(cont) {
if (cont.Max) {
return cont.Max
}
else { //ДЛя БМ8
return GetMax(cont);
}
}
Model.forEachPanel(function (obj) {
if (obj.Cuts.Count > 0){
var A = obj.Cuts[0];
var Cnt = A.Contour;
var otst = Math.min(GetContourMin(Cnt).x, GetContourMax(Cnt).x);
if (A.Sign.indexOf(', ') > 0) {
A.Sign = A.Sign.substring(0, A.Sign.indexOf(', '));
}
A.Sign = A.Sign + ', от края ' + otst + ' мм';
}
})
[свернуть]
Проблема в том, что в БМ8 у контура не было свойств Min\Max, поэтому приходится писать костыли (оригинал костыля здесь).