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

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


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

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

Сказал(а) спасибо: 31
Поблагодарили 630 раз(а) в 83 сообщениях
Версия для печати Отправить по электронной почте
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
Просмотров: 961
Размер:	36.4 Кб
ID:	86248

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


Последний раз редактировалось systland; 26.12.2017 в 10:52.. Причина: Добавил объявление.
Просмотров: 611938
Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
Beard (20.06.2017), female (15.01.2016), Kerby (21.11.2015), v22884 (04.11.2014)
Старый 04.04.2019, 14:22   #1111
anb
VIP
 
Регистрация: 01.08.2008
Адрес: Казань
Сообщений: 541
Сказал(а) спасибо: 7,635
Поблагодарили 2,291 раз(а) в 494 сообщениях
Вес репутации: 643
anb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспоримаanb репутация неоспорима
По умолчанию

Цитата:
Сообщение от Vladren Посмотреть сообщение
затестил.
Похоже вы не тот скрипт установили.
anb вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Vladren (04.04.2019)
Старый 04.04.2019, 14:34   #1112
Vladren
Пользователь
 
Аватар для Vladren
 
Регистрация: 14.07.2009
Адрес: Киев
Сообщений: 83
Сказал(а) спасибо: 74
Поблагодарили 46 раз(а) в 18 сообщениях
Вес репутации: 136
Vladren на пути к лучшему
По умолчанию

Разобрался... не то скачал) СПАСИБО!
Vladren вне форума   Ответить с цитированием Вверх
Старый 04.04.2019, 14:36   #1113
Максим Геннадьевич
Пользователь
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 47
Сказал(а) спасибо: 18
Поблагодарили 31 раз(а) в 8 сообщениях
Вес репутации: 23
Максим Геннадьевич на пути к лучшему
По умолчанию Полки

Цитата:
Сообщение от Vladren Посмотреть сообщение
Ну я затестил. Спрашивает одну боковую панель и одну боковую границу. Крепеж с одной стороны. Но панель рисует если не указать срез прамоугольную. Или я чтото не понял и не разобрался?
PHP код:
SetCamera(p3dFront);
Left GetObject("Укажите левую панель");
Right GetObject("Укажите правую панель");
Top GetEdge('Укажите верхнюю границу'AxisX).First.y;
Bottom GetEdge('Укажите нижнюю границу'AxisX).First.y;
SetCamera(p3dLeft);
SetCamera(p3dFront);

FileOptions 'SaveShelf.xml';
MakeProperties();
Action.Properties.Load(FileOptions);
Action.OnFinish = function() {
    
Action.Properties.Save(FileOptions);
}

NewBtn NewButtonInput('Закончить');
NewBtn.OnChange = function() {
    
Action.Commit();
    
Action.Finish();
}

function 
MakeProperties() {
    
prop Action.Properties;
    
shelfCount prop.NewNumber('Количество полок',0);
    
blockMat shelfCount.NewMaterial('Материал полок');
    
butt shelfCount.NewButt('Кромка полок');
    
shelfSide shelfCount.NewNumber ('Отступ с боков',0);
    
shelfFurn shelfCount.NewFurniture('Полкодержатели');
    
shelfFront =  shelfCount.NewNumber ('Заглубление',10);
    
FurnVis shelfCount.NewCombo('Видимость крепежа','Слева\nСправа\nНа обоих\nНет на обоих');    
    
blockFurn shelfCount.NewFurniture('Крепеж видимый');
    
furnBlock shelfCount.NewFurniture('Крепеж не видимый');
    
inFurnVis shelfCount.NewCombo('Система крепежа','Произвольно\nОт центра 32\nОт края 32');
    
inFurn shelfCount.NewNumber ('Отступ фурнитуры',50);
    
prop.OnChange = function() {
    
MakeShelf();
    }
}
MakeShelf();

function  
MakeShelf(){
    
DeleteNewObjects();
    
blockMat.SetActive();
    
thick ActiveMaterial.Thickness;
    if (
Left.GabMax.Right.GabMax.|| Left.GabMax.== Right.GabMax.z){
        
pan Right;
    }else{
        
pan Left;
    }
    if(
shelfCount.Value ){
        
//формула вычесления растояния полок
        
fshelf Math.round(((Bottom Top) - thick thick shelfCount.Value )/(+shelfCount.Value 1));
        
shelfY Top;
            for (var 
0shelfCount.Valuek++){
                
shelfY += fshelf thick;
                
shelf AddHorizPanel(Left.GabMax.shelfSide.Value ,Left.GabMin.shelfSide.ValueRight.GabMin.shelfSide.Value,pan.GabMax.shelfFront.ValueshelfY );
                
ShelfFurn (shelf);
                
shelf.Build();
            }
    }
}

function 
ShelfFurn (s) {
        
s.TextureOrientation ftoHorizontal;
        if(
inFurnVis.ItemIndex == 0){
            
inFB inFF inFurn.Value;
        }else if(
inFurnVis.ItemIndex == 1){
            
inFB inFF =(s.GabMax.- (Math.floor(Math.floor((s.GabMax.32 inFurn.Value 2)/32))*32))/;
        }else{
            
inFB Math.ceil(inFurn.Value/32)*32;
            
inFF s.GabMax.Math.floor((s.GabMax.inFurn.Value)/32)*32;
        }            
        if (
shelfSide.Value == 0){
            switch(
FurnVis.ItemIndex){
                case 
0:
                    
sFl blockFurn.Value;
                    
sFR furnBlock.Value;                    
                break;
                case 
1:
                    
sFl furnBlock.Value;
                    
sFR blockFurn.Value;
                break;
                case 
2:
                    
sFl blockFurn.Value;
                    
sFR blockFurn.Value;
                break;
                case 
3:
                    
sFl furnBlock.Value;
                    
sFR furnBlock.Value;
                break;
            }
            
            
s.Name 'Полка';
            
s.AddButt(butt2);
        }
        else {
            
sFl sFR shelfFurn.Value;
            
s.Name 'Полка съем';
            
s.AddButt(butt0);
            
s.AddButt(butt1);
            
s.AddButt(butt2);
            
s.AddButt(butt3);
        }
        
sFl.Mount(sLeftLeft.GabMax.s.GabMin.thick/2s.GabMin.inFB );
        
sFl.Mount(sLeftLeft.GabMax.xs.GabMin.thick/2,s.GabMax.inFF);
        
sFR.Mount(sRightRight.GabMin.s.GabMin.thick/2s.GabMin.inFB);
        
sFR.Mount(sRightRight.GabMin.s.GabMin.thick/2,s.GabMax.inFF);

}

Action.Continue(); 
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
Старый 13.04.2019, 03:50   #1114
serga22
Новичок
 
Регистрация: 24.06.2010
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
serga22 пока не определено
По умолчанию скрипт экспорта

Всем добрый день. необходима помощь в правке скрипта экспорта в XML за вознаграждение, кому интересно пишите в личку, лучше с приблизительными сроками и суммами
serga22 вне форума   Ответить с цитированием Вверх
Старый 13.04.2019, 14:11   #1115
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 412
Сказал(а) спасибо: 837
Поблагодарили 491 раз(а) в 205 сообщениях
Вес репутации: 231
Ovsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всем
По умолчанию

Цитата:
Сообщение от serga22 Посмотреть сообщение
лучше с приблизительными сроками и суммами
Так Вы бы для начала описали что имеется в виду под "правкой скрипта", какие требования к работе скрипта.
Как исполнитель Вам должен назвать сроки и сумму, не зная, что от него требуется сделать?
Ovsyanicov вне форума   Ответить с цитированием Вверх
Старый 14.04.2019, 10:05   #1116
STORM
Пользователь
 
Регистрация: 14.08.2008
Адрес: Киев
Сообщений: 48
Сказал(а) спасибо: 16
Поблагодарили 14 раз(а) в 4 сообщениях
Вес репутации: 138
STORM на пути к лучшему
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
Да, легко.
obj.ArtPos = obj.ArtPos + AdditionalInfo(obj);
А куда это поставить, если возможно, вставьте, СПАСИБО.
STORM вне форума   Ответить с цитированием Вверх
Старый 14.04.2019, 11:47   #1117
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 937
Сказал(а) спасибо: 218
Поблагодарили 264 раз(а) в 121 сообщениях
Вес репутации: 278
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Вот весь скрипт с моей коректировкой
Цитата:
// Разделитель между наименованием и позицией
const separator = '';
const separator1 = '№';

function CheckObject(obj) {
switch (processingType.ItemIndex) {
case 0:
return true;
case 1:
return obj.Selected;
case 2:
return obj.Selected && obj.List;
}
}

// Функция обхода всех объектов в блоке и вызова переданной функции для их
// обработки
function forEachInList(list, func) {
if (!func)
return;
for (var i = 0; i < list.Count; i++) {
var obj = list.Objects[i];
if (CheckObject(obj)) {
func(obj);
if (obj.List) {
forEachInList(obj.AsList(), func);
}
}
}
}

//функция вывода размеров панелей, с учетом заданной точности
function GetObjSize(size){
switch (sizeAccuracy.ItemIndex) {
case 0:
return Math.round(size);
case 1:
return Math.trunc(Math.round(size * 10)) / 10;
case 2:
return Math.trunc(Math.round(size * 100)) / 100;
case 3:
return Math.trunc(Math.round(size * 1000)) / 1000;
}
}

//функция вывода наименования панелей
function GetObjName(name, strLength){
if(!shortenName.Value || strLength >= name.length || strLength == 0){
return name;
} else if(shortenName.Value){
return name.slice(0, strLength);
}
}

function AdditionalInfo(obj){
var result = '';
if (addSize.Value){
result += ' ' + GetObjSize(obj.GSize.x) + 'х' + GetObjSize(obj.GSize.y) + 'х' + GetObjSize(obj.GSize.z);
}
return result;
}

// позиция и размер
function NameToPos(obj) {
obj.ArtPos = separator1 + obj.ArtPos + AdditionalInfo(obj);
}
// поз в имя
function PosToName(obj) {
obj.Name = obj.ArtPos + AdditionalInfo(obj);
}
// имя, позиция, размер
function NameAndPos(obj) {
var value = GetObjName(obj.Name, nameLength.Value) + separator + obj.ArtPos + AdditionalInfo(obj);

obj.ArtPos = value;
}
// вызов продолжения скрипта после того, как весь код отработает.

Action.Continue();
// Комбобокс для выбора типа выполнения скрипта
var combo = Action.Properties.NewCombo('Тип',
'Позиция, размер.\nПоз. в наименование\nИмя, позиция, размер.');
var shortenName = Action.Properties.NewBool('Сократить наименование');
shortenName.OnValueChange = function(){nameLength.Enabled = !nameLength.Enabled}
var nameLength = Action.Properties.NewNumber('Количество символов наименования');
nameLength.Enabled = false;
var addSize = Action.Properties.NewBool('Добавлять размеры');
addSize.OnValueChange = function(){sizeAccuracy.Enabled = !sizeAccuracy.Enabled}
var sizeAccuracy = Action.Properties.NewCombo('Точность размеров', '0\n1\n2\n3');
sizeAccuracy.Enabled = false;
var processingType = Action.Properties.NewCombo('Тип обработки',
'Все объекты\nВыделенные объекты\nВыделенные блоки');
Action.Properties.Load('props.xml');
// Кнопка запуска основного кода скрипта
Action.Properties.NewButton('Применить').OnClick = function () {
// переменная для хранения функции, которая будет обрабатывать объекты
var func;
// Запись в историю, что скрипт собирается менять модель и все объекты,
// находящиеся в ней
Undo.RecursiveChanging(Model);
// В зависимости от выбранного типа назначаем нужную функцию для обработки
// объектов
switch (combo.ItemIndex) {
case 0:
func = NameToPos;
break;
case 1:
func = PosToName;
break;
case 2:
func = NameAndPos;
break;
}
// запускаем обход всех объектов в модели с нужной функцией обработки
forEachInList(Model, func);
// Вызов завершения скрипта
Action.Properties.Save('props.xml');
Action.Finish();
}
Ozimko вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
rinch (15.04.2019), STORM (14.04.2019)
Старый 14.04.2019, 18:43   #1118
Olic 71
Новичок
 
Регистрация: 24.03.2016
Сообщений: 10
Сказал(а) спасибо: 1
Поблагодарили 48 раз(а) в 7 сообщениях
Вес репутации: 0
Olic 71 на пути к лучшему
По умолчанию

Всем Добрый день.Помогите пожалуйста, как в скрипте определить толщину кромки, чтобы потом отнять ее от габарита детали.
Olic 71 вне форума   Ответить с цитированием Вверх
Старый 15.04.2019, 12:06   #1119
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 412
Сказал(а) спасибо: 837
Поблагодарили 491 раз(а) в 205 сообщениях
Вес репутации: 231
Ovsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всемOvsyanicov - это имя известно всем
По умолчанию

Цитата:
Сообщение от Olic 71 Посмотреть сообщение
Всем Добрый день.Помогите пожалуйста, как в скрипте определить толщину кромки, чтобы потом отнять ее от габарита детали.
В цикле можно перебрать с помощью Model.Selected.AsPanel.Butts.Butts[i].Thickness, например.
Ovsyanicov вне форума   Ответить с цитированием Вверх
Старый 20.04.2019, 10:17   #1120
STORM
Пользователь
 
Регистрация: 14.08.2008
Адрес: Киев
Сообщений: 48
Сказал(а) спасибо: 16
Поблагодарили 14 раз(а) в 4 сообщениях
Вес репутации: 138
STORM на пути к лучшему
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
Вот весь скрипт с моей коректировкой
Спасибо за корректировку, у меня такой вопрос, можно откорректировать размер, например размер детали 2000х100, а выдает 100х2000, спасибо.
STORM вне форума   Ответить с цитированием Вверх
Ответ

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1426 17.03.2019 23:00
БАЗИС 9 nayrogi Базис-мебельщик 9.0 754 28.02.2019 09:22
БАЗИС-ЧПУ 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


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


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