|
|
|
|
|
25.12.2017, 23:12
|
|
Обсуждение готовых скриптов
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
25.12.2017, 23:12
Рейтинг:
()
Здесь можно обсуждать скрипты из темы Готовые решения для БМ8-2021.
Обратите внимание на полезные ответы в этой теме!
Последний раз редактировалось Uncle; 04.07.2021 в 15:03..
|
Просмотров: 225157
|
05.11.2019, 10:31
|
#101
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от egrigor
Подскажите, пожалуйста.
В более новых версиях есть Action.LoadModel("")
Есть ли костыль для 8рки с такой функцией? Может опять же через контролы?
|
Попробуйте это:
PHP код:
Action.Control.Owner.LoadFromFile('d:\\test.b3d')
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
05.11.2019, 15:54
|
#102
|
Новичок
Регистрация: 03.04.2013
Сообщений: 26
Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 7 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Letos
Попробуйте это:
PHP код:
Action.Control.Owner.LoadFromFile('d:\\test.b3d')
|
Решение работает, спасибо большое за подсказку.
|
|
|
27.12.2019, 14:06
|
#103
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Kartuz
Попробовал скрипт, который добавляет к имени/позиции панели имя/позицию блока, в котором она находится. В версии базиса 10 работает, вот только не добавляет к профилям, только к панелям. Это баг или особенность ? И можно исправить ?
|
Исправил, обновил соответствующий пост.
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
15.02.2020, 12:47
|
#104
|
Местный
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 403
|
Цитата:
Сообщение от Максим Геннадьевич
Скрипт для построения обувницы с выбором по количеству отсеков. Делал для себя, надоело вставлять фрагменты.
Работает в версиях:
8н в остальных не проверял.
|
В 10-ке не появляется кнопка "Закончить".
Чтобы заработала нужно заменить этот блок кода:
PHP код:
var finishBtn = NewButtonInput('Закончить');
finishBtn.OnChange = function() {
Action.Commit();
Action.Finish();
}
на этот:
PHP код:
var finishBtn = Action.Properties.NewButton('Закончить');
finishBtn.OnClick = function() {
Action.Commit();
Action.Finish();
}
|
|
|
Пользователь сказал cпасибо:
|
|
26.02.2020, 22:57
|
#105
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 89
Сказал(а) спасибо: 27
Поблагодарили 50 раз(а) в 30 сообщениях
Вес репутации: 108
|
Цитата:
Сообщение от Letos
Изменил скрипт.
В новой версии добавлена возможность брать позицию панели. Также можно отключить интерактивный режим (не требовать от пользователя при каждом запуске выбирать, откуда брать панель). Для этого нужно выставить значение переменной interactive равное false и задать значение переменной mode.
Код скрипта v5
PHP код:
const settingsFile = 'PanelNumbers.xml';
/**
* Масштаб фрагмента
*/
const fragScale = 10;
/**
* Режим работы скрипта
* 0 - надпись из имени панели
* 1 - надпись из позиции
*/
var mode = 0;
/**
* Константа, указывающая, является ли скрипт интерактивным
* Правится вручную под нужды пользователя
*/
const interactive = true;
/**
* ДЛя БМ8
* @param {Contour2D} cont
*/
function GetMax(cont) {
var result = {
x: -100000000,
y: -100000000
}
for (var i = 0; i < cont.Count; i++) {
var item = cont.Objects[i];
switch (item.ElType) {
case (1): //ElementType.Line
var p1 = item.AsLine().Pos1;
var p2 = item.AsLine().Pos2;
result.x = Math.max(result.x, p1.x, p2.x);
result.y = Math.max(result.y, p1.y, p2.y);
break;
case (2): //ElementType.Arc
var p1 = item.AsArc().Pos1;
var p2 = item.AsArc().Pos2;
var c = item.AsArc().Center;
result.x = Math.max(result.x, p1.x, p2.x, c.x);
result.y = Math.max(result.y, p1.y, p2.y, c.y);
break;
case (3): //3ElementType.Circle
var cir = item.AsCircle();
var c = cir.Center;
result.x = Math.max(result.x, c.x + cir.CirRadius);
result.y = Math.max(result.y, c.y + cir.CirRadius);
}
}
return result;
}
/**
* ДЛя БМ8
* @param {Contour2D} cont
*/
function GetMin(cont) {
var result = {
x: 100000000,
y: 100000000
}
for (var i = 0; i < cont.Count; i++) {
var item = cont.Objects[i];
switch (item.ElType) {
case (1): //ElementType.Line
var p1 = item.AsLine().Pos1;
var p2 = item.AsLine().Pos2;
result.x = Math.min(result.x, p1.x, p2.x);
result.y = Math.min(result.y, p1.y, p2.y);
break;
case (2): //ElementType.Arc
var p1 = item.AsArc().Pos1;
var p2 = item.AsArc().Pos2;
var c = item.AsArc().Center;
result.x = Math.min(result.x, p1.x, p2.x, c.x);
result.y = Math.min(result.y, p1.y, p2.y, c.y);
break;
case (3): //ElementType.Circle
var cir = item.AsCircle();
var c = cir.Center;
result.x = Math.min(result.x, c.x - cir.CirRadius);
result.y = Math.min(result.y, c.y - cir.CirRadius);
}
}
return result;
}
// В БМ8 у контура нет свойств Min и Max, поэтому приходится выкручиваться.
// Берём наиболее удалённую точку и ищем ближайшую точку контура.
// На непрямоугольных панелях может некорректно работать.
/**
*
* @param {Contour2D} cont
*/
function GetContourMin(cont) {
if (cont.Min) {
return cont.Min
}
else { //ДЛя БМ8
return GetMin(cont)
// var min = {
// x: -10000000,
// y: -10000000
// }
// return cont.ClosestPoint(min);
}
}
/**
*
* @param {Contour2D} cont
* @returns {Point}
*/
function GetContourMax(cont) {
if (cont.Max) {
return cont.Max
}
else { //ДЛя БМ8
return GetMax(cont);
// var max = {
// x: 10000000,
// y: 10000000
// }
// return cont.ClosestPoint(max);
}
}
var combo;
if (interactive) {
combo = Action.Properties.NewCombo('Брать из панели', 'Имя\nПозицию');
combo.OnChange = combo.OnValueChange =
function () {
mode = combo.ItemIndex
};
Action.Properties.NewButton('Применить').OnClick = function () {
Do();
Action.Finish();
}
Action.Properties.Load(settingsFile);
mode = combo.ItemIndex;
Action.OnFinish = function () {
Action.Properties.Save(settingsFile);
}
Action.Continue();
}
else
Do();
function CorrectSubContourPositionByPoint(sub, src, p) {
if (!src.IsPointInside(p)) {
var closedSrc = src.ClosestPoint(p);
var shift = {
x: closedSrc.x - p.x,
y: closedSrc.y - p.y
}
sub.Move(shift.x, shift.y);
// sub.Move(shift);
return true;
}
return false;
}
/**
* Попытка вписать вычитаемый контур в исходный
* @param {Contour2D} sub Вычитаемый контур
* @param {Contour2D} src Исходный контур
*/
function CorrectSubContourPosition(sub, src) {
var subMax = GetContourMax(sub);
var corrected = CorrectSubContourPositionByPoint(sub, src, subMax);
var subMin = GetContourMin(sub);
corrected |= CorrectSubContourPositionByPoint(sub, src, subMin);
if (corrected) {
subMin = GetContourMin(sub);
subMax = GetContourMax(sub);
}
var p1 = {
x: subMax.x,
y: subMin.y,
}
corrected = CorrectSubContourPositionByPoint(sub, src, p1)
if (corrected) {
subMin = GetContourMin(sub);
subMax = GetContourMax(sub);
}
var p2 = {
x: subMin.x,
y: subMax.y,
}
corrected = CorrectSubContourPositionByPoint(sub, src, p2)
}
function Do() {
for (var i = 0; i < Model.SelectionCount; i++) {
/** @type {Panel}*/
var pan = Model.Selections[i].AsPanel;
if (pan) {
Undo.Changing(pan);
var c = pan.Contour
var n = '';
switch (mode) {
case 0:
n = pan.Name;
break;
case 1:
n = pan.ArtPos;
break;
}
n.toUpperCase();
nl = n.length
var min = GetContourMin(c);
var max = GetContourMax(c);
var center = {
x: (min.x + max.x) / 2,
y: (min.y + max.y) / 2
}
var polojeniyePosledSimvola = 0;
const rasstoyaniyemejdusimvolami = 0.2
var s = NewContour();
for (ni = 0; ni < nl; ni++) {
var add = NewContour()
add.Load(n[ni] + '.frw');
var ss = MashtabirovaniyeContura(add, fragScale)
polojeniyePosledSimvola = polojeniyePosledSimvola + rasstoyaniyemejdusimvolami * ss.Width
ss.Move(polojeniyePosledSimvola, 0)
polojeniyePosledSimvola = polojeniyePosledSimvola + ss.Width
s.Addition(ss);
}
system.log(JSON.stringify(center));
var sCenter = {
x: (GetContourMin(s).x + GetContourMax(s).x) / 2,
y: (GetContourMin(s).y + GetContourMax(s).y) / 2,
};
system.log(JSON.stringify(sCenter));
s.Move(center.x - sCenter.x, center.y - sCenter.y);
CorrectSubContourPosition(s, c);
var sCenter = {
x: (GetContourMin(s).x + GetContourMax(s).x) / 2,
y: (GetContourMin(s).y + GetContourMax(s).y) / 2,
};
system.log(JSON.stringify(sCenter));
c.Subtraction(s);
pan.Build()
}
}
}
function MashtabirovaniyeContura(scontur, scale) {
s = scontur
sh = s.Height
sw = s.Width
s.Fit(0, 0, sw, sh)
ss = NewContour()
sc = s.Count
for (i = 0; i < sc; i++) {
if (s[i].ElType == 1) {
x1 = s[i].Pos1.x * scale
y1 = s[i].Pos1.y * scale
x2 = s[i].Pos2.x * scale
y2 = s[i].Pos2.y * scale
ss.AddLine(x1, y1, x2, y2)
}
if (s[i].ElType == 2) {
p1 = NewPoint(s[i].Pos1.x * scale, s[i].Pos1.y * scale)
p2 = NewPoint(s[i].Pos2.x * scale, s[i].Pos2.y * scale)
centre = NewPoint(s[i].Center.x * scale, s[i].Center.y * scale)
//проверка тру или фелс в направлении дуги
p1t = NewPoint(s[i].Pos1.x, s[i].Pos1.y)
p2t = NewPoint(s[i].Pos2.x, s[i].Pos2.y)
centre_t = NewPoint(s[i].Center.x, s[i].Center.y)
st = NewContour()
st.AddArc(p1t, p2t, centre_t, true)
if (st[0].ObjLength() == s[i].ObjLength()) {
napravleniye = true
}
else {
napravleniye = false
}
//----проверка тру или фелс в направлении дуги
ss.AddArc(p1, p2, centre, napravleniye)
}
if (s[i].ElType == 3) {
xc = s[i].Center.x * scale
yc = s[i].Center.y * scale
rad = s[i].CirRadius * scale
ss.AddCircle(xc, yc, rad)
}
}
return ss
}
[свернуть]
Обновление 1: поправил работу скрипта в 8 версии.
Обновление 2: поправил работу скрипта с контурами, начинающимися не с 0 по ЛСК и обновил код в спойлере
Обновление 3 (12.10.19): Добавил сохранение настроек. Поправил положение надписи- теперь центр надписи совпадает с центром контура панели.
Обновление 4 (14.10.19): Поправил работу скрипта в БМ8 (у контура отсутствовали свойства Min и Max), поправил загрузку настроек (Загружалась в свойства настройка "Позиция", а режим в скрипте не менялся, поэтому брался режим "Имя").
Обновление 5 (17.10.19): - Поправил работу с нестандартными контурами: Если при расположении контура вычитания в центре габаритного прямоугольника контура панели контур вычитания выходит за границы контура панели, скрипт пытается сдвинуть контур вычитания так, чтобы он весь уместился на контуре панели.
- Исправил вычисления минимума/максимума для контура в БМ8.
Из-за отсутствия свойств Min и Max у контура в БМ8 возможны различия в позиционировании контура вычитания между версиями БМ8 и БМ9+
Обсуждение скрипта и предложения по доработке писать сюда
|
Добрый вечер.
А можно, пожалуйста, скриншот результата нумерации на панели?
Я уже ранее писал, что у меня 8 народная, у Вас скрипт немаленький, чтобы в восьмёрке заработал не особо пОнял как, мне бы увидеть результат.
Есть просто одна идёйка, может и долбанутая, поэтому чтобы не повторяться, хотелось бы увидеть то, что должно получиться.
С Уважением, Михаил.
|
|
|
27.02.2020, 10:00
|
#106
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Meshok
Добрый вечер.
А можно, пожалуйста, скриншот результата нумерации на панели?
Я уже ранее писал, что у меня 8 народная, у Вас скрипт немаленький, чтобы в восьмёрке заработал не особо пОнял как, мне бы увидеть результат.
Есть просто одна идёйка, может и долбанутая, поэтому чтобы не повторяться, хотелось бы увидеть то, что должно получиться.
С Уважением, Михаил.
|
Добрый день. Народной под рукой нет, проверял в демке. Во вложении скриншоты
Первый - нумерация по позициям + версия, в которой выполнялся скрипт
Второй - нумерация по имени, в которой видно, что 3-значный номер не умещается.
На всякий случай напомню, что для корректной работы скрипта нужно, чтобы параметр (имя/позиция), из которого берётся номер, должен состоять только из цифр.
В народной тоже должен заработать, если нет - пришлите скриншот, какую ошибку в лог пишет, разберёмся.
|
|
|
27.02.2020, 20:12
|
#107
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 89
Сказал(а) спасибо: 27
Поблагодарили 50 раз(а) в 30 сообщениях
Вес репутации: 108
|
Цитата:
Сообщение от Letos
Добрый день. Народной под рукой нет, проверял в демке. Во вложении скриншоты
Первый - нумерация по позициям + версия, в которой выполнялся скрипт
Второй - нумерация по имени, в которой видно, что 3-значный номер не умещается.
На всякий случай напомню, что для корректной работы скрипта нужно, чтобы параметр (имя/позиция), из которого берётся номер, должен состоять только из цифр.
В народной тоже должен заработать, если нет - пришлите скриншот, какую ошибку в лог пишет, разберёмся.
|
Я, наверное, плохо прочитал задание или неправильно его пОнял.
Я думал, что нужно реализовать что-то наподобие такого:
|
|
|
28.02.2020, 08:56
|
#108
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Meshok
Я, наверное, плохо прочитал задание или неправильно его пОнял.
Я думал, что нужно реализовать что-то наподобие такого:
|
Не совсем понял, что вам нужно. Во вложении скрин с демки 8 версии после выполнения скрипта. Основное отличие - на боковине номер смотрит в другую сторону. Но, если надо, для ортогональных панелей (у которых направление толщины совпадает с одной из осей ГСК) это поправить можно. Для неортогональных тоже можно, но это чуть сложнее.
Было бы хорошо, если бы вы описали, что вы ожидали от выполнения этого скрипта и какие ожидания сбылись / не сбылись.
|
|
|
04.04.2020, 19:00
|
#109
|
Новичок
Регистрация: 02.04.2020
Сообщений: 1
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Igordiz
Привет всем! Этот простой скрипт быстро устанавливает штангу в шкаф. При этом в панели свойств имеется выбор
Штанга круглая или овальная.
Держатель трубы да/нет.
Если держателя нет, то появляется поле ввода значения отступа штанги от верхней панели.
|
Можете перезалить архив , или загрузить на яндекс диск пожалуйста , при попытке скачать , разлогиневает с форума
|
|
|
05.04.2020, 01:15
|
#110
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от TD312
Можете перезалить архив , или загрузить на яндекс диск пожалуйста , при попытке скачать , разлогиневает с форума
|
ЯД нет, залил на гугл
https://drive.google.com/open?id=1d9...M93v9K3QE_NV0h
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 02:45. Часовой пояс GMT +3.
|