|
|
|
|
|
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..
Причина: Добавил объявление.
|
Просмотров: 1395129
|
6 пользователя(ей) сказали cпасибо:
|
|
03.02.2014, 00:58
|
#171
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 507
|
Цитата:
Сообщение от FIDEL
Спасибо огромное-преогромное за предоставленный скрипт.
Проконсультируйте, пожалуйста:
1.как в данном скрипте прописать возможность создания параметрического блока, чтобы можно было после установки его редактировать.
2.Можно ли в скрипте установить параметрический крепеж? И как ега задать в случае , если это возможно
|
Пожалуйста.
1. Такая возможность есть, но честно говоря, в данный момент времени навешиваю на этот скрипт другие функции.
2. Параметрический крепеж можно, но жуно переписывать скрипт и выводит поле выбора крепежа в окно свойств или на панель параметров.
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
03.02.2014, 09:23
|
#172
|
VIP
Регистрация: 18.01.2008
Сообщений: 1,047
Сказал(а) спасибо: 2,864
Поблагодарили 1,853 раз(а) в 435 сообщениях
Вес репутации: 696
|
Цитата:
Сообщение от mike_owl
Спасибо за скрипт. Переделал его немного под себя. Но осталось две вещи. Поменять направление текстуры установленных полок и расстояния между полок без дробных чисел. Не подскажите, где подкрутить?
|
Вот как назначается текстура
Pan = AddFrontPanel(x1, y1, x2, y2, z)
Pan.TextureOrientation = TextureOrientation.Horizontal
или
Pan.TextureOrientation = TextureOrientation.Vertical
или
Pan.TextureOrientation = TextureOrientation.None
Округлить число можно разными способами. Есть метод toFixsed
Можно посмотреть здесь
Для тех, кто не хочет ходить по ссылкам
Скрытый текст
toFixed
СинтаксисnumObj.toFixed([fractionDigits])
Аргументы
fractionDigits
Необязательный. Количество цифр после десятичного знака. Это число должно находиться в диапазоне от 0 до 20 включительно. Если не указано, то считается равным 0
Описание, примеры
Возвращает строковое представление числа без использования экспоненциальной записи, и ровно с fractionDigits цифр после запятой. Число округляется при необходимости, и дробная часть добивается нулями до нужной длины.
Если число больше 1e+21, то метод просто вызывает Number.toString() и возвращает строку в экспоненциальной записи.
Инициирует исключение RangeError, если fractionDigits меньше 0 или больше 20. Хотя некоторые реализации могут поддерживать значения больше 20.
Инициирует исключение TypeError, если объект не является Number.01 var n = 12345.6789;
01 n.toFixed(); // 12346: округление, длина дробной части ноль
02 n.toFixed(1); // 12345.7: округление
03 n.toFixed(6); // 12345.678900: добили нулями
04 (1.23e+20).toFixed(2); // 123000000000000000000.00
05 (1.23e-10).toFixed(2) // 0.00
См. также
toPrecision /Метод/
Math.ceil /Метод/
Math.round /Метод/
Math.floor /Метод/ [свернуть]
В том скрипте это будет вот так.
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + Offset, Back + Offset, Right - Offset,
Front - Offset, PosY.toFixed());
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.Build();
/*
LCorner.Mount(Panel, LeftPanel, Left, PosY, Back + 32);
LCorner.Mount(Panel, RightPanel, Right, PosY, Back + 32);
LCorner.Mount(Panel, LeftPanel, Left, PosY, Front - 32);
LCorner.Mount(Panel, RightPanel, Right, PosY, Front - 32);
*/
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
03.02.2014, 10:42
|
#173
|
VIP
Регистрация: 18.01.2008
Сообщений: 1,047
Сказал(а) спасибо: 2,864
Поблагодарили 1,853 раз(а) в 435 сообщениях
Вес репутации: 696
|
В обновлении нашел пример одного ОБАЛДЕННОГО скрипта - Облицовка кромкой.
Запускается скрипт. Показываются в окне свойств все материалы, которые есть в изделии. И для каждого материала можно На видимых/На всех/Удалить выбрать кромку и накатать. Панели из этого материала можно и подсветить.
Если его применить, то не останется панелей с не накатанными кромками. Но кромка накатывается одна. Можно всюду накатать кромку 0,5, а потом на нужных торцах заменить на 2,0. Но это легче, чем накатывать на все панели по очереди.
Не устаю удивляться возможностям скриптов...
|
|
|
10 пользователя(ей) сказали cпасибо:
|
|
03.02.2014, 13:39
|
#174
|
Пользователь
Регистрация: 18.05.2010
Сообщений: 85
Сказал(а) спасибо: 51
Поблагодарили 74 раз(а) в 29 сообщениях
Вес репутации: 193
|
Цитата:
В обновлении нашел пример одного ОБАЛДЕННОГО скрипта - Облицовка кромкой.
|
Хочу обратить внимание, тех кто будет пользоваться данным скриптом. Кромка поставленная таким образом будет всегда меряться пог.м. Если нужны кв.м(краску на торцах посчитать, пластик, шпон или еще что-то) нужно после поменять на ту же самую кромку только стандартным методом. Либо в смете получите пог.м + м.кв.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
03.02.2014, 22:13
|
#175
|
Пользователь
Регистрация: 07.12.2012
Сообщений: 43
Сказал(а) спасибо: 36
Поблагодарили 6 раз(а) в 3 сообщениях
Вес репутации: 0
|
Нужна помощь.Петли ставит не на том месте.
Скрытый текст
SetCamera(p3dFront);
Left = GetEdge('Укажите первую вертикальную границу', AxisY).GFirst.x;
Right = GetEdge('Укажите вторую вертикальную границу', AxisY).GFirst.x;
Top = GetEdge('Укажите первую горизонтальную границу', AxisX).GFirst.y;
Bottom = GetEdge('Укажите вторую горизонтальную границу', AxisX).GFirst.y;
if (Left > Right) {
aaa = Left
Left = Right
Right = aaa
}
if (Bottom > Top) {
aaa = Bottom
Bottom = Top
Top = aaa
}
//Считываем толщину текущего материала
Thick = ActiveMaterial.Thickness;
/// AddVertPanel(z1,y1,z2,y2,x )
//Ставим левый бок/////////////////////////////////////////////////
LevBok =AddVertPanel(0,Bottom+Thick , 300, Top,100);
//Ставим правый бок////////////////////////////////////////////////
PravBok = AddVertPanel(0, Bottom +Thick, 300, Top , Right-Thick);
//Ставим верх//AddHorizPanel X1, Z1, X2, Z2, Y ///////////////////////////////////////////////////////
Werx = AddHorizPanel(0, 0, Right, 300, Bottom);
//Ставим дно/////////////////////////////////////////////////////////
Dno = AddHorizPanel(0, 0, Right , 300, Top);
//////////////////////////////////////////////////////////////////////
//Ставим двери/////X1,Y1,X2,Y2,Z////////////////////////////////////////////////////////
Dver = AddFrontPanel(LevBok.PositionX-Thick , Bottom , PravBok.PositionX, Top+Thick, 300);
////////////////////////////////////////////////////////////////////////
FPetli = OpenFurniture('Петля.f3d');
FPetli.Mount(LevBok, Dver, 2 * Thick, Dver.PositionY +100, 0);
FPetli.Mount(LevBok, Dver, 2 * Thick, Top-100 , 0); [свернуть]
Последний раз редактировалось systland; 07.02.2014 в 18:36.
|
|
|
04.02.2014, 12:10
|
#176
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
Думаю так должно быть:
FPetli = OpenFurniture('Петля.f3d');
FPetli.Mount(Dver, LevBok, LevBok.GabMax.x, Dver.PositionY + 100, 0);
FPetli.Mount(Dver, LevBok, LevBok.GabMax.x, Top - 100, 0);
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
04.02.2014, 12:23
|
#177
|
Пользователь
Регистрация: 18.05.2010
Сообщений: 85
Сказал(а) спасибо: 51
Поблагодарили 74 раз(а) в 29 сообщениях
Вес репутации: 193
|
Или так :
FPetli.Mount(LevBok, Dver, LevBok.PositionX + 16, Dver.PositionY +100, 0);
FPetli.Mount(LevBok, Dver, LevBok.PositionX + 16, Top-100 , 0);
LevBok, LevBok.GabMax.x подойдет скорее к Mount1
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
05.02.2014, 12:23
|
#178
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 507
|
Цитата:
Сообщение от FIDEL
1.как в данном скрипте прописать возможность создания параметрического блока, чтобы можно было после установки его редактировать.
2.Можно ли в скрипте установить параметрический крепеж? И как ега задать в случае , если это возможно
|
Выкладываю Кухонную тумбу v1.3 сделанную параметрическим блоком и возможностью выбора крепежа как параметрического, так и произвольного.
Но, по крепежу сразу скажу ряд замечаний:
1. Петли, лучше ставить произвольные, параметрическая ставятся не корректно из-за разных точек привязки.
2. Шканты, пока ставим произвольные. В установке параметрических шкантов закралась ошибка. (Уже доложил куда следует.)
3. Навеску левую и правую делаем произвольную по типу уголка, как в предыдущей версии кухонного корпуса.
Для тек, кто будет смотреть код скрипта не удивляйтесь переменным на русском языке, оказывается можно использовать и иероглифы, и значки.
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
27 пользователя(ей) сказали cпасибо:
|
|
05.02.2014, 17:55
|
#179
|
Местный
Регистрация: 31.12.2007
Адрес: Самара
Сообщений: 130
Сказал(а) спасибо: 27
Поблагодарили 27 раз(а) в 15 сообщениях
Вес репутации: 217
|
Цитата:
Сообщение от zorro
Вот как назначается текстура
Pan = AddFrontPanel(x1, y1, x2, y2, z)
Pan.TextureOrientation = TextureOrientation.Horizontal
или
Pan.TextureOrientation = TextureOrientation.Vertical
или
Pan.TextureOrientation = TextureOrientation.None
Округлить число можно разными способами. Есть метод toFixsed
Можно посмотреть здесь
Для тех, кто не хочет ходить по ссылкам
Скрытый текст
toFixed
СинтаксисnumObj.toFixed([fractionDigits])
Аргументы
fractionDigits
Необязательный. Количество цифр после десятичного знака. Это число должно находиться в диапазоне от 0 до 20 включительно. Если не указано, то считается равным 0
Описание, примеры
Возвращает строковое представление числа без использования экспоненциальной записи, и ровно с fractionDigits цифр после запятой. Число округляется при необходимости, и дробная часть добивается нулями до нужной длины.
Если число больше 1e+21, то метод просто вызывает Number.toString() и возвращает строку в экспоненциальной записи.
Инициирует исключение RangeError, если fractionDigits меньше 0 или больше 20. Хотя некоторые реализации могут поддерживать значения больше 20.
Инициирует исключение TypeError, если объект не является Number.01 var n = 12345.6789;
01 n.toFixed(); // 12346: округление, длина дробной части ноль
02 n.toFixed(1); // 12345.7: округление
03 n.toFixed(6); // 12345.678900: добили нулями
04 (1.23e+20).toFixed(2); // 123000000000000000000.00
05 (1.23e-10).toFixed(2) // 0.00
См. также
toPrecision /Метод/
Math.ceil /Метод/
Math.round /Метод/
Math.floor /Метод/ [свернуть]
В том скрипте это будет вот так.
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + Offset, Back + Offset, Right - Offset,
Front - Offset, PosY.toFixed());
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.Build();
/*
LCorner.Mount(Panel, LeftPanel, Left, PosY, Back + 32);
LCorner.Mount(Panel, RightPanel, Right, PosY, Back + 32);
LCorner.Mount(Panel, LeftPanel, Left, PosY, Front - 32);
LCorner.Mount(Panel, RightPanel, Right, PosY, Front - 32);
*/
|
Ориентация текстуры сработала. А вот округление, нет. При указании PosY.toFixed() все полки создаются в одном месте. Друг в друге
|
|
|
Пользователь сказал cпасибо:
|
|
05.02.2014, 18:11
|
#180
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
Попробуйте вместо PosY.toFixed() использовать Math.round(PosY)
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 00:42. Часовой пояс GMT +3.
|