|
|
|
|
|
13.01.2014, 12:22
|
|
Скрипты. Готовые решения для БМ8-11.
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 145
Сказал(а) спасибо: 31
Поблагодарили 644 раз(а) в 84 сообщениях

13.01.2014, 12:22
Рейтинг:
(1 голосов - 5.00 средняя оценка)
Этот раздел предназначен для размещения готовых скриптов.
Здесь находятся ТОЛЬКО готовые скрипты. Для обсуждения есть отдельная тема: Обсуждение готовых скриптов.
Авторам: - Давать уникальные названия скриптам (не совпадающие с названием уже выложенных скриптов, за исключением обновлений скрипта)
- Указывать работоспособность в разных версиях БМ.
- Общее описание работы скрипта.
Версии, указанные модератором, как прошедшие проверку:
8 - Демо-версия 8.0.7.9649
8н - "народная" 8.0.12.12765
9 - Демо-версия 9.0.8.18908
10 - Демо-версия 10.0.0.21602
Обратите внимание на полезные ответы в этой теме!
Последний раз редактировалось Letos; 11.05.2018 в 16:23..
|
Просмотров: 93810
|
4 пользователя(ей) сказали cпасибо:
|
|
28.11.2020, 10:51
|
#91
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 70
Сказал(а) спасибо: 12
Поблагодарили 43 раз(а) в 27 сообщениях
Вес репутации: 67
|
Цитата:
Сообщение от АлКузнецов
Стабильно работает в 10, в 11й версии выдает ошибку смысла которой я не понимаю...
|
Крутил, вертел, понять хотел...
Чего-то Ваш скрипт у меня и в 10-ке (демо) не арбайтен, поэтому не знаю с какого боку подойти...
P.S. На вскидку проблема в этой строке:
Window2.Combo1.ComboItems = Materials;
На мой взгляд - разные типы значений
Последний раз редактировалось Meshok; 28.11.2020 в 11:43.
|
|
|
Пользователь сказал cпасибо:
|
|
09.02.2021, 23:26
|
#92
|
Новичок
Регистрация: 19.12.2019
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
В демо версии поддержка скриптов отключена, как и импорт-экспорт корпусов.
|
|
|
09.02.2021, 23:44
|
#93
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 70
Сказал(а) спасибо: 12
Поблагодарили 43 раз(а) в 27 сообщениях
Вес репутации: 67
|
Цитата:
Сообщение от Иван МЦ5
В демо версии поддержка скриптов отключена, как и импорт-экспорт корпусов.
|
Насколько мне известно - в ДЕМО-версиях отключена возможность сохранить проект (настройки и ets..., всех нюансов не проверял). Но чтобы нельзя было использовать скрипты - это слышу впервые.
|
|
|
10.02.2021, 02:51
|
#94
|
Местный
Регистрация: 01.09.2019
Сообщений: 119
Сказал(а) спасибо: 22
Поблагодарили 52 раз(а) в 18 сообщениях
Вес репутации: 40
|
Подсчёт кромки и площади
8н
Обновление, описание в 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
}
// -------------------------------------------------
[свернуть]
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
21.02.2021, 14:42
|
#95
|
Местный
Регистрация: 01.09.2019
Сообщений: 119
Сказал(а) спасибо: 22
Поблагодарили 52 раз(а) в 18 сообщениях
Вес репутации: 40
|
Подсчёт кромки и площади
8н
Обновление, описание в 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 в 16:12.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
БАЗИС 10 - Скрипты
|
systland |
Базис-мебельщик. Скрипты |
559 |
23.12.2020 16:43 |
БАЗИС 9 - Скрипты
|
Igor_482 |
Базис-мебельщик. Скрипты |
1430 |
01.10.2020 19:32 |
Заявки на скрипты
|
dr_john |
Система БАЗИС |
37 |
01.03.2016 10:36 |
Текущее время: 19:08. Часовой пояс GMT +3.
|