Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
Спасибо! Очень помогло! А это можно как-то реализовать в Базис-Салоне?
Точнее, какой путь в скрипте указать в МПЛ для картинки, чтоб Салон мог её прочесть?
Спасибо! Очень помогло! А это можно как-то реализовать в Базис-Салоне?
Точнее, какой путь в скрипте указать в МПЛ для картинки, чтоб Салон мог её прочесть?
тут не подскажу...
вообще в скриптах пути к файлам прописываются относительно папки с самим скриптом, это если файл лежит в папке со скриптом или в его подпапках - "картинка1.jpg"
иначе путь нужно прописывать явно, но с двойными слэшами, допустим "C:\\Users\\Пользователь\\Documents\\Bazis\\Script s\\25.картинки на форме\\картинка1.jpg"
а в салонных скриптах разве есть функционал оконных форм?
__________________ Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
Есть вариант, работает не только в БМ 2021, но после работы данного кода в смету выводится только в нем. Этот метод должен быть универсальным и для других версий, но для этого необходимо более тщательно изучить структуру хранимых данных в объекте Params.
PHP код:
var oPanel = Model.Selected,
oParams = oPanel.Params,
oMaterialAttendance = oParams.NodeNew('MaterialAttendance'),
oList = oMaterialAttendance.NodeNew('List'),
oItem = oList.NodeNew(''),
oArt = oItem.NodeNew('Art'),
oName = oItem.NodeNew('Name'),
oCount = oItem.NodeNew('Count');
происходит не понятное для меня с реализацией этого кода. Создаю панель - выполняю скрипт, появляется доп.материал. Взял готовую модель - выделяю панель, выполняю скрипт - материалов нет. Но! далее добавляю вручную на эту панель доп.материал, нажимаю очистить доп.материалы - в свойствах доп.материалы пропадают. Но если открываю доп.материалы на просмотр, то в таблице как раз есть материал добавленный скриптом "некий материал". Также его видит и Смета.
пс. Взял другую модель - в ней все штатно отрабатывает
ппс. С чем это может быть связано?
__________________ Автоматизация автоматизаций на АСУ, ТП и тд и тп.. Комплексное решение
Проблема может быть связана с созданием скриптом второй копии записи "MaterialAttendance" и подчиненного ему списка "List" функцией "NodeNew" в котором перечисляются все дополнительные материалы.
Для исключения этого следует использовать в скрипте в соответствующих вызовах функцию "FindOrCreate" вместо "NodeNew"
Так же уточню, что сам не изучал и не реализовывал на практике эту возможность в скрипте, другими словами код был просто демонстрацией возможности. А для написания полноценного скрипта стоит изучить и поэкспериментировать всеми любимые не документированные возможности требующегося для этого объекта - "Params".
Здесь перечислены свойства и функции подопытного
Код HTML:
OnQueryPassword: undefined
OnNodeLoaded: undefined
Version: 0
Password:
Compress: false
RawByteStr:
DataString:
HeaderDataString:
SaveToStream: function SaveToStream() { [native code] }
LoadFromStream: function LoadFromStream() { [native code] }
SaveToFile: function SaveToFile() { [native code] }
LoadFromFile: function LoadFromFile() { [native code] }
Assign: function Assign() { [native code] }
Clear: function Clear() { [native code] }
Date: [object Undefined]
Str: [object Undefined]
Float: [object Undefined]
Int: [object Undefined]
Bool: [object Undefined]
Nodes: [object Undefined]
DataSize: 0
AsString:
AsFloat: 0
AsInteger: 0
AsBool: false
Value: undefined
RecursiveCount: 6
Count: 1
Owner: undefined
Doc: [object Undefined]
Name: Params
Delete: function Delete() { [native code] }
Complexity: function Complexity() { [native code] }
NodeNew: function NodeNew() { [native code] }
FindNode: function FindNode() { [native code] }
FindOrCreate: function FindOrCreate() { [native code] }
NodesClear: function NodesClear() { [native code] }
DeleteNode: function DeleteNode() { [native code] }
Search: function Search() { [native code] }
SearchPath: function SearchPath() { [native code] }
QueryValue: function QueryValue() { [native code] }
QueryNode: function QueryNode() { [native code] }
QueryNewNode: function QueryNewNode() { [native code] }
SetData: function SetData() { [native code] }
GetData: function GetData() { [native code] }
GetDataStream: function GetDataStream() { [native code] }
SaveStrings: function SaveStrings() { [native code] }
LoadStrings: function LoadStrings() { [native code] }
IsEmpty: function IsEmpty() { [native code] }
WriteVariant: function WriteVariant() { [native code] }
OverwriteVariant: function OverwriteVariant() { [native code] }
ReadVariant: function ReadVariant() { [native code] }
WriteBool: function WriteBool() { [native code] }
OverwriteBool: function OverwriteBool() { [native code] }
ReadBool: function ReadBool() { [native code] }
WriteInteger: function WriteInteger() { [native code] }
OverwriteInteger: function OverwriteInteger() { [native code] }
ReadInteger: function ReadInteger() { [native code] }
WriteFloat: function WriteFloat() { [native code] }
OverwriteFloat: function OverwriteFloat() { [native code] }
ReadFloat: function ReadFloat() { [native code] }
WriteString: function WriteString() { [native code] }
OverwriteString: function OverwriteString() { [native code] }
ReadString: function ReadString() { [native code] }
WriteDateTime: function WriteDateTime() { [native code] }
OverwriteDateTime: function OverwriteDateTime() { [native code] }
ReadDateTime: function ReadDateTime() { [native code] }
WriteData: function WriteData() { [native code] }
ReadData: function ReadData() { [native code] }
WriteObject: function WriteObject() { [native code] }
ReadObject: function ReadObject() { [native code] }
AddChildrenFromNode: function AddChildrenFromNode() { [native code] }
AssignChildren: function AssignChildren() { [native code] }
WriteAsXml: function WriteAsXml() { [native code] }
Compare: function Compare() { [native code] }
Подскажите пожалуйста.
В скриптах БМ реализовано выбор точки на сцене, а если мне необходимо выделить грань или плоскость с подсветкой этого выбираемого элемента то как быть? Т.е при наведении курсора на ребро подсвечивалось ближайшее к курсору ребро.
Можно ли это как то реализовать скриптами?
Я нашел только функцию GetEdge. но она не выделяет ребра и при этом выбирает непонятно какое ребро.
В задаче у меня стоит построить багеты на корпусе, вот и хочу сначала построить контур, а потом по этому контуру строить багеты с запилами.
Подскажите пожалуйста.
В скриптах БМ реализовано выбор точки на сцене, а если мне необходимо выделить грань или плоскость с подсветкой этого выбираемого элемента то как быть? Т.е при наведении курсора на ребро подсвечивалось ближайшее к курсору ребро.
Можно ли это как то реализовать скриптами?
Я нашел только функцию GetEdge. но она не выделяет ребра и при этом выбирает непонятно какое ребро.
В задаче у меня стоит построить багеты на корпусе, вот и хочу сначала построить контур, а потом по этому контуру строить багеты с запилами.
прям чтоб после указания ребро оставалось выделенным или подсвеченным у меня не получилось.
возможно вам поможет:
выбрать любое ребро, любого объекта:
GetEdge('укажите ребро (этот текст не обязателен, можно использовать пустые кавычки)', Model);
ссылка на любое ребро, для получения дальнейшей инфы:
var edge = GetEdge('', Model);
дальше можно получить данные:
edge.EdgeType - бывает 1-линия, 2-дуга, 3-круг
edge.First = координата первой точки в 3д пространстве (т.е. нужно использовать edge.First.x для получения координат по оси x, ну и т.д.)
edge.Last = координата последней точки в 3д пространстве
ну и т.д. и т.п.
общий список свойств и методов для edge:
[object T3DEdge].GVertices =
[object T3DEdge].Vertices =
[object T3DEdge].GLast =
[object T3DEdge].GFirst =
[object T3DEdge].Last =
[object T3DEdge].First =
[object T3DEdge].VertList =
[object T3DEdge].Length =
[object T3DEdge].Count =
[object T3DEdge].DynamicEdge =
[object T3DEdge].Color =
[object T3DEdge].Owner =
[object T3DEdge].EdgeType =
[object T3DEdge].Assign =
[object T3DEdge].Clone =
[object T3DEdge].CloneWOOwner =
[object T3DEdge].Dir =
[object T3DEdge].GDir =
[object T3DEdge].AddVertex =
[object T3DEdge].InvertDirection =
[object T3DEdge].Transform =
[object T3DEdge].DrawLines =
__________________ Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
Всем привет. Подскажите. Можно ли в пространстве модели создать произвольное отверстие , задав его диаметр, глубину, вектор направления и точку начала?
Всем привет. Подскажите. Можно ли в пространстве модели создать произвольное отверстие , задав его диаметр, глубину, вектор направления и точку начала?
задавался этим вопросом... просто создать в модели отверстие нельзя, т.к. отверстие это свойство фурнитуры.
как с нуля создать фурнитуру так и не узнал.
в итоге при необходимости:
есть файл фурнитуры в которой нет ничего, пустая модель фурнитуры.
подгружаю ее в модель.
у объекта "фурнитура" есть свойство Holes, которое отвечает за отверстия.
через него можно добавить отверстие методом - фурнитура.Holes.NewHole();
создаю ссылку на это отверстие;
далее задаю этому отверстию тип, позицию, направление, глубину, диаметр.
перестраиваю фурнитуру, чтоб зафиксить изменения.
вуаля.
естественно изначально "пустая фурнитура" ставиться в ноль ГСК с нулем градусов по осям.
далее можно играть, либо смещать и поворачивать саму фурнитуру, а отверстия строить с "базовым" расположением/направлением, либо фурнитуру ставить в "нуле" и играть чисто позицией отверстия и его направлением. это уже решается стаднартно через ...ToGlobal(...), ...ToObject(....) ну и т.д.
примитивный скрипт и "пустая фурнитура" для него во влож.
__________________ Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
задавался этим вопросом... просто создать в модели отверстие нельзя, т.к. отверстие это свойство фурнитуры.
Благодарю вас за ответ. Я хотел бы что бы мы с вами этот вопрос продолжили "раскуривать" в соседней ветке . Вопрос был наводящий на более глобальный вопрос по написанию скрипта поиска "проблемных деталей" и обработке таких деталей в модели перед базис ЧПУ.