|
|
|
|
|
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..
|
Просмотров: 549296
|
13 пользователя(ей) сказали cпасибо:
|
|
06.01.2022, 21:07
|
#131
|
Пользователь
Регистрация: 19.02.2019
Адрес: На юге
Сообщений: 35
Сказал(а) спасибо: 21
Поблагодарили 154 раз(а) в 24 сообщениях
Вес репутации: 98
|
Вес детали в пользовательские свойства.
Возможно уже было, но поиском не нашел(Модераторы простите)
Проверен в БМ21. Успешно работает с панели скриптов.
Вариант работы №1(С выделенными панелями):
1.Выбираем нужные детали, запускаем скрипт
2.Вводим плотность материала в поле ввода в кг/м3
Результат будет записан в пользовательских свойствах для каждой выделенной детали.
Вариант работы №2(Для всех панелей в модели):
1.Запустить скрипт
2.Вводим плотность материала в поле ввода в кг/м3
Результат будет записан в пользовательских свойствах для каждой детали.
Вариант работы определяется Вами. Код менять не требуется.
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
06.01.2022, 21:37
|
#132
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
Цитата:
Сообщение от Станислав Станилевич
Возможно уже было, но поиском не нашел(Модераторы простите)
Проверен в БМ21. Успешно работает с панели скриптов.
|
есть похожее решение
работает в БС, МПЛ, и БМ10-21
__________________
С уважением Кузнецов Александр
|
|
|
12.01.2022, 08:56
|
#133
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
имитация FindConnectedFasteners() в 8-ке
Добрый день!
предлагаю к вниманию функцию FindConnectedFastenersBM8(obj) - создает список (массив) фурнитуры пересекающей исследуемую панель/профиль. сделана для 8-го Базиса, так как в нем еще нет стандартного метода FindConnectedFasteners(), который делает тоже самое в более поздних версиях БМ.
работает немного медленнее, но лучше чем ничего))
собственно сама функция с небольшим примером - запускаете скрипт, указываете панель(профиль), выделится фурнитура которая ее пересекает.
Скрытый текст
function FindConnectedFastenersBM8(obj) {
var mass_return = [];
if ((obj == '[object TFurnPanel]') || (obj == '[object TExtrusionBody]')) {
Model.forEach(function(fast) {
if (fast.toString() == '[object TFastener]') {
for (var i = 0; i < fast.Holes.Count; ++i) {
var hole_position = obj.ToObject(fast.ToGlobal(fast.Holes[i].Position));
var hole_direction = obj.NToObject(fast.NToGlobal(fast.Holes[i].Direction));
var hole_start_position = {
x: hole_position.x - (0.0000001 * hole_direction.x),
y: hole_position.y - (0.0000001 * hole_direction.y),
z: hole_position.z - (0.0000001 * hole_direction.z)
};
var hole_start_position_true = true;
if ((obj.Contour.IsPointInside(hole_start_position)) && (((hole_start_position.z >= 0) && (hole_start_position.z <= obj.Thickness)) || ((hole_start_position.z <= 0) && (hole_start_position.z >= obj.Thickness)))) {
hole_start_position_true = false;
}
var hole_end_position_true = false;
if (fast.Holes[i].DrillMode == 2) {
var hole_end_position = {
x: hole_position.x + (fast.Holes[i].Depth * hole_direction.x),
y: hole_position.y + (fast.Holes[i].Depth * hole_direction.y),
z: hole_position.z + (fast.Holes[i].Depth * hole_direction.z)
};
if ((obj.Contour.IsPointInside(hole_end_position)) && (((hole_end_position.z >= 0) && (hole_end_position.z <= obj.Thickness)) || ((hole_end_position.z <= 0) && (hole_end_position.z >= obj.Thickness)))) {
hole_end_position_true = true;
}
}
if ((fast.Holes[i].DrillMode == 0) || (fast.Holes[i].DrillMode == 1)) {
for (var r = 0.5; r < fast.Holes[i].Depth + 0.5; r = r + 0.5) {
var hole_end_position = {
x: hole_position.x + (r * hole_direction.x),
y: hole_position.y + (r * hole_direction.y),
z: hole_position.z + (r * hole_direction.z)
};
if ((obj.Contour.IsPointInside(hole_end_position)) && (((hole_end_position.z >= 0) && (hole_end_position.z <= obj.Thickness)) || ((hole_end_position.z <= 0) && (hole_end_position.z >= obj.Thickness)))) {
hole_end_position_true = true;
r = fast.Holes[i].Depth + 0.5;
}
}
}
if ((hole_start_position_true) && (hole_end_position_true)) {
mass_return.push(fast);
i = fast.Holes.Count;
}
}
}
});
}
return mass_return;
}
var panel_or_profil = GetObject();
var fast_conected_obj = FindConnectedFastenersBM8(panel_or_profil);
for (var i = 0; i < fast_conected_obj.length; ++i) {
fast_conected_obj[i].Selected = true;
} [свернуть]
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
12.01.2022, 14:15
|
#134
|
Модератор
Регистрация: 07.05.2009
Адрес: Украина, Харьков
Сообщений: 702
Сказал(а) спасибо: 843
Поблагодарили 2,492 раз(а) в 371 сообщениях
Вес репутации: 751
|
Цитата:
Сообщение от kos100pudov
Добрый день!
предлагаю к вниманию функцию FindConnectedFastenersBM8(obj)......
|
Подскажите для чего писался данный скрипт?
Я вижу для себя пользу для выделения крепежа на указанной панели, с дальнейшими действиями такими как удаление, замена и т.д. Если подскажите еще способы применения буду благодарен. Но, основной вопрос в другом, может ли данный скрипт забирать не только фурнитуру и но и родительский блок/фрагмент, а то выделил, удалил, а много ненужных "артефактов в дереве осталось" скрин того что имеется в виду прилагаю. Или возможно подобный скрипт под БМ 11 уже имеется? тогда буду благодарен за ссылочку...
Скрытый текст
[свернуть]
|
|
|
12.01.2022, 14:51
|
#135
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от Джекидс
Подскажите для чего писался данный скрипт?
Я вижу для себя пользу для выделения крепежа на указанной панели, с дальнейшими действиями такими как удаление, замена и т.д. Если подскажите еще способы применения буду благодарен. Но, основной вопрос в другом, может ли данный скрипт забирать не только фурнитуру и но и родительский блок/фрагмент, а то выделил, удалил, а много ненужных "артефактов в дереве осталось" скрин того что имеется в виду прилагаю. Или возможно подобный скрипт под БМ 11 уже имеется? тогда буду благодарен за ссылочку...
Скрытый текст
[свернуть]
|
Этот скрипт писался просто так)) в другой ветке выкладывал скрипт по выделению отверстий если их глубина превышает допустимые значения. Так вот в том скрипте используется как раз эта функция для работы скрипта в БМ8.
По вашему вопросу, нужно лишь дописать проверку на принадлежность выделенной фурнитуры к группирове - является ли он частью составной фурнитуры или фрагмента и если ДА, то выделить всю эту группировку. Это не сложно, но индивидуально, каждый создает фрагменты по своему.
Пришли модель которая на скрине, посмотрю.
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
|
|
|
Пользователь сказал cпасибо:
|
|
12.01.2022, 16:13
|
#136
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
Цитата:
Сообщение от Джекидс
А как можно прописать класс материала из obj.UserProperty, вернее как он "понятие" называется в БМ?
|
Главный вопрос - "А зачем оно вам надо?"
Не берусь давать советы, но подумайте насколько ценно и необходимо редактировать базу материалов, из окна свойств пользователя? Есть ли в этом мысл?
В "БазеМатериалов.FDB" больше полутора десятков таблиц. + SQL запросы и генераторы функций. (Отдельные "базы операций" и "статей затрат" мы в рачет не берём).
Классы материалов, как вы уже догадались, записаны в отдельной таблице. В таблицу матералов добавляются лишь коды класса в виде цифр счетчика.
Добраться до значений этой таблицы можно, обновить базу материалов, добавив новую строку, с кодами классов материала тоже можно (по крайней мере теоретически...).
Вопрос тот же - "Зачем?"
На практике: реализация такой задумки - одна большая головная боль и минимум две нерешаемые на любительском уровне проблемы: - SQL и JS работают с разной скоростью. Разделить ответственность и делегировать полномочия функций на разных языках программирования, чтобы синхронизировать их работу ...те ещё танцы с бубнами. (у меня не получилось)
- Стабильность работы и время отклика
Придётся много колдовать с SQL функциями и запросами, чтобы скрестить их с функциями JS/ Стабильность таких операций так себе (т.е. "около нулевая". Особенно если прога написана любителем самоучкой, не понимающми доконца всех нюансов струтуры редактируемой базы) - вы рискуете потерять базу материалов целиком. Причем ванезапно, и не сразу, а непонятно когда.
Можно конено тренироваться на "резевной копии", а потом "осторожно" маяятся с синхронизацией дубликатов. (Честно говоря удовольствие на любителя). Но это нерешение проблемы, а генерация новых.
Главное — я не понимаю смысла этой "увлекательной" работы.
Редактивать "БазуМатериалов.FDB" через "чёрный ход" написанный юзером, без критических последствий от которых база моментально*"просыпется" -- всеравно не получиться.
Если бы это было так просто давно бы уж написали, и вынесли.
Поймите. Скрипт, который используете меняет название материала конкретной панели, а не добавляет его в базу.
Я согласен: часто возникает жесткая необходимость оснастить материал доп. свойствами
например
- Плотность, (вес изделия, и деталей (складирование, погрузка, запросы в трансопрную компанию))
- модуль упругости, (прочностные расчёты на прогиб здвиг и разрыв деталей )
- влажность, (попрвки на вес и скорость подачи)
- твёрдость по Моссу и Бринелю, (прочностные рачеты, скорость подачи, расчет времени тех. операций)
- маршрут обработки материала
(генерируемый из комбинации свойств: пазов, кромок, пластиков и контура конкретной панели(бирки деталей, сортировка, ОТК, расчеты загрузки тех.участков))
[свернуть]
В этом случае (ИМХО) лучше написать простой и независимый "костыль" ЭрзацБазыМатериалов на JS, для очень узких задач , а не вешиваться в работу Сметы. (Результат получится в разы быстре и надежнее)
Пример базы данных с доп свойсвтвами
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
[свернуть]
PS:Ни цену, ни коэффицент запаса, я бы скритом не назначал.
__________________
С уважением Кузнецов Александр
|
|
|
Пользователь сказал cпасибо:
|
|
12.01.2022, 16:31
|
#137
|
Модератор
Регистрация: 07.05.2009
Адрес: Украина, Харьков
Сообщений: 702
Сказал(а) спасибо: 843
Поблагодарили 2,492 раз(а) в 371 сообщениях
Вес репутации: 751
|
Цитата:
Сообщение от kos100pudov
Пришли модель которая на скрине, посмотрю.
|
Отправил в личку
Цитата:
Сообщение от АлКузнецов
Главный вопрос - "А зачем оно вам надо?"
|
Ваш скрипт с изменением названия материала снял "клятый" вопрос как работать и не плодить сотни одноразовых материалов, не записывать все это в БД, и в тоже время создавать нормальные доки с понятными материалами для производства (место ДСП18-1, ДСП18-2 и т.д.) но специфика работы такова что требуется и название материала для читабельности и информативности, а вот для производства деталей и заказа фурнитуры важен исключительно артикул (основа всего процесса), немного подкрутив строку вашего скрипта он заработал как нужно, т.е. записывает данные именно в том виде, в каком они читаются в последующей обработке. Так вот, причем тут классы материалов, все просто, желание причесать все туже эстетику в смете, идея была такова: после переименования материала+его артикула дописать и его класс, да таким образом чтобы сохранилась эта инфа лишь в модели, не записывая и не трогая БД. Если несуществующий материал и его артикул могут записаться в модель, я сделал вывод что и класс материала тоже можно записать в модель, а имея нужный класс в материале он попадает в соответствующую таблицу сметы, все красиво и эстетично. Вот как-то так, править БД скриптами я и не планировал, т.к. согласен с вами это черный ход. По этому и возник мой вопрос, как называется то поле, куда очень хочется вкорячить скриптом класс материала, если так не получиться, жаль, но наверное пережить можно
|
|
|
Пользователь сказал cпасибо:
|
|
12.01.2022, 16:53
|
#138
|
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
|
Цитата:
Сообщение от Джекидс
Так вот, причем тут классы материалов, все просто, желание причесать все туже эстетику в смете, идея была такова: после переименования материала+его артикула дописать и его класс, да таким образом чтобы сохранилась эта инфа лишь в модели, не записывая и не трогая БД. Если несуществующий материал и его артикул могут записаться в модель, я сделал вывод что и класс материала тоже можно записать в модель, а имея нужный класс в материале он попадает в соответствующую таблицу сметы, все красиво и эстетично.
|
Решал нечто подобное (проблема "одноразовых" матералов типа: "Цвет покраски по RAL ").
Не доконца понимаю: как налиичие класса матерала на что-то влияет в смете. Можно визуальный пример? Желательно в виде конечного результата (я так понимаю идет сортировка по "вкладкам" итоговой сметы ).
Иногда проще сгенерировать и сохранить рапорт в вормате *.txt или *.exel в нужную папку на сервере, чем воевать со сметой.
Цитата:
Сообщение от Джекидс
По этому и возник мой вопрос, как называется то поле, куда очень хочется вкорячить скриптом класс материала, если так не получиться, жаль, но наверное пережить можно
|
такого поля точно нет, и скорее всего оно никогда не появится (специфика "FurnMaterial" и баз данных написанных на SQL)
__________________
С уважением Кузнецов Александр
|
|
|
12.01.2022, 17:15
|
#139
|
Модератор
Регистрация: 07.05.2009
Адрес: Украина, Харьков
Сообщений: 702
Сказал(а) спасибо: 843
Поблагодарили 2,492 раз(а) в 371 сообщениях
Вес репутации: 751
|
Цитата:
Сообщение от АлКузнецов
(я так понимаю идет сортировка по "вкладкам" итоговой сметы
|
Да именно так! Ладно, думаю переживем если что))
|
|
|
12.01.2022, 17:49
|
#140
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Предположим материал записали руками, артикул тоже. В базе этого нет.
Если нужна еще инфа, можно записывать это просто в пользовательские свойства.
Польз.свойства отображаются в спецификациях, кажется так же в xml.
Ну как вариант..
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
|
|
|
Пользователь сказал cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 10:57. Часовой пояс GMT +3.
|