Форум профессиональных мебельщиков 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.. Причина: Добавил объявление.
Просмотров: 552414
Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
Beard (20.06.2017), female (15.01.2016), Kerby (21.11.2015), v22884 (04.11.2014)
Старый 12.09.2018, 00:00   #1001
Vaseok23
Новичок
 
Регистрация: 22.10.2017
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
Vaseok23 пока не определено
По умолчанию

Приветствую уважаемые, подскажите как сделать так чтобы после изменения параметоров блока построеного через доп фаил отображались изменения до нажатия кнопки построить, а то все исчезает после попытки изменить параметры

Добавлено через 5 минут
Цитата:
Сообщение от Letos Посмотреть сообщение
Вот более замороченный вариант:
можно ли сделать так чтоы при выделении блока считывалось его уже имеющееся имя и потом это имя добовлять к имени панелей
Vaseok23 вне форума   Ответить с цитированием Вверх
Старый 12.09.2018, 11:58   #1002
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от Vaseok23 Посмотреть сообщение
Приветствую уважаемые, подскажите как сделать так чтобы после изменения параметоров блока построеного через доп фаил отображались изменения до нажатия кнопки построить, а то все исчезает после попытки изменить параметры
Как я понимаю, надо в обработчике изменения запускать функцию построения блока с уже изменёнными параметрами.

Цитата:
Сообщение от Vaseok23 Посмотреть сообщение
можно ли сделать так чтоы при выделении блока считывалось его уже имеющееся имя и потом это имя добовлять к имени панелей
Это вопрос вообще или конкретно к скрипту из того сообщения. Если к скрипту, то в нём это работает, или я вас неправильно понял. Можете подробнее описать, какого результата при каких действиях вы хотите добиться?
Letos вне форума   Ответить с цитированием Вверх
Старый 14.09.2018, 11:43   #1003
DSS
Новичок
 
Регистрация: 01.02.2013
Сообщений: 15
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
DSS пока не определено
По умолчанию

Вопрос по предыдущему обсуждению. скрипт для расстановки полок. Что нужно дописать туда чтобы полки расставлялись с условием точности 0,5. диаметр сверления для подполочники составляет 5 мм. Делить пополам 2,5. То есть чтобы подполочник всегда попадал на точное значение. А уж сама полка может быть с "половинкой". Мне знакомец писал скрипт. Но он статичный для заранее оговорённых количеств полок. Если интересно, выложу в тут.) Но ваш скрипт интересней. Более гибкий. Самое главное, "остаток" можно отдать на последний или первый проём.

Последний раз редактировалось DSS; 14.09.2018 в 11:44. Причина: Безграмотность
DSS вне форума   Ответить с цитированием Вверх
Старый 14.09.2018, 12:34   #1004
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Лучше поздно, чем никогда:
Цитата:
Сообщение от shapori Посмотреть сообщение
Подскажите плиз, как реализовать вырез в панели по заданным размерам с помощью скрипта?
Вот замороченный, но уже готовый вариант:
Код:
var panel = Model.Selected.AsPanel;
var srcCnt = panel.Contour;
// 0-3
var corner = 0;
// srcCnt.Assign()
var defaultCnt = NewContour();
defaultCnt.Assign(srcCnt);
var subCnt = NewContour();
var width = Action.Properties.NewNumber('Ширина выреза');
width.Value = 100;
var height = Action.Properties.NewNumber('Высота выреза');
height.Value = 100;
function ParamChanged() {
    subCnt.Clear();
    srcCnt.Clear();
    srcCnt.Assign(defaultCnt);
    //var cntMax = srcCnt.Max;
    //var cntMin = srcCnt.Min;
    var cntMax = {
        x: srcCnt.Width,
        y: srcCnt.Height
    };
    var cntMin = {
        x: 0,
        y: 0
    };
    var widthValue = width.Value;
    var heightValue = height.Value;
    switch (corner) {
        case 0:
            subCnt.AddRectangle(cntMin.x, cntMin.y,
                cntMin.x + widthValue, cntMin.y + heightValue);
            break;
        case 1:
            subCnt.AddRectangle(cntMax.x, cntMin.y,
                cntMax.x - widthValue, cntMin.y + heightValue);
            break;
        case 2:
            subCnt.AddRectangle(cntMax.x, cntMax.y,
                cntMax.x - widthValue, cntMax.y - heightValue);
            break;
        case 3:
            subCnt.AddRectangle(cntMin.x, cntMax.y,
                cntMin.x + widthValue, cntMax.y - heightValue);
            break;
    }
    srcCnt.Subtraction(subCnt);
    panel.Build();
}
//width.OnValueChange = ParamChanged;
//height.OnValueChange = ParamChanged;
width.OnChange = ParamChanged;
height.OnChange = ParamChanged;
Action.Properties.NewButton('Изменить угол панели для выреза').OnClick =
    function () {
        corner++;
        if (corner > 3) {
            corner = 0;
        }
        ParamChanged();
    }
Action.Continue();
Проверял на демке 8. Закомментированный код - изменённые строки для 10-й версии. Указываются ширина и высота выреза (х и у в СК контура) и по кнопке меняется угол панели, в котором делается вырез.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
andronf (14.09.2018)
Старый 14.09.2018, 12:38   #1005
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от DSS Посмотреть сообщение
Вопрос по предыдущему обсуждению. скрипт для расстановки полок. Что нужно дописать туда чтобы полки расставлялись с условием точности 0,5. диаметр сверления для подполочники составляет 5 мм. Делить пополам 2,5. То есть чтобы подполочник всегда попадал на точное значение. А уж сама полка может быть с "половинкой". Мне знакомец писал скрипт. Но он статичный для заранее оговорённых количеств полок. Если интересно, выложу в тут.) Но ваш скрипт интересней. Более гибкий. Самое главное, "остаток" можно отдать на последний или первый проём.
Вам нужно для скрипта из этого сообщения или какого-то другого? Если какого-то другого, дайте ссылку на него, спробую дописать.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
DSS (14.09.2018)
Старый 14.09.2018, 17:09   #1006
DSS
Новичок
 
Регистрация: 01.02.2013
Сообщений: 15
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
DSS пока не определено
По умолчанию

[QUOTE=Letos;462822]Вам нужно для скрипта из этого сообщения. Да! Именно про тот скрипт на который указали в ссылке. Отличный скрипт, если его дополнить этим то просто красота будет. Разметка упроститься. Никаких дробных. Выложить мой вариант скрипта? Можете посмотреть, что он дает.
DSS вне форума   Ответить с цитированием Вверх
Старый 17.09.2018, 15:41   #1007
DSS
Новичок
 
Регистрация: 01.02.2013
Сообщений: 15
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
DSS пока не определено
По умолчанию

Пример скрипта для 5 полок. Раскидывает с условием центр сверления для подполочника равен целому числу.

Код

Код:
// Установка полок в секцию
ShelfCount = NewNumberInput('Количество полок');
ShelfCount.Value = 5;
KrMat = NewButtMaterialInput("Кромка");

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);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;

Offset = 1;
Offset2 = 0;
Offset3 = 10;
OP = 64; //Отступы полкодержателей друг от друга
OB = 32; //Отступ от задней границы
OF = 32; //Отступ от передней границы
Count = ShelfCount.Value;
Thick = ActiveMaterial.Thickness;

PosY = Bottom;
SectionHeight = Top - Bottom;
YInc = (SectionHeight - Count * Thick) / (Count + 1);
YInc = Math.round(YInc);

LCorner = OpenFurniture('Крепёж\\Полкодержатель2.f3d');

for (var k = 0; k < Count; k++) {
    PosY += YInc;
    Panel = AddHorizPanel(Left + Offset, Back + Offset2, Right - Offset,
        Front - Offset3, PosY + 0.5);
    Panel.TextureOrientation = ftoHorizontal;
    Panel.Name = 'Полка';

    PosY += Thick;
    for (i = 0; i < Panel.Contour.Count; i++) {
            Panel.AddButt(KrMat, i);
        }
}

LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Front - OF, 0);



LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Front - OF, 0);

SetCamera(p3dFront);
[свернуть]

Последний раз редактировалось DSS; 17.09.2018 в 16:32. Причина: Загнал код в спойлер
DSS вне форума   Ответить с цитированием Вверх
Старый 17.09.2018, 16:14   #1008
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от DSS Посмотреть сообщение
Пример для 5 полок

Код

Код:
// Установка полок в секцию
ShelfCount = NewNumberInput('Количество полок');
ShelfCount.Value = 5;
KrMat = NewButtMaterialInput("Кромка");

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);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;

Offset = 1;
Offset2 = 0;
Offset3 = 10;
OP = 64; //Отступы полкодержателей друг от друга
OB = 32; //Отступ от задней границы
OF = 32; //Отступ от передней границы
Count = ShelfCount.Value;
Thick = ActiveMaterial.Thickness;

PosY = Bottom;
SectionHeight = Top - Bottom;
YInc = (SectionHeight - Count * Thick) / (Count + 1);
YInc = Math.round(YInc);

LCorner = OpenFurniture('Крепёж\\Полкодержатель2.f3d');

for (var k = 0; k < Count; k++) {
    PosY += YInc;
    Panel = AddHorizPanel(Left + Offset, Back + Offset2, Right - Offset,
        Front - Offset3, PosY + 0.5);
    Panel.TextureOrientation = ftoHorizontal;
    Panel.Name = 'Полка';

    PosY += Thick;
    for (i = 0; i < Panel.Contour.Count; i++) {
            Panel.AddButt(KrMat, i);
        }
}

LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc + 0.5 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc + 0.5 - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 2 + 0.5 + Thick - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 2 + 0.5 + Thick - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 3 + 0.5 + Thick * 2 - OP, Front - OF, 0);


LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 4 + 0.5 + Thick * 3 - OP, Front - OF, 0);



LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Back + OB, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Back + OB, 0);

LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Front - OF, 0);
LCorner.Mount1(LeftPanel, Left, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Front - OF, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Back + OB, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Back + OB, 0);

LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 + OP, Front - OF, 0);
LCorner.Mount1(RightPanel, Right, Bottom + YInc * 5 + 0.5 + Thick * 4 - OP, Front - OF, 0);

SetCamera(p3dFront);
[свернуть]
В этом примере жёстко зафиксирован отступ в 0.5 мм. Самое логичное, что пришло в голову - это добавить в скрипт еще одно поле с названием, например, "диаметр полкодержателя", на основе которого будет высчитываться отступ, чтобы центр полкодержателя оказался в точке с целочисленной координатой по высоте.
Интересно ваше мнение, может есть более простой способ решить эту задачу, который я не заметил.

Последний раз редактировалось Letos; 17.09.2018 в 16:15. Причина: Загнал код в спойлер
Letos вне форума   Ответить с цитированием Вверх
Старый 17.09.2018, 16:37   #1009
DSS
Новичок
 
Регистрация: 01.02.2013
Сообщений: 15
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
DSS пока не определено
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
В этом примере жёстко зафиксирован отступ в 0.5 мм. Самое логичное, что пришло в голову - это добавить в скрипт еще одно поле с названием, например, "диаметр полкодержателя", на основе которого будет высчитываться отступ, чтобы центр полкодержателя оказался в точке с целочисленной координатой по высоте.
Интересно ваше мнение, может есть более простой способ решить эту задачу, который я не заметил.
Ну диаметр сверления вещь нужная и понятная. Главное понятная и в голове всегда. Это будет отлично! Не думаю, что есть подполочники (активно использующиеся) под другой диаметр нежели D5. Но так сказать - на "вырост". Че нить придумают, а тут ужо есть!
Насколько я понял, исчезнет зависимость script = количество полок. Это все будет в окошках определяться? И как говорил мне не шашечки, а доехать. Советовать по программированию не могу, в силу своей программистской ограниченности! А вот всякие интерфейсы, конечный результат запросто!
DSS вне форума   Ответить с цитированием Вверх
Старый 17.09.2018, 17:03   #1010
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 212
Сказал(а) спасибо: 43
Поблагодарили 377 раз(а) в 144 сообщениях
Вес репутации: 112
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от DSS Посмотреть сообщение
Насколько я понял, исчезнет зависимость script = количество полок. Это все будет в окошках определяться?
Не совсем понял про зависимость, но если изменять тот скрипт, который был выложен ранее (более универсальный), то количество полок можно будет менять в окне свойств.
Letos вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков 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


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


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