Показать сообщение отдельно
Старый 05.05.2020, 20:37   #1
Скрипты и функции для МПЛ и Б-Салона 10-11
 
Аватар для АлКузнецов
АлКузнецов
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104

Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Версия для печати Отправить по электронной почте
АлКузнецов АлКузнецов вне форума 05.05.2020, 20:37
Рейтинг: ()

Доброго дня коллеги.
Как показала практика применения скриптов для Б-Салона v10-11 имеет свои особенности написания и нюансы отладки.

Предлагаю использовать эту ветку для обмена опытом и готовыми решениями.

Добавлено через 15 минут

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

Необходимые функции для работы
PHP код:

  
function okrugl(chn) {
  
// функция округления числа с заданной точностью
  // ch - число
  // n - количество знаков
    
if(isNaN(ch) || isNaN(n)) return false;
    var 
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 
0< list.Counti++){
        var 
obj = list.Objects[i];
        
func(obj);
        if (
obj.List){
            
forEachInList(obj.AsList(), func);
        }
    }

[свернуть]


PHP код:

/*
Функция определяет левое или правое исполнения модуля, которому в МПЛ разрешена симметрия.
Для работы нужен список названий деталей, которые функция определяется как "левая боковина".
*/
function razvorot()
{
var 
0;
var 
pp 0;
forEachInList(TovarItems.TovarModel, function(obj)
{
        switch (
true)
        {
        case 
obj.Name == 'Бок левый':
        
//alert(obj.Name + '' + obj.GMin.x);
        
obj.GMin.x/100;
        
pp okrugl(p0); //устраняем погрешность установки
        
break;
        case 
obj.Name == 'Бок_Б':
        
//alert(obj.Name);
        
obj.GMin.x/100;
        
pp okrugl(p0);    //устранением погрешность установки
        
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 = {chekfalsen_0h_''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 = {chektruen_24h_"X"rem''};
    break;
        case 
36:
        return  
y_M = {chektruen_36h_"Y"rem''};
    break;
        case 
48:
        return 
y_M = {chektruen_48h_"Z"rem''};
    break;
        case 
60:
        return 
y_M = {chektruen_60h_"E"rem''};
    break;
        case 
72:
        return  
y_M = {chektruen_72h_"B"rem''};
    break;
        case 
96:
        return  
y_M = {chektruen_96h_"C"rem''};
    break;
        case 
120:
       return  
y_M = {chektruen_120h_"F"rem''};
    break;
        case 
132:
        return  
y_M = {chektruen_132h_"G"rem''};
    break;
        case 
204:
        return 
y_M = {chektruen_204h_"H"rem''};
    break;
    default:
            switch (
true)
        {
            case 
lY 24:
                return 
y_M = {chekfalsen_24h_"X"rem' уменьшение высоты X'};
            break;
            case 
lY 24 && lY 36:
                return 
y_M = {chekfalsen_36h_"Y"rem' уменьшение высоты Y'};
            break;
            case 
lY 36 && lY 48:
                return 
y_M = {chekfalsen_48h_"Z"rem' уменьшение высоты Z'};
            break;
            case 
lY 48 && lY 60:
                return 
y_M = {chekfalsen_60h_"E"rem' уменьшение высоты E'};
            break;
            case 
lY 60 && lY 72:
                return 
y_M = {chekfalsen_72h_"B"rem' уменьшение высоты B'};
            break;
            case 
lY 72 && lY 96:
                return 
y_M = {chekfalsen_96h_"C"rem' уменьшение высоты C'};
            break;
            case 
lY 96 && lY 120:
                return 
y_M = {chekfalsen_120h_"F"rem' уменьшение высоты F'};
            break;
            case 
lY 120 && lY 132:
                return 
y_M = {chekfalsen_132h_"G"rem' уменьшение высоты G'};
            break;
            case 
lY 132 && lY 204:
                return 
y_M = {chekfalsen_204h_"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 = {chekfalsen_0rem''};

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 = {chektruen_15rem''};
    break;
        case 
20:
        return  
x_M = {chektruen_20rem''};
    break;
        case 
24:
        return 
x_M = {chektruen_24rem''};
    break;
        case 
25:
        return 
x_M = {chektruen_25rem''};
    break;
        case 
30:
        return  
x_M = {chektruen_30rem''};
    break;
        case 
35:
        return  
x_M = {chektruen_35rem''};
    break;
        case 
40:
       return  
x_M = {chektruen_40rem''};
    break;
        case 
45:
        return  
x_M = {chektruen_45rem''};
    break;
        case 
60:
        return 
x_M = {chektruen_60rem''};
    break;
        case 
80:
        return 
x_M = {chektruen_80rem''};
    break;
        case 
90:
        return  
x_M = {chektruen_90rem''};
    break;
        case 
100:
        return 
x_M = {chektruen_100rem'?'};
    break;
        case 
105:
        return 
x_M = {chektruen_105rem''};
    break;
        case 
110:
        return  
x_M = {chektruen_110rem''};
    break;
        case 
120:
        return  
x_M = {chektruen_120rem''};
    break;
    default:
            switch (
true)
        {
            case 
__x 15:
                return 
x_M = {chekfalsen_15rem' уменьшение ширины ' +15};
            break;
            case 
__x 15 && __x 20:
                return 
x_M = {chekfalsen_20,  rem' уменьшение ширины'+20};
            break;
            case 
__x 20 && __x 25:
                return 
x_M = {chekfalsen_25rem' уменьшение ширины '+25};
            break;
            case 
__x 25 && __x 30:
                return 
x_M = {chekfalsen_30rem' уменьшение ширины '+30};
            break;
            case 
__x 30 && __x 35:
                return 
x_M = {chekfalsen_30rem' уменьшение ширины '+35};
            break;
            case 
__x 35 && __x 40:
                return 
x_M = {chekfalsen_40rem' уменьшение ширины '+40};
            break;
            case 
__x 40 && __x 45:
                return 
x_M = {chekfalsen_45rem' уменьшение ширины '+45};
            break;
            case 
__x 45 && __x 60:
                return 
x_M = {chekfalsen_60rem' уменьшение ширины '+60};
            break;
            case 
__x 60 && __x 80:
                return 
x_M = {chekfalsen_80rem' уменьшение ширины '+80};
            break;
            case 
__x 80 && __x 90:
                return 
x_M = {chekfalsen_90rem' уменьшение ширины '+90};
            break;
            case 
__x 90 && __x 100:
                return 
x_M = {chekfalsen_100rem' уменьшение ширины '+100};
            break;
            case 
__x 100 && __x 120:
                return 
x_M = {chekfalsen_120rem' уменьшение ширины '+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 ); //тест функции
[свернуть]
__________________
С уважением Кузнецов Александр
Просмотров: 12563
Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
AlexBolton (05.05.2020), bars73 (26.06.2020), Letos (06.05.2020), PravCom (19.11.2021), SaNeK11 (18.05.2020)