Показать сообщение отдельно
Старый 21.03.2019, 16:48   #58
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 166
Сказал(а) спасибо: 57
Поблагодарили 244 раз(а) в 46 сообщениях
Вес репутации: 139
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Угловые радиусные полки

Небольшой скрипт по установке открытых полок, срезанных или радиусом под углом, на вертикальную и заднюю фронтальную панель.
Работает в версии 8н в других не проверял

Скрытый текст

SetCamera(p3dFront);
panel = GetObject("Укажите боковую панель");
edge = GetEdge("Укажите боковую границу", AxisY).First.x;
Top = GetEdge('Укажите верхнюю границу', AxisX).First.y;
Bottom = GetEdge('Укажите нижнюю границу', AxisX).First.y;
SetCamera(p3dLeft);
panBac = GetObject('Укажите заднюю панель');
SetCamera(p3dFront);

FileOptions = 'SaveShelf.xml';
MakeProperties();
Action.Properties.Load(FileOptions);
Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}

NewBtn = NewButtonInput('Закончить');
NewBtn.OnChange = function() {
Action.Commit();
Action.Finish();
}

function MakeProperties() {
prop = Action.Properties;
shelfCount = prop.NewNumber('Количество полок',0);
lengAng = shelfCount.NewNumber('Длина среза',0);
angel = shelfCount.NewNumber('Угол среза',0);
radius = shelfCount.NewNumber('Радиус',0);
blockMat = shelfCount.NewMaterial('Материал полок');
butt = shelfCount.NewButt('Кромка полок');
blockFurn = shelfCount.NewFurniture('Крепеж жесткий');
inFurn = shelfCount.NewNumber ('Отступ с фурнитуры',0);
prop.OnChange = function() {
MakeShelf();
}
}
MakeShelf();

function MakeShelf(){
DeleteNewObjects();
blockMat.SetActive();
thick = ActiveMaterial.Thickness;
if(panel.GabMin.x < edge){
xP1 = panel.GabMax.x;
}else{
xP1 = panel.GabMin.x;
}
if(shelfCount.Value > 0 ){
//формула вычесления растояния полок
fshelf = Math.round(((Bottom - Top) - thick * 2 - thick * shelfCount.Value )/(+shelfCount.Value + 1));
shelfY = Top;

for (var k = 0; k < shelfCount.Value; k++){
shelfY += fshelf + thick;
shelf = AddHorizPanel(xP1,panBac.GabMax.z,edge , panel.GabMax.z, shelfY);
if(angel.Value > 0 && lengAng.Value > 0){
shelf.RotateX(90);
r = Math.abs(radius.Value); //радиус
x3 = shelf.GMax.x;
y3 = shelf.GMax.y;
hs = r - Math.sqrt((Math.pow(r,2))-(Math.pow(lengAng.Value,2)/4));//высота сегмента
ly = hs*(Math.sin(Math.PI/180*angel.Value));//сторона по гипотенузе *высота сегмента*
lx = hs*(Math.sin(Math.PI/180*(90-angel.Value)));//сторона по гипотенузе *высота сегмента*
y1 = shelf.GMin.y;
y2 = y1 + Math.round(lengAng.Value * Math.cos(Math.PI/180*angel.Value));
if(panel.GabMin.x > edge){
x1 = shelf.GMin.x ;
x2 = x1 + Math.round(lengAng.Value * Math.sin(Math.PI/180*angel.Value));
x4 = x1 + (x2 - x1)/2;
}else{
x1 = shelf.GMax.x ;
x2 = x1 - Math.round(lengAng.Value * Math.sin(Math.PI/180*angel.Value));
x4 = x2 + (x1 - x2)/2;
lx = -lx;
}
cd = shelf.Contour;
cont = NewContour();
y4 = y1 + (y2 - y1)/2;
if (radius.Value == 0){
cont.AddLine(x1,y1,x1,y2);
cont.AddLine(x1,y2,x2,y1);
cont.AddLine(x2,y1,x1,y1);
}else{
if (radius.Value > 0){
x4 = x4 - lx;
y4 = y4 - ly;
}else {
x4 = x4 + lx;
y4 = y4 + ly;
}
cont.AddLine(x1,y1,x1,y2);
cont.AddArc3(x1, y2 ,x4, y4,x2, y1);
cont.AddLine(x2,y1,x1,y1);
}
cd.Subtraction(cont);
shelf.RotateX(-90);
}
ShelfFurn (shelf);
shelf.Build();
}
}
}

function ShelfFurn (s) {
s.TextureOrientation = ftoHorizontal;
s.Name = 'Полка';
if (panel.GabMin.x > edge){
xf = panel.GabMin.x;
}
else {
xf = panel.GabMax.x;
}
s.AddButt(butt, 2);
s.AddButt(butt, 4);
s.AddButt(butt, 1);
blockFurn.Value.Mount(s, panel, xf, s.GabMin.y - thick/2, s.GabMin.z + inFurn.Value);
blockFurn.Value.Mount(s, panel, xf, s.GabMin.y - thick/2,s.GabMax.z - inFurn.Value);
blockFurn.Value.Mount(s, panBac, s.GabMin.x + inFurn.Value, s.GabMin.y - thick/2, panBac.GabMax.z);
blockFurn.Value.Mount(s, panBac, s.GabMax.x - inFurn.Value, s.GabMin.y - thick/2,panBac.GabMax.z);
}

Action.Continue();
[свернуть]
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
12 пользователя(ей) сказали cпасибо: