|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 8 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
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 объект по его типу') [свернуть]
Обратите внимание на полезные ответы в этой теме!
Последний раз редактировалось systland; 26.12.2017 в 11:52..
Причина: Добавил объявление.
|
Просмотров: 1401861
|
6 пользователя(ей) сказали cпасибо:
|
|
12.09.2018, 00:00
|
#1001
|
Новичок
Регистрация: 22.10.2017
Сообщений: 28
Сказал(а) спасибо: 38
Поблагодарили 4 раз(а) в 2 сообщениях
Вес репутации: 0
|
Приветствую уважаемые, подскажите как сделать так чтобы после изменения параметоров блока построеного через доп фаил отображались изменения до нажатия кнопки построить, а то все исчезает после попытки изменить параметры
Добавлено через 5 минут
Цитата:
Сообщение от Letos
Вот более замороченный вариант:
|
можно ли сделать так чтоы при выделении блока считывалось его уже имеющееся имя и потом это имя добовлять к имени панелей
|
|
|
12.09.2018, 11:58
|
#1002
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от Vaseok23
Приветствую уважаемые, подскажите как сделать так чтобы после изменения параметоров блока построеного через доп фаил отображались изменения до нажатия кнопки построить, а то все исчезает после попытки изменить параметры
|
Как я понимаю, надо в обработчике изменения запускать функцию построения блока с уже изменёнными параметрами.
Цитата:
Сообщение от Vaseok23
можно ли сделать так чтоы при выделении блока считывалось его уже имеющееся имя и потом это имя добовлять к имени панелей
|
Это вопрос вообще или конкретно к скрипту из того сообщения. Если к скрипту, то в нём это работает, или я вас неправильно понял. Можете подробнее описать, какого результата при каких действиях вы хотите добиться?
|
|
|
14.09.2018, 11:43
|
#1003
|
Новичок
Регистрация: 01.02.2013
Сообщений: 17
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Вопрос по предыдущему обсуждению. скрипт для расстановки полок. Что нужно дописать туда чтобы полки расставлялись с условием точности 0,5. диаметр сверления для подполочники составляет 5 мм. Делить пополам 2,5. То есть чтобы подполочник всегда попадал на точное значение. А уж сама полка может быть с "половинкой". Мне знакомец писал скрипт. Но он статичный для заранее оговорённых количеств полок. Если интересно, выложу в тут.) Но ваш скрипт интересней. Более гибкий. Самое главное, "остаток" можно отдать на последний или первый проём.
Последний раз редактировалось DSS; 14.09.2018 в 11:44.
Причина: Безграмотность
|
|
|
14.09.2018, 12:34
|
#1004
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Лучше поздно, чем никогда:
Цитата:
Сообщение от 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-й версии. Указываются ширина и высота выреза (х и у в СК контура) и по кнопке меняется угол панели, в котором делается вырез.
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
14.09.2018, 12:38
|
#1005
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от DSS
Вопрос по предыдущему обсуждению. скрипт для расстановки полок. Что нужно дописать туда чтобы полки расставлялись с условием точности 0,5. диаметр сверления для подполочники составляет 5 мм. Делить пополам 2,5. То есть чтобы подполочник всегда попадал на точное значение. А уж сама полка может быть с "половинкой". Мне знакомец писал скрипт. Но он статичный для заранее оговорённых количеств полок. Если интересно, выложу в тут.) Но ваш скрипт интересней. Более гибкий. Самое главное, "остаток" можно отдать на последний или первый проём.
|
Вам нужно для скрипта из этого сообщения или какого-то другого? Если какого-то другого, дайте ссылку на него, спробую дописать.
|
|
|
Пользователь сказал cпасибо:
|
|
14.09.2018, 17:09
|
#1006
|
Новичок
Регистрация: 01.02.2013
Сообщений: 17
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
[QUOTE=Letos;462822]Вам нужно для скрипта из этого сообщения. Да! Именно про тот скрипт на который указали в ссылке. Отличный скрипт, если его дополнить этим то просто красота будет. Разметка упроститься. Никаких дробных. Выложить мой вариант скрипта? Можете посмотреть, что он дает.
|
|
|
17.09.2018, 15:41
|
#1007
|
Новичок
Регистрация: 01.02.2013
Сообщений: 17
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Пример скрипта для 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.
Причина: Загнал код в спойлер
|
|
|
17.09.2018, 16:14
|
#1008
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от 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.
Причина: Загнал код в спойлер
|
|
|
17.09.2018, 16:37
|
#1009
|
Новичок
Регистрация: 01.02.2013
Сообщений: 17
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Letos
В этом примере жёстко зафиксирован отступ в 0.5 мм. Самое логичное, что пришло в голову - это добавить в скрипт еще одно поле с названием, например, "диаметр полкодержателя", на основе которого будет высчитываться отступ, чтобы центр полкодержателя оказался в точке с целочисленной координатой по высоте.
Интересно ваше мнение, может есть более простой способ решить эту задачу, который я не заметил.
|
Ну диаметр сверления вещь нужная и понятная. Главное понятная и в голове всегда. Это будет отлично! Не думаю, что есть подполочники (активно использующиеся) под другой диаметр нежели D5. Но так сказать - на "вырост". Че нить придумают, а тут ужо есть!
Насколько я понял, исчезнет зависимость script = количество полок. Это все будет в окошках определяться? И как говорил мне не шашечки, а доехать. Советовать по программированию не могу, в силу своей программистской ограниченности! А вот всякие интерфейсы, конечный результат запросто!
|
|
|
17.09.2018, 17:03
|
#1010
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,033 раз(а) в 367 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от DSS
Насколько я понял, исчезнет зависимость script = количество полок. Это все будет в окошках определяться?
|
Не совсем понял про зависимость, но если изменять тот скрипт, который был выложен ранее (более универсальный), то количество полок можно будет менять в окне свойств.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:31. Часовой пояс GMT +3.
|