|
|
|
|
|
25.12.2017, 23:12
|
|
Обсуждение готовых скриптов
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,032 раз(а) в 366 сообщениях
25.12.2017, 23:12
Рейтинг:
()
Здесь можно обсуждать скрипты из темы Готовые решения для БМ8-2021.
Обратите внимание на полезные ответы в этой теме!
Последний раз редактировалось Uncle; 04.07.2021 в 15:03..
|
Просмотров: 226473
|
12.11.2020, 23:44
|
#151
|
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
Цитата:
Сообщение от Станислав Станилевич
на однотонном материале можно развернуть текстуру
|
Так у такого материала есть параметр текстура - не задана, оно автоматом не учитывается?
|
|
|
23.11.2020, 19:00
|
#152
|
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
|
|
|
27.11.2020, 14:18
|
#153
|
Новичок
Регистрация: 22.10.2017
Сообщений: 28
Сказал(а) спасибо: 38
Поблагодарили 4 раз(а) в 2 сообщениях
Вес репутации: 0
|
по идее можно объединить саму фурнитуру в полуфабрикат, и присвоить ему имя из базы, и можно будет считывать и как сборку и как блок
Добавлено через 2 минуты
это я про авентос HF
|
|
|
28.11.2020, 10:51
|
#154
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 89
Сказал(а) спасибо: 27
Поблагодарили 50 раз(а) в 30 сообщениях
Вес репутации: 108
|
Цитата:
Сообщение от АлКузнецов
Стабильно работает в 10, в 11й версии выдает ошибку смысла которой я не понимаю...
|
Крутил, вертел, понять хотел...
Чего-то Ваш скрипт у меня и в 10-ке (демо) не арбайтен, поэтому не знаю с какого боку подойти...
P.S. На вскидку проблема в этой строке:
Window2.Combo1.ComboItems = Materials;
На мой взгляд - разные типы значений
Последний раз редактировалось Meshok; 28.11.2020 в 11:43.
|
|
|
Пользователь сказал cпасибо:
|
|
10.02.2021, 10:18
|
#155
|
Местный
Регистрация: 07.02.2012
Сообщений: 191
Сказал(а) спасибо: 81
Поблагодарили 51 раз(а) в 32 сообщениях
Вес репутации: 178
|
Цитата:
Сообщение от sergio1982
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
}
// -------------------------------------------------
[свернуть]
|
фурнитуру, установленную по схеме крепежа считает некорректно... это можно исправить?
|
|
|
10.02.2021, 10:37
|
#156
|
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
По схеме крепежа не пользуюсь, и не знаю что это. Опишите подробнее, и дайте файл пример.
|
|
|
18.02.2021, 10:40
|
#157
|
Новичок
Регистрация: 28.01.2021
Сообщений: 17
Сказал(а) спасибо: 49
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от sergio1982
По схеме крепежа не пользуюсь, и не знаю что это. Опишите подробнее, и дайте файл пример.
|
Раньше выдавало как на рис.1, после учета составной фурнитуры (схем крепежа) выдает как на рис.2 (некорректное название евровинтов и шкантов). Модель и скриншоты прилагаю.
|
|
|
21.02.2021, 14:48
|
#158
|
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
Так понятнее.
Я выложил обновление. Вам нужно NBIF указать равной 1, это переменная в начале кода.
Если вам это требуется только для определённых объектов, то это можно наколдовать в MyRules.
|
|
|
Пользователь сказал cпасибо:
|
|
27.04.2021, 07:02
|
#159
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от 4ernish
Работает в БМ11, БМ 2021 с включенной функцией ИРП. Присваивает позициям деталей и блоков их обозначение. В дальнейшем на сборочных чертежах вместо привычный 1,2,3 будут обозначения деталей и блоков. Фурнитуру не трогает. Работает быстро (можно ставить на автозапуск при выпуске чертежей), но в дереве модели изменения видно не сразу-но легким движением мыши по дереву структура обновляется. В скриптах не силен-пришлось делать дабы упростить работу, буду рад если кто то знающий подскажет как улучшить
Model.forEachPanel(function (panel) {
if (panel.ArtPos.indexOf('(') < 0)
panel.ArtPos =panel.Designation;
})
Model.forEach(function (obj) {
if (obj instanceof TFurnBlock){
obj.ArtPos =obj.Designation;
};
})
|
Может быть будет чуть быстрее если будет один перебор модели через Model.forEach, а внутри
IF с множественные параметром ((obj instanceof TFurnBlock) || (obj instanseof TFurnPanel) || (...и т.д.))
|
|
|
03.05.2021, 00:18
|
#160
|
Местный
Регистрация: 15.05.2012
Адрес: Москва
Сообщений: 259
Сказал(а) спасибо: 43
Поблагодарили 211 раз(а) в 89 сообщениях
Вес репутации: 213
|
Уважаемые коллеги! Подскажите . Наверняка сталкивались с задачей сбора статистики по количеству отверстий в зависимости от диаметра. У меня работодатель требует предоставлять такую статистику. Вначале мысль была сделать все на основе сметы...Но потом понял что это будет не объективно. Поскольку база материалов заполнена неудачно. Да и фурнитура зачастую используется чужая. Смета не спасает в данном случае. Как такую задачу решить с помощью скрипта? Пролистывая ветки форума, что то связанное с отверстиями имеется, но все мимо.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 01:23. Часовой пояс GMT +3.
|