|
|
|
|
|
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..
Причина: Добавил объявление.
|
Просмотров: 1389895
|
6 пользователя(ей) сказали cпасибо:
|
|
12.12.2019, 14:05
|
#1211
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Rafael21
Есть разница между BeginBlock и BeginParametricBlock?
|
BeginParametricBlock Делает всё то же самое, что и BeginBlock с одной лишь разницей - блок получается "параметрический", то есть при его выделении в модели появляется кнопка "Редактировать", которая запускает скрипт, использовавшийся при его создании.
|
|
|
Пользователь сказал cпасибо:
|
|
12.12.2019, 16:21
|
#1212
|
Новичок
Регистрация: 09.09.2019
Сообщений: 9
Сказал(а) спасибо: 5
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Цитата:
Сообщение от Letos
BeginParametricBlock Делает всё то же самое, что и BeginBlock с одной лишь разницей - блок получается "параметрический", то есть при его выделении в модели появляется кнопка "Редактировать", которая запускает скрипт, использовавшийся при его создании.
|
Я так и предполагал. Спасибо.
Добавлено через 22 минуты
Letos, объясните пожалуйста, начал заново писать скрипт, теперь возникает ошибка после нажатия кнопки закончить на 45 строчке (Указать левую панель).
Скрытый текст
FileOptions = 'Полка.xml';//создаем файл для сохранения текущих параметров
MakeProperties();//назначение параметров построения
Action.Properties.Load(FileOptions);// считываем сохраненные параметры предыдущих построений
Action.OnFinish = function(){
Action.Properties.Save(FileOptions);// сохранение внесенных изменений в параметрах
}
BtnMake = NewButtonInput('Закончить');//выводим кнопку "закончить"
BtnMake.OnChange = function(){//указываем кнопке функцию
Make();//то есть нажимая кнопку вызываем построение
Action.Finish();
}
Make();
Action.Continue();//скрипт ждет наших действии
function MakeProperties(){ //теперь создадим фукнцию параметров, то есть окно
Prop = Action.Properties; //создаем объект свойства с именем Prop. Дальше сможем добавить различные элементы например картинку
Polka = Prop.NewGroup('ПОЛКА') //группа полка
MatPolk = Polka.NewMaterial('Материал');
Kromka = Polka.NewButt('Кромка');
SC = Prop.NewNumber('Кол-во полок', 2);
OF = Prop.NewNumber('Отступ спереди', 30);
//полкодержатель
Krep = Prop.NewFurniture('ФУРНИТУРА') //группа п/держатель
PolkD = Krep.NewFurniture('П/Держатель');
PB = Prop.NewNumber('П/Д сзади', 50);
PF = Prop.NewNumber('П/Д спереди', 50);
//добавим просмотр в окне любые изменения параметров
Prop.OnChange = function(){
Make();
}
}
function Make(){ //запишем функцию Make, что необходимо сделать
DeleteNewObjects// ощистим область скрипта
BlockP = BeginParametricBlock("Полка съёмная");//создаем блок
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
TopPan = GetPanel('Укажите верхнюю панель');
BotPan = GetPanel('Укажите нижнюю панель');
Top = TopPan.GabMin.y;
Bot = BotPan.GabMax.y;
//ставим камеру слева
SetCamera(p3dLeft);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;
SetCamera(p3dPerspective);//ставим вид перспектива
MatPolk.SetActive();//активируем материал
Thick = ActiveMaterial.Thickness;//запомним толщину материала
Count = SC.Value;//количество
PosY = Bot;//позиционирование
Height = Top - Bot;
YInc = (Height -Count * Thick) / (Count + 1);
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + 1, Back, Right - 1, Front - OF.Value, PosY);
Panel.Name = 'полка съемная';
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.AddButt(Kromka, 0);
Panel.AddButt(Kromka, 1);
Panel.AddButt(Kromka, 2);
Panel.AddButt(Kromka, 3);
PosY += Thick;
EndBlock();
}
}
[свернуть]
|
|
|
12.12.2019, 17:43
|
#1213
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Rafael21
теперь возникает ошибка после нажатия кнопки закончить на 45 строчке (Указать левую панель).
|
Опять Uncaught exception: Функция доступна только в основном теле скрипта или в Action.AsyncExec ?
Всё просто - при нажатии кнопки финиш, она вызывает Make, а тот, в свою очередь вызывает GetPanel когда прошло основное тело скрипта, при этом Make выполняется "синхронно". До этого я писал о разделении функции Make, потому что бессмысленно (на мой взгляд) запрашивать панели при заврешении скрипта или изменении кол-ва полок.
Прикладываю пример на основе вашего скрипта, где функция Make разделена на UpdateShelfs, которая перестраивает полки и MakeNewShelfs, которая запрашивает панели для построения и перестраивает полки на основе новых габаритов. MakeNewShelfs вызывается в этом коде всего один раз и то, в теле скрипта. Если нужно будет вызывать её вне тела скрипта (например, в обработчике нажатия на кнопку), надо будет вызывать её через Action.AsyncExec, так:
Код:
Action.AsyncExec(MakeNewShelfs)
Код примера ниже.
Код
PHP код:
FileOptions = 'Полка.xml';//создаем файл для сохранения текущих параметров
var SizeExists = false; // Флаг, что размеры заданы, проверяется в UpdateShelfs
MakeProperties();//назначение параметров построения
Action.Properties.Load(FileOptions);// считываем сохраненные параметры предыдущих построений
Action.OnFinish = function () {
Action.Properties.Save(FileOptions);// сохранение внесенных изменений в параметрах
}
BtnMake = NewButtonInput('Закончить');//выводим кнопку "закончить"
BtnMake.OnChange = function () {//указываем кнопке функцию
UpdateShelfs();//то есть нажимая кнопку вызываем построение
Action.Finish();
}
MakeNewShelfs();
Action.Continue();//скрипт ждет наших действии
function MakeProperties() { //теперь создадим фукнцию параметров, то есть окно
Prop = Action.Properties; //создаем объект свойства с именем Prop. Дальше сможем добавить различные элементы например картинку
Polka = Prop.NewGroup('ПОЛКА') //группа полка
MatPolk = Polka.NewMaterial('Материал');
Kromka = Polka.NewButt('Кромка');
SC = Prop.NewNumber('Кол-во полок', 2);
OF = Prop.NewNumber('Отступ спереди', 30);
//полкодержатель
Krep = Prop.NewFurniture('ФУРНИТУРА') //группа п/держатель
PolkD = Krep.NewFurniture('П/Держатель');
PB = Prop.NewNumber('П/Д сзади', 50);
PF = Prop.NewNumber('П/Д спереди', 50);
//добавим просмотр в окне любые изменения параметров
Prop.OnChange = function () {
UpdateShelfs();
}
}
function MakeNewShelfs() { //Получаем данные о габаритах, в которые записывать полки
SizeExists = false; // Выставляем флаг, что размеры ещё не заданы
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
TopPan = GetPanel('Укажите верхнюю панель');
BotPan = GetPanel('Укажите нижнюю панель');
Top = TopPan.GabMin.y;
Bot = BotPan.GabMax.y;
//ставим камеру слева
SetCamera(p3dLeft);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;
SetCamera(p3dPerspective);//ставим вид перспектива
SizeExists = true; // Выставляем флаг, что размеры уже заданы
UpdateShelfs();
}
function UpdateShelfs() { // Перестариваем полки на основе новых параметров
if (!SizeExists) // Если размеры не заданы
return; //Выходим из функции, дабы не было ошибок из-за некорректных размеров
DeleteNewObjects();
BlockP = BeginParametricBlock("Полка съёмная");//создаем блок
MatPolk.SetActive();//активируем материал
Thick = ActiveMaterial.Thickness;//запомним толщину материала
Count = SC.Value;//количество
PosY = Bot;//позиционирование
Height = Top - Bot;
YInc = (Height - Count * Thick) / (Count + 1);
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + 1, Back, Right - 1, Front - OF.Value, PosY);
Panel.Name = 'полка съемная';
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.AddButt(Kromka, 0);
Panel.AddButt(Kromka, 1);
Panel.AddButt(Kromka, 2);
Panel.AddButt(Kromka, 3);
PosY += Thick;
EndBlock();
}
}
[свернуть]
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
12.12.2019, 18:37
|
#1214
|
Новичок
Регистрация: 09.09.2019
Сообщений: 9
Сказал(а) спасибо: 5
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Цитата:
Сообщение от Letos
Опять Uncaught exception: Функция доступна только в основном теле скрипта или в Action.AsyncExec ?
Всё просто - при нажатии кнопки финиш, она вызывает Make, а тот, в свою очередь вызывает GetPanel когда прошло основное тело скрипта, при этом Make выполняется "синхронно". До этого я писал о разделении функции Make, потому что бессмысленно (на мой взгляд) запрашивать панели при заврешении скрипта или изменении кол-ва полок.
Прикладываю пример на основе вашего скрипта, где функция Make разделена на UpdateShelfs, которая перестраивает полки и MakeNewShelfs, которая запрашивает панели для построения и перестраивает полки на основе новых габаритов. MakeNewShelfs вызывается в этом коде всего один раз и то, в теле скрипта. Если нужно будет вызывать её вне тела скрипта (например, в обработчике нажатия на кнопку), надо будет вызывать её через Action.AsyncExec, так:
Код:
Action.AsyncExec(MakeNewShelfs)
Код примера ниже.
Код
PHP код:
FileOptions = 'Полка.xml';//создаем файл для сохранения текущих параметров
var SizeExists = false; // Флаг, что размеры заданы, проверяется в UpdateShelfs
MakeProperties();//назначение параметров построения
Action.Properties.Load(FileOptions);// считываем сохраненные параметры предыдущих построений
Action.OnFinish = function () {
Action.Properties.Save(FileOptions);// сохранение внесенных изменений в параметрах
}
BtnMake = NewButtonInput('Закончить');//выводим кнопку "закончить"
BtnMake.OnChange = function () {//указываем кнопке функцию
UpdateShelfs();//то есть нажимая кнопку вызываем построение
Action.Finish();
}
MakeNewShelfs();
Action.Continue();//скрипт ждет наших действии
function MakeProperties() { //теперь создадим фукнцию параметров, то есть окно
Prop = Action.Properties; //создаем объект свойства с именем Prop. Дальше сможем добавить различные элементы например картинку
Polka = Prop.NewGroup('ПОЛКА') //группа полка
MatPolk = Polka.NewMaterial('Материал');
Kromka = Polka.NewButt('Кромка');
SC = Prop.NewNumber('Кол-во полок', 2);
OF = Prop.NewNumber('Отступ спереди', 30);
//полкодержатель
Krep = Prop.NewFurniture('ФУРНИТУРА') //группа п/держатель
PolkD = Krep.NewFurniture('П/Держатель');
PB = Prop.NewNumber('П/Д сзади', 50);
PF = Prop.NewNumber('П/Д спереди', 50);
//добавим просмотр в окне любые изменения параметров
Prop.OnChange = function () {
UpdateShelfs();
}
}
function MakeNewShelfs() { //Получаем данные о габаритах, в которые записывать полки
SizeExists = false; // Выставляем флаг, что размеры ещё не заданы
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
TopPan = GetPanel('Укажите верхнюю панель');
BotPan = GetPanel('Укажите нижнюю панель');
Top = TopPan.GabMin.y;
Bot = BotPan.GabMax.y;
//ставим камеру слева
SetCamera(p3dLeft);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;
SetCamera(p3dPerspective);//ставим вид перспектива
SizeExists = true; // Выставляем флаг, что размеры уже заданы
UpdateShelfs();
}
function UpdateShelfs() { // Перестариваем полки на основе новых параметров
if (!SizeExists) // Если размеры не заданы
return; //Выходим из функции, дабы не было ошибок из-за некорректных размеров
DeleteNewObjects();
BlockP = BeginParametricBlock("Полка съёмная");//создаем блок
MatPolk.SetActive();//активируем материал
Thick = ActiveMaterial.Thickness;//запомним толщину материала
Count = SC.Value;//количество
PosY = Bot;//позиционирование
Height = Top - Bot;
YInc = (Height - Count * Thick) / (Count + 1);
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + 1, Back, Right - 1, Front - OF.Value, PosY);
Panel.Name = 'полка съемная';
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.AddButt(Kromka, 0);
Panel.AddButt(Kromka, 1);
Panel.AddButt(Kromka, 2);
Panel.AddButt(Kromka, 3);
PosY += Thick;
EndBlock();
}
}
[свернуть]
|
Одна полка из блока выпадает(...
|
|
|
13.12.2019, 15:03
|
#1215
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Rafael21
Одна полка из блока выпадает(...
|
Переместил вызов EndBlock() вне цикла, плюс заменил DeleteNewObjects() на Model.Temp.Clear() (почему-то оставались пустые блоки).
Новый код
PHP код:
FileOptions = 'Полка.xml';//создаем файл для сохранения текущих параметров
var SizeExists = false; // Флаг, что размеры заданы, проверяется в UpdateShelfs
MakeProperties();//назначение параметров построения
Action.Properties.Load(FileOptions);// считываем сохраненные параметры предыдущих построений
Action.OnFinish = function () {
Action.Properties.Save(FileOptions);// сохранение внесенных изменений в параметрах
}
BtnMake = NewButtonInput('Закончить');//выводим кнопку "закончить"
BtnMake.OnChange = function () {//указываем кнопке функцию
UpdateShelfs();//то есть нажимая кнопку вызываем построение
Action.Finish();
}
MakeNewShelfs();
Action.Continue();//скрипт ждет наших действии
function MakeProperties() { //теперь создадим фукнцию параметров, то есть окно
Prop = Action.Properties; //создаем объект свойства с именем Prop. Дальше сможем добавить различные элементы например картинку
Polka = Prop.NewGroup('ПОЛКА') //группа полка
MatPolk = Polka.NewMaterial('Материал');
Kromka = Polka.NewButt('Кромка');
SC = Prop.NewNumber('Кол-во полок', 2);
OF = Prop.NewNumber('Отступ спереди', 30);
//полкодержатель
Krep = Prop.NewFurniture('ФУРНИТУРА') //группа п/держатель
PolkD = Krep.NewFurniture('П/Держатель');
PB = Prop.NewNumber('П/Д сзади', 50);
PF = Prop.NewNumber('П/Д спереди', 50);
//добавим просмотр в окне любые изменения параметров
Prop.OnChange = function () {
UpdateShelfs();
}
}
function MakeNewShelfs() { //Получаем данные о габаритах, в которые записывать полки
SizeExists = false; // Выставляем флаг, что размеры ещё не заданы
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
TopPan = GetPanel('Укажите верхнюю панель');
BotPan = GetPanel('Укажите нижнюю панель');
Top = TopPan.GabMin.y;
Bot = BotPan.GabMax.y;
//ставим камеру слева
SetCamera(p3dLeft);
Back = GetEdge('Укажите заднюю границу', AxisY).First.z;
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;
SetCamera(p3dPerspective);//ставим вид перспектива
SizeExists = true; // Выставляем флаг, что размеры уже заданы
UpdateShelfs();
}
function UpdateShelfs() { // Перестариваем полки на основе новых параметров
if (!SizeExists) // Если размеры не заданы
return; //Выходим из функции, дабы не было ошибок из-за некорректных размеров
Model.Temp.Clear();
BlockP = BeginParametricBlock("Полка съёмная");//создаем блок
MatPolk.SetActive();//активируем материал
Thick = ActiveMaterial.Thickness;//запомним толщину материала
Count = SC.Value;//количество
PosY = Bot;//позиционирование
Height = Top - Bot;
YInc = (Height - Count * Thick) / (Count + 1);
for (var k = 0; k < Count; k++) {
PosY += YInc;
Panel = AddHorizPanel(Left + 1, Back, Right - 1, Front - OF.Value, PosY);
Panel.Name = 'полка съемная';
Panel.TextureOrientation = TextureOrientation.Horizontal;
Panel.AddButt(Kromka, 0);
Panel.AddButt(Kromka, 1);
Panel.AddButt(Kromka, 2);
Panel.AddButt(Kromka, 3);
PosY += Thick;
}
EndBlock();
}
[свернуть]
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
13.12.2019, 15:20
|
#1216
|
Новичок
Регистрация: 09.09.2019
Сообщений: 9
Сказал(а) спасибо: 5
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Letos, спасибо вам. Попробую.
|
|
|
10.01.2020, 16:14
|
#1217
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 166
Сказал(а) спасибо: 57
Поблагодарили 244 раз(а) в 46 сообщениях
Вес репутации: 139
|
Добавить в сборку.
Всех с прошедшими праздниками. Пытаюсь добавить фурнитуру в сборку, подскажите, что не так делаю. БМ 8(н) .
PHP код:
var pan = AddVertPanel(0, 0, 300, 700, 0) ;
var sborka = AddAssembly("Сборка");
var oF = OpenFurniture('Фурнитура.f3d');
oF.Mount1(pan,50,50,50,0);
sborka.Owner = oF;
Спасибо.
|
|
|
10.01.2020, 16:18
|
#1218
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Максим Геннадьевич
Всех с прошедшими праздниками. Пытаюсь добавить фурнитуру в сборку, подскажите, что не так делаю. БМ 8(н) .
PHP код:
var pan = AddVertPanel(0, 0, 300, 700, 0) ; var sborka = AddAssembly("Сборка"); var oF = OpenFurniture('Фурнитура.f3d'); oF.Mount1(pan,50,50,50,0); sborka.Owner = oF;
Спасибо.
|
Нужно назначить родителя объекту, который вернула функция установки фурнитуры
PHP код:
var pan = AddVertPanel(0, 0, 300, 700, 0) ; var sborka = AddAssembly("Сборка"); var oF = OpenFurniture('Фурнитура.f3d'); var furn = oF.Mount1(pan,50,50,50,0); furn.Owner = sborka;
Последний раз редактировалось Letos; 10.01.2020 в 16:19.
Причина: поправил
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
10.01.2020, 16:20
|
#1219
|
VIP
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,026 раз(а) в 6,492 сообщениях
Вес репутации: 5258
|
Цитата:
Сообщение от Максим Геннадьевич
Пытаюсь добавить фурнитуру в сборку
|
Максим Геннадьевич, поделитесь, пожалуйста, почему это делать лучше с помощью скрипта, а не с помощью штатной команды:?
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
|
|
|
10.01.2020, 16:54
|
#1220
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Uncle
Максим Геннадьевич, поделитесь, пожалуйста, почему это делать лучше с помощью скрипта, а не с помощью штатной команды:?
|
Думаю потому, что добавление фурнитуры в сборку (частный случай добавления объекта в блок) - лишь часть скрипта. В целом, скрипт может создавать сложное изделие и пользователю скрипта будет приятнее, если всё будет структуризировано, нежели лежать кучей в корне модели (как делают созданные по умолчанию скриптом объекты). Максим Геннадьевич написал вполне грамотно - обрисовал конкретную проблему и приложил минимальный пример, на котором это воспроизводится.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 14:26. Часовой пояс GMT +3.
|