Скрипты и функции для МПЛ и Б-Салона 10-11
АлКузнецов
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
05.05.2020, 20:37
Рейтинг:
()
Доброго дня коллеги.
Как показала практика применения скриптов для Б-Салона v10-11 имеет свои особенности написания и нюансы отладки.
Предлагаю использовать эту ветку для обмена опытом и готовыми решениями.
Добавлено через 15 минут
Скрытый текст
Необходимые функции для работы
PHP код:
function okrugl(ch, n) { // функция округления числа с заданной точностью // ch - число // n - количество знаков if(isNaN(ch) || isNaN(n)) return false; var m = Math.pow(10,n); return Math.round(ch*m)/m; }
/** цикл перебора всех элементов модели * @param {List3D} list * @param {(obj: Object3)=>{}} func */ function forEachInList(list, func){ if (!func) return; for (var i = 0; i < list.Count; i++){ var obj = list.Objects[i]; func(obj); if (obj.List){ forEachInList(obj.AsList(), func); } } }
[свернуть]
PHP код:
/* Функция определяет левое или правое исполнения модуля, которому в МПЛ разрешена симметрия. Для работы нужен список названий деталей, которые функция определяется как "левая боковина". */ function razvorot() { var p = 0; var pp = 0; forEachInList(TovarItems.TovarModel, function(obj) { switch (true) { case obj.Name == 'Бок левый': //alert(obj.Name + '' + obj.GMin.x); p = obj.GMin.x/100; pp = okrugl(p, 0); //устраняем погрешность установки break; case obj.Name == 'Бок_Б': //alert(obj.Name); p = obj.GMin.x/100; pp = okrugl(p, 0); //устранением погрешность установки break; } }); var usl = pp == 0; //alert(usl); if(pp == 0) {//alert("L"); return "L";} else {//alert("R"); return "R";} }
//alert( razvorot()+ " проверен"); //тест функции
Добавлено через 10 минут
Генерируя артикулы "резиновых" модулей, постоянно требуется не только выбор высоты, но и набор свойств ( в том числе логических) позволяющий подобрать ближайший больший артикул штатный из множества имеющихся
Скрытый текст
высота модуля
PHP код:
/* функция определения высоты модуля входящий параметр hY необязателен дает поправку в см на высоту модуля при подборе артикула Возвращает объект со свойствами { chek: true, // совпадение значения со штатной сеткой размеров n_: 24, // назначенная штатная высота h_: "X", // обозначение штатной высоты rem: '' // пояснение к артикулу высоты }
*/ function yM(hY) { //yM: ['X', 'Y', 'Z', 'E', 'B', 'C', 'F', 'G', 'H']; if (hY<0||hY>0) {var lY = hY*1;} else {var lY = 0;} //если у фукции не будет аргумента она равна 0 //alert(lY); var y_M = {chek: false, n_: 0, h_: '', rem: ''};
if (lY==0){ lY = Math.round((TovarItems.TovarModel.GSize.y)/10); // габарит модулия по высоте в см }else{ lY = lY + Math.round((TovarItems.TovarModel.GSize.y)/10); // габарит модуля по высоте в см }
switch (lY){ case 24: return y_M = {chek: true, n_: 24, h_: "X", rem: ''}; break; case 36: return y_M = {chek: true, n_: 36, h_: "Y", rem: ''}; break; case 48: return y_M = {chek: true, n_: 48, h_: "Z", rem: ''}; break; case 60: return y_M = {chek: true, n_: 60, h_: "E", rem: ''}; break; case 72: return y_M = {chek: true, n_: 72, h_: "B", rem: ''}; break; case 96: return y_M = {chek: true, n_: 96, h_: "C", rem: ''}; break; case 120: return y_M = {chek: true, n_: 120, h_: "F", rem: ''}; break; case 132: return y_M = {chek: true, n_: 132, h_: "G", rem: ''}; break; case 204: return y_M = {chek: true, n_: 204, h_: "H", rem: ''}; break; default: switch (true) { case lY < 24: return y_M = {chek: false, n_: 24, h_: "X", rem: ' уменьшение высоты X'}; break; case lY > 24 && lY < 36: return y_M = {chek: false, n_: 36, h_: "Y", rem: ' уменьшение высоты Y'}; break; case lY > 36 && lY < 48: return y_M = {chek: false, n_: 48, h_: "Z", rem: ' уменьшение высоты Z'}; break; case lY > 48 && lY < 60: return y_M = {chek: false, n_: 60, h_: "E", rem: ' уменьшение высоты E'}; break; case lY > 60 && lY < 72: return y_M = {chek: false, n_: 72, h_: "B", rem: ' уменьшение высоты B'}; break; case lY > 72 && lY < 96: return y_M = {chek: false, n_: 96, h_: "C", rem: ' уменьшение высоты C'}; break; case lY > 96 && lY < 120: return y_M = {chek: false, n_: 120, h_: "F", rem: ' уменьшение высоты F'}; break; case lY > 120 && lY < 132: return y_M = {chek: false, n_: 132, h_: "G", rem: ' уменьшение высоты G'}; break; case lY > 132 && lY < 204: return y_M = {chek: false, n_: 204, h_: "H", rem: ' уменьшение высоты H'}; break; default: alert("высота " + lY +" технически невыполнима"); } break; }
}
//alert("высота " + yM(-2).n_ + " штатная " + " " + yM(-2).h_+ yM(-2).chek + " " +yM(-2).rem );
[свернуть]
функция подбора ширины
PHP код:
/* функция определения ширины модуля входящий параметр lX необязателен дает поправку в см на ширину модуля при подборе артикула Возвращает объект со свойствами { chek: true, // совпадение значения со штатной сеткой размеров n_: 0, // назначенная штатная ширина rem: '' // пояснение к артикулу ширины }
*/
function xM(lX) { // xM: [15, 20, 24, 25, 30, 35, 40, 45, 60, 80, 90, 100, 105, 110, 120] if (lX<0||lX>0) {var __x = lX*1;} else {var __x = 0;} //если у фукции не будет аргумента она равна 0 var x_M = {chek: false, n_: 0, rem: ''};
if (__x==0){ __x = Math.round((TovarItems.TovarModel.GSize.x)/10); // габарит модулия по ширине в см }else{ __x = __x + Math.round((TovarItems.TovarModel.GSize.x)/10); // габарит модуля по ширине в см }
switch (__x){ case 15: return x_M = {chek: true, n_: 15, rem: ''}; break; case 20: return x_M = {chek: true, n_: 20, rem: ''}; break; case 24: return x_M = {chek: true, n_: 24, rem: ''}; break; case 25: return x_M = {chek: true, n_: 25, rem: ''}; break; case 30: return x_M = {chek: true, n_: 30, rem: ''}; break; case 35: return x_M = {chek: true, n_: 35, rem: ''}; break; case 40: return x_M = {chek: true, n_: 40, rem: ''}; break; case 45: return x_M = {chek: true, n_: 45, rem: ''}; break; case 60: return x_M = {chek: true, n_: 60, rem: ''}; break; case 80: return x_M = {chek: true, n_: 80, rem: ''}; break; case 90: return x_M = {chek: true, n_: 90, rem: ''}; break; case 100: return x_M = {chek: true, n_: 100, rem: '?'}; break; case 105: return x_M = {chek: true, n_: 105, rem: ''}; break; case 110: return x_M = {chek: true, n_: 110, rem: ''}; break; case 120: return x_M = {chek: true, n_: 120, rem: ''}; break; default: switch (true) { case __x < 15: return x_M = {chek: false, n_: 15, rem: ' уменьшение ширины ' +15}; break; case __x > 15 && __x < 20: return x_M = {chek: false, n_: 20, rem: ' уменьшение ширины'+20}; break; case __x > 20 && __x < 25: return x_M = {chek: false, n_: 25, rem: ' уменьшение ширины '+25}; break; case __x > 25 && __x < 30: return x_M = {chek: false, n_: 30, rem: ' уменьшение ширины '+30}; break; case __x > 30 && __x < 35: return x_M = {chek: false, n_: 30, rem: ' уменьшение ширины '+35}; break; case __x > 35 && __x < 40: return x_M = {chek: false, n_: 40, rem: ' уменьшение ширины '+40}; break; case __x > 40 && __x < 45: return x_M = {chek: false, n_: 45, rem: ' уменьшение ширины '+45}; break; case __x > 45 && __x < 60: return x_M = {chek: false, n_: 60, rem: ' уменьшение ширины '+60}; break; case __x > 60 && __x < 80: return x_M = {chek: false, n_: 80, rem: ' уменьшение ширины '+80}; break; case __x > 80 && __x < 90: return x_M = {chek: false, n_: 90, rem: ' уменьшение ширины '+90}; break; case __x > 90 && __x < 100: return x_M = {chek: false, n_: 100, rem: ' уменьшение ширины '+100}; break; case __x > 100 && __x < 120: return x_M = {chek: false, n_: 120, rem: ' уменьшение ширины '+120}; break; default: alert("ширина " + __x +" техниески невыполнима"); } break; }
}
//alert("ширина " + xM(0).n_ + " штатная " + " " + xM(0).chek + " - " +xM(0).rem ); //тест функции
[свернуть]
Функция подбора глубины
/*
функция определения глубины модуля
входящий параметр lZ необязателен дает поправку в см на ширину модуля при подборе артикула
Возвращает объект со свойствами
{
chek: true, // совпадение значения со штатной сеткой размеров
n_: 0, // назначенная штатная глубина
rem: '' // пояснение к артикулу глубины
}
*/
function zM(lZ)
{ //zM: [31, 33, 38, 40, 43, 45, 50, 54, 55, 57, 58, 59, 60, 65];
if (lZ<0||lZ>0) {var __z = lZ*1;} else {var __z = 0;} //если у фукции не будет аргумента она равна 0
var z_M = {chek: false, n_: 0, rem: ''};
if (__z==0){
__z = Math.round((TovarItems.TovarModel.GSize.z)/10); // габарит модулия по глубине в см
}else{
__z = __z + Math.round((TovarItems.TovarModel.GSize.z)/10); // габарит модулия по глубине в см
}
switch (__z){
case 31:
return z_M = {chek: true, n_: 31, rem: ''};
break;
case 33:
return z_M = {chek: true, n_: 33, rem: ''};
break;
case 38:
return z_M = {chek: true, n_: 38, rem: ''};
break;
case 40:
return z_M = {chek: true, n_: 40, rem: ''};
break;
case 43:
return z_M = {chek: true, n_: 43, rem: ''};
break;
case 45:
return z_M = {chek: true, n_: 45, rem: ''};
break;
case 50:
return z_M = {chek: true, n_: 50, rem: ''};
break;
case 54:
return z_M = {chek: true, n_: 54, rem: ''};
break;
case 55:
return z_M = {chek: true, n_: 55, rem: ''};
break;
case 57:
return z_M = {chek: true, n_: 57, rem: ''};
break;
case 58:
return z_M = {chek: true, n_: 58, rem: ''};
break;/**/
case 59:
return z_M = {chek: true, n_: 59, rem: ''};
break;
case 60:
return z_M = {chek: true, n_: 60, rem: ''};
break;
case 65:
return z_M = {chek: true, n_: 65, rem: ''};
break;
default:
switch (true)
{
case __z < 31:
return z_M = {chek: false, n_: 31, rem: ' уменьшение глубины ' +31};
break;
case __z > 31 && __z < 33:
return z_M = {chek: false, n_: 33, rem: ' уменьшение глубины'+33};
break;
case __z > 33 && __z < 45:
return z_M = {chek: false, n_: 45, rem: ' уменьшение глубины '+45};
break;
case __z > 45 && __z < 59:
return z_M = {chek: false, n_: 59, rem: ' уменьшение глубины '+59};
break;
case __z > 59 && __z < 65:
return z_M = {chek: false, n_: 65, rem: ' уменьшение глубины '+65};
break;
default:
alert("глубина " + __z +" каталогом не предусморенна");
}
break;
}
}
//alert("глубина " + zM().n_ + " штатная " + " " + zM().chek + " - " +zM().rem ); //тест функции
[свернуть]
__________________
С уважением Кузнецов Александр
|