БАЗИС 11-2024 - Скрипты
Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11: ..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11. ..... 52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д. 53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели. ..... Новшества Базис Мебельщик версии 2021: 16. Отладчик скриптов. Новшества Базис Мебельщик версии 2024: 5.«Использовать новый движок скриптов (в бета-тесте)» - Node.js v20.2.0 https://files.catbox.moe/o5vr9e.png [youtube]dThvA0BjKZ0[/youtube] [youtube]5D66vo3AeWg[/youtube] VISUAL CODE [youtube]8Ak-BFBlrjs[/youtube] [youtube]wCgG-5uUkIU[/youtube] Код:
Примеры скриптов из видео Напиши себе Базис или Моя первая тумбочка 2 Комплект - руководство+ файлы+ скрипт |
:(эм...а по API изменений нет?
|
Цитата:
1. так изменения в API все же есть? где найти список? 2. т.е. теперь можно HTTP GET запрос какой нибудь сделать из скрипта? это же же отлично. *THUMBS UP* |
Цитата:
2. Да. И модули асинхронные также должны заработать. Только асинхронность работает пока скрипт жив, соответственно нужно Action.Continue() вызывать. |
Цитата:
Цитата:
|
Цитата:
прикрутили новую Node, асинхронность ) а где в описании нововведений в БАЗИС Мебельщик это написано ? Ткните пожалуйста, может есть документ какой от Базиса. |
Цитата:
Раньше на github можно было глянуть кое-что. - Глобально, для общего ознакомления ченжлог node.js 8.x в интернете посмотрите на профильных ресурсах. |
подскажите как теперь подключаться к firebird
var options = {}; options.host = '127.0.0.1'; options.port = 14357; options.database = "D:\baza.fdb"; options.user = 'SYSDBA'; options.password = 'masterkey'; options.lowercase_keys = false; // set to true to lowercase keys options.role = null; // default options.pageSize = 4096; // default when creating database var Firebird = require('node-firebird'); Firebird.attach(options, function(err, db) { if (err) throw err; db.query('SELECT * FROM MATERIAL', function(err, result) { db.detach(); }); }); не работает https://developer.mozilla.org/ru/doc...bjects/Boolean жесть они отключили стандартную функцию Boolean в 10 работает в 11 нет))) пришлось вставить костыль в node-firebird, хз насколько правильно я понял работу Boolean function Boolean(obj){ return !!obj } excelljs тоже не пашет |
Цитата:
2. Посмотрел стандартные типы - Boolean действительно объект, а не функция. Остальные типы (Number, Object, Array, Error, Function, Date) вроде функции-конструкторы. Погуглил информацию - нигде нет упоминания того, что Boolean - объект, а не функция-конструктор, так что это, скорее всего, проблема БМ. 3. А в exceljs какая ошибка? Поможет ли переустановка модуля? |
там много букв сейчас курю excell4node вроде работает
теперь вопрос как подключить visual studio code к Б11 |
Цитата:
Скрытый текстPHP код:
[свернуть] Где
НО: При отладке скрипта в уже запущенном базисе у меня произошло следующее - скрипт остановился на первой точке останова (на первой же строке), через пару мгновений забил на нёё и продолжил выполнение. Через раз сыпятся аксессы. Если запускать с выключенным БМ (то есть, VSCode запускает БМ и при завершении/отмене скрипта грохает процесс БМ), то всё нормально. |
Model.forEach(function (obj) {
if (obj instanceof TFastener) console.log(obj.Name) }); зависает если много предметов на сцене, или много нельзя в консоль посылать? Добавлено через 15 минут [INSPECTOR_ASYNC_STACK_TRACES_NOT_AVAILABLE] Warning: Warning: Async stack traces in debugger are not available on 32bit platforms. The feature is disabled. ругается((( |
Цитата:
PHP код:
PHP код:
|
блин а ведь люди скрипты за деньги заказывают теперь все заглючит у многих
я как бы сам писал на работе за ЗП, а теперь опять время тратить, а шефу платить |
Вложений: 1
Код HTML:
var Excel = require('exceljs'); |
Цитата:
Код:
Boolean = function(val){ PHP код:
|
фуууууууух заработало
ещё при отладке нельзя много писать в консольлог, иначе виснет |
Коллеги, здравствуйте.
Подскажите участок кода, который позволяет выбрать плоскость панели и поместить на нее фрагмент из внешнего файла, который будет подогнан под габариты этой плоскости. Как бы облицевать плоскость фрагментом. Еще интересует вывод имени "Типа" блока, к которому принадлежит выделяемая панель с плоскостью. Как до него добраться через скрипт? |
синхронные вызовы
всем привет.
A синхронные функции не могли же сломаться в БМ 11 или могли?:( тестирую на простом случае, всякие fs.writeFileSync() все вроде норм, но на реальном скрипте с большой логикой тот же fs.writeFileSync() не отрабатывает . Однако если идти отладчиком, пошагово , я так понимаю вызовы "успевают" выполняться и fs.writeFileSync() отрабатывает. Скрытый текстPHP код:
[свернуть] Добавлено через 25 минут Цитата:
все объекты выше в дереве модели можно получить через .Owner Скрытый текстPHP код:
[свернуть] |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Одно серьёзное замечание: в рекурсивном вызове функции вы не передаёте строку записи, поэтому во всех файлах кроме test.txt пишется undefined. З.Ы. Перечитал ещё раз сообщение - у вас приведённый скрипт тоже нормально отрабатывает, и только на "боевом" скрипте нет? Может объём данных большой? Попробуйте запустить ваш реальный скрипт , но в файл писать маленькие строки, изменится ли что? После выполнения скрипта, лог какие-нибудь ошибки выдаёт? Я так понимаю, в 10 версии всё нормально работает? |
Цитата:
2. объем данных..ну 20строк ,вроде не от этого зависит. 3. лог пустой , падает где то в дебрях 'fs'. 4. На 10 норм было, поставил 11 перестало работать, снес - не помогло. в какую сторону смотреть, как то не понятно. Еще момент. паралельно стоит node.js v10.15.3 (и ранее стояла) может это как то влияет. p.s. мне кстати не понятно, как скрипт определяет на каком движке выполняться в какой момент это происходит. |
Цитата:
Цитата:
З.Ы. Ещё возможная проблема - функция Boolean, которая может где-то в скрипте использоваться, но в 11 версии она является объектом. Попробуйте в начало скрипта добавить PHP код:
|
Всем привет. Как скриптом в 3D реализовать: выделить ребро, затем скрипт наносит размер этого ребра на видимую плоскость панели вдоль этого ребра в пару миллиметрах от него? Голову уже сломал, не получается...
|
Цитата:
PHP код:
|
Цитата:
|
на форме не работают выпадающие списки http://prntscr.com/psm4pc заданные .ComboItems . никто не сталкивался с этим?
|
Цитата:
PHP код:
|
теперь значение чекбокса в форме нужно писать без кавычек http://prntscr.com/psqwzx
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
2. По коду не нашёл ничего похожего на настройку "со стрелками или без", не знаю, есть ли вообще возможность убрать стрелки у размера. |
Всем привет. Может кто знает, как скриптом выделить несколько панелей(может и больше) и подсчитать их площадь. Пробовал через for, не получается. Спасибо.
|
Цитата:
PHP код:
2. Подсчёт площади - серьёзная вещь. Простой способ - перемножить ширину на длину, например Выдать площадь выделенной панели в метрах квадратныхPHP код:
[свернуть] Способ сложнее - считать площадь по элементам контура. Этого пока вроде никто не делал. |
после запуска скрипта - форма(не модальная) с кнопкой "вычислить"(это сам сделаю), выделяю панели(какие необходимы для просчёта), нажимаю кнопку, алерт - площадь...(тоже сам). Не получается у меня что то.
Добавлено через 2 минуты Цитата:
|
в 10-тке работал, в 11 выдает кучу ошибок
подскажите в чем может быть дело
Скрытый текстFileOptions = 'blum Box.xml'; MakeProperties(); NewBtn = NewButtonInput('APLICA'); NewBtn.OnChange = function() { Action.Commit(); Action.OnFinish = function() { Action.Properties.Save(FileOptions); } Action.Finish(); } Action.Properties.Load(FileOptions); function MakeProperties() { Prop = Action.Properties; Tip = Prop.NewCombo('Tip Box', 'TandemBox plus\nTandembox Antaro\nLegrabox') T = Prop.NewImage('TandemBOX', 'Antaro.png') L = Prop.NewImage('Legrabox', 'Legrabox.png') Num = Prop.NewNumber('Numar Sertare',1) HSertar = Prop.NewCombo('H-Sertar', 'M\nB-C\nF'); Spate = Prop.NewCombo('Tip Spate', 'PAL\nMetal') Adancime = Prop.NewNumber('Adancime',500); Material = Prop.NewMaterial('Material'); Cant = Prop.NewButt('Cant'); OkBtn = Prop.NewButton('Executa'); //Обработка нажатия на кнопку Построить OkBtn.OnClick = function() { Action.OnFinish = function() { Action.Properties.Save(FileOptions); } Action.Finish(); } Prop.OnChange = function(){ Make()} } SetCamera(p3dFront); LeftPanel = GetPanel('Укажите левую панель'); RightPanel = GetPanel('Укажите правую панель'); Left = LeftPanel.GabMax.x; Right = RightPanel.GabMin.x; Top = GetEdge('Укажите верхнюю границу', AxisX).First.y; Bottom = GetEdge('Укажите нижнюю границу', AxisX).First.y; SetCamera(p3dLeft); Front = GetEdge('Укажите переднюю границу', AxisY).First.z; Make() function Make(){ T.Visible = true L.Visible = true DeleteNewObjects() if (Tip.ItemIndex ==1){ NL = 24 LWspt = 87 Lwfund = 75 M = 84 C = 167 D = 199 } if (Tip.ItemIndex ==0){ NL = 24 LWspt = 87 Lwfund = 75 M = 84 B = 135 D = 199 } if (Tip.ItemIndex ==2){ NL = 10 LWspt = 38 Lwfund = 35 M = 63 C = 148 F = 212 } Material.SetActive() Count = Num.Value; Thick = ActiveMaterial.Thickness; function Glisiere(){ if (Tip.ItemIndex == 1){ if (Adancime.Value ==500){ if (HSertar.ItemIndex==1){ GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, L.fr3d') GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, R.fr3d') }} if (Adancime.Value ==400){ if (HSertar.ItemIndex==1){ GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, L.fr3d') GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, R.fr3d') }}} if (Tip.ItemIndex == 2){ if (Adancime.Value ==500){ if (HSertar.ItemIndex==0){ GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, L.FR3D') GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, R.FR3D') } if (HSertar.ItemIndex==1){ GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, L.FR3D') GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, R.FR3D') } if (HSertar.ItemIndex==2){ GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, L.FR3D') GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, R.FR3D') } } } GlisieraL.Mount1(LeftPanel, Left, PosY + Thick, Front, 0) GlisieraR.Mount1(RightPanel, Right - Thick, PosY + Thick, Front, 0) } function FaltL16(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(0, 0, 0, -Adancime.Value+NL) Cut.Contour.AddRectangle(0, 0, 38, 8) Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL); } function FaltR16(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL) Cut.Contour.AddRectangle(0, 0, -38, 8) //Cut.Contour.AddRectangle(0, 18, 12, 16) Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL); } function FaltTL(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(0, 0, 0, -Adancime.Value+NL) Paz = Cut.Contour Paz.AddRectangle(0, 0, 16, 2) Cut.Name = 'Falt L ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL); } function FaltTR(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL) Paz = Cut.Contour Paz.AddRectangle(0, 0, -16, 2) Cut.Name = 'Falt R ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL); } function FaltL18(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(0, 0, 0, -Adancime.Value+NL) Paz = Cut.Contour Paz.AddLine(0, 0, 0, 10) Paz.AddLine(0, 10, 38, 10) Paz.AddLine(38, 10, 38, 2) Paz.AddLine(38, 2, 54, 2) Paz.AddLine(54, 2, 54, 0) Paz.AddLine(54, 0, 0, 0) Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL); } function FaltR18(){ Cut = Fund.AddCut() Traj= Cut.Trajectory Traj.AddLine(0, 0, 0, -Adancime.Value+NL) Paz = Cut.Contour Paz.AddLine(Fund.GSize.x, 0, Fund.GSize.x, 10) Paz.AddLine(Fund.GSize.x, 10, Fund.GSize.x-38, 10) Paz.AddLine(Fund.GSize.x-38, 10, Fund.GSize.x-38, 2) Paz.AddLine(Fund.GSize.x-38, 2, Fund.GSize.x-54, 2) Paz.AddLine(Fund.GSize.x-54, 2, Fund.GSize.x-54, 0) Paz.AddLine(Fund.GSize.x-54, 0, Fund.GSize.x, 0) Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL); } function abs(){ for (var c = 0; c < 4; c++) { SpateP.AddButt(Cant, c) Fund.AddButt(Cant, c)} } PosY = Bottom; SectionHeight = Top - Bottom; if (HSertar.ItemIndex==0) { Hbox = M HboxN = 'M'} if (HSertar.ItemIndex==1) { if (Tip.ItemIndex ==0){ Hbox = C HboxN = 'C' } if (Tip.ItemIndex ==1){ Hbox = C HboxN = 'Plus B'} if (Tip.ItemIndex ==2){ Hbox = C HboxN = 'C'} } if (HSertar.ItemIndex==2) { if (Tip.ItemIndex ==0){ Hbox = D HboxN = 'D'} if (Tip.ItemIndex ==1){ Hbox = D HboxN = 'Plus D'} if (Tip.ItemIndex ==2){ Hbox = F HboxN = 'F'} } YInc = (SectionHeight - Count * Hbox) / (Count + 1); for (var k = 0; k < Count; k++) { PosY += YInc; Block = BeginParametricBlock() if (Tip.ItemIndex ==1){ T.Visible = true L.Visible = false Block.Name = ('Tandembox ' + HboxN + ' la '+ Adancime.Value ) if (HSertar.ItemIndex ==0) { Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar' ; SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + M, Front - Adancime.Value + NL - Thick); SpateP.Name = 'Spate Sertar' ; } ; if (HSertar.ItemIndex ==1) { Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar' ; SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + C, Front - Adancime.Value + NL - Thick); SpateP.Name = 'Spate Sertar' ; }; if (HSertar.ItemIndex ==2) { Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar' ; SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + D, Front - Adancime.Value + NL - Thick); SpateP.Name = 'Spate Sertar' ; }; if (Material.Thickness > 16){ FaltTL() FaltTR() } }; if (Tip.ItemIndex ==2){ L.Visible = true T.Visible = false Block.Name = ('Legrabox ' + HboxN + ' la '+ Adancime.Value ) if(HSertar.ItemIndex ==0) { Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar'; SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + M + Thick, Front - Adancime.Value + NL); SpateP.Name = 'Spate Sertar'; }; if(HSertar.ItemIndex ==1){ Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar'; SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + C + Thick, Front - Adancime.Value + NL); SpateP.Name = 'Spate Sertar'; }; if(HSertar.ItemIndex ==2){ Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY); Fund.Name = 'Fund Sertar'; SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + F + Thick, Front - Adancime.Value + NL); SpateP.Name = 'Spate Sertar'; }; if (Material.Thickness < 18){ FaltL16() FaltR16() } else{ FaltL18() FaltR18() } } Glisiere() abs() Fund.Build(); SpateP.Build(); PosY += Hbox; EndParametricBlock() } SetCamera(p3dFront);} Action.Continue() [свернуть] Добавлено через 14 минут Добавлено через 2 минуты Цитата:
Скрытый текстMakeProperties(); function MakeProperties() { Prop = Action.Properties; OkBtn = Prop.NewButton('Расчитать'); OkBtn.OnClick = function() { alert((weight).toFixed(2) + 'm²'); } OkBtn = Prop.NewButton('Закончить'); OkBtn.OnClick = function() { Action.Finish()() } var weight = 0; { i=0 while (i<10) { panel = GetPanel("Alege Panou"); if (panel.AsPanel) { weight = weight + ((panel.Contour.Width) /1000) *((panel.Contour.Height) /1000 ) } } } } [свернуть] |
Цитата:
|
Цитата:
if (Tip.ItemIndex == 0){ в котором назначается GlisieraL и GlisieraR |
Текущее время: 03:04. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL