Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты


Реклама на портале PROMEBELclub
Реклама на портале PROMEBELclub

битрикс24 Клей для мебели HOMA.
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 11:22  
Скрипты. Готовые решения для БМ8-2021
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 145

Сказал(а) спасибо: 31
Поблагодарили 645 раз(а) в 84 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 13.01.2014, 11:22
Рейтинг: (1 голосов - 5.00 средняя оценка)

Этот раздел предназначен для размещения готовых скриптов.
Здесь находятся ТОЛЬКО готовые скрипты. Для обсуждения есть отдельная тема: Обсуждение готовых скриптов.

Авторам:
  1. Давать уникальные названия скриптам (не совпадающие с названием уже выложенных скриптов, за исключением обновлений скрипта)
  2. Указывать работоспособность в разных версиях БМ.
  3. Общее описание работы скрипта.

Версии, указанные модератором, как прошедшие проверку:
8 - Демо-версия 8.0.7.9649
- "народная" 8.0.12.12765
9 - Демо-версия 9.0.8.18908
10 - Демо-версия 10.0.0.21602

Обратите внимание на полезные ответы в этой теме!


Последний раз редактировалось Letos; 11.05.2018 в 15:23..
Просмотров: 113055
Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
LARS1024 (13.03.2021), Mullerr (03.02.2021), Uncle (25.12.2017), vit-amin (17.12.2020), Анатолий.ru (06.11.2020)
Старый 28.11.2020, 09:51   #91
Meshok
Пользователь
 
Аватар для Meshok
 
Регистрация: 17.12.2016
Сообщений: 71
Сказал(а) спасибо: 14
Поблагодарили 45 раз(а) в 28 сообщениях
Вес репутации: 69
Meshok на пути к лучшему
По умолчанию

Цитата:
Сообщение от АлКузнецов Посмотреть сообщение
Стабильно работает в 10, в 11й версии выдает ошибку смысла которой я не понимаю...
Крутил, вертел, понять хотел...
Чего-то Ваш скрипт у меня и в 10-ке (демо) не арбайтен, поэтому не знаю с какого боку подойти...

P.S. На вскидку проблема в этой строке:

Window2.Combo1.ComboItems = Materials;

На мой взгляд - разные типы значений

Последний раз редактировалось Meshok; 28.11.2020 в 10:43.
Meshok вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
АлКузнецов (30.11.2020)
Старый 09.02.2021, 22:26   #92
Иван МЦ5
Новичок
 
Регистрация: 19.12.2019
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
Иван МЦ5 пока не определено
По умолчанию

В демо версии поддержка скриптов отключена, как и импорт-экспорт корпусов.
Иван МЦ5 вне форума   Ответить с цитированием Вверх
Старый 09.02.2021, 22:44   #93
Meshok
Пользователь
 
Аватар для Meshok
 
Регистрация: 17.12.2016
Сообщений: 71
Сказал(а) спасибо: 14
Поблагодарили 45 раз(а) в 28 сообщениях
Вес репутации: 69
Meshok на пути к лучшему
По умолчанию

Цитата:
Сообщение от Иван МЦ5 Посмотреть сообщение
В демо версии поддержка скриптов отключена, как и импорт-экспорт корпусов.
Насколько мне известно - в ДЕМО-версиях отключена возможность сохранить проект (настройки и ets..., всех нюансов не проверял). Но чтобы нельзя было использовать скрипты - это слышу впервые.
Meshok вне форума   Ответить с цитированием Вверх
Старый 10.02.2021, 01:51   #94
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 138
Сказал(а) спасибо: 25
Поблагодарили 82 раз(а) в 29 сообщениях
Вес репутации: 49
sergio1982 скоро придёт к известности
По умолчанию Подсчёт кромки и площади


Обновление, описание в 75 посте.

v2.17
+ Добавлен вывод облицовки пласти.
+ Добавлен вывод в фурнитуру блоков составной фурнитуры.

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

Код:
/*
Расчёт площади, веса, объёма и периметра панелей, метража кромки, погонажа и профилей,
а также количества фурнитуры.

http://promebelclub.ru/forum/showthread.php?p=505089#post505089


v2.17
03:42 10.02.2021
+ PlasticsCheck
+ IsFastener() && fix obj.IsFastener()

v2.16
0:12 28.01.2021
+ obj.IsFastener()
*/

var AddHidden = 0 // нужно ли добавлять скрытые объекты в результаты
var AddArticul = 0 // нужно ли добавлять артикул к имени материала

var Q_MDF = 1111111.111111 // name.match(/^МДФ/i)
var Q_STEKLO = 400000 // name.match(/стекло/i)
var Q_LDSP = 1333333.333333 // иначе

// -------------------------------------------------

var Res = {Panels: [],Linears: [],Extrusions: [],Edges: [],Fasteners: [], Plastics: []
 , Total: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Count: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Weight: 0, Volume: 0, PanelsContour: 0};
var Buffer = [];
var Selected = Model.SelectionCount;

for (var i = 0; i < Model.Count; ++i) {
    recurse(Model.Objects[i])
};

for (var key in Buffer) {
    CheckObj(Buffer[key])
};

function CheckObj(obj) {
    if (MyRules(obj))
        return
    var objtype = obj.toString()
    if (obj.AsPanel) {
        MtName = MaterialName(obj.MaterialName)
        Contour = obj.Contour;
        if (obj.MaterialWidth > 0) {                                            // погонный
            Add('Linears', MtName, Math.max(Contour.Height, Contour.Width))
        } else {                                                                // панели
            Add('Panels', MtName, (Contour.Height * Contour.Width))
            WeightAndVolumeCalc(Contour.Height * Contour.Width * obj.Thickness, MtName)
            Res.PanelsContour += GetContourLength(Contour)
        }
        Butts = obj.Butts;                                                      // кромка
        for (var i = 0; i < Butts.Count; ++i) {
            Add('Edges', MaterialName(Butts[i].Material), GetButtLength(Butts[i], Contour))
        };
    } else if (objtype == '[object TFastener]' || IsFastener(obj)) {           // фурнитура
        Add('Fasteners', MaterialName(obj.Name), 1)
    } else if (objtype == '[object TExtrusionBody]') {                          // профиль
        Add('Extrusions', MaterialName(obj.MaterialName), Math.abs(obj.Thickness))
    } else if (objtype == '[object T2DRotationBody]') {                         // погонный
        Add('Linears', MaterialName(obj.MaterialName), Math.max(obj.Contour2D.Height, obj.Contour2D.Width))
    }
}

var string = '';
if (Object.keys(Res.Panels).length) {
    string += '\n              Панели (квадратные метры): ' + (Res.Total.Panels / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Panels + '\n\n';
    for (var key in Res.Panels) {
        AddString(key, (Res.Panels[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Plastics).length) {
    string += '\n              Облицовка пласти (квадратные метры): ' + (Res.Total.Plastics / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Plastics + '\n\n';
    for (var key in Res.Plastics) {
        AddString(key, (Res.Plastics[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Edges).length) {
    string += '\n              Кромка (метры): ' + (Res.Total.Edges / 1000).toFixed(2) + ', объектов: ' + Res.Count.Edges + '\n\n';
    for (var key in Res.Edges) {
        AddString(key, (Res.Edges[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Linears).length) {
    string += '\n              Погонные материалы (метры): ' + (Res.Total.Linears / 1000).toFixed(2) + ', объектов: ' + Res.Count.Linears + '\n\n';
    for (var key in Res.Linears) {
        AddString(key, (Res.Linears[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Extrusions).length) {
    string += '\n              Профили (метры): ' + (Res.Total.Extrusions / 1000).toFixed(2) + ', объектов: ' + Res.Count.Extrusions + '\n\n';
    for (var key in Res.Extrusions) {
        AddString(key, (Res.Extrusions[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Fasteners).length) {
    string += '\n              Фурнитура (штуки): ' + Res.Total.Fasteners + '\n\n';
    for (var key in Res.Fasteners) {
        string += key + '   =   ' + Res.Fasteners[key] + '    \n'
    };
}
if (Res.Volume > 0) {
    string += '\n              Вес, объём и периметр (только панели):\n\n'
    + (Res.Weight).toFixed(1) + ' килограмм\n'
    + (Res.Volume / 1000000000).toFixed(3) + ' кубических метров\n'
    + (Res.PanelsContour / 1000).toFixed(2) + ' метров периметра\n'
}

if (string == '') {
    alert('Объекты не обнаружены!')
} else {
    var captionstring = ''
    + (Selected ? 'ИНФО ТОЛЬКО О ВЫДЕЛЕННЫХ И ПОДСВЕЧЕННЫХ!!!\n' : '')
    + (!AddHidden ? 'СКРЫТЫЕ НЕ УЧИТЫВАЮТСЯ!!!\n' : '')

    if (!confirm(captionstring + string + '\n\n\n              Чтобы вывести в файл нажмите "Нет"'))
        ButtonExport()
}
Action.Finish()

// -------------------------------------------------

function recurse(obj, sel) {
    if (!obj.Visible && !AddHidden)
        return
    if (!obj.List) {
        if (!sel)
            sel = !!((Selected) && (obj.Selected || obj.Highlighted))
        if (Selected && !sel)
            return
        PlasticsCheck(obj)
        Buffer.push(obj)
    } else {
        if (IsFastener(obj) && ((Selected && obj.Selected) || !Selected))
            return Buffer.push(obj)
        var blocksel = !!((Selected) && (sel || obj.Selected || obj.Highlighted))
        for (var i = 0; i < obj.Count; i++) {
            recurse(obj[i], blocksel)
        }
    }
}

function PlasticsCheck(obj) {
    if (obj.toString() !== '[object TFurnPanel]')
		return
	for (var i = 0; i < obj.Plastics.Count; i++) {
		MtName = MaterialName(obj.Plastics[i].Material)
		if (MtName == '')
			continue
		Add('Plastics', MtName, (obj.Contour.Height * obj.Contour.Width))
    }
}

function IsFastener(obj) {
    return ((obj.toString() == '[object TFastener]') || ((typeof obj.IsFastener == 'function') && obj.IsFastener()))
}

function Add(name, key, value) {
    if (value <= 0)
        return
    if (!Res[name].hasOwnProperty(key))
        Res[name][key] = 0
    Res[name][key] += value
    Res.Total[name] += value
    Res.Count[name] += 1
}

function AddString(key, value) {
    if (value > 0)
        string += key + '   =   ' + value + '    \n'
}

function GetButtLength(butt, contour) {
    return contour.Objects[butt.ElemIndex].ObjLength()
}

function GetContourLength(contour) {
    var len = 0
    for (var i = 0; i < contour.Count; ++i) {
        len += contour.Objects[i].ObjLength()
    };
    return len
}

function MaterialName(str) {
    if (AddArticul)
        return str.replace("\r", ". Артикул ")
    return str.replace(/\r.*/, '')
}

function ButtonExport() {
    system.writeTextFile('export.txt', string);
    Path = '"' + Action.Properties.AbsolutePath() + 'export.txt"'
    NewCOMObject('WScript.Shell').run(Path);
}

// -------------------------------------------------

function WeightAndVolumeCalc(vol, name) {
    if (name.match(/^МДФ/i))
        Q = Q_MDF
    else if (name.match(/стекло/i))
        Q = Q_STEKLO
    else
        Q = Q_LDSP
    Res.Weight += vol / Q
    Res.Volume += vol
}

function MyRules(obj) {
    return 0
}

// -------------------------------------------------
[свернуть]
sergio1982 вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
demanus (20.02.2021), Uncle (10.02.2021), Анатолий.ru (19.02.2021), ХАВКА (10.02.2021)
Старый 21.02.2021, 13:42   #95
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 138
Сказал(а) спасибо: 25
Поблагодарили 82 раз(а) в 29 сообщениях
Вес репутации: 49
sergio1982 скоро придёт к известности
По умолчанию Подсчёт кромки и площади


Обновление, описание в 75 посте.

v2.18
Добавлена опция в соответствии с пожеланиями из этого поста http://promebelclub.ru/forum/showthr...329#post505329. По сути опциональный откат назад, отключение расчёта блоков составной фурнитуры, как позиции фурнитуры.

v2.20
AddCount = 1 // Добавлять (кроме фурнитуры) в именах позиций количество объектов

v2.20

Код:
/*
Расчёт площади, веса, объёма и периметра панелей, метража кромки, погонажа и профилей,
а также количества фурнитуры.

http://promebelclub.ru/forum/showthread.php?p=505390#post505390

v2.20
    + AddCount
v2.19
    + fMyRules
v2.18
    + NBIF
v2.17
    + PlasticsCheck
    + IsFastener() && fix obj.IsFastener()
v2.16
    + obj.IsFastener()
*/

var AddHidden = 0 // нужно ли добавлять скрытые объекты в результаты
var AddArticul = 0 // нужно ли добавлять артикул к имени материала
var NBIF = 0 // отключение расчёта блоков составной фурнитуры, как позиции фурнитуры
var AddCount = 1 // Добавлять (кроме фурнитуры) в именах позиций количество объектов

var Q_MDF = 1111111.111111 // name.match(/^МДФ/i)
var Q_STEKLO = 400000 // name.match(/стекло/i)
var Q_LDSP = 1333333.333333 // иначе

var fMyRules = (typeof MyRules == 'function') ? MyRules : 0 // указание обработчика своих исключений функцией с именем "MyRules" принимающая один аргумент

// -------------------------------------------------

var Res = {Panels: [], Linears: [], Extrusions: [], Edges: [], Fasteners: [], Plastics: []
 , Total: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Count: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Weight: 0, Volume: 0, PanelsContour: 0};
var ItemsCount = {Panels: [], Linears: [], Extrusions: [], Edges: [], Fasteners: [], Plastics: []}
var Buffer = [];
var Selected = Model.SelectionCount;

for (var i = 0; i < Model.Count; ++i) {
    recurse(Model.Objects[i])
};

for (var key in Buffer) {
    CheckObj(Buffer[key])
};

function CheckObj(obj) {
    if (fMyRules && fMyRules.call(0, obj))
        return
    var objtype = obj.toString()
    if (obj.AsPanel) {
        MtName = MaterialName(obj.MaterialName)
        Contour = obj.Contour;
        if (obj.MaterialWidth > 0) {                                            // погонный
            Add('Linears', MtName, Math.max(Contour.Height, Contour.Width))
        } else {                                                                // панели
            Add('Panels', MtName, (Contour.Height * Contour.Width))
            WeightAndVolumeCalc(Contour.Height * Contour.Width * obj.Thickness, MtName)
            Res.PanelsContour += GetContourLength(Contour)
        }
        Butts = obj.Butts;                                                      // кромка
        for (var i = 0; i < Butts.Count; ++i) {
            Add('Edges', MaterialName(Butts[i].Material), GetButtLength(Butts[i], Contour))
        };
    } else if (objtype == '[object TFastener]' || IsFastener(obj)) {           // фурнитура
        Add('Fasteners', MaterialName(obj.Name), 1)
    } else if (objtype == '[object TExtrusionBody]') {                          // профиль
        Add('Extrusions', MaterialName(obj.MaterialName), Math.abs(obj.Thickness))
    } else if (objtype == '[object T2DRotationBody]') {                         // погонный
        Add('Linears', MaterialName(obj.MaterialName), Math.max(obj.Contour2D.Height, obj.Contour2D.Width))
    }
}

var string = '';
if (Object.keys(Res.Panels).length) {
    string += '\n              Панели (квадратные метры): ' + (Res.Total.Panels / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Panels + '\n\n';
    for (var key in Res.Panels) {
        AddString('Panels', key, (Res.Panels[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Plastics).length) {
    string += '\n              Облицовка пласти (квадратные метры): ' + (Res.Total.Plastics / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Plastics + '\n\n';
    for (var key in Res.Plastics) {
        AddString('Plastics', key, (Res.Plastics[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Edges).length) {
    string += '\n              Кромка (метры): ' + (Res.Total.Edges / 1000).toFixed(2) + ', объектов: ' + Res.Count.Edges + '\n\n';
    for (var key in Res.Edges) {
        AddString('Edges', key, (Res.Edges[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Linears).length) {
    string += '\n              Погонные материалы (метры): ' + (Res.Total.Linears / 1000).toFixed(2) + ', объектов: ' + Res.Count.Linears + '\n\n';
    for (var key in Res.Linears) {
        AddString('Linears', key, (Res.Linears[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Extrusions).length) {
    string += '\n              Профили (метры): ' + (Res.Total.Extrusions / 1000).toFixed(2) + ', объектов: ' + Res.Count.Extrusions + '\n\n';
    for (var key in Res.Extrusions) {
        AddString('Extrusions', key, (Res.Extrusions[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Fasteners).length) {
    string += '\n              Фурнитура (штуки): ' + Res.Total.Fasteners + '\n\n';
    for (var key in Res.Fasteners) {
        string += key + '   =   ' + Res.Fasteners[key] + '    \n'
    };
}
if (Res.Volume > 0) {
    string += '\n              Вес, объём и периметр (только панели):\n\n'
    + (Res.Weight).toFixed(1) + ' килограмм\n'
    + (Res.Volume / 1000000000).toFixed(3) + ' кубических метров\n'
    + (Res.PanelsContour / 1000).toFixed(2) + ' метров периметра\n'
}

if (string == '') {
    alert('Объекты не обнаружены!')
} else {
    var captionstring = ''
    + (Selected ? 'ИНФО ТОЛЬКО О ВЫДЕЛЕННЫХ И ПОДСВЕЧЕННЫХ!!!\n' : '')
    + (!AddHidden ? 'СКРЫТЫЕ НЕ УЧИТЫВАЮТСЯ!!!\n' : '')

    if (!confirm(captionstring + string + '\n\n\n              Чтобы вывести в файл нажмите "Нет"'))
        ButtonExport()
}
Action.Finish()

// -------------------------------------------------

function recurse(obj, sel) {
    if (!obj.Visible && !AddHidden)
        return
    if (!obj.List) {
        if (!sel)
            sel = !!((Selected) && (obj.Selected || obj.Highlighted))
        if (Selected && !sel)
            return
        PlasticsCheck(obj)
        Buffer.push(obj)
    } else {
        if (IsFastener(obj) && ((Selected && obj.Selected) || !Selected))
            return Buffer.push(obj)
        var blocksel = !!((Selected) && (sel || obj.Selected || obj.Highlighted))
        for (var i = 0; i < obj.Count; i++) {
            recurse(obj[i], blocksel)
        }
    }
}

function PlasticsCheck(obj) {
    if (obj.toString() !== '[object TFurnPanel]')
		return
	for (var i = 0; i < obj.Plastics.Count; i++) {
		MtName = MaterialName(obj.Plastics[i].Material)
		if (MtName == '')
			continue
		Add('Plastics', MtName, (obj.Contour.Height * obj.Contour.Width))
    }
}

function IsFastener(obj) {
    return ((obj.toString() == '[object TFastener]') || (!NBIF && (typeof obj.IsFastener == 'function') && obj.IsFastener()))
}

function Add(name, key, value) {
    if (value <= 0)
        return
    if (!Res[name].hasOwnProperty(key))
        Res[name][key] = 0, ItemsCount[name][key] = 0
    Res[name][key] += value
    Res.Total[name] += value
    Res.Count[name] += 1
    ItemsCount[name][key] += 1
}

function AddString(type, key, value) {
    if (AddCount)
        CountStr = ' (объектов: ' + ItemsCount[type][key] + ')';
    else
        CountStr = ''
    if (value > 0)
        string += key + CountStr + '   =   ' + value + '    \n'
}

function GetButtLength(butt, contour) {
    return contour.Objects[butt.ElemIndex].ObjLength()
}

function GetContourLength(contour) {
    var len = 0
    for (var i = 0; i < contour.Count; ++i) {
        len += contour.Objects[i].ObjLength()
    };
    return len
}

function MaterialName(str) {
    if (AddArticul)
        return str.replace("\r", ". Артикул ")
    return str.replace(/\r.*/, '')
}

function ButtonExport() {
    system.writeTextFile('export.txt', string);
    Path = '"' + Action.Properties.AbsolutePath() + 'export.txt"'
    NewCOMObject('WScript.Shell').run(Path);
}

// -------------------------------------------------

function WeightAndVolumeCalc(vol, name) {
    if (name.match(/^МДФ/i))
        Q = Q_MDF
    else if (name.match(/стекло/i))
        Q = Q_STEKLO
    else
        Q = Q_LDSP
    Res.Weight += vol / Q
    Res.Volume += vol
}

// -------------------------------------------------
[свернуть]

Последний раз редактировалось sergio1982; 21.02.2021 в 15:12.
sergio1982 вне форума   Ответить с цитированием Вверх
6 пользователя(ей) сказали cпасибо:
Старый 03.03.2021, 12:13   #96
Михаил Габуда
Новичок
 
Регистрация: 22.10.2020
Сообщений: 1
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
Михаил Габуда пока не определено
По умолчанию

Цитата:
Сообщение от sergio1982 Посмотреть сообщение

Обновление, описание в 75 посте.

v2.18
Добавлена опция в соответствии с пожеланиями из этого поста http://promebelclub.ru/forum/showthr...329#post505329. По сути опциональный откат назад, отключение расчёта блоков составной фурнитуры, как позиции фурнитуры.

v2.20
AddCount = 1 // Добавлять (кроме фурнитуры) в именах позиций количество объектов

v2.20

Код:
/*
Расчёт площади, веса, объёма и периметра панелей, метража кромки, погонажа и профилей,
а также количества фурнитуры.

http://promebelclub.ru/forum/showthread.php?p=505390#post505390

v2.20
    + AddCount
v2.19
    + fMyRules
v2.18
    + NBIF
v2.17
    + PlasticsCheck
    + IsFastener() && fix obj.IsFastener()
v2.16
    + obj.IsFastener()
*/

var AddHidden = 0 // нужно ли добавлять скрытые объекты в результаты
var AddArticul = 0 // нужно ли добавлять артикул к имени материала
var NBIF = 0 // отключение расчёта блоков составной фурнитуры, как позиции фурнитуры
var AddCount = 1 // Добавлять (кроме фурнитуры) в именах позиций количество объектов

var Q_MDF = 1111111.111111 // name.match(/^МДФ/i)
var Q_STEKLO = 400000 // name.match(/стекло/i)
var Q_LDSP = 1333333.333333 // иначе

var fMyRules = (typeof MyRules == 'function') ? MyRules : 0 // указание обработчика своих исключений функцией с именем "MyRules" принимающая один аргумент

// -------------------------------------------------

var Res = {Panels: [], Linears: [], Extrusions: [], Edges: [], Fasteners: [], Plastics: []
 , Total: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Count: {Panels: 0, Linears: 0, Extrusions: 0, Edges: 0, Fasteners: 0, Plastics: 0}
 , Weight: 0, Volume: 0, PanelsContour: 0};
var ItemsCount = {Panels: [], Linears: [], Extrusions: [], Edges: [], Fasteners: [], Plastics: []}
var Buffer = [];
var Selected = Model.SelectionCount;

for (var i = 0; i < Model.Count; ++i) {
    recurse(Model.Objects[i])
};

for (var key in Buffer) {
    CheckObj(Buffer[key])
};

function CheckObj(obj) {
    if (fMyRules && fMyRules.call(0, obj))
        return
    var objtype = obj.toString()
    if (obj.AsPanel) {
        MtName = MaterialName(obj.MaterialName)
        Contour = obj.Contour;
        if (obj.MaterialWidth > 0) {                                            // погонный
            Add('Linears', MtName, Math.max(Contour.Height, Contour.Width))
        } else {                                                                // панели
            Add('Panels', MtName, (Contour.Height * Contour.Width))
            WeightAndVolumeCalc(Contour.Height * Contour.Width * obj.Thickness, MtName)
            Res.PanelsContour += GetContourLength(Contour)
        }
        Butts = obj.Butts;                                                      // кромка
        for (var i = 0; i < Butts.Count; ++i) {
            Add('Edges', MaterialName(Butts[i].Material), GetButtLength(Butts[i], Contour))
        };
    } else if (objtype == '[object TFastener]' || IsFastener(obj)) {           // фурнитура
        Add('Fasteners', MaterialName(obj.Name), 1)
    } else if (objtype == '[object TExtrusionBody]') {                          // профиль
        Add('Extrusions', MaterialName(obj.MaterialName), Math.abs(obj.Thickness))
    } else if (objtype == '[object T2DRotationBody]') {                         // погонный
        Add('Linears', MaterialName(obj.MaterialName), Math.max(obj.Contour2D.Height, obj.Contour2D.Width))
    }
}

var string = '';
if (Object.keys(Res.Panels).length) {
    string += '\n              Панели (квадратные метры): ' + (Res.Total.Panels / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Panels + '\n\n';
    for (var key in Res.Panels) {
        AddString('Panels', key, (Res.Panels[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Plastics).length) {
    string += '\n              Облицовка пласти (квадратные метры): ' + (Res.Total.Plastics / 1000000).toFixed(2) + ', объектов: ' + Res.Count.Plastics + '\n\n';
    for (var key in Res.Plastics) {
        AddString('Plastics', key, (Res.Plastics[key] / 1000000).toFixed(2))
    };
}
if (Object.keys(Res.Edges).length) {
    string += '\n              Кромка (метры): ' + (Res.Total.Edges / 1000).toFixed(2) + ', объектов: ' + Res.Count.Edges + '\n\n';
    for (var key in Res.Edges) {
        AddString('Edges', key, (Res.Edges[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Linears).length) {
    string += '\n              Погонные материалы (метры): ' + (Res.Total.Linears / 1000).toFixed(2) + ', объектов: ' + Res.Count.Linears + '\n\n';
    for (var key in Res.Linears) {
        AddString('Linears', key, (Res.Linears[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Extrusions).length) {
    string += '\n              Профили (метры): ' + (Res.Total.Extrusions / 1000).toFixed(2) + ', объектов: ' + Res.Count.Extrusions + '\n\n';
    for (var key in Res.Extrusions) {
        AddString('Extrusions', key, (Res.Extrusions[key] / 1000).toFixed(2))
    };
}
if (Object.keys(Res.Fasteners).length) {
    string += '\n              Фурнитура (штуки): ' + Res.Total.Fasteners + '\n\n';
    for (var key in Res.Fasteners) {
        string += key + '   =   ' + Res.Fasteners[key] + '    \n'
    };
}
if (Res.Volume > 0) {
    string += '\n              Вес, объём и периметр (только панели):\n\n'
    + (Res.Weight).toFixed(1) + ' килограмм\n'
    + (Res.Volume / 1000000000).toFixed(3) + ' кубических метров\n'
    + (Res.PanelsContour / 1000).toFixed(2) + ' метров периметра\n'
}

if (string == '') {
    alert('Объекты не обнаружены!')
} else {
    var captionstring = ''
    + (Selected ? 'ИНФО ТОЛЬКО О ВЫДЕЛЕННЫХ И ПОДСВЕЧЕННЫХ!!!\n' : '')
    + (!AddHidden ? 'СКРЫТЫЕ НЕ УЧИТЫВАЮТСЯ!!!\n' : '')

    if (!confirm(captionstring + string + '\n\n\n              Чтобы вывести в файл нажмите "Нет"'))
        ButtonExport()
}
Action.Finish()

// -------------------------------------------------

function recurse(obj, sel) {
    if (!obj.Visible && !AddHidden)
        return
    if (!obj.List) {
        if (!sel)
            sel = !!((Selected) && (obj.Selected || obj.Highlighted))
        if (Selected && !sel)
            return
        PlasticsCheck(obj)
        Buffer.push(obj)
    } else {
        if (IsFastener(obj) && ((Selected && obj.Selected) || !Selected))
            return Buffer.push(obj)
        var blocksel = !!((Selected) && (sel || obj.Selected || obj.Highlighted))
        for (var i = 0; i < obj.Count; i++) {
            recurse(obj[i], blocksel)
        }
    }
}

function PlasticsCheck(obj) {
    if (obj.toString() !== '[object TFurnPanel]')
		return
	for (var i = 0; i < obj.Plastics.Count; i++) {
		MtName = MaterialName(obj.Plastics[i].Material)
		if (MtName == '')
			continue
		Add('Plastics', MtName, (obj.Contour.Height * obj.Contour.Width))
    }
}

function IsFastener(obj) {
    return ((obj.toString() == '[object TFastener]') || (!NBIF && (typeof obj.IsFastener == 'function') && obj.IsFastener()))
}

function Add(name, key, value) {
    if (value <= 0)
        return
    if (!Res[name].hasOwnProperty(key))
        Res[name][key] = 0, ItemsCount[name][key] = 0
    Res[name][key] += value
    Res.Total[name] += value
    Res.Count[name] += 1
    ItemsCount[name][key] += 1
}

function AddString(type, key, value) {
    if (AddCount)
        CountStr = ' (объектов: ' + ItemsCount[type][key] + ')';
    else
        CountStr = ''
    if (value > 0)
        string += key + CountStr + '   =   ' + value + '    \n'
}

function GetButtLength(butt, contour) {
    return contour.Objects[butt.ElemIndex].ObjLength()
}

function GetContourLength(contour) {
    var len = 0
    for (var i = 0; i < contour.Count; ++i) {
        len += contour.Objects[i].ObjLength()
    };
    return len
}

function MaterialName(str) {
    if (AddArticul)
        return str.replace("\r", ". Артикул ")
    return str.replace(/\r.*/, '')
}

function ButtonExport() {
    system.writeTextFile('export.txt', string);
    Path = '"' + Action.Properties.AbsolutePath() + 'export.txt"'
    NewCOMObject('WScript.Shell').run(Path);
}

// -------------------------------------------------

function WeightAndVolumeCalc(vol, name) {
    if (name.match(/^МДФ/i))
        Q = Q_MDF
    else if (name.match(/стекло/i))
        Q = Q_STEKLO
    else
        Q = Q_LDSP
    Res.Weight += vol / Q
    Res.Volume += vol
}

// -------------------------------------------------
[свернуть]
Добавлено через 3 минуты
Расходятся данные в новом и старом скрипте по кромке, весу и т.д. Какому верить?

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


Не сходятся данные между старым и новым скриптом. Чему верить?
Михаил Габуда вне форума   Ответить с цитированием Вверх
Старый 03.03.2021, 14:13   #97
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 138
Сказал(а) спасибо: 25
Поблагодарили 82 раз(а) в 29 сообщениях
Вес репутации: 49
sergio1982 скоро придёт к известности
По умолчанию

Приложите модель, я у себя такого не замечал.
sergio1982 вне форума   Ответить с цитированием Вверх
Старый 04.03.2021, 12:31   #98
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 101
Сказал(а) спасибо: 35
Поблагодарили 124 раз(а) в 24 сообщениях
Вес репутации: 72
Максим Геннадьевич скоро придёт к известностиМаксим Геннадьевич скоро придёт к известности
По умолчанию Скрипт кухня БМ8

Работает в - "народная" 8.0.12.12765
Архив содержит пять скриптов для построения кухни: низ, верх, пенал, угловой низ и верх. Возможны ошибки и не до чёты, но в основном рабочие скрипты, которым пользовался. Можно дописать, редактировать под себя. Скрипты писались под себя и свои нужды, поэтому просьба промолчать на тему "не так", "не по ГОСТу", "не правильно" и т.д. Всегда можно исправить.

Работу скриптов можно посмотреть https://youtu.be/3sa739N939I
Вложения
Тип файла: rar КУХНЯ.rar (175.7 Кб, 251 просмотров)
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
33 пользователя(ей) сказали cпасибо:
Старый 11.03.2021, 13:44   #99
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 138
Сказал(а) спасибо: 25
Поблагодарили 82 раз(а) в 29 сообщениях
Вес репутации: 49
sergio1982 скоро придёт к известности
По умолчанию Ракурсы камеры

Проход по 4 ракурсам камеры под установленным углом к видам слева, справа, спереди и сзади.

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



Код:
ADS = Action.DS.Camera

MyAngleY = 35
ADS.AngleX = 10
Step = 90 // Можно указать 45, будет 8 ракурсов

rest = ((ADS.AngleY - MyAngleY) % Step)
ADS.AngleY += rest ? -rest : Step

if (Action.Control.Projection !== 8)
    SetCamera(8);  // Перспектива
Action.Control.ViewAll(); //Показать все
[свернуть]

Последний раз редактировалось sergio1982; 12.03.2021 в 00:28.
sergio1982 вне форума   Ответить с цитированием Вверх
7 пользователя(ей) сказали cпасибо:
Старый 12.03.2021, 23:49   #100
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 138
Сказал(а) спасибо: 25
Поблагодарили 82 раз(а) в 29 сообщениях
Вес репутации: 49
sergio1982 скоро придёт к известности
По умолчанию Ракурсы камеры (массив)

Проход по списку заданных ракурсов.

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

Код:
var Views = [{X: 50, Y: 35, Proj: 8, All: 1}
           , {X: 50, Y: -35, Proj: 7, All: 1}
           , {X: -50, Y: -35, Proj: 8, All: 1}
           , {X: -50, Y: 35, Proj: 8, All: 0}]

var match = ''

ADS = Action.DS.Camera
X = ADS.AngleX
Y = ADS.AngleY
Proj = Action.Control.Projection

for (var key in Views) {
    obj = Views[key]
    if (obj.X == X && obj.Y == Y && obj.Proj == Proj) {
        match = key
        break
    }
};

match = (match == '') ? 0 : (match == (Views.length - 1)) ? 0 : (++match)

obj = Views[match]
ADS.AngleX = obj.X
ADS.AngleY = obj.Y
SetCamera(obj.Proj)
if (obj.All)
    Action.Control.ViewAll()
[свернуть]
sergio1982 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Alexey.84 (13.03.2021), demanus (13.03.2021), Smoker_79 (14.04.2021)
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 11-2021 - Скрипты AlexBolton Базис-мебельщик. Скрипты 418 12.04.2021 08:04
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1430 01.10.2020 18:32
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 09:36


Текущее время: 06:53. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
© 2007-2021 PROMEBEL