Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
Обновлённый скрипт по присваиванию префикса к имени панели
В этой версии:
- добавил кнопку по удалению префиксов
- появилась возможность выбора - сразу переименовывать все блоки или вручную выделять нужный блок
- добавил кнопку закрытия скрипта
Название префикса берётся из выбранных полей, находящихся на панели «Свойства». Обработка начинается после нажатия кнопки «Применить».
Описание интерфейса:
«Какие блоки обрабатываем»:
1. «Выделять по отдельности» - ручной выбор блока, в котором переименовывать панели
2. «Выделить всё» - скрипт обрабатывает все блоки модели
«У панели менять»:
1. «Имя» - добавляет префикс к имени панели
2. «Позицию» - добавляет префикс к позиции панели
«Разделитель»:
Ввод символа, который будет ставится после префикса
«Для формирования информации использовать»:
1. «Только имя объекта» - название префикса формируется из названия блоков
2. «Только позицию объекта» - название префикса формируется из позиции блоков
3. «Позицию при наличии, иначе имя» - или п.1 или п.2
«Добавлять имя/позицию»:
1. «Блока, в который вложен объект» - префикс берётся из названия того блока, где находятся панели
2. «Корневого блока» - префикс берётся из названия самого верхнего блока иерархии
3. «Всех блоков в иерархии» - префикс формируется из названия всех блоков в иерархии
Кнопка «Удалить префикс»:
Удаляет ранее добавленные префиксы, Работа скрипта при этом не завершается
!!!Внимание!!! Название панели не должно в себе содержать тот же символ, который используется после префикса. Сотрётся название панели до последнего символа – разделителя. Удаление префикса из позиции сделать вручную, скрипт почему-то не удаляет их оттуда должным образом.
Кнопка «Завершить» - завершает работу скрипта.
!!!Внимание!!! Чтобы скрипт работал должным образом, требуется чтобы в параметре слоёв отсутствовала галка напротив «Всегда активен только текущий слой»
Вот такие файлы я получаю на выходе. Базисовский файл стоит отдельных денег. платить за него постоянно - не комильфо, хотелось бы раз купить и все на том.
В этой версии:
- исправил ошибку, из-за которой данный скрипт не работал с панели скриптов (благодарю kos100pudov, сам не смог понять)
При запуске скрипта появляется окно запроса количества кромок в панели. Описание работы:
- если просто ввести число - выделяются панели, кол-во облицовок которых отличается от введённого значения.
- если перед числом написать знак "<" или ">" или "=" (например <2 или =0, без пробелов), то выделяться будут панели соответственно:
1. Меньше и равные значению
2. Больше и равные значению
3. Точно равные введённому значению.
Последний раз редактировалось Dzen_zs; 05.08.2021 в 21:00.
При запуске скрипта появляется окно запроса количества кромок в панели. Описание работы:
- если просто ввести число - выделяются панели, кол-во облицовок которых отличается от введённого значения.
- если перед числом написать знак "<" или ">" или "=" (например <2 или =0, без пробелов), то выделяться будут панели соответственно:
1. Меньше и равные значению
2. Больше и равные значению
3. Точно равные введённому значению.
!!! Внимание !!! скрипт НЕ работает с панели скриптов, запуск получается только из редактора скриптов. Предполагаю, что это из-за функции eval(), и стоило вместо неё сделать switch-case. Но это не точно.
стало интересно поковырял ваш скрипт, проблема крайне "дурная".
"sign", а точнее "sign()" это метод от метода Math и вроде не должно быть глюков, но в данной ситуации что то пошло не так)))
измените название переменной "sign", ну и в конце поставьте ";" - закройте так сказать Model.forEachPanel, на скорость не влияет, чисто для красоты))
__________________ Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
Это можно, но есть одна проблема. В зависимости от угла "взгляда", под которым так сказать повернуть изделие на экране, будет игнорироваться одна из координат, так как не возможно распознать на какой "глубине" находится курсор. От этого может быть некорректное распознавание размера нужного объёма, да и самого объёма в принципе. Допустим уже есть врезная задняя стенка и нужно установить полку, на виде близком к "виду спереди", в таком случае координатам z курсора будет равна нулю и исследуемый объем оказывается за задней стенкой...
Тут скорее нужно идти путем добавления неких тел и их последующая трансформация. Допустим есть первоначальный ничем не ограниченный объем, добавляем какую то перегородку, вместе с ней добавляются пару тел на оставшиеся объемы, до перегородки и после неё. Добавляем следующую перегородку, выделяем одно из этих тел-объемов, берётся его объем и расположение, оно удаляется, ставится перегородка и снова два тела-объема. Ну и т.д.
Можно ли узнать не 2D координату, а 3D координату точки курсора в пространстве модели?
Добавлено через 2 минуты
И еще вопрос .. есть ли в скриптах команда "параллельно плоскости"?
стало интересно поковырял ваш скрипт, проблема крайне "дурная".
"sign", а точнее "sign()" это метод от метода Math и вроде не должно быть глюков, но в данной ситуации что то пошло не так)))
измените название переменной "sign", ну и в конце поставьте ";" - закройте так сказать Model.forEachPanel, на скорость не влияет, чисто для красоты))
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
У меня, кстати, сомнения были при наименование переменной. Уже всё дописал, отправил товарищу и думаю какой же это sign, надо было char назвать, чтобы соответствовала действительности. Не прокатило))
Возник вопрос .. Каким образом можно определить стороны панели и расположение на этих сторонах облицовок пластиком.. Можно ли выяснить вектор направления ? По сути требуется прописать в пользовательское свойство ПЛАСТЬ1 и ПЛАСТЬ2 все слои находящиеся на панели.
приветствую Коллеги, подскажите возможно сделать скрипт который 1 кнопкой по нему поставит конкретную "схему крепежа" на стыки панели?
может у кого то есть что то такое. спасибо
Присвоить пользовательскому свойству объекта имя сборочной единицы
При запуске скрипт находит блоки которые являются сборочными единицами и добавляет самому блоку и всем вложенным в него объектам пользовательское свойство с именем "СЕ" и прописывает в тексте этого пользовательского свойства имя данного блока.
Так как скрипт планировалось поставить на автозапуск, то при повторном запуске скрипт не создаёт ещё одно пользовательское свойство с именем "СЕ", а просто перезаписывает каждый раз данное свойство.
Перезапись (удаление свойства с именем "СЕ" и создание по новой нового свойства с именем "СЕ") позволяет адекватно заменять текст в пользовательском свойстве "СЕ" если вдруг блок будет переименован. Ещё одним пунктом является проверка входит ли объект в блок - сборочную единицу, ведь если с блока снят атрибут сборочная единица то и пользовательское свойство с именем "СЕ" удаляется. Если в блок - сборочную единицу входят другие блоки - сборочные единицы то свойство с именем "СЕ" присваивается с текстом в котором прописано имя родительского блока - сборочной единицы.
Данный скрипт планировалось использовать с включённой ИРП. В параметрах ИРП включена галочка "Сравнивать объекты из других сборочных единиц". А в критериях сравнения деталей (расстановка позиций) включена галочка "Пользовательские свойства".
Пример:
Если мы имеем Блок - сборочную единицу с именем "Ящик №1" и имеем второй Блок - сборочную единицу с именем "Ящик №2" то после запуска скрипта в каждом из блоков сборочных единицах будут созданы пользовательское свойство для каждого вложенного объекта и самого блока с именем "СЕ" а в тексте свойства будет прописано имя родительской сборочной единицы. В итоге мы получим следующие: при условии что данные сборочные единицы абсолютно равны (ящики идентичны) то если мы им даём одинаковое имя блока то в результате мы получим две сборочные единицы под одинаковым обозначение (например 01-1) и детали ящика будут все сравнены и одинаковым деталям присвояться одинаковые обозначения. А вот если мы дадим разные имена ящикам ("Ящик №1" и "Ящик №2") то при наличии у каждой панели пользовательского свойства с именем своего блока программа при сравнении присвоит всем деталям свои обозначения.