|
|
|
|
|
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..
|
Просмотров: 548937
|
13 пользователя(ей) сказали cпасибо:
|
|
15.11.2021, 17:12
|
#121
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
добавление заглушек по отверстиям фурнитуры и материалу
Доброго дня!
очередное обновление скрипта "добавление заглушек".
добавлен функционал для сохранения соответствий уже когда то выбранных заглушек материалу/фурнитуре.
если снова встречается ранее анализированный материал и фурнитура, то поле с заглушкой будет предварительно заполнено. при изменении заранее указанной заглушки, изменения сохраняются в файлах.
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
|
|
|
11 пользователя(ей) сказали cпасибо:
|
|
19.11.2021, 16:29
|
#122
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
скрипт замены материалов любых объектов в т.ч. импортированных 3D
Доброго дня трудящимся!
В архиве два скрипта для замены материалов любого объекта в т.ч. фурнитуры и импортированных 3D.
Выделить один или несколько объектов материал которых нужно изменить, запустить нужный скрипт.
В зависимости от скрипта материал либо вносится вручную, либо выбирается из базы материалов базис-мебельщика.
В итоге всем выделенным объектам будет присвоен указанный материал.
Помогает для цветоотображения в Мебельщике, а также при импорте 3Д объектов в Менеджер прайс-листов и далее в Салон.
заслуга не моя, помогли в ТП))
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
|
|
|
23 пользователя(ей) сказали cпасибо:
|
|
12.12.2021, 14:40
|
#123
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
Скрипт ручного переименования материалов и толщин, из окна пользовательских свойств.
Удобно использовать, когда вы работаете с незнакомыми материалами или занимаетесь отрисовкой фурнитуры.
Лично мне, менять толщины панелей и переиеновывать материалы модели вызывая 3 окна — долго и неудобно. Особенно если их нет в базематериалов (...и смысла засорять одноразовыми материалами базу — тоже)
Перед использованием необходимо ыделить изменяемые панели и создать им пользовательские свойства: " NewMaterialName" и " NewThickness". Изменяет только у выдленных панелей.
Толщины могут быть отрицательными (напр: "-5")
PHP код:
var k = 0; Model.forEachPanel(function(obj) { if (obj.Selected){ obj.MaterialName = obj.UserProperty['NewMaterialName']; obj.Thickness = obj.UserProperty['NewThickness']*1; k = ++k obj.Build();} }); Model.Build(); alert("изм. " + k + " панелей");
Эталон контура
Скрипт пригодится тем, кто много работает с контурами деталей: проектирует криволинейные барные стойки, гнутые поверхности и прочее "радости ЧПУ-шника". Когда в модели ни одной прямоугольной детали, а к.н. "лонжерон" или " стойка лонжерона" из-за хотелок заказчика меняется сотни раз в десятках деталей — редактировать контуры панелей в рукопашную, умахаешся.
Для работ нужно выделить изменяемые детали и указать эталон контура. Эталоном может быть плоский "черновик" ( 2Dэлемент).
PHP код:
var k = 0; var frw = NewContour(); var donor = GetObject("Выберите донора"); frw = donor.Contour; var n_ = donor.Contour.Count; if (n_ == 0){ alert('донор не указан'); donor = GetObject("Выберите донора"); frw = donor.Contour; } else{ Model.forEachPanel(function(obj) { if (obj.Selected){ //alert("редактируем контур " + obj.Name); Undo.Changing(obj); obj.Contour.Clear(); obj.Contour.Addition(frw); k = ++k obj.Build();} }); } Model.Build(); alert("изм. " + k + " панелей");
Будьте внимательны: скрипт удаляет кромки.
PS. если у когото есть скрипт сохраняющий контур детали в виде файла фрагента '*.frw' — буду признателен.
__________________
С уважением Кузнецов Александр
Последний раз редактировалось АлКузнецов; 12.12.2021 в 15:23.
|
|
|
8 пользователя(ей) сказали cпасибо:
|
|
20.12.2021, 14:54
|
#124
|
Пользователь
Регистрация: 19.02.2019
Адрес: На юге
Сообщений: 35
Сказал(а) спасибо: 21
Поблагодарили 154 раз(а) в 24 сообщениях
Вес репутации: 98
|
Выделение панелей с облицованной пластью
Формирует модальное окно с соответствующими кнопками
Работа проверена в БМ2021.
В архиве сам скрипт и иконка.
Приятного использования)
Как работает смотрим тут.
Шифрование кода сделано намерено.
Последний раз редактировалось Станислав Станилевич; 20.12.2021 в 17:36.
|
|
|
6 пользователя(ей) сказали cпасибо:
|
|
20.12.2021, 15:42
|
#125
|
Пользователь
Регистрация: 19.02.2019
Адрес: На юге
Сообщений: 35
Сказал(а) спасибо: 21
Поблагодарили 154 раз(а) в 24 сообщениях
Вес репутации: 98
|
Цитата:
Перед использованием необходимо ыделить изменяемые панели и создать им пользовательские свойства: "NewMaterialName" и "NewThickness". Изменяет только у выдленных панелей.
|
С Вашего позволения упростил эту задачу:
PHP код:
Model.forEachPanel(function(obj) {
if (obj.Selected){
const NMN=prompt('Введите название материала:')
const NT=prompt('Введите толщину материала:')
obj.UserProperty['NewMaterialName'] = NMN
obj.UserProperty['NewThickness'] = NT
obj.MaterialName = obj.UserProperty['NewMaterialName']
obj.Thickness = obj.UserProperty['NewThickness']
obj.Build();
obj.UserProperty['NewMaterialName'] = undefined
obj.UserProperty['NewThickness'] = undefined
obj.Build();
}
});
Undo.RecursiveChanging(Model)
Model.Build();
За код спасибо, отдельно!
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
20.12.2021, 21:07
|
#126
|
Новичок
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 233 раз(а) в 6 сообщениях
Вес репутации: 0
|
Расставить полки PRO v1.3.7
Несколько доработал предыдущий скрипт "Расставить полки PRO v1.2"
Исправлена неточность в округлении расстояний между полок
Добавлена проверка на правильный выбор левой и правой боковины
Добавлена проверка на выбор одной и той же боковины
Ранее если случайно ошибся, приходилось завершить скрипт и делать всё снова.
Добавлен выбор крепежа Полкодержатель/Евровинт
Добавлен пункт "Произвольно" в опцию "Центровка крепежа"
Изменён подход к определению глубины секции. Теперь не нужно указывать заднюю и переднюю границу. Значение берётся исходя из глубины самой боковины, причем если глубина самих боковин не одинаковая, как это бывает в шкафах купе, полки строятся по меньшей боковине.
|
|
|
16 пользователя(ей) сказали cпасибо:
|
|
25.12.2021, 11:47
|
#127
|
Пользователь
Регистрация: 19.02.2019
Адрес: На юге
Сообщений: 35
Сказал(а) спасибо: 21
Поблагодарили 154 раз(а) в 24 сообщениях
Вес репутации: 98
|
Добавлена кнопка "Завершить"
Сообщение 159
Цитата:
Сообщение от Станислав Станилевич
Формирует модальное окно с соответствующими кнопками
Шифрование кода сделано намерено.
|
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
01.01.2022, 01:45
|
#128
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
новогодние подарки
Несколько скриптов упрощающих работу с деталями сложного контура.
радиусная деталь
Строит контур в виде куска кольца нужного радиуса, угла и толщины.
Скрипт писал для себя: поэтому с написанием и настройкой форм и/окна свойств не заморчивался. Будте внимательны: для деталей глубина детали не должна быть равна радиусу. (Для контуров может быть и больше)
PHP код:
function okrugl(ch, n) { // функция округления числа с заданной тоносттью // ch - число // n - количество знаков if(isNaN(ch) || isNaN(n)) return false; var m = Math.pow(10,n); return Math.round(ch*m)/m; }
//++++++++++++++++++++++++++++++++++++++++ var _R = 500; // радиус поворота var _G = 100; // глубина поворота var _a = 110; // угол поворота контура
//++++++++++++++++++++++++++++++++++++++++
//var iL = 0; //var Elem = []; var Test2D = AddContour(); var fr = Test2D.Contour; //var styk = Test2D.Contour; fr.Clear(); console.log('fr ' + fr );
Test2D.Name = _a +'гр. с глубиной ' + _G; var _p = NewPoint(); // точка начала линии console.log('_p ' + _p ); var num = _a/2*-1; var num2 = 0; var num3 = _a/2; var _r = _R-_G; console.log('_r ' + _r ); console.log("отрицательный угол " + num); console.log("положительный угол " + num3); var points = []; var i = 0; // счётчик точек // 0 _p.x = okrugl(Math.cos( num * Math.PI / 180)*_R,4); _p.y = okrugl(Math.sin( num * Math.PI / 180)*_R,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')'); i = ++i; //1 _p.x = okrugl(Math.cos( num2 * Math.PI / 180)*_R,4); _p.y = okrugl(Math.sin( num2 * Math.PI / 180)*_R,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')'); i = ++i; //2 _p.x = okrugl(Math.cos( num3 * Math.PI / 180)*_R,4); _p.y = okrugl(Math.sin( num3 * Math.PI / 180)*_R,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')'); i = ++i; //3 _p.x = okrugl(Math.cos( num * Math.PI / 180)*_r,4); _p.y = okrugl(Math.sin( num * Math.PI / 180)*_r,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')'); i = ++i; //4 _p.x = okrugl(Math.cos( num2 * Math.PI / 180)*_r,4); _p.y = okrugl(Math.sin( num2 * Math.PI / 180)*_r,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')'); i = ++i; //5 _p.x = okrugl(Math.cos( num3 * Math.PI / 180)*_r,4); _p.y = okrugl(Math.sin( num3 * Math.PI / 180)*_r,4); points[i] = {x:_p.x , y:_p.y};
console.log('координаты точки ' + ' p'+ i + ' = (' + _p.x +','+ _p.y +')');
fr.AddLine(points[0].x, points[0].y, points[3].x, points[3].y ); fr.AddLine(points[2].x, points[2].y, points[5].x, points[5].y ); fr.AddArc3(points[0].x, points[0].y, points[1].x, points[1].y ,points[2].x, points[2].y); fr.AddArc3(points[3].x, points[3].y, points[4].x, points[4].y ,points[5].x, points[5].y);
console.log(fr.IsClosedContour());
Test2D.Build(); Action.Commit();
результат работы примерно такой: -
Вшивать код в скрипты создания панелей — не рекомендую.
Построенный контур в 9/10 случев — не замкнут (на стыках построение теряет впределах 0,00025 мм) и вы получаете "пустую панель" или зависание компа.
Лучше стоить панель как обычно, а дальше использовать скрипт эталон контура.
В этом случае глюков не обнаружил. Почему так происходит — ХЗ.
[свернуть]
многоугольник
Скрипт интересен сам по себе. При желании его можно конвертировать в в функцию и использовать при создании деталей и профилей. Контур всегда замкнут. Можно не опасаться за панели и профили.
Можно "разобрать на запчасти" и использовать как инструмент расчёта координат дуг и наклонов линий.
PHP код:
function okrugl(ch, n) { // функция округления числа с заданной тоносттью // ch - число // n - количество знаков if(isNaN(ch) || isNaN(n)) return false; var m = Math.pow(10,n); return Math.round(ch*m)/m; } //++++++++++++++++++++++++++++++++++++++++++++++++++ var _n = 9; // кол-во углов var _R = 50; // радиус описанной окружности
//+++++++++++++++++++++++++++++
var Test2D = AddContour(); var fr = Test2D.Contour; //var Line = []; // массив элементов контура //var iL = 0; // счётчик элементов контура
Test2D.Name = _n +'-угольник'; var _a = 360/_n; // угол поворота биссектрис var _p1 = NewPoint(); // точка начала линии var _p2 = NewPoint(); // угол конца линии
var i = 0 // счётчик цикла for (i = 1; i < _n+1; ++i) { var v = i; var num = 90-_a*i; var num2 = 90-_a*(i+1); console.log("текущий угол " + num); console.log("следующий угол " + num2); /**/ _p1.x = okrugl(Math.cos(num* Math.PI / 180)*_R,4); _p1.y = okrugl(Math.sin(num* Math.PI / 180)*_R,4); _p2.x = okrugl(Math.cos(num2* Math.PI / 180)*_R,4); _p2.y = okrugl(Math.sin(num2* Math.PI / 180)*_R,4);
console.log('координаты линии №-'+ i + ' p1(' + _p1.x +','+ _p1.y +') p2 ('+ _p2.x +','+ _p2.y +')'); fr.AddLine(_p1.x, _p1.y,_p2.x, _p2.y ); } ;
console.log(fr.IsClosedContour());
Test2D.Build(); Action.Commit();
[свернуть]
проверено в БМ11-21.
__________________
С уважением Кузнецов Александр
Последний раз редактировалось АлКузнецов; 01.01.2022 в 02:53.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
01.01.2022, 02:48
|
#129
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
новогдние подарки.
Несколько скриптов для работы с металлопрокатом
Понадобилось мне сделать точное ТЗ для металлистов. Пришлось озаботиться реалистичным изображением профилей и их присадки.
Сортамент уголков ГОСТ:8509-93
Скрипт имеет свою базу данных, и позволяет создавать профиля в соответствии с ГОСТ-ом: по толщинам стенок, размерам полок, и радиусам проката.
Уголок можно сделать равнополочный и неравнполочный. Разеры от 15х15 до 250х250.
Высота и длина уголка произвольная.
PHP код:
function ugolkiBaza(_U) { console.log("входящее значение функции = " + _U); var bdUgol = {}; //строка базы материалов /* где: _b_: - база равнополочного уголка _R: - радус базового угла _r: - радиус скругления полки _t: - толщина стенок */ var id = 0; //Номер строки bdUgol[++id] = { _b_: 15, _R: 2, _r: 0.67, _t: [1.5, 1.8, 2, 2.5]}; bdUgol[++id] = { _b_: 20, _R: 3, _r: 1.2, _t: [2.5, 3, 4]}; bdUgol[++id] = { _b_: 25, _R: 3.5, _r: 1.2, _t: [3, 4, 5]}; bdUgol[++id] = { _b_: 28, _R: 4, _r: 1.3, _t: [3]}; bdUgol[++id] = { _b_: 30, _R: 4, _r: 1.3, _t: [3, 4, 5]}; bdUgol[++id] = { _b_: 32, _R: 4.5, _r: 1.5, _t: [3, 4]}; bdUgol[++id] = { _b_: 35, _R: 4.5, _r: 1.5, _t: [3, 4,5]}; bdUgol[++id] = { _b_: 40, _R: 5, _r: 1.7, _t: [3, 4, 5, 6]}; bdUgol[++id] = { _b_: 45, _R: 5, _r: 1.7, _t: [3, 4, 5, 6]}; bdUgol[++id] = { _b_: 50, _R: 5.5, _r: 1.8, _t: [3, 4, 5, 6, 7, 8]}; bdUgol[++id] = { _b_: 56, _R: 6, _r: 2, _t: [4, 5]}; bdUgol[++id] = { _b_: 60, _R: 7, _r: 2.3, _t: [ 4, 5, 6, 8, 10]}; bdUgol[++id] = { _b_: 63, _R: 7, _r: 2.3, _t: [4, 5,6]}; bdUgol[++id] = { _b_: 70, _R: 8, _r: 2.7, _t: [ 4.5, 5, 6, 7, 8, 10]}; bdUgol[++id] = { _b_: 75, _R: 9, _r: 3, _t: [ 5, 6, 7, 8, 9]}; bdUgol[++id] = { _b_: 80, _R: 9, _r: 3, _t: [ 5.5, 6, 7, 8, 10, 12]}; bdUgol[++id] = { _b_: 90, _R: 10, _r: 3.3, _t: [ 6, 7, 8, 9, 10, 12]}; bdUgol[++id] = { _b_: 100, _R: 12, _r: 4, _t: [ 6.5, 7, 8, 10, 12, 14, 15, 16]}; bdUgol[++id] = { _b_: 110, _R: 12, _r: 4, _t: [ 7, 8, 8, 10, 12, 15 ]}; bdUgol[++id] = { _b_: 125, _R: 14, _r: 4.6, _t: [ 8, 9, 10, 12, 14, 16]}; bdUgol[++id] = { _b_: 140, _R: 14, _r: 4.6, _t: [ 9, 10, 12]}; bdUgol[++id] = { _b_: 160, _R: 16, _r: 5.3, _t: [ 10, 11, 12, 14, 16, 18, 20]}; bdUgol[++id] = { _b_: 180, _R: 16, _r: 5.3, _t: [ 11, 12, 15, 18, 20]}; bdUgol[++id] = { _b_: 200, _R: 18, _r: 6, _t: [ 12, 13, 14, 16, 18, 20, 24, 25, 30]}; bdUgol[++id] = { _b_: 220, _R: 21, _r: 7, _t: [ 14, 16]}; bdUgol[++id] = { _b_: 250, _R: 24, _r: 8, _t: [ 16, 18, 20, 22, 25, 28, 30]}; /**/ var idf = id; //console.log("база уголков загружена "); //сигнал отладки базы
//Отладка и поиск размыкания базы данных for (var i in bdUgol) { //console.log("bdUgol." + i + " = " + bdUgol[i]._b_);
if (bdUgol[i]._b_ == _U){ //console.log(bdUgol[i]._b_ == _U); //console.log("строка таблицы = " + bdUgol[i]); return bdUgol[i];} } if (bdUgol[i] != undefined) alert('уголков марки "'+ _U + '" нет в базе');
};
/** функция посчёта кол-ва элементов/объектов массива */ function countTs(obj) { return Object.keys(obj).length; }
// функция конвертация массива в текстовую строку (список) окна свойств massTxt = function (options) {return options.join('\n');}; var it = -1; Prop = Action.Properties; Gsize = Prop.NewGroup('Размеры уголка'); var _w_ = Gsize.NewCombo('ширина уголка', massTxt([15, 20, 25, 28, 30, 32, 35, 40, 45, 50, 56, 60, 63, 70, 75, 80, 90, 100, 110, 120, 125, 140, 150, 160, 180, 200, 220, 250])); console.log('ширина уголка = '+ _w_.Value ); var _h_ = Gsize.NewNumber('высота уголка', 25); var _L_ = Gsize.NewNumber('длина уголка', 100);
Prop.OnChange = function() {
}
Prop.NewButton('Построить').OnClick = function() { Prop.OnChange();
// отцифровка массива значений var w_ = _w_.Value*1; var h_ = _h_.Value*1; const L_ = _L_.Value*1; // проверка плученных свойств console.log('ширина уголка = '+ w_ ); console.log('толщина уголка = '+ h_ ); console.log('длина уголка = '+ L_ ); /* //тест функции var _U = 56; */ var ugolok = ugolkiBaza(w_); /*Prop.NewButton('построить уголок').OnClick = function() {}*/ console.log('всего варантов ' + countTs(ugolok._t)); console.log(countTs(ugolok._t)-1 == it); if (countTs(ugolok._t)-1 == it) {Action.Finish();} else {it =++it;}
var _tS = Gsize.NewNumber('толщина стенки'+ ugolok._t, ugolok._t[it]); tS = _tS.Value*1;
let _b_ = ugolok._b_; //база равнополочного уголка let _R = ugolok._R; //радиус базового угла let _r = ugolok._r; //радиус скругления полки let _t = tS; //толщина стенок let _z = 0.002 //захлёст контура паза console.log("входящее значения функции _b_" + _b_ + '", _R "'+ _R +'", _r"'+ _r + '", _t"'+ _t +'", _z"'+ _z'"');
var Panel = AddPanel(_b_, L_); // создаём панель Panel.Thickness = h_; //Толщина уголка Panel.Name = 'уголок стальной' + _b_+"x"+ h_ +"x"+tS; //называем панель по параметрам уголка Panel.MaterialName = 'Сталь'; var point = Panel.GabMin;
var Line = []; var ip = 0;
var pr = Panel.AddCut('профиль уголка '+ _b_ +"x"+ h_ +"x"+tS); //фрезеруем профиль pr.Trajectory.AddLine(point.x + _b_, point.y, point.x+_b_, point.y + L_); // траектория паза) var fr = pr.Contour; //fr - это контур паза Line[++ip] = fr.AddLine(_b_+_z, _b_+_z, _b_+_z, 0); //внеш. вертикальная Line[++ip] = fr.AddLine(_b_+_z, 0, _b_, 0 ); //внеш. стык Line[++ip] = fr.AddLine(_b_, 0, _b_, _t); //толщ стенки Line[++ip] = fr.AddLine(_b_, _t, _t, _t ); //внут полка Line[++ip] = fr.Rounding(_b_-_z, _t-_z, _r); fr.Symmetry(0, 0, _t, _t, true); Line[++ip] = fr.Rounding(_t+_z, _t+_z, _R); Line[++ip] = fr.Rounding(_b_, _b_, _z/2); Line[++ip] = fr.Elastic(_b_/2*-1, _b_/2, _b_*2, _b_*2, 0, (_b_-h_)*-1); //растягиваем "резиновой нитью" контур паза в размер по высоте console.log('контур паза замкнут?\n'); console.log(fr.IsClosedContour());
Panel.Build() Action.Commit(); } Prop.NewButton("Закончить").OnClick = function() { Action.Finish(); } Action.Continue();
иногда (если сменить просмотр) - скрипт глючит.
Количество вариантов толщины стенок указано в строке окна свойств.
Как показала практика: несколько раз нажать "построить" -- оказалось удобнее,*чем выбирать толщину полки из списка.
В отличие от "тела по траектории" и "профиля" - "профиль из панели" прекрасно держит фурнитуру.
[свернуть]
по аналогии сделаны скрипты "труба профильная", "труба круглая", "швеллер" и "двутавр".
Труба профильная
PHP код:
function okrugl(ch, n) { // функция округления числа с заданной точностью // ch - число // n - количество знаков if(isNaN(ch) || isNaN(n)) return false; var m = Math.pow(10,n); return Math.round(ch*m)/m; }
Prop = Action.Properties; Gsize = Prop.NewGroup('Размеры профиля'); var w_ = Gsize.NewNumber('ширина профиля', 40); var h_ = Gsize.NewNumber('толщина профиля', 25); var tS = Gsize.NewNumber('толщина стенки', 1.5); var L_ = Gsize.NewNumber('длина трубы', 1000);
Schange = Gsize.NewButton('Задать...');
Schange.OnClick = function() { Action.AsyncExec(function() {
Gsize.Enabled = true; }) };
Prop.OnChange = function() {
var Panel = AddPanel(w_.Value, L_.Value); Panel.Thickness = h_.Value; // //Толщина гайки Panel.Name = 'Труба профильная'; Panel.MaterialName = 'Труба ' + h_.Value +"x"+ w_.Value +"x"+tS.Value; var point = Panel.GabMin;
var Rect = []; var ip = 0;
var pr = Panel.AddCut('профиль трубы '+ w_.Value +"x"+ h_.Value +"x"+tS.Value); //фрезеруем профиль pr.Trajectory.AddLine(point.x+w_.Value, point.y, point.x+w_.Value, point.y+L_.Value); // траектория паза) var fr = pr.Contour; //fr - это контур паза var stik = NewContour(); //контур вычитаемого стыка Rect[++ip] = fr.AddRoundRect(0.025, 0.025, w_.Value-0.025, h_.Value- 0.025, tS.Value); Rect[++ip] = fr.AddRectangle(-0.5,-0.005, w_.Value+0.005, h_.Value+0.005); Rect[++ip] = fr.AddRectangle(tS.Value, tS.Value, w_.Value-tS.Value, h_.Value-tS.Value); Rect[++ip] = stik.AddRectangle(tS.Value,h_.Value+0.03, w_.Value - tS.Value, h_.Value-0.03); fr.Subtraction(stik) Rect[++ip] = stik.AddRectangle(w_.Value/2,-0.005, w_.Value/2+0.005, tS.Value+1); fr.Addition(stik) Rect[++ip] = fr.AddLine(w_.Value - tS.Value, h_.Value-0.025, w_.Value-tS.Value, h_.Value+0.005); }
Prop.OnChange();
Prop.NewButton('Установить').OnClick = function() { Action.Commit(); }
Action.Continue();
[свернуть]
Труба круглая
PHP код:
function okrugl(ch, n) { // функция округления числа с заданной точностью // ch - число // n - количество знаков if(isNaN(ch) || isNaN(n)) return false; var m = Math.pow(10,n); return Math.round(ch*m)/m; }
Prop = Action.Properties; Gsize = Prop.NewGroup('Размеры профиля'); var d_ = Gsize.NewNumber('диаметр трубы Ø', 20); var tS = Gsize.NewNumber('толщина стенки', 1.5); var L_ = Gsize.NewNumber('длина трубы', 1000);
Prop.OnChange = function() { /*
*/
var Panel = AddPanel(d_.Value, L_.Value); Panel.Thickness = d_.Value; // //Толщина гайки Panel.Name = 'Труба круглая Ø' + d_.Value +"x"+tS.Value; Panel.MaterialName = 'Труба Ø' + d_.Value +"x"+tS.Value; var point = Panel.GabMin;
var Rect = []; var ip = 0;
var pr = Panel.AddCut('профиль трубы Ø'+ d_.Value); //внешний Ø var pr2 = Panel.AddCut('полость трубы Ø'+ d_.Value-2*tS.Value); //внутрений Ø pr.Trajectory.AddLine(point.x+d_.Value, point.y, point.x+d_.Value, point.y+L_.Value); // траектория паза) pr2.Trajectory.AddLine(point.x+d_.Value, point.y, point.x+d_.Value, point.y+L_.Value); // траектория паза) var fr = pr.Contour; //fr - это контур внешнего Ø var fr2 = pr2.Contour; //fr2 - это контур внутренего Ø var stik = NewContour(); //контур вычитаемого стыка Rect[++ip] = fr.AddRectangle(-0.05,-0.005, d_.Value+0.005, d_.Value+0.005); // внешние границы Rect[++ip] = fr.AddCircle(d_.Value/2, d_.Value/2, d_.Value/2); // внешний Ø Rect[++ip] = stik.AddRectangle(d_.Value/2-0.005,d_.Value/2, d_.Value/2+0.005, d_.Value+0.005); fr.Subtraction(stik) Rect[++ip] = fr2.AddCircle(d_.Value/2, d_.Value/2, d_.Value/2- tS.Value); // внутрений Ø
}
Prop.NewButton('Установить').OnClick = function() { Prop.OnChange(); Action.Commit(); }
Action.Continue();
[свернуть]
__________________
С уважением Кузнецов Александр
Последний раз редактировалось АлКузнецов; 01.01.2022 в 19:25.
|
|
|
15 пользователя(ей) сказали cпасибо:
|
|
03.01.2022, 16:59
|
#130
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
радиусная деталь v3
новые правки: - Увоевал погрешности построения.
- Добавил форму.
- До нажатия кнопки "установить" -- действует в режиме предпросмотра. Невыполнимые построения ( деталь с нарушениями контура) просто не покажет. (аккуратнее с углами изгиба меньше 5гр. и радиусом изгиба меньше 100мм)
- Теперь строит не контур а законченную деталь с нужным углом разворота относитльно оси Z.
- угол может быть отрицательным,*но не может быть "0" или "360"
- Деталь только горизонтальная, по умолчанию высота построения детали = 1200.
Если нужны варианты (вертикальная, горизонтальная, фронтальная) замените строку №38:
Цитата:
var Test3D = AddHorizPanel(0, 0, 0, 0, 1200);
|
на
Цитата:
var Test3D = AddPanel(0, 0, 0, 0);
|
для полноценной работы формы нужно скачать этот рисунок
и прописать адрес сохраненного файла в окне свойств (сейчас это \\chertej.jpg').
Если будете добавлять точку установки панели через GetPoint(’укажите точку’);,
обратите внимание на функцию checP() {...} и строки №31-36
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
[свернуть]
проверено в БМ 11-21
__________________
С уважением Кузнецов Александр
Последний раз редактировалось АлКузнецов; 04.01.2022 в 14:47.
|
|
|
7 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 18:35. Часовой пояс GMT +3.
|