|
|
|
|
|
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..
Причина: Добавил объявление.
|
Просмотров: 1406516
|
6 пользователя(ей) сказали cпасибо:
|
|
30.10.2016, 21:01
|
#891
|
Новичок
Регистрация: 08.10.2016
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
скрипты
ребята помогите начинающему
пытаюсь написать скрипт по созданию шкафа
на основе урока "моя первая тумбочка 2"
только хочу чтоб кол полок было переменным и вот что у меня получается:
Скрытый текст
FileOptions = 'Настройки.xml2';
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;
Image = Prop.NewImage('Схема изделия', 'Схема.wmf');
Image.MaxHeight = 250;
Dl = Prop.NewNumber('Ширина', 500);
Gl = Prop.NewNumber('Глубина', 400);
H = Prop.NewNumber('Высота', 700);
Hd = Prop.NewNumber('Размер до дна', 50);
Fas = Prop.NewNumber('Размер фаски', 50);
Korpus = Prop.NewGroup('Корпус')
MatKorp = Korpus.NewMaterial('Материал корпуса');
KrVidimKorp = Korpus.NewButt('Видимая облицовка');
KrNotVidimKorp = Korpus.NewButt('Невидимая облицовка');
Polki = Prop.NewGroup('Полки');
KolPolok = Polki.NewNumber('Количество полок', 2);
OtstPered = Polki.NewNumber('Отступ от переда', 20);
ZadnStenka = Prop.NewGroup('Задняя стенка');
MatZadnStenka = ZadnStenka.NewMaterial('Материал');
Dver = Prop.NewGroup('Дверь')
MatDver = Dver.NewMaterial('Материал');
KrDver = Dver.NewButt('Облицовка');
Petli = Dver.NewFurniture('Петля');
Freza = Dver.NewSelector('Профиль фрезы');
TipFilenki = Dver.NewCombo('Тип филенки', 'Тип1\nТип2\nТип3\nТип4');
Freza.OnClick = function() {
Freza.Value = system.askFileName('frw');
};
OtstupFil = Dver.NewNumber('Отступ филенки от края', 80);
Rad = Dver.NewNumber('Радиус сопряжений', 80);
OkBtn = Prop.NewButton('Построить');
//Обработка нажатия на кнопку Построить
OkBtn.OnClick = function() {
Make(); //Вызываем функцию построения всех панелей
Action.Finish();
}
//Обработка любого изменения значений свойств
Prop.OnChange = function() {
if (Fas.Value > Hd.Value) alert('Предупреждение! Фаска больше чем высота дна.')
Make(); //Вызываем функцию построения всех панелей
};
}
function Make() {
//Удаление старых объектов из области скрипта
DeleteNewObjects();
//Определяем толщину задней стенки для правильного формирования толщины паза
MatZadnStenka.SetActive();
ThickZadSt = ActiveMaterial.Thickness;
MatKorp.SetActive();
//Считываем толщину текущего материала
Thick = ActiveMaterial.Thickness;
Krishka = AddHorizPanel(0, 0, Dl.Value, Gl.Value, H.Value - Thick);
//Присваиваем панели имя
Krishka.Name = 'Крышка';
Krishka.AddButt(KrNotVidimKorp, 0);
Krishka.AddButt(KrVidimKorp, 1);
Krishka.AddButt(KrVidimKorp, 2);
Krishka.AddButt(KrVidimKorp, 3);
//Стоим паз
Cut = Krishka.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(0, -12, Dl.Value, -12);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, 0, -ThickZadSt - 0.5, 6);
Krishka.Build();
LevBok = AddVertPanel(0, 0, Gl.Value, H.Value - Thick, 0);
//Присваиваем панели имя
LevBok.Name = 'Боковина левая';
LevBok.Contour.Facet(0, 0, Fas.Value);
LevBok.AddButt(KrNotVidimKorp, 0);
LevBok.AddButt(KrVidimKorp, 1);
// LevBok.AddButt(KrNotVidimKorp, 2)
LevBok.AddButt(KrNotVidimKorp, 3);
LevBok.AddButt(KrNotVidimKorp, 4);
Cut = LevBok.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(12, 0, 12, H.Value - Thick);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, 0, -ThickZadSt - 0.5, 6);
LevBok.Build();
PravBok = AddSymmetry(LevBok, NewVector(Dl.Value / 2, 0, 0), AxisX);
//Присваиваем панели имя
PravBok.Name = 'Боковина правая';
Dno = AddHorizPanel(Thick, 0, Dl.Value - Thick, Gl.Value, Hd.Value);
//Присваиваем панели имя
Dno.Name = 'Дно';
Dno.AddButt(KrNotVidimKorp, 0);
// Dno.AddButt(KrVidimKorp, 1);
Dno.AddButt(KrVidimKorp, 2)
// Dno.AddButt(KrVidimKorp, 3);
Cut = Dno.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(0, -12, Dl.Value - Thick, -12);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, Thick, -ThickZadSt - 0.5, Thick - 12);
Dno.Build();
Cokol = AddFrontPanel(Thick, 0, Dl.Value - Thick, Hd.Value, Gl.Value - 50 - Thick);
//Присваиваем панели имя
Cokol.Name = 'Цоколь';
Cokol.AddButt(KrNotVidimKorp, 0);
Cokol.Build();
Cokolzad = AddSymmetry(Cokol, NewVector(0, 0, Gl.Value / 2), AxisZ);
//Присваиваем панели имя
Cokolzad.Name = 'цоколь зад';
for (var k = 0; k < KolPolok.Value; k++)
{
//Высота проема в секции
Hp = H.Value - Thick - Hd.Value - Thick;
PosY = Hd.Value + Thick;
//Высота полки в проеме
YInc = (Hp - KolPolok.Value * Thick) / (KolPolok.Value + 1);
PosY += YInc;
Polka = AddHorizPanel(Thick + 1, 10 + ThickZadSt, Dl.Value - Thick - 1, Gl.Value - 30, PosY);
//Присваиваем панели имя
Polka.Name = 'Полка';
Polka.AddButt(KrNotVidimKorp, 0);
Polka.AddButt(KrNotVidimKorp, 1);
Polka.AddButt(KrVidimKorp, 2)
Polka.AddButt(KrNotVidimKorp, 3);
Polka.Build();
Polkodergatel = OpenFurniture('Полкодержатель.f3d');
Polkodergatel.Mount(Polka, LevBok, 2 *Thick, PosY, Gl.Value + 32);
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, PosY, Gl.Value - 32);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, PosY, Gl.Value + 32);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, PosY, Gl.Value - 32);
PosY += Thick;
}
MatZadnStenka.SetActive();
ZadnStenka = AddFrontPanel(Thick - 9, Hd.Value + Thick - 9,
Dl.Value - Thick + 9, H.Value - Thick + 9, 10);
//Присваиваем панели имя
ZadnStenka.Name = 'Задняя стенка';
Block = BeginBlock("Дверь")
MatDver.SetActive();
ThickDver = ActiveMaterial.Thickness;
Dver = AddFrontPanel(2, Hd.Value + 2, Dl.Value - 2, H.Value - 2, Gl.Value);
//Присваиваем панели имя
Dver.Name = 'Дверь';
for (var k = 0; k < 4; k++) {
Dver.AddButt(KrDver, k)
}
Rucka = OpenFurniture('Ручка-скоба 128 UN47_128.f3d');
Rucka.Mount1(Dver, Dl.Value - 2 - 40, H.Value - 115, Gl.Value + ThickDver, 0);
FileFreza = Freza.Value;
if (system.fileExists(FileFreza)) {
Cut = Dver.AddCut('Фил');
Traj = Cut.Trajectory;
switch (TipFilenki.ItemIndex)
{
case 0: {
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - 0.2 * Dver.GSize.y);
p4 = NewPoint(Dver.GSize.x / 2, Dver.GSize.y - OtstupFil.Value);
p5 = NewPoint(OtstupFil.Value, Dver.GSize.y - 0.2 * Dver.GSize.y);
L1 = Traj.AddLine(p1.x, p1.y, p2.x, p2.y);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
D1 = Traj.AddArc3(p3, p4, p5);
L3 = Traj.AddLine(p5.x, p5.y, p1.x, p1.y);
Traj.RoundingEx(L1, L2, p2.x - 0.5 * Rad.Value, p2.y + 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L1, p1.x + 0.5 * Rad.Value, p1.y + 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L2, D1, p3.x - 0.5 * Rad.Value, p3.y, Rad.Value);
Traj.RoundingEx(L3, D1, p5.x + 0.5 * Rad.Value, p5.y, Rad.Value);
break;
}
case 1: {
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p4 = NewPoint(OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
L1 = Traj.AddLine(p1.x, p1.y, p2.x, p2.y);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
L3 = Traj.AddLine(p3.x, p3.y, p4.x, p4.y);
L4 = Traj.AddLine(p4.x, p4.y, p1.x, p1.y);
Traj.RoundingEx(L2, L3, p3.x - 0.5 * Rad.Value, p3.y - 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L4, p4.x + 0.5 * Rad.Value, p4.y - 0.5 * Rad.Value, Rad.Value);
break;
}
case 2: {
S = Dver.GSize.x - 2 * OtstupFil.Value;
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value + 0.5 * S);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value + 0.5 * S);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p4 = NewPoint(OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p5 = NewPoint(OtstupFil.Value + S * 0.5, OtstupFil.Value);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
L3 = Traj.AddLine(p3.x, p3.y, p4.x, p4.y);
L4 = Traj.AddLine(p4.x, p4.y, p1.x, p1.y);
Traj.RoundingEx(L2, L3, p3.x - 0.5 * Rad.Value, p3.y - 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L4, p4.x + 0.5 * Rad.Value, p4.y - 0.5 * Rad.Value, Rad.Value);
Traj.AddArc3(p1, p5, p2);
break;
}
case 3: {
O1 = Traj.AddCircle(Dver.GSize.x * 0.5, Dver.GSize.y * 0.5, Rad.Value);
break;
}
}
Cut.Contour.Load(FileFreza);
Cut.Contour.Move(0, Dver.Thickness);
}
Dver.Build();
EndBlock();
Block.AnimType = AnimationType.DoorLeft;
FPetli = Petli.Value;
Ost = (Dver.GSize.y - 200) % 32 //Остаток от деления высоты двери - 200 на 32
k = (Dver.GSize.y - 200 - Ost) / 32 // Сколько раз укладывается размер 32
Dy = (Dver.GSize.y - k * 32) * 0.5 //Смещение петли от низа или верха двери
FPetli.Mount(LevBok, Dver, 2 * Thick, Dver.PositionY + Dy, 0);
FPetli.Mount(LevBok, Dver, 2 * Thick, Dver.PositionY + Dy + k * 32, 0);
Polkodergatel = OpenFurniture('Полкодержатель.f3d');
Ost = (Gl.Value - 37 - 40) % 32;
k = ((Gl.Value - 37 - 40) - Ost) / 32;
Dz = Gl.Value - 37 - k * 32;
Dz1 = Gl.Value - 37 - 32;
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, Hp, Dz);
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, Hp, Dz1);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, Hp, Dz);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, Hp, Dz1);
Excentric = OpenFurniture('Эксцентрик.f3d');
Excentric.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz);
Excentric.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz1);
Excentric.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz);
Excentric.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz1);
Excentric.Mount(LevBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz);
Excentric.Mount(LevBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz1);
Excentric.Mount(PravBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz);
Excentric.Mount(PravBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz1);
Excentric.Mount(Cokol, LevBok, 2 * Thick, Hd.Value * 0.5, 0);
Excentric.Mount(Cokol, PravBok, 2 * Thick, Hd.Value * 0.5, 0);
Shkant = OpenFurniture('Шкант.f3d');
Shkant.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(LevBok, Krishka, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(LevBok, Krishka, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(PravBok, Krishka, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(PravBok, Krishka, 2 * Thick, Hd.Value, Dz1 - 32);
} [свернуть]
а вот скрин нишу делит на на части но полку ставит только одну подскажите пожайлуста как сделать правильно
|
|
|
31.10.2016, 09:56
|
#892
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 508
|
Цитата:
Сообщение от alex2512
ребята помогите начинающему
пытаюсь написать скрипт по созданию шкафа
на основе урока "моя первая тумбочка 2"
только хочу чтоб кол полок было переменным и вот что у меня получается:
а вот скрин нишу делит на на части но полку ставит только одну подскажите пожайлуста как сделать правильно
|
Скрытый текст
FileOptions = 'Настройки.xml2';
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;
Image = Prop.NewImage('Схема изделия', 'Схема.wmf');
Image.MaxHeight = 250;
Dl = Prop.NewNumber('Ширина', 500);
Gl = Prop.NewNumber('Глубина', 400);
H = Prop.NewNumber('Высота', 700);
Hd = Prop.NewNumber('Размер до дна', 50);
Fas = Prop.NewNumber('Размер фаски', 50);
Korpus = Prop.NewGroup('Корпус')
MatKorp = Korpus.NewMaterial('Материал корпуса');
KrVidimKorp = Korpus.NewButt('Видимая облицовка');
KrNotVidimKorp = Korpus.NewButt('Невидимая облицовка');
Polki = Prop.NewGroup('Полки');
KolPolok = Polki.NewNumber('Количество полок', 2);
OtstPered = Polki.NewNumber('Отступ от переда', 20);
ZadnStenka = Prop.NewGroup('Задняя стенка');
MatZadnStenka = ZadnStenka.NewMaterial('Материал');
Dver = Prop.NewGroup('Дверь')
MatDver = Dver.NewMaterial('Материал');
KrDver = Dver.NewButt('Облицовка');
Petli = Dver.NewFurniture('Петля');
Freza = Dver.NewSelector('Профиль фрезы');
TipFilenki = Dver.NewCombo('Тип филенки', 'Тип1\nТип2\nТип3\nТип4');
Freza.OnClick = function() {
Freza.Value = system.askFileName('frw');
};
OtstupFil = Dver.NewNumber('Отступ филенки от края', 80);
Rad = Dver.NewNumber('Радиус сопряжений', 80);
OkBtn = Prop.NewButton('Построить');
//Обработка нажатия на кнопку Построить
OkBtn.OnClick = function() {
Make(); //Вызываем функцию построения всех панелей
Action.Finish();
}
//Обработка любого изменения значений свойств
Prop.OnChange = function() {
if (Fas.Value > Hd.Value) alert('Предупреждение! Фаска больше чем высота дна.')
Make(); //Вызываем функцию построения всех панелей
};
}
function Make() {
//Удаление старых объектов из области скрипта
DeleteNewObjects();
//Определяем толщину задней стенки для правильного формирования толщины паза
MatZadnStenka.SetActive();
ThickZadSt = ActiveMaterial.Thickness;
MatKorp.SetActive();
//Считываем толщину текущего материала
Thick = ActiveMaterial.Thickness;
Krishka = AddHorizPanel(0, 0, Dl.Value, Gl.Value, H.Value - Thick);
//Присваиваем панели имя
Krishka.Name = 'Крышка';
Krishka.AddButt(KrNotVidimKorp, 0);
Krishka.AddButt(KrVidimKorp, 1);
Krishka.AddButt(KrVidimKorp, 2);
Krishka.AddButt(KrVidimKorp, 3);
//Стоим паз
Cut = Krishka.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(0, -12, Dl.Value, -12);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, 0, -ThickZadSt - 0.5, 6);
Krishka.Build();
LevBok = AddVertPanel(0, 0, Gl.Value, H.Value - Thick, 0);
//Присваиваем панели имя
LevBok.Name = 'Боковина левая';
LevBok.Contour.Facet(0, 0, Fas.Value);
LevBok.AddButt(KrNotVidimKorp, 0);
LevBok.AddButt(KrVidimKorp, 1);
// LevBok.AddButt(KrNotVidimKorp, 2)
LevBok.AddButt(KrNotVidimKorp, 3);
LevBok.AddButt(KrNotVidimKorp, 4);
Cut = LevBok.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(12, 0, 12, H.Value - Thick);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, 0, -ThickZadSt - 0.5, 6);
LevBok.Build();
PravBok = AddSymmetry(LevBok, NewVector(Dl.Value / 2, 0, 0), AxisX);
//Присваиваем панели имя
PravBok.Name = 'Боковина правая';
Dno = AddHorizPanel(Thick, 0, Dl.Value - Thick, Gl.Value, Hd.Value);
//Присваиваем панели имя
Dno.Name = 'Дно';
Dno.AddButt(KrNotVidimKorp, 0);
// Dno.AddButt(KrVidimKorp, 1);
Dno.AddButt(KrVidimKorp, 2)
// Dno.AddButt(KrVidimKorp, 3);
Cut = Dno.AddCut('ЗадСт');
Traj = Cut.Trajectory;
Traj.AddLine(0, -12, Dl.Value - Thick, -12);
ContPaz = Cut.Contour;
ContPaz.AddRectangle(0, Thick, -ThickZadSt - 0.5, Thick - 12);
Dno.Build();
Cokol = AddFrontPanel(Thick, 0, Dl.Value - Thick, Hd.Value, Gl.Value - 50 - Thick);
//Присваиваем панели имя
Cokol.Name = 'Цоколь';
Cokol.AddButt(KrNotVidimKorp, 0);
Cokol.Build();
Cokolzad = AddSymmetry(Cokol, NewVector(0, 0, Gl.Value / 2), AxisZ);
//Присваиваем панели имя
Cokolzad.Name = 'цоколь зад';
//Высота проема в секции
Hp = H.Value - Thick - Hd.Value - Thick;
//Высота полки в проеме
YInc = (Hp - KolPolok.Value * Thick) / (KolPolok.Value + 1);
PosY = YInc + Hd.Value + Thick;
for (var k = 0; k < KolPolok.Value; k++) {
Polka = AddHorizPanel(Thick + 1, 10 + ThickZadSt, Dl.Value - Thick - 1, Gl.Value - 30, PosY);
//Присваиваем панели имя
Polka.Name = 'Полка';
Polka.AddButt(KrNotVidimKorp, 0);
Polka.AddButt(KrNotVidimKorp, 1);
Polka.AddButt(KrVidimKorp, 2)
Polka.AddButt(KrNotVidimKorp, 3);
Polka.Build();
Polkodergatel = OpenFurniture('Полкодержатель.f3d');
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, PosY, Gl.Value + 32);
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, PosY, Gl.Value - 32);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, PosY, Gl.Value + 32);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, PosY, Gl.Value - 32);
PosY += YInc + Thick;
}
MatZadnStenka.SetActive();
ZadnStenka = AddFrontPanel(Thick - 9, Hd.Value + Thick - 9,
Dl.Value - Thick + 9, H.Value - Thick + 9, 10);
//Присваиваем панели имя
ZadnStenka.Name = 'Задняя стенка';
Block = BeginBlock("Дверь")
MatDver.SetActive();
ThickDver = ActiveMaterial.Thickness;
Dver = AddFrontPanel(2, Hd.Value + 2, Dl.Value - 2, H.Value - 2, Gl.Value);
//Присваиваем панели имя
Dver.Name = 'Дверь';
for (var k = 0; k < 4; k++) {
Dver.AddButt(KrDver, k)
}
Rucka = OpenFurniture('Ручка-скоба 128 UN47_128.f3d');
Rucka.Mount1(Dver, Dl.Value - 2 - 40, H.Value - 115, Gl.Value + ThickDver, 0);
FileFreza = Freza.Value;
if (system.fileExists(FileFreza)) {
Cut = Dver.AddCut('Фил');
Traj = Cut.Trajectory;
switch (TipFilenki.ItemIndex) {
case 0:
{
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - 0.2 * Dver.GSize.y);
p4 = NewPoint(Dver.GSize.x / 2, Dver.GSize.y - OtstupFil.Value);
p5 = NewPoint(OtstupFil.Value, Dver.GSize.y - 0.2 * Dver.GSize.y);
L1 = Traj.AddLine(p1.x, p1.y, p2.x, p2.y);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
D1 = Traj.AddArc3(p3, p4, p5);
L3 = Traj.AddLine(p5.x, p5.y, p1.x, p1.y);
Traj.RoundingEx(L1, L2, p2.x - 0.5 * Rad.Value, p2.y + 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L1, p1.x + 0.5 * Rad.Value, p1.y + 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L2, D1, p3.x - 0.5 * Rad.Value, p3.y, Rad.Value);
Traj.RoundingEx(L3, D1, p5.x + 0.5 * Rad.Value, p5.y, Rad.Value);
break;
}
case 1:
{
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p4 = NewPoint(OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
L1 = Traj.AddLine(p1.x, p1.y, p2.x, p2.y);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
L3 = Traj.AddLine(p3.x, p3.y, p4.x, p4.y);
L4 = Traj.AddLine(p4.x, p4.y, p1.x, p1.y);
Traj.RoundingEx(L2, L3, p3.x - 0.5 * Rad.Value, p3.y - 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L4, p4.x + 0.5 * Rad.Value, p4.y - 0.5 * Rad.Value, Rad.Value);
break;
}
case 2:
{
S = Dver.GSize.x - 2 * OtstupFil.Value;
p1 = NewPoint(OtstupFil.Value, OtstupFil.Value + 0.5 * S);
p2 = NewPoint(Dver.GSize.x - OtstupFil.Value, OtstupFil.Value + 0.5 * S);
p3 = NewPoint(Dver.GSize.x - OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p4 = NewPoint(OtstupFil.Value, Dver.GSize.y - OtstupFil.Value);
p5 = NewPoint(OtstupFil.Value + S * 0.5, OtstupFil.Value);
L2 = Traj.AddLine(p2.x, p2.y, p3.x, p3.y);
L3 = Traj.AddLine(p3.x, p3.y, p4.x, p4.y);
L4 = Traj.AddLine(p4.x, p4.y, p1.x, p1.y);
Traj.RoundingEx(L2, L3, p3.x - 0.5 * Rad.Value, p3.y - 0.5 * Rad.Value, Rad.Value);
Traj.RoundingEx(L3, L4, p4.x + 0.5 * Rad.Value, p4.y - 0.5 * Rad.Value, Rad.Value);
Traj.AddArc3(p1, p5, p2);
break;
}
case 3:
{
O1 = Traj.AddCircle(Dver.GSize.x * 0.5, Dver.GSize.y * 0.5, Rad.Value);
break;
}
}
Cut.Contour.Load(FileFreza);
Cut.Contour.Move(0, Dver.Thickness);
}
Dver.Build();
EndBlock();
Block.AnimType = AnimationType.DoorLeft;
FPetli = Petli.Value;
Ost = (Dver.GSize.y - 200) % 32 //Остаток от деления высоты двери - 200 на 32
k = (Dver.GSize.y - 200 - Ost) / 32 // Сколько раз укладывается размер 32
Dy = (Dver.GSize.y - k * 32) * 0.5 //Смещение петли от низа или верха двери
FPetli.Mount(LevBok, Dver, 2 * Thick, Dver.PositionY + Dy, 0);
FPetli.Mount(LevBok, Dver, 2 * Thick, Dver.PositionY + Dy + k * 32, 0);
Polkodergatel = OpenFurniture('Полкодержатель.f3d');
Ost = (Gl.Value - 37 - 40) % 32;
k = ((Gl.Value - 37 - 40) - Ost) / 32;
Dz = Gl.Value - 37 - k * 32;
Dz1 = Gl.Value - 37 - 32;
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, Hp, Dz);
Polkodergatel.Mount(Polka, LevBok, 2 * Thick, Hp, Dz1);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, Hp, Dz);
Polkodergatel.Mount(Polka, PravBok, 2 * Thick, Hp, Dz1);
Excentric = OpenFurniture('Эксцентрик.f3d');
Excentric.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz);
Excentric.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz1);
Excentric.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz);
Excentric.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz1);
Excentric.Mount(LevBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz);
Excentric.Mount(LevBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz1);
Excentric.Mount(PravBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz);
Excentric.Mount(PravBok, Krishka, 2 * Thick, Hd.Value - Thick, Dz1);
Excentric.Mount(Cokol, LevBok, 2 * Thick, Hd.Value * 0.5, 0);
Excentric.Mount(Cokol, PravBok, 2 * Thick, Hd.Value * 0.5, 0);
Shkant = OpenFurniture('Шкант.f3d');
Shkant.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(Dno, LevBok, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(Dno, PravBok, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(LevBok, Krishka, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(LevBok, Krishka, 2 * Thick, Hd.Value, Dz1 - 32);
Shkant.Mount(PravBok, Krishka, 2 * Thick, Hd.Value, Dz + 32);
Shkant.Mount(PravBok, Krishka, 2 * Thick, Hd.Value, Dz1 - 32);
} [свернуть]
Красным выделил исправленное.
Дело в том, что переменную PosY нужно определить до цикла, а потом внутри цикла она наращивается (это последняя строчка в цикле) величиной проелта и толщиной полки.
А у Вас эта переменная определялась вначале цикла, а в конце наращивалась и когда действо переходило в начало цикла переменная PosY перезаписывалась первым значением.
А полки в Вашем скрипте ставились две, но в одни и те же координаты. Это видно в структуре модели.
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
01.11.2016, 17:19
|
#893
|
Новичок
Регистрация: 08.10.2016
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
спасибо огромное я тоже нашел решение немного по другому , но все равно спасибо
сейчас работаю над другой проблемой если не трудно может тоже подскажете
хочу поставить крепеж на переменную панель относительно тоже переменной панели
подскажите возможно ли это, и можно ли на каждую переменную панель задать имя
|
|
|
01.11.2016, 21:21
|
#894
|
Новичок
Регистрация: 08.10.2016
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
пробовал не получается может что не так делаю
Добавлено через 25 минут
Цитата:
Можно перед циклом объявить список стоек так:
Stoiki = [];
А перед концом цикла добавлять очередную стойку в этот список:
Stoiki.push(StoikaKr);
Тогда, можно будет обращатьсяк стойкам по номеру, например
Stoiki[0].Name = '123';
|
пробовал не получается
|
|
|
02.11.2016, 16:24
|
#895
|
Местный
Регистрация: 07.09.2014
Сообщений: 187
Сказал(а) спасибо: 182
Поблагодарили 211 раз(а) в 69 сообщениях
Вес репутации: 178
|
Цитата:
Сообщение от alex2512
пробовал не получается
|
Пример задания имени панелей:
Скрытый текст
Count = 3;
Thick = ActiveMaterial.Thickness;
PosY = 0;
YInc = 100;
for (var k = 0; k < Count; k++) {
PosY += Math.round(YInc);
Polka = AddHorizPanel(0, 0, 600, 300, PosY);
PosY += Thick;
Polka.Name = 'Полка' + (k + 1);
} [свернуть]
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
07.11.2016, 12:48
|
#896
|
Пользователь
Регистрация: 23.12.2008
Сообщений: 58
Сказал(а) спасибо: 11
Поблагодарили 153 раз(а) в 10 сообщениях
Вес репутации: 231
|
Народ, помогите, плз, полному нубу в программировании!
Юзаю 8-ку, а 9-ки, полагаю, у меня не будет ))). Так вот, я пытаюсь слепить скрипт расстановки гвоздей на з/с, но у меня криво получается. Гвозди отчего-то ставятся неправильно и не хотят по всей длине раскидываться.
Код, собственно, этот:
Скрытый текст
ileOptions = 'Настройки.xml';
function MakeProperties()
{
Prop = Action.Properties;
ТипКрепежа = Prop.NewFurniture('Тип крепежа');
ПоложениеКрепежа = Prop.NewCombo('Положение крепежа', 'Внутри\nСнаружи');
//ТипБазирования = Prop.NewCombo('Базирование крепежа', 'От переднего торца\nОт заднего торца');
//НачальныйРазмер = Prop.NewNumber('Минимальное расстояние', 50);
//ШагКрепежа = Prop.NewNumber('Шаг крепежа', 130);
}
MakeProperties()
Action.Properties.Load(FileOptions);
Action.OnFinish = function()
{
Action.Properties.Save(FileOptions);
}
Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
x1 = Bok1.GabMax.x + 1;
x2 = Bok2.GabMin.x - 1;
while (true)
{
Polka = GetPanel("Укажите заднюю стенку");
if (ПоложениеКрепежа.Value == 'Снаружи') {Pz = Polka.GabMin.z -1}
else {Pz = Polka.GabMax.z +1};
y1 = Polka.GabMin.y;
y2 = Polka.GabMax.y;
}
ТипКрепежа.Value.Mount(Polka, Bok1, x1, Polka.GabMax.y-50, Pz)
ТипКрепежа.Value.Mount(Polka, Bok2, x2,Polka.GabMin.y+50, Pz)
ТипКрепежа.Value.Mount(Polka, Bok1, x1, Polka.GabMin.y+50, Pz)
ТипКрепежа.Value.Mount(Polka, Bok2, x2, Polka.GabMax.y-50, Pz)
Action.Commit();
} [свернуть]
|
|
|
07.11.2016, 14:28
|
#897
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 508
|
Цитата:
Сообщение от maragva
Народ, помогите, плз, полному нубу в программировании!
Юзаю 8-ку, а 9-ки, полагаю, у меня не будет ))). Так вот, я пытаюсь слепить скрипт расстановки гвоздей на з/с, но у меня криво получается. Гвозди отчего-то ставятся неправильно и не хотят по всей длине раскидываться.
Код, собственно, этот:
|
Попробуйте этот скрипт... Если высота боков будет отличатся (как минимум на величину шага установки гвоздей), то на каждой боковине будет свое кол-во гвоздей.
Скрытый текст
FileOptions = 'Настройки.xml';
function MakeProperties() {
Prop = Action.Properties;
ТипКрепежа = Prop.NewFurniture('Тип крепежа');
ПоложениеКрепежа = Prop.NewCombo('Положение крепежа', 'Внутри\nСнаружи');
//ТипБазирования = Prop.NewCombo('Базирование крепежа', 'От переднего торца\nОт заднего торца');
//НачальныйРазмер = Prop.NewNumber('Минимальное расстояние', 50);
ШагКрепежа = Prop.NewNumber('Шаг крепежа', 130);
}
MakeProperties()
Action.Properties.Load(FileOptions);
Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}
Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
Polka = GetPanel("Укажите заднюю стенку");
x1 = Bok1.GabMax.x + 1;
x2 = Bok2.GabMin.x - 1;
Gvozd(Bok1, Polka);
Gvozd(Bok2, Polka);
function Gvozd(Pan1, Pan2) {
if (ПоложениеКрепежа.Value == 'Снаружи') {
Pz = Polka.GabMin.z - 1
} else {
Pz = Polka.GabMax.z + 1
};
Ost = Math.floor(Pan1.GSize.y % ШагКрепежа.Value);
CountStep = Math.floor((Pan1.GSize.y - Ost) / ШагКрепежа.Value);
if (Ost < 16) {
Dop = 0;
PosY = ШагКрепежа.Value / 2;
for (var i = 0; i < CountStep + Dop; i++) {
ТипКрепежа.Value.Mount(Pan1, Pan2, x1, Pan1.GabMax.y - PosY, Pz);
PosY += ШагКрепежа.Value;
};
} else {
Dop = 1
PosY = Ost / 2;
for (var i = 0; i < CountStep + Dop; i++) {
ТипКрепежа.Value.Mount(Pan1, Pan2, x1, Pan1.GabMax.y - PosY, Pz);
PosY += ШагКрепежа.Value;
};
};
};
[свернуть]
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
07.11.2016, 16:17
|
#898
|
Пользователь
Регистрация: 23.12.2008
Сообщений: 58
Сказал(а) спасибо: 11
Поблагодарили 153 раз(а) в 10 сообщениях
Вес репутации: 231
|
Цитата:
Сообщение от maxgmv
Попробуйте этот скрипт...
|
Большое спасибо. Все работает. Единственное, чего я не учел, так это то, что оргалит надо прибивать еще и на верхн. и нижн. полки (((
...ааа... там все заморочено, горизонтов может быть больше, не тока верх и низ ((( Это ж как-то надо учитывать кол-во полок. Жесть...
|
|
|
08.11.2016, 13:24
|
#899
|
Пользователь
Регистрация: 23.12.2008
Сообщений: 58
Сказал(а) спасибо: 11
Поблагодарили 153 раз(а) в 10 сообщениях
Вес репутации: 231
|
maxgmv, А как задать гвозди по оси Х, то есть на полках? Пробовал адаптировать код под горизонты, крутил и так и эдак, ничего путного не получилось.
|
|
|
28.11.2016, 22:55
|
#900
|
Новичок
Регистрация: 01.05.2008
Сообщений: 13
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Друзья, подскажите пожалуйста скрипт позволяющий в окне запроса задать название и толщину материала для построения панелей. Очень часто надо отрисовывать панели из материалов, которые не нужно заносить в базу. Спасибо. Ну или хотя бы возможно такое реализовать с помощью скрипта?
Последний раз редактировалось Avich; 28.11.2016 в 23:43.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 18:26. Часовой пояс GMT +3.
|