Форум профессиональных мебельщиков PROMEBELclub

Форум профессиональных мебельщиков PROMEBELclub (https://промебельклуб.рф/forum/index.php)
-   Базис-мебельщик. Скрипты (https://промебельклуб.рф/forum/forumdisplay.php?f=273)
-   -   БАЗИС 10 - Скрипты (https://промебельклуб.рф/forum/showthread.php?t=12463)

Letos 18.02.2019 09:43

Цитата:

Сообщение от Карякин (Сообщение 471567)
Товарищи специалисты! помогите советом. Отверстия одного диаметра глухие и сквозные у нас по одной цене, но для диаметра 5 мм есть еще метка (5*2) В операциях нашел Пользовательские вычисляемые, "придумал" формулу- (все глухие 5мм+все сквозные 5 мм)-отверстия 5*2, а какие команды использовать в скрипте не пойму. беру параметры с модели, просто складываю, использую оператор var, все равно не видит и не считает. Помогите,пожалуйста.

Я так понимаю, вы про скрипты в смете? Тогда конечный результат выполнения скрипта надо записывать в переменную Result.

Letos 18.02.2019 09:59

Цитата:

Сообщение от IStiv (Сообщение 471534)
это понятно.так же можно и со свойствами. но загвоздка в том что нужно для функций а-ля "для каждой панели сделать то то" - везде проверять видимость для панелей. и для блоков. и для фурнитуры. а я накодил уже кучу и "впихивать" сейчас эти проверки в 15 местах по всему приложению не хочется. а задача простая - исключить из обработки блоки с определенными именами.
идеально было некое свойство" не доступен для скрипта" отключил/включил.и чтобы для блока , это на все дерево вниз распостранялось.
если никакого фокуса нет. буду "городить" с Visible или свойствами*PARDON*

Есть ещё такая заморочка: перед обработкой можно объекты, которые не нужно обрабатывать, запихнуть во временную область модели, тогда перебором по модели они не будут доступны. После обработки их надо будет вернуть на место. В примере ниже берутся объекты из корня модели и если объект невидимый, запоминается положение объекта в иерархии (блок, в который он вложен) и он перемещается во временную область модели. В конце скрипта объекты возвращаются на своё место в иерархии модели.
Код:

// Массив соответствий объекта и блока (или корня модели), в который он вложен
var restore = [];

// Все невидимые объекты в корне модели перемещаем во временную область модели,
// чтобы исключить их из обработки
for (var i = 0; i < Model.Count; i++){
    var obj = Model[i];
    if (!obj.Visible){
        restore.push([obj, obj.Owner]);
        obj.Owner = Model.Temp;
    }
}

// Здесь какой-то основной код

// Восстанавливаем объекты обратно в модель в нужное место по иерархии
for (var i = 0; i < restore.length; i++){
    var item = restore[i];
    item[0].Owner = item[1];
}


IStiv 21.02.2019 19:31

Цитата:

Сообщение от Letos (Сообщение 471570)
перед обработкой можно объекты, которые не нужно обрабатывать, запихнуть во временную область модели, тогда перебором по модели они не будут доступны. После обработки их надо будет вернуть на место.

спасибо, интересное решение.
Action.Commit(); - очищает Model.Temp ?

а какое свойство отвечает за порядок Childrens в поддереве относительно Owner?
после восстановления хотелось бы вернуть элемент точно на то место где он был. сейчас он "падает" вниз в поддереве.

wizardpnz 21.02.2019 21:54

Цитата:

Сообщение от Letos (Сообщение 471569)
Я так понимаю, вы про скрипты в смете? Тогда конечный результат выполнения скрипта надо записывать в переменную Result.

Можно результат базис сметы получить в основном скрипте?

Letos 22.02.2019 12:47

Цитата:

Сообщение от IStiv (Сообщение 471778)
спасибо, интересное решение.
Action.Commit(); - очищает Model.Temp ?

а какое свойство отвечает за порядок Childrens в поддереве относительно Owner?
после восстановления хотелось бы вернуть элемент точно на то место где он был. сейчас он "падает" вниз в поддереве.

Action.Commit() переносит все ВИДИМЫЕ объекты из временной области в корень модели, и очищает временную область.

За порядок расположения в блоке отвечает порядок добавления объектов в блок. Нашёл ещё свойство OwnerIndex, но оно меняет местами текущий объект с тем, индекс которого указан. Например:
Код:

Model[1].OwnerIndex = 2;
Этот код поменяет местами в корне модели второй и третий объекты.

Чтобы вставить на прежнюю позицию объект, можно добавить его как обычно на последнее место, а потом в цикле менять его местами с предыдущим объектом в блоке, пока нужный объект не встанет на своё место. Например:
Код:

var Owner = Model;
var neededIndex = 1;
var ownerCount = Owner.Count;
for (var i = ownerCount - 1; i > neededIndex; i--){
  Owner[i].OwnerIndex = Owner[i].OwnerIndex - 1;
}

Этот код вставит последний объект в корне модели на вторую позицию. Все объекты ниже просто сместятся на одну позицию вниз.

Letos 22.02.2019 12:50

Цитата:

Сообщение от wizardpnz (Сообщение 471780)
Можно результат базис сметы получить в основном скрипте?

Если под основным скриптом вы имеете в виду скрипт в Мебельщике, то нет.

v22884 24.02.2019 09:18

Вложений: 1
Каркас привязки 3x3 относительно панели.

Для тех кому знакомы фасады, Арткам, некоторые программы траекторий для станков ЧПУ.

Скрытый текст




pr = Action.Properties
Priviazka = pr.NewSelector('Привязка',"○")
Priviazka.OnClick= function(){
VybratPriviazku()
}

dx = pr.NewNumber('dx')
dy = pr.NewNumber('dy')


Action.Continue()

function VybratPriviazku()
{
//-- window Window1
Window1 = { Form : NewForm() };
Props = Window1.Form.Properties;
Window1.Form.Width = 100;
Window1.Form.Height = 157;
Window1.Form.Caption = "Привязка";
//Window1.Form.MinHeight = 150;
//Window1.Form.MinWidth = 100;
Window1.Form.MinWidth = 100;
Window1.Form.Dockable = false;
Window1.Form.Resizable = true;
//-- window Window1 properties

Window1.LV = Props.NewButton("↖");
Window1.LV.SetLayout(5, 5, 30, 30);
Window1.V = Props.NewButton("↑");
Window1.V.SetLayout(35, 5, 30, 30);
Window1.PV = Props.NewButton("↗");
Window1.PV.SetLayout(65, 5, 30, 30);


Window1.L = Props.NewButton("←");
Window1.L.SetLayout(5, 35, 30, 30);
Window1.C = Props.NewButton("○");
Window1.C.SetLayout(35, 35, 30, 30);
Window1.P = Props.NewButton("→");
Window1.P.SetLayout(65, 35, 30, 30);


Window1.LN = Props.NewButton("↙");
Window1.LN.SetLayout(5, 65, 30, 30);
Window1.N = Props.NewButton("↓");
Window1.N.SetLayout(35, 65, 30, 30);
Window1.PN = Props.NewButton("↘");
Window1.PN.SetLayout(65, 65, 30, 30);
//-- window Window1 events

Window1.LV.OnClick = function(){Priviazka.Value = "↖"; Window1.Form.Close()}
Window1.V.OnClick = function(){Priviazka.Value = "↑"; Window1.Form.Close()}
Window1.PV.OnClick = function(){Priviazka.Value = "↗"; Window1.Form.Close()}

Window1.L.OnClick = function(){Priviazka.Value = "←"; Window1.Form.Close()}
Window1.C.OnClick = function(){Priviazka.Value = "○"; Window1.Form.Close()}
Window1.P.OnClick = function(){Priviazka.Value = "→"; Window1.Form.Close()}

Window1.LN.OnClick = function(){Priviazka.Value = "↙"; Window1.Form.Close()}
Window1.N.OnClick = function(){Priviazka.Value = "↓"; Window1.Form.Close()}
Window1.PN.OnClick = function(){Priviazka.Value = "↘"; Window1.Form.Close()}

//-- window Window1 ends
Window1.Form.ShowModal();
}
[свернуть]

wizardpnz 25.02.2019 08:58

как узнать что панель погонная а не площадная?

Letos 25.02.2019 09:51

Цитата:

Сообщение от wizardpnz (Сообщение 471904)
как узнать что панель погонная а не площадная?

В свойствах материала панели не нашёл такого флага. Хотя у панели есть свойство MaterialWidth - ширина панели. Может я что не так делаю, но я поставил материал столешницы шириной 600 и свойство MaterialWidth возвращает -1 и в самом мебельщике в свойствах панели в подменю материал в поле "погонный" пишет "нет". Либо я косячу, либо Мебельщик. Но я думаю, что при настроенной базе можно по положительному значению MaterialWidth определить, является ли материал погонным.

Igor_482 28.02.2019 19:12

Цитата:

Сообщение от Letos (Сообщение 471906)
по положительному значению MaterialWidth определить, является ли материал погонным

Так и есть, ранее, в другой ветке упоминал об этом (п.1 сообщения), объекта флага типа материала панели тоже не нашел. Если MaterialWidth <= 0 - это площадной материал, если MaterialWidth > 0 - погонный.


Текущее время: 10:50. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL