|
|
|
|
|
13.01.2014, 13:22
|
|
Скрипты. Готовые решения для БМ8-2023
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
Этот раздел предназначен для размещения готовых скриптов.
Здесь находятся ТОЛЬКО готовые скрипты. Для обсуждения есть отдельная тема: Обсуждение готовых скриптов.
Авторам: - Давать уникальные названия скриптам (не совпадающие с названием уже выложенных скриптов, за исключением обновлений скрипта)
- Указывать работоспособность в разных версиях БМ.
- Общее описание работы скрипта.
- Если презентованный скрипт платный указывать стоимость, условия и контакты для приобретения.
Версии, указанные модератором, как прошедшие проверку:
8 - Демо-версия 8.0.7.9649
8н - "народная" 8.0.12.12765
9 - Демо-версия 9.0.8.18908
10 - Демо-версия 10.0.0.21602
Последний раз редактировалось AlexBolton; 03.03.2023 в 21:03..
|
Просмотров: 537212
|
13 пользователя(ей) сказали cпасибо:
|
|
23.03.2021, 12:20
|
#91
|
VIP
Регистрация: 18.01.2008
Сообщений: 1,047
Сказал(а) спасибо: 2,864
Поблагодарили 1,852 раз(а) в 435 сообщениях
Вес репутации: 695
|
По многочисленным просьбам одного из трудящихся доработал скрипт.
Откройте его в редакторе. Первая строка
Zazor = 60; //зазор между панелями в стопке
Зазор между панелями в стопке можете установить свой.
Еще есть строка комментария, которая относится к следующей строке.
//Если в названии размеры не нужны, то закомментарить следующую строку. Поставить в ее начале //
Panel.Name = Panel.Name + ' (' + Dl + ' x ' + Sh + ' x ' + Panel.Thickness + ')';
|
|
|
8 пользователя(ей) сказали cпасибо:
|
|
07.04.2021, 23:01
|
#92
|
Местный
Регистрация: 01.09.2019
Сообщений: 423
Сказал(а) спасибо: 52
Поблагодарили 479 раз(а) в 147 сообщениях
Вес репутации: 194
|
Поиск панелей с припуском или подрезкой
8н
Выделяет панели с припуском или подрезкой (опционально ClipPanel = 1).
Полезно добавить в пакет проверок с поиском пересечений, закрытых кромок и.т.п. Если забыть убрать припуск с предыдущей операции, то можно вляпаться, у меня сегодня почти получилось.
Скрытый текст
Код:
// Поиск панелей с припуском или подрезкой
// искать с припуском
Allowance = 1
// искать с подрезкой
ClipPanel = 0
if (!Allowance && !ClipPanel)
{
alert('Не установлены параметры поиска');
Action.Finish()
}
Model.UnSelectAll();
Match = 0
Model.forEachPanel(
function(Obj) {
Butts = obj.Butts;
for (var i = 0; i < Butts.Count; ++i) {
if ((Allowance && Butts[i].Allowance !== 0) || (ClipPanel && Butts[i].ClipPanel == true))
{
Obj.Selected = true;
++Match
return
}
};
}
);
if (Match > 0)
alert('Найдено ' + Match + ' панелей' + (Allowance ? ' с припуском' : '') + (ClipPanel ? ' с подрезкой' : ''));
else
alert('Не найдено панелей' + (Allowance ? ' с припуском' : '') + (ClipPanel ? ' с подрезкой' : ''));
[свернуть]
Последний раз редактировалось sergio1982; 08.04.2021 в 00:22.
|
|
|
Пользователь сказал cпасибо:
|
|
10.04.2021, 11:37
|
#93
|
Местный
Регистрация: 22.12.2008
Сообщений: 245
Сказал(а) спасибо: 54
Поблагодарили 218 раз(а) в 154 сообщениях
Вес репутации: 253
|
Скрипт "Найти/заменить" Находит и заменяет текстовые значения в наименованиях объектов модели
Скрытый текст
PHP код:
function FindAll(){ var textToFind = textToSearch.Value; alert(textToFind); if(textToFind != undefined || textToFind != null){ Model.forEach(function(obj){ if(obj.Name.indexOf(textToFind) >= 0){ obj.Selected = true; } }); } }
function ReplaceAll(){ Undo.RecursiveChanging(Model); var textToFind = textToSearch.Value; var replaceText = textForReplace.Value; //alert(textToFind); //alert(replaceText); Model.forEach(function(obj){ obj.Name = obj.Name.replace(textToFind, replaceText); }); Action.Commit(); }
var props = Action.Properties; var textToSearch = props.NewString('Найти:'); var textForReplace = props.NewString('Заменить на:'); props.NewSeparator(); var FindAllButton = props.NewButton('Найти все'); FindAllButton.OnClick = function(){ FindAll(); }; props.NewSeparator(); var ReplaceAllButton = props.NewButton('Заменить все'); ReplaceAllButton.OnClick = function(){ ReplaceAll(); }; props.NewSeparator(); var FinishButton = props.NewButton('Закончить'); FinishButton.OnClick = function(){ Action.Finish(); };
Action.Continue();
[свернуть]
Последний раз редактировалось Uncle; 10.04.2021 в 14:06.
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
11.04.2021, 11:20
|
#94
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 700 раз(а) в 265 сообщениях
Вес репутации: 292
|
Цитата:
Сообщение от skromvit
Скрипт "Найти/заменить" Находит и заменяет текстовые значения в наименованиях объектов модели
Скрытый текст
PHP код:
function FindAll(){ var textToFind = textToSearch.Value; alert(textToFind); if(textToFind != undefined || textToFind != null){ Model.forEach(function(obj){ if(obj.Name.indexOf(textToFind) >= 0){ obj.Selected = true; } }); } }
function ReplaceAll(){ Undo.RecursiveChanging(Model); var textToFind = textToSearch.Value; var replaceText = textForReplace.Value; //alert(textToFind); //alert(replaceText); Model.forEach(function(obj){ obj.Name = obj.Name.replace(textToFind, replaceText); }); Action.Commit(); }
var props = Action.Properties; var textToSearch = props.NewString('Найти:'); var textForReplace = props.NewString('Заменить на:'); props.NewSeparator(); var FindAllButton = props.NewButton('Найти все'); FindAllButton.OnClick = function(){ FindAll(); }; props.NewSeparator(); var ReplaceAllButton = props.NewButton('Заменить все'); ReplaceAllButton.OnClick = function(){ ReplaceAll(); }; props.NewSeparator(); var FinishButton = props.NewButton('Закончить'); FinishButton.OnClick = function(){ Action.Finish(); };
Action.Continue();
[свернуть]
|
Добрый день!
внесу свои пять копеек.
добавил пару строк, чтоб замена не останавливалась после нахождения первого найденного совпадения, а продолжалась до конца.
Плюс к этому добавил обход многократного изменения - чтоб в названии "ххАППххх" при замене "АП" на "А" на получилось - "ххАППххх">"ххАПххх">"ххАххх".
Ну и дополнительная проверка объекта, чтоб не изменять название "габаритной рамки" и прочего)
Скрытый текст
function FindAll(){
var textToFind = textToSearch.Value;
alert(textToFind);
if(textToFind != undefined || textToFind != null){
Model.forEach(function(obj){
if((obj.Name.indexOf(textToFind) >= 0) &&((obj instanceof TFurnPanel)||(obj instanceof TExtrusionBody))){ //добавлена проверка объкта - панель или профиль
obj.Selected = true;
}
});
}
}
function ReplaceAll(){
Undo.RecursiveChanging(Model);
var textToFind = textToSearch.Value;
var replaceText = textForReplace.Value;
//alert(textToFind);
//alert(replaceText);
Model.forEach(function(obj){
var i = Math.floor(obj.Name.length/textToFind.length) // максимально сколько искомая строка может встретится в исследуемой в зависимости от количества символов в обоих
for (var k = 0; k < i; k++) {
obj.Name = obj.Name.replace(textToFind, '\v'); //первичная замена - на символ вертикальной табуляции, такой символ вряд ли встретится в названии объекта в обычной жизни
}
for (var k = 0; k < i; k++) {
obj.Name = obj.Name.replace('\v', replaceText); //вторичная замена - символ вертикальной табуляции на нужное значение
}
});
Action.Commit();
}
var props = Action.Properties;
var textToSearch = props.NewString('Найти:');
var textForReplace = props.NewString('Заменить на:');
props.NewSeparator();
var FindAllButton = props.NewButton('Найти все');
FindAllButton.OnClick = function(){
FindAll();
};
props.NewSeparator();
var ReplaceAllButton = props.NewButton('Заменить все');
ReplaceAllButton.OnClick = function(){
ReplaceAll();
};
props.NewSeparator();
var FinishButton = props.NewButton('Закончить');
FinishButton.OnClick = function(){
Action.Finish();
};
Action.Continue();
[свернуть]
Последний раз редактировалось kos100pudov; 11.04.2021 в 11:51.
|
|
|
11 пользователя(ей) сказали cпасибо:
|
|
18.04.2021, 21:20
|
#95
|
Новичок
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 232 раз(а) в 6 сообщениях
Вес репутации: 0
|
Скрипт Расставить полки (Обновление)
Добавлено:
Центровка крепежа (По боковине/По полке)
Коррекция 32 (Коррекция расстояния между крепежом)
Поле текущей информации (Расстояние между крепежом)
|
|
|
28 пользователя(ей) сказали cпасибо:
|
|
27.04.2021, 00:03
|
#96
|
Пользователь
Регистрация: 19.12.2008
Адрес: Свердловск
Сообщений: 57
Сказал(а) спасибо: 31
Поблагодарили 24 раз(а) в 11 сообщениях
Вес репутации: 196
|
Заменяет позицию на обозначение
Работает в БМ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;
};
})
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
05.05.2021, 01:13
|
#97
|
Местный
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 402
|
Удалить историю
Цитата:
Сообщение от Uncle
Есть необходимость в скрипте, заменяющем штатную команду "Удалить историю". Штатная не устраивает тем, что на неё нельзя повесить "горячую" клавишу.
Алгоритм действия скрипта примерно такой :
1. Запускаем скрипт.
2. Скрипт аллертом выводит подтверждение "Удалить историю ?". Для подтверждения нажимаем "Enter". Для отмены - "Escape"
3. Работа скрипта завершена
|
Для возможности "повесить" команду удаления истории на горячую клавишу.
PHP код:
let ConfirmDelete = confirm("Удалить историю модели?");
if(ConfirmDelete){
Undo.Clear();
}
|
|
|
10 пользователя(ей) сказали cпасибо:
|
|
25.06.2021, 21:24
|
#98
|
Местный
Регистрация: 22.12.2008
Сообщений: 245
Сказал(а) спасибо: 54
Поблагодарили 218 раз(а) в 154 сообщениях
Вес репутации: 253
|
Доброго времени суток!
Скрипт поворота объектов вокруг осей XYZ на 90 градусов с формой с соответствующими кнопками. Работает в БМ-2021. Возможно будет работать в БМ-11, не проверял). Может кому-то пригодится.
Скрытый текст
PHP код:
if (Model.SelectionCount < 1) { //есть ли выделенные
alert('Нет выделенных объектов!');
Action.Finish();
}
//-- window Window1
Window1 = { Form : NewForm() };
Props = Window1.Form.Properties;
Window1.Form.Width = 200;
Window1.Form.Height = 100;
Window1.Form.Caption = "Поворот";
Window1.Form.MinHeight = 100;
//-- window Window1 properties
Window1.Button1 = Props.NewButton("X");
Window1.Button1.SetLayout(16, 28, 40, 40);
Window1.Button2 = Props.NewButton("Y");
Window1.Button2.SetLayout(81, 28, 40, 40);
Window1.Button3 = Props.NewButton("Z");
Window1.Button3.SetLayout(145, 28, 40, 40);
Window1.Label1 = Props.NewLabel("Выберите ось вращения:");
Window1.Label1.SetLayout(16, 7, 169, 20);
Window1.Label1.Alignment = AlignmentType.Center;
//-- window Window1 events
Window1.Button1.OnClick = function(){
function RotateAroundPoint(obj, pointGCS, axis, angle){
var localPoint = obj.ToObject(pointGCS);
if (obj.Model)
obj.RotateGCS(axis, angle);
}
var pan = Model.Selected;
Undo.Changing(pan);
var OCb = {
x: pan.GabMin.x,
y: pan.GabMin.y,
z: pan.GabMin.z
}
// поворот относительно оси X на 90 градусов
RotateAroundPoint( pan, OCb, AxisX, 90);
}
Window1.Button2.OnClick = function(){
function RotateAroundPoint(obj, pointGCS, axis, angle){
var localPoint = obj.ToObject(pointGCS);
if (obj.Model)
obj.RotateGCS(axis, angle);
}
var pan = Model.Selected;
Undo.Changing(pan);
var OCb = {
x: pan.GabMin.x,
y: pan.GabMin.y,
z: pan.GabMin.z
}
// поворот относительно оси Y на 90 градусов
RotateAroundPoint( pan, OCb, AxisY, 90);
}
Window1.Button3.OnClick = function(){
function RotateAroundPoint(obj, pointGCS, axis, angle){
var localPoint = obj.ToObject(pointGCS);
if (obj.Model)
obj.RotateGCS(axis, angle);
}
var pan = Model.Selected;
Undo.Changing(pan);
var OCb = {
x: pan.GabMin.x,
y: pan.GabMin.y,
z: pan.GabMin.z
}
// поворот относительно оси Z на 90 градусов
RotateAroundPoint( pan, OCb, AxisZ, 90);
}
//-- window Window1 ends
Window1.Form.ShowModal();
[свернуть]
-------------
UPD:
З.Ы. Корректно работает наверное похоже только с недавно установленными объектами. Если открыть старую модель, то что-то сбивается. Поворот осуществляется, но как-то по орбите.
З.Ы.Ы. И конечно это был первый опыт использования форм, внешне вроде красиво, но в то же время как-то топорно.
Последний раз редактировалось skromvit; 26.06.2021 в 20:42.
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
30.06.2021, 13:32
|
#99
|
Местный
Регистрация: 01.09.2019
Сообщений: 423
Сказал(а) спасибо: 52
Поблагодарили 479 раз(а) в 147 сообщениях
Вес репутации: 194
|
Адаптировал под БМ8.
Скрытый текст
Код:
// http://promebelclub.ru/forum/showpost.php?p=509000&postcount=124
var BlocksWithAnimation = [];
function MakeProps() {
var Props = Action.Properties;
if (BlocksWithAnimation.length > 0){
var AnimateAllButton = Props.NewButton('Анимировать Все');
AnimateAllButton.OnClick = function(){
for (var i = 0; i < BlocksWithAnimation.length; i++) {
var currentBlock = BlocksWithAnimation[i];
if (currentBlock._animated)
currentBlock.AnimateTo(0);
else
currentBlock.AnimateTo(1);
currentBlock._animated = !currentBlock._animated;
}
};
var OpenAllButton = Props.NewButton('Открыть все');
OpenAllButton.OnClick = function(){
for (var i = 0; i < BlocksWithAnimation.length; i++) {
var currentBlock = BlocksWithAnimation[i];
currentBlock.AnimateTo(1);
currentBlock._animated = true;
}
};
var OpenAllButton = Props.NewButton('Закрыть все');
OpenAllButton.OnClick = function(){
for (var i = 0; i < BlocksWithAnimation.length; i++) {
var currentBlock = BlocksWithAnimation[i];
currentBlock.AnimateTo(0);
currentBlock._animated = false;
}
};
}
for (var i = 0; i < BlocksWithAnimation.length; i++) {
var block = BlocksWithAnimation[i];
var button = Props.NewButton(block.Name);
button.Tag = i;
button.OnClick = function (btn) {
var currentBlock = BlocksWithAnimation[btn.Tag];
if (currentBlock._animated)
currentBlock.AnimateTo(0);
else
currentBlock.AnimateTo(1);
currentBlock._animated = !currentBlock._animated;
};
}
}
function AddToAnimlist(list) {
var animation = list.Animation;
if (animation && list.AnimType > 1 && list.AnimType < 9) {
BlocksWithAnimation.push(list);
}
for (var i = 0; i < list.Count; i++) {
if (list.Objects[i].List) {
AddToAnimlist(list.Objects[i]);
}
}
}
AddToAnimlist(Model);
MakeProps();
Action.Continue();
[свернуть]
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
30.06.2021, 23:37
|
#100
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 700 раз(а) в 265 сообщениях
Вес репутации: 292
|
размеры готовой детали и заготовки скриптом
всем доброго вечера!
в своих блуждания альтернативной выгрузки по типу xml накидал скрипт который вычисляет размер заготовки детали с учетом толщин кромок, их припусков и того нанесена ли кромка с подрезом или без. через контур (Contour) этого сделать не получалось, он всегда статичен вне зависимости от свойств кромок.
корректно работает с деталями любой формы
показывает размер детали и заготовки указанной панели, исправить под перебор модели или списка с записью результатов куда-нибудь, это кому как надо.
корректно работает в БМ2021 и БМ8, в других тоже должен.
PHP код:
//создаем копию указанной детали, чтоб не "сломать" оригинал))
var pan = AddCopy(GetPanel());
pan.Build();
//запоминаем размер детали
var detail_X = pan.GSize.x;
var detail_Y = pan.GSize.y;
for (var i = 0; i < pan.Butts.Count; ++i) {
var realtick = pan.Butts[i].Thickness - pan.Butts[i].Allowance;
//если кромка с подрезкой, толщину выставляем равную разнице толщины и припуска, выключаем подрез, обнуляем припуск
if (pan.Butts[i].ClipPanel == true) {
pan.Butts[i].ClipPanel = false;
pan.Butts[i].Thickness = realtick;
pan.Butts[i].Allowance = 0;
}
//если кромка без подрезки просто увеличиваем ее толщину на разницу толщины и припуска
else {
pan.Butts[i].Thickness = pan.Butts[i].Thickness + realtick;
}
}
pan.Build();
//вычислям разницу в размерах до и после изменения кромок.
//отняв эту разницу от размера детали, получим необходимый размер заготовки
var billet_X = detail_X - (pan.GSize.x - detail_X);
var billet_Y = detail_Y - (pan.GSize.y - detail_Y);
DeleteNewObjects();
alert('готовая панель ' + detail_Y + ' x ' + detail_X + '\nзаготовка ' + billet_Y + ' x ' + billet_X + '\n\nучтите это не длина и ширина, а размер по У и по Х\nдлина и ширина приводится далее через направление текстуры ');
Последний раз редактировалось AlexBolton; 04.07.2021 в 15:18.
Причина: оформление
|
|
|
6 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 15:10. Часовой пояс GMT +3.
|