Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: руководителей мебельных предприятий, конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к мебельному бизнесу. Программы для конструирования мебели, дизайна, для комплексной автоматизации мебельного предприятия. Мебельная литература и обучающие пособия.
 
 
Внимание! Если Вы владелец или управляющий мебельным бизнесом и Ваша деятельность ведется в одной из стран ТС - тогда специально для Вас на нашем форуме создан закрытый раздел Предприниматель. Вступайте в группу Предприниматель и общайтесь, ищите партнеров и реализуйте совместные взаимовыгодные проекты. Подать заявку на вступление в группу Предприниматель можно в личном кабинете.

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты


Реклама на портале PROMEBELclub
шкаф-купе со скидкой по акции
Реклама на портале PROMEBELclub

искусственный камень Мебель196. Мебельный интернет-магазин в Екатеринбурге.
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 11:22  
БАЗИС 8 - Скрипты
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 142

Сказал(а) спасибо: 31
Поблагодарили 618 раз(а) в 81 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 13.01.2014, 11:22
Рейтинг: (6 голосов - 5.00 средняя оценка)

ВНИМАНИЕ! Правила выкладывания скриптов.

1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.

2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.


Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.

__________________________________________________ _______________

Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.

Новое в скриптописании для БМ:

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

while (true)
Вот полный список новшеств, добавленных в скрипты с момента их выхода:

14 декабря 2014

Добавлена поддержка эластичных блоков

List3D : {
IsElastic: new HDefinition("?Boolean:", 'Являетсяли объект эластичным'),
ElasticResize: new HDefinition("?Vector:newSize", 'Растянуть объект до требуемых размеров'),
}

27 ноября 2014

Вспомогательные геометрические алгоритмы, реализованы в глобальном объекте geometry

geometry : new HDefinition("Geometry2D", 'Вспомогательные геометрические функции'),

Geometry2D : {
Intersect: new HDefinition("?Array.<Point>:elem1,elem2", 'Вычислить точки пересечения двухмерных элементов'),
Compare: new HDefinition("?Boolean:elem1,elem2", 'Сравнить элементы'),
Distance: new HDefinition("?Number:elem1,elem2", 'Найти кратчайшее расстояние между элементами'),
Area: new HDefinition("?Number:contour", 'Найти площадь контура')
}

17 ноября 2014

Работа с пользовательскими свойствами

Object3 : {
UserPropCount: new HDefinition("Number", 'Количество пользовательских свойств'),
UserProperty: new HDefinition('Array.<Object>', 'Значение свойства по его имени или индексу'),
UserPropertyName: new HDefinition('Array.<String>', 'Названия свойств')
}

Новые элементы управления на панели свойств

ScriptProperty: {
NewColor: new HDefinition("?ScriptColorProperty:'Название'", 'Создать свойство типа цвет'),
NewSeparator: new HDefinition("?ScriptProperty", 'Создать разделитель')
}

ScriptColorProperty: {
Value: new HDefinition("Number")
},

----------------------------------------------------------------------------------------------------
29 сентября 2014

system.apiVersion = 90 -> Bazis9
system.apiVersion = 85 -> Bazis8

----------------------------------------------------------------------------------------------------
15 сентября 2014

Contour2D : {
Min: new HDefinition("Point", 'Левый нижний угол охватывающего прямоугольника'),
Max: new HDefinition("Point", 'Правый верхний угол охватывающего прямоугольника'),
AddEquidistant : new HDefinition("?undefined:contour,offset,false,false", 'Добавить эквидистанту контура. Последние 2 параметры отвечают за направление и скругление')
}

ScriptProperty: {
OnDeactivate : new HDefinition("Function", 'Обработчик деактивации свойства или меню'),
OnValueValidate : new HDefinition("Function", 'Проверка корректности значения'),
ValueValid: new HDefinition("Boolean", 'Флаг корректности введенного значения, выставляется обработчиком OnValueValidate'),
Validate: new HDefinition("?Boolean:", 'Проверить значение свойства и вложенных свойств')
}

----------------------------------------------------------------------------------------------------
2 сентября 2014

ScriptProperty: {
NameEditable: new HDefinition("Boolean", 'Разрешить редактирование имени (для создания таблиц)'),
NewSeparator: new HDefinition("?ScriptProperty", 'Создать разделитель')
}

----------------------------------------------------------------------------------------------------
9 августа 2014

Добавлены подменю в кнопки

InButton : {
NewSubMenu : new HDefinition('?InButton:"Меню"', 'Создать подменю'),
Combo: new Definition("Boolean", 'Отдельная стрелка для подменю')
},

Добавлены всплывающие меню и цвет фона для всех свойств. Созданы обработчики активации и изменения свойства.
Прежнее событие OnChange срабатывало не только при изменении самого параметра, но и при изменении дочерних свойств.
OnValueChange срабатывает только при изменении значения свойства.

ScriptProperty: {
BackColor: new HDefinition("Number", 'Цвет фона'),
PopupMenu: new HDefinition("ScriptMenu", 'Всплывающее меню'),
OnActivate : new HDefinition("Function", 'Обработчик активации свойства пользователем'),
OnValueChange : new HDefinition("Function", 'Обработчик изменения свойства')
Tag: new HDefinition("Number", 'Пользовательское число'),
}

Добавлено выпадающее меню:

ScriptProperty: {
DropDownMenu: new HDefinition("ScriptMenu", 'Выпадающее меню')
}

----------------------------------------------------------------------------------------------------
21 апреля 2014:

Добавлены свойства и методы:

ScriptMaterialProperty: {
Width: new HDefinition("Number", "Ширина листа"),
}

ScriptButtProperty: {
Thickness: new HDefinition("Number", "Толщина кромки"),
Width: new HDefinition("Number", "Ширина ленты"),
}

Contour2D : {
IsPointInside: new HDefinition("?Boolean:x,y", "Находится ли точка внутри контура?"),
IsInContour: new HDefinition("?Boolean:contour", "Находится ли контур внутри другого?"),
IsClosedContour: new HDefinition("?Boolean:", "Является ли контур замкнутым?"),
IsContourRectangle: new HDefinition("?Boolean:", "Является ли контур прямоугольным?"),
OrderContours: new HDefinition("?Boolean:true", "Упорядочить элементы контура в одном направлении")
}


----------------------------------------------------------------------------------------------------
6 февраля 2014

Реализовано подключение и вызов функций COM и OLE объектов

ScriptProperty : {
Expanded: new HDefinition("Boolean", 'Развернуты ли вложенные свойства')
}

Добавлен метод:
NewCOMObject: new HDefinition("?IDispatch:'CLSID'", 'Создать новый COM объект по его типу')
[свернуть]

Нажмите на изображение для увеличения
Название: Базис.jpg
Просмотров: 872
Размер:	36.4 Кб
ID:	86248

Обратите внимание на полезные ответы в этой теме!


Последний раз редактировалось systland; 26.12.2017 в 10:52.. Причина: Добавил объявление.
Просмотров: 552053
Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
Beard (20.06.2017), female (15.01.2016), Kerby (21.11.2015), v22884 (04.11.2014)
Старый 28.05.2018, 10:16   #981
AndriyVavilon
Новичок
 
Регистрация: 28.05.2018
Сообщений: 4
Сказал(а) спасибо: 2
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
AndriyVavilon пока не определено
По умолчанию

Доброй поры суток. Возможно ли сделать скрипт который добавлял бы в имя детали имя блока/сборки в котором он состоит? То есть деталь "дно" из блока "А" переименовывалась в "А.дно" и т.д.
AndriyVavilon вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 10:56   #982
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от AndriyVavilon Посмотреть сообщение
Доброй поры суток. Возможно ли сделать скрипт который добавлял бы в имя детали имя блока/сборки в котором он состоит? То есть деталь "дно" из блока "А" переименовывалась в "А.дно" и т.д.
Добрый день. Возможно. А насколько глубокой может быть иерархия? Допустим, если блок "А" вложен в блок "Б", то деталь должна иметь имя "Б.А.дно", или "А.дно"? То есть, учитывать только имя первого вложения, или учитывать все имена вплоть до корня модели?
Letos вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 17:07   #983
AndriyVavilon
Новичок
 
Регистрация: 28.05.2018
Сообщений: 4
Сказал(а) спасибо: 2
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
AndriyVavilon пока не определено
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Допустим, если блок "А" вложен в блок "Б", то деталь должна иметь имя "Б.А.дно", или "А.дно"? То есть, учитывать только имя первого вложения, или учитывать все имена вплоть до корня модели?
Достаточно будет имя одного блока - "А.дно"
AndriyVavilon вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 22:16   #984
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от AndriyVavilon Посмотреть сообщение
Достаточно будет имя одного блока - "А.дно"
Вот пример:
Код:
var delimiter = '.'
function MakeName(obj){
    var owner = obj.Owner;
    return owner.Name + delimiter + obj.Name
}
var obj = Model.Selected;
Undo.Changing(obj);
obj.Name = MakeName(obj);
Выделяете объект, запускаете скрипт, и у выделенного объекта будет новое имя.
Letos вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
AndriyVavilon (29.05.2018), Ovsyanicov (29.05.2018), volunka (29.05.2018)
Старый 29.05.2018, 14:39   #985
AndriyVavilon
Новичок
 
Регистрация: 28.05.2018
Сообщений: 4
Сказал(а) спасибо: 2
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
AndriyVavilon пока не определено
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Выделяете объект, запускаете скрипт, и у выделенного объекта будет новое имя.
Спасибо большое! Только если выделить несколько панелей то переименует только одну, возможно чтоб обрабатывало все выделенные объекты?
AndriyVavilon вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
volunka (30.05.2018)
Старый 29.05.2018, 15:36   #986
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от AndriyVavilon Посмотреть сообщение
Спасибо большое! Только если выделить несколько панелей то переименует только одну, возможно чтоб обрабатывало все выделенные объекты?
Вот более замороченный вариант:
Код:
var delimiter = '.'
function MakeName(obj) {
    var owner = obj.Owner;
    return owner.Name + delimiter + obj.Name
}
function CheckObject(obj) {
    if (obj.AsPanel) {
        Undo.Changing(obj);
        obj.Name = MakeName(obj);
    }else if (obj.List){
        var list = obj.AsList();
        for (var i = 0; i < list.Count; i ++){
            CheckObject(list[i]);
        }
    }
}

for (var i = 0; i < Model.SelectionCount; i++) {
    CheckObject(Model.Selections[i]);
}
Теперь для переименования всех панелей в блоке достаточно выделить блок, а панели внутри него автоматически переименуются. В этом варианте, в отличие от предыдущего, переименовываются только панели (в предыдущем переименовать можно было любой выделенный 3д объект).
Letos вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
AndriyVavilon (30.05.2018), maxgmv (30.05.2018), Ovsyanicov (29.05.2018), Uncle (30.05.2018), zloichik (30.05.2018)
Старый 30.05.2018, 14:39   #987
AndriyVavilon
Новичок
 
Регистрация: 28.05.2018
Сообщений: 4
Сказал(а) спасибо: 2
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
AndriyVavilon пока не определено
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Теперь для переименования всех панелей в блоке достаточно выделить блок, а панели внутри него автоматически переименуются. В этом варианте, в отличие от предыдущего, переименовываются только панели
Еще раз спасибо , то что нужно. Сборщики компании "вавилон" Вам очень благодарны!
AndriyVavilon вне форума   Ответить с цитированием Вверх
Старый 31.05.2018, 12:43   #988
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 89
Сказал(а) спасибо: 47
Поблагодарили 38 раз(а) в 16 сообщениях
Вес репутации: 103
wizardpnz на пути к лучшему
По умолчанию

Цитата:
Сообщение от zerbite Посмотреть сообщение
obj.UserProperty['name']='Фасад';
на панели добавляется но не могу добавить свойство на блок


Код:
SH = BeginParametricBlock('BLOCK');
SH.UserProperty['name']='PROP1';
SH.Build();
EndParametricBlock();
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 31.05.2018, 14:03   #989
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
на панели добавляется но не могу добавить свойство на блок
Проблему можно решить так:
Код:
var my_name = 'TEMPORARY_BLOCK_NAME_123'
//1
SH = BeginParametricBlock(my_name);
SH.Build();
EndParametricBlock();
//2
Action.Commit();
//3
for (var i =0; i < Model.Count; i ++){
  if (Model.Objects[i].Name == my_name){
    obj = Model.Objects[i];
    Undo.Changing(obj);
    obj.Name = 'BLOCK';
    obj.UserProperty['name']='PROP1';
  }
}
my_name - это уникальное имя объекта (чтобы по этому имени его можно было потом найти в модели).
Алгоритм такой:
1. Создается параметрический блок
2. Блок записывается непосредственно в модель
3. В модели находим этот блок по уникальному имени и назначаем ему нормальное имя и те свойства, которые не удалось назначить на этапе создания.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
meg87 (01.06.2018)
Старый 23.07.2018, 15:00   #990
Rafael M
Новичок
 
Регистрация: 19.02.2017
Сообщений: 16
Сказал(а) спасибо: 7
Поблагодарили 27 раз(а) в 3 сообщениях
Вес репутации: 0
Rafael M на пути к лучшему
По умолчанию

Вопрос: Почему при изменении параметров, после нажатия установить 84 строка не определена? Хот

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

Edit = NewNumberInput("Между полками");

FileOptions = 'Установка полок.xml'; //создаем файл настроек

function MakeProperties()
{
Prop = Action.Properties;
Shelf = Prop.NewGroup('Полки');
ShelfMat = Shelf.NewMaterial('Материал полок');
ShVidimPol = Shelf.NewButt('Кромка');


ShelfCount = Prop.NewNumber('Количество', 2);
Orientation = Prop.NewCombo('Направление текстуры:', 'По горизонтали\n' + 'По вертикали');
Orientation.Store = false;
ShelfOffsetP = Prop.NewNumber('Передний отступ', 10);
ShelfOffsetZ = Prop.NewNumber('Задний отступ', 0);
ShelfOffsetB = Prop.NewNumber('Отступ с боков', 1);

Krepezh = Prop.NewGroup('Фурнитура')
LCorner = Krepezh.NewFurniture('Фурнитура');
OB = Krepezh.NewNumber('Фурнитура сзади', 50);
OF = Krepezh.NewNumber('Фурнитура спереди', 50);

//LCorner = Prop.NewFurniture('Фурнитура');
OkBtn = Prop.NewButton('Установить');
}

MakeProperties(); //Активация окна параметров
Action.Properties.Load(FileOptions); //Чтение из файла настроек
Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}

// Обработка нажатия кнопки
OkBtn.OnClick = function() {
DeleteNewObjects(); // Удаление старых параметров
Make(); // Вызов функции построений всех панелей
SetCamera(p3dPerspective); // Установка камеры
Action.Finish();
}

//Обработка любого изменения значений свойств
Prop.OnChange = function() {
DeleteNewObjects(); // удалить объкты созданные в этой команде
Make(); //Вызываем функцию построения всех панелейъ
};
ShelfMat.SetActive(); //Устанавливаем активный материал. Все последующие лементы будут из этого материала

//Установка полок в секцию
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;

TopPanel = GetPanel('Укажите верхнюю панель');
BottomPanel = GetPanel('Укажите нижнюю панель');
Top = TopPanel.GabMin.y;
Bottom = BottomPanel.GabMax.y;

Back = LeftPanel.GabMin.z;
Front = RightPanel.GabMax.z;

if (LeftPanel.GabMin.z < RightPanel.GabMin.z) //Условие: если зад левой панели < зад правой панели
Back = LeftPanel.GabMin.z; // Установить зад зад левой
else // Иначе
Back = RightPanel.GabMin.z; // Установить зад зад правой
if (RightPanel.GabMax.z < LeftPanel.GabMax.z)
Front = RightPanel.GabMax.z;
else
Front = LeftPanel.GabMax.z;

Action.Continue(); //не завершать действие

function Make()
{
OffsetP = ShelfOffsetP.Value; // Значение спереди
OffsetZ = ShelfOffsetZ.Value; // Сзади
OffsetB = ShelfOffsetB.Value; // С боков

Count = ShelfCount.Value; // Количество полок
Thick = ActiveMaterial.Thickness; // Толщина=толщина активного материала

PosY = Bottom;
SectionHeight = Top - Bottom; //Высота секции
YInc = (SectionHeight - Count * Thick) / (Count + 1);
Edit.Value = YInc; // Расстояние между полками

for (var k = 0; k < Count; k++) // Загадка для меня...

{
PosY += YInc;
Panel = AddHorizPanel(Left + OffsetB, Back + OffsetZ, Right - OffsetB, Front - OffsetP, PosY);
Panel.Name = 'полка';
//Polka.TextureOrientation = ftoHorizontal;
Polkodergatel = LCorner.Value;
Polkodergatel.Mount(Panel, LeftPanel, Left, PosY, Back + OB.Value);
Polkodergatel.Mount(Panel, RightPanel, Right, PosY, Back + OB.Value);
Polkodergatel.Mount(Panel, LeftPanel, Left, PosY, Front - OF.Value);
Polkodergatel.Mount(Panel, RightPanel, Right, PosY, Front - OF.Value);
PosY += Thick;


switch (Orientation.Value) {
case 'По горизонтали':
Panel.TextureOrientation = TextureOrientation.Horizontal;
break;
case 'По вертикали':
Panel.TextureOrientation = TextureOrientation.Vertical;
break;
}

Panel.AddButt(ShVidimPol, 0); //0- задняя сторона
Panel.AddButt(ShVidimPol, 1); // 1- левая сторона
Panel.AddButt(ShVidimPol, 2); // 2- передняя сторона
Panel.AddButt(ShVidimPol, 3); // 3- правая сторона
}
}
Make()
SetCamera(p3dPerspective)
[свернуть]
я полки устанавливаются
Rafael M вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 9 nayrogi Базис-мебельщик 9.0 716 01.09.2018 11:17
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1423 17.04.2018 16:15
БАЗИС-ЧПУ 8 chingisnah Базис-мебельщик 8.0 119 21.12.2017 21:04
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 09:36
Базис-7,"Народный Базис"и Windows-8 sergeyzak18 "НАРОДНЫЙ" базис 23 15.01.2014 22:37


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


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
© 2007-2018 PROMEBEL