Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 13:22  
Скрипты. Готовые решения для БМ8-2023
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174

Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 13.01.2014, 13:22
Рейтинг: ()

Этот раздел предназначен для размещения готовых скриптов.
Здесь находятся ТОЛЬКО готовые скрипты. Для обсуждения есть отдельная тема: Обсуждение готовых скриптов.

Авторам:
  1. Давать уникальные названия скриптам (не совпадающие с названием уже выложенных скриптов, за исключением обновлений скрипта)
  2. Указывать работоспособность в разных версиях БМ.
  3. Общее описание работы скрипта.
  4. Если презентованный скрипт платный указывать стоимость, условия и контакты для приобретения.

Версии, указанные модератором, как прошедшие проверку:
8 - Демо-версия 8.0.7.9649
- "народная" 8.0.12.12765
9 - Демо-версия 9.0.8.18908
10 - Демо-версия 10.0.0.21602

Последний раз редактировалось AlexBolton; 03.03.2023 в 21:03..
Просмотров: 536745
Ответить с цитированием Вверх
13 пользователя(ей) сказали cпасибо:
Старый 01.06.2018, 11:13   #51
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от anb Посмотреть сообщение
Скрипт для подсчёта веса изделия без фурнитуры, т.е. выделяем блок или панели по отдельности. Получаем общий вес.
Прежде всего, хочу выразить благодарность wizardpnz за то, что он нашел модуль для работы с базой и сделал запрос, который выдает вес для материала. Скрипт находится на гугл диске . Обсуждение скрипта (что добавить, исправить и т.д.) просьба вести в выделенной для этого теме.
Для работы скрипта нужен Базис 10-й версии и выше
Как им пользоваться:
1. Скачать и распаковать в нужную папку.
2. В файле db.js у переменной options.database изменить значение на путь к нужной базе. Важно: модуль криво работает с кириллицей, поэтому путь к базе не должен содержать кириллицу.
3. Выделить объекты, вес которых надо вычислить и запустить db.js.

Особенности скрипта:
1. В свойствах модели отображается информация об объекте и его весе.
2. Вес считается (пока) только для панелей (с пластиком), профилей и блоков (если блок был выделен перед запуском скрипта).
3. Для панелей указывается суммарный вес вместе с пластиком, для блоков - суммарный вес элементов внутри него. Свойство с весом блока можно развернуть, чтобы посмотреть вес каждого элемента блока.
4. При активации свойства с весом объекта, объект выделяется.

И еще одно ограничение скрипта - вес панели может рассчитываться некорректно для непрямоугольных панелей, потому что на данный момент площадь панели рассчитывается как "Ширина * Длина".

Обновление 03.06.20
1. Поправил получение веса для материала без артикула.
2. Поправил возможное зависание, если материал не был найден в базе. Теперь в окне свойств две группы - список объектов и список не найденных в базе материалов.
3. Если запрос или подключение к базе происходит с ошибкой, информация об ошибке записывается в файл "errorList.json". Это должно ускорить понимание проблемы при возникновении ошибки.

Последний раз редактировалось Letos; 03.06.2020 в 01:19.
Letos вне форума   Ответить с цитированием Вверх
14 пользователя(ей) сказали cпасибо:
Старый 04.06.2018, 10:56   #52
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Скрипт, который добавляет к имени/позиции панели имя/позицию блока, в котором она находится. С учетом пожеланий товарища Uncle в скрипте есть настройки:
1. Настройка разделителя между идентификатором блока и имением панели.
2. Выбор идентификатора блока. Три варианта - "Только имя", "Только позиция" и "Позиция, а если ее нет, то имя"
3. Выбор, какие идентификаторы добавлять к имени панели - "Корневого блока" (самого высшего по иерархии), "блока, в который вложен объект" и "Всех блоков в иерархии".
4. Добавлена настройка - менять имя или позицию у панели в соответствии с пожеланием товарища volunka

Обновление 06.06.2018:
1. Исправлено название параметра с "К имени добавлять" на "Для формирования информации использовать" и этот параметр действует и на саму панель. Ранее всегда бралось имя панели.
2. Исправлено вычисление "корневого" блока. Теперь слой не учитывается и его информация не будет записываться.
Обновление 06.06.2018 №2:
Исправлен запуск скрипта в 9-й версии.

Обновление 27.12.2018:
Добавлен выбор типов объектов, которые будут обрабатываться скриптом - на данный момент можно включить/выключить обработку панелей и/или профилей

Если нашли ошибку, или есть предложения по усовершенствованию скрипта, просьба писать сюда
Вложения
Тип файла: rar Добавить имя_позицию.rar (1.7 Кб, 651 просмотров)

Последний раз редактировалось Letos; 27.12.2019 в 14:04. Причина: Обновление
Letos вне форума   Ответить с цитированием Вверх
41 пользователя(ей) сказали cпасибо:
Старый 17.08.2018, 17:56   #53
Igordiz
Новичок
 
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 232 раз(а) в 6 сообщениях
Вес репутации: 0
Igordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личность
По умолчанию Скрипт - Выделить все непрямоугольные панели

При запуске данный скрипт выделяет в файле 3д модели все непрямоугольные панели. После проектирования изделия часто требуется создать чертежи только на панели не прямоугольной формы. Этот скрипт не даст вам пропустить такие панели. 1) Запустили скрипт 2) нажали кнопку создать чертежи опция только на выделенные.
Миниатюры
2018-08-17_184354.jpg  
Вложения
Тип файла: zip Выделить все не прямоугольные.zip (320 байт, 699 просмотров)
Igordiz вне форума   Ответить с цитированием Вверх
41 пользователя(ей) сказали cпасибо:
Старый 19.08.2018, 14:03   #54
Igordiz
Новичок
 
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 232 раз(а) в 6 сообщениях
Вес репутации: 0
Igordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личность
По умолчанию

Привет всем! Этот простой скрипт быстро устанавливает штангу в шкаф. При этом в панели свойств имеется выбор
Штанга круглая или овальная.
Держатель трубы да/нет.
Если держателя нет, то появляется поле ввода значения отступа штанги от верхней панели.
Миниатюры
2018-08-19_143918.jpg   2018-08-19_144013.jpg  
Вложения
Тип файла: zip Штанга в секцию.zip (83.3 Кб, 1247 просмотров)

Последний раз редактировалось Igordiz; 19.08.2018 в 14:51.
Igordiz вне форума   Ответить с цитированием Вверх
65 пользователя(ей) сказали cпасибо:
Старый 21.08.2018, 22:31   #55
Igordiz
Новичок
 
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 232 раз(а) в 6 сообщениях
Вес репутации: 0
Igordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личность
По умолчанию Скрипт - расставить полки

Есть не один такой скрипт. Хочу поделиться своим. Мне кажется он довольно удачный.
Описание: После указания необходимых панелей и границ, откроется окно свойств для ввода параметров.

Работает во всех версиях.

Особенность:
При изменении кол-ва полок или материала полок выводися информация расстояние между полок. Считаю это важным моментом, так как нам всегда хочется знать какое расстояние будет в итоге. Можно сразу подобрать нужный вариант.

Так же имеется выбор ставить полкодержатель или нет. Ставить доп отверстие или нет.
Миниатюры
2018-08-21_225723.jpg  
Вложения
Тип файла: zip Расставить полки.zip (11.5 Кб, 1284 просмотров)
Igordiz вне форума   Ответить с цитированием Вверх
64 пользователя(ей) сказали cпасибо:
Старый 04.10.2018, 22:41   #56
Igordiz
Новичок
 
Регистрация: 15.08.2018
Сообщений: 7
Сказал(а) спасибо: 2
Поблагодарили 232 раз(а) в 6 сообщениях
Вес репутации: 0
Igordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личностьIgordiz - весьма и весьма положительная личность
По умолчанию Скрипт профиль для ДВП (задней стенки)

Этот скрипт быстро установит разделительный профиль для задней стенки. При этом задняя стенка будет поделена на две части.
Вложения
Тип файла: zip Профиль для двп.zip (739 байт, 481 просмотров)
Igordiz вне форума   Ответить с цитированием Вверх
18 пользователя(ей) сказали cпасибо:
Старый 25.11.2018, 16:51   #57
Анатолий.ru
Пользователь
 
Регистрация: 22.07.2014
Адрес: Sochi
Сообщений: 83
Сказал(а) спасибо: 143
Поблагодарили 134 раз(а) в 36 сообщениях
Вес репутации: 153
Анатолий.ru скоро придёт к известностиАнатолий.ru скоро придёт к известности
По умолчанию Проекция V2.0

1) Проекция V2.0 Скрипт от Igor_482, исправлен ранее вызывал ошибки.
2) Базис 10.
3) Помогает развернуть камеру на заданный угол.

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

Action.DS.Camera.RotateTo(NewVector(0.4773502691896255,
0.39,
0.5773502655)); //Повернуть камеру
Action.Finish();
Action.Continue();
Action.Control.ViewAll(); //Показать все
[свернуть]
Анатолий.ru вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Grover (11.12.2023), Lamiia (18.01.2024)
Старый 21.03.2019, 16:48   #58
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 162
Сказал(а) спасибо: 57
Поблагодарили 242 раз(а) в 45 сообщениях
Вес репутации: 137
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Угловые радиусные полки

Небольшой скрипт по установке открытых полок, срезанных или радиусом под углом, на вертикальную и заднюю фронтальную панель.
Работает в версии 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пасибо:
Старый 04.04.2019, 12:54   #59
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 162
Сказал(а) спасибо: 57
Поблагодарили 242 раз(а) в 45 сообщениях
Вес репутации: 137
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Угловой радиусный кухонный шкаф

Наконец дописал скрипт на угловой радиусный кухонный шкаф. Конечно есть недоработки из-за моих небольших знаний. Основное это формулы для поиска точек для построения угла и радиуса. Долгая война на установку петель на радиусную дверь.Вогнутый радиус положительное число,выгнутый отрицательное число. К сожалению вариант угла 45* и -300 радиус, так и не довел до нормального. Может кому понадобиться.

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

PHP код:
var CurBlock;//блок для модели
var CurPos NewVector(000);//позиция модели
var inFurn 50;//отступ для фурнитуры 
var shelf;// полки
var lx;// точка по x для построения угла
var ly;// точка по y для построения угла
var r;//для радиуса
var hs;//высота для построения радиуса (третья точка)

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

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

NewBtn NewButtonInput('Добавить еще одну');
NewBtn.OnChange = function() {
        
Action.Commit();
        
NewTumba();
        
block.Value++;
}

NewTumba();

Action.Continue();

function 
MakeProperties() {
    
prop Action.Properties;
    
typeBlock prop.NewCombo("Модуль"'Верх');//\nНиз
    
blockType typeBlock.NewCombo("Тип корпуса"'Угловой');    
    
locat typeBlock.NewCombo('Расположение','Справа\nСлева');
    
angel typeBlock.NewCombo('Угол','30\n45\n60\n90');
    
radius typeBlock.NewNumber('Радиус','0');
    
block =  prop.NewNumber  ('Название \"Блок №\"'1) ;
    
width block.NewNumber('Ширина'600);
    
heidht block.NewNumber('Высота'720);
    
depth block.NewNumber('Глубина'600);
    
blockCut block.NewBool('Пазы');
    
//sink = block.NewBool('Мойка');
    //sink.Visible = (typeBlock.ItemIndex == 1?true:false);
    
blockMat block.NewMaterial('Материал корпуса');
    
butt block.NewButt('Кромка корпуса');
    
blockFurnVis block.NewFurniture('Крепеж корпуса');
    
blockHook block.NewFurniture('Навес корпуса');
    
//blockHook.Visible = blockCut.Visible = (typeBlock.ItemIndex == 0?true:false);    
    
backMat block.NewMaterial('Материал задняя стенка');    
    
face prop.NewCombo('Петли фасада','Слева\nСправа\nНет дверей');
    
doorsLW face.NewNumber('Ширина двери',402);
    
doorsRW face.NewNumber('Ширина двери',0);
    
doorsRW.Visible = (angel.ItemIndex == 3?true:false);
    
faceTex face.NewCombo ('Текстура фасада','Вертикально\nГоризонтально');
    
faseType face.NewCombo ('Тип фасада','Обычный\nШесть окон\nЧетыре окна\nОдно окно\nАлюм. профиль');
    
faceMat face.NewMaterial('Материал фасада');
    
glassMat face.NewMaterial('Стекло витрины');    
    
fuga face.NewNumber('Зазор фасадов',2);    
    
plank prop.NewBool('Планки');
    
shelfCount prop.NewCombo('Количество полок','0\n1\n2\n3');
    
shelfFront =  shelfCount.NewNumber ('Заглубление',10);
    
prop.OnChange = function() {
        
//sink.Visible = (typeBlock.ItemIndex == 1?true:false);
        //blockHook.Visible = blockCut.Visible = (typeBlock.ItemIndex == 0?true:false);
        
doorsRW.Visible = (angel.ItemIndex == 3?true:false);
        
Make();
    }
}

function 
NewTumba() {
        
Make();
        
Action.ShowPoints true;
        
Action.OnMove = function() {
            
CurBlock.Position Action.Pos3;
            
CurPos Action.Pos3;   };
        
Action.OnClick = function() {
            
Action.OnMove undefined;
            
Action.ShowPoints false;
        };
    }

function 
Make(){
    
DeleteNewObjects();
    
width.Value;//ширина
    
heidht.Value;//высота
    
depth.Value;//глубина
    
inBack = (blockCut.Value == true)?17:0;//отступ с пазом от задней стенки до полки
    
c100 = (plank.Value == true)?100:0;//ширина планок
    
CurBlock BeginBlock("Блок " block.Value);
    
fuga.Value;
    
BlockAngel();
    
Door();
    
Shelf ();    
    
EndBlock();    
    if(
locat.ItemIndex == 1){
        
CurBlockL AddSymmetry(CurBlockNewVector(W/200), AxisX);//симметрия блока
        
DeleteObject(CurBlock);//удаление блока
        
CurBlock CurBlockL;//копирование
        
CurBlock.Position CurPos;//позиция блока
    
} else {
        
CurBlock.Position CurPos;
    }
}

function 
BlockAngel(){ 
    
backMat.SetActive();
    
inB = ((blockCut.Value)?9:1);//отступ задней по краям 
    
back AddFrontPanelinBinB ,inB c100inBinBack ActiveMaterial.Thickness);//задняя 
    
BackContour (back);//функция выпилов под навесы
    
back.TextureOrientation ftoVertical;//текстура
    
back.Build();
    
back.Name 'Задняя ' block.Value;
    if(
plank.Value){
        
backR AddVertPanel(c100 inBinB ,inBinB,inBack);//задняя если есть планки
        
backR.Build();
        
backR.TextureOrientation ftoVertical;
        
backR.Name 'Задняя ' block.Value;
    }
    
blockMat.SetActive();
    
thick ActiveMaterial.Thickness;    
    
panelB AddHorizPanel(thick,0,W,thick,0);    //дно
    
panelT AddHorizPanel(thick,0,W,thick,thick);//крыша
    
AngRad(panelB);//редактирование дна под угол и радиус
    
panelB.AddButt(butt4);
    
AngRad(panelT);//редактирование крыши под угол и радиус    
    
panelT.AddButt(buttplank.Value?6:4);//кромка в зависимости от планок
    
if (angel.ItemIndex == 3){
        
panelB.AddButt(butt,5);
        
panelT.AddButt(buttplank.Value?7:5);//кромка в зависимости от планок
    
}
    
panelB.TextureOrientation panelT.TextureOrientation  ftoHorizontal;//текстура
    
lL Math.round(panelT.Contour.Objects[0].ObjLength());//длина левой панели
    
lR Math.round(panelT.Contour.Objects[1].ObjLength());//длина правой панели
    
if (locat.ItemIndex == 0){
        
Action.Hint 'Сторона левая - ' lL ', правая - ' lR;//текст с длиной для ориентира
    
}else{
        
Action.Hint 'Сторона левая - ' lR ', правая - ' lL;
    }
    
panelL AddVertPanel(00lLH0);//левая панель
    
panelL.AddButt(butt1);
    
panelL.AddButt(butt2);
    
panelL.AddButt(butt0);
    
panelR AddFrontPanel(lR0WHthick);//правая панель(фронтальная)
    
panelR.AddButt(butt0);
    
panelR.AddButt(butt2);
    
panelR.AddButt(butt3);    
    
panelL.TextureOrientation panelR.TextureOrientation ftoVertical;    
    if(
plank.Value){        
        
panelV AddVertPanel(0thickc100 thickthickc100 thick );//планка
        
panelV.AddButt(butt1);        
        
panelF AddFrontPanel(c100 thickWthickc100 );//планка        
        
panelV.TextureOrientation panelF.TextureOrientation ftoVertical;
        if(
blockCut.Value){
            
Cut (panelF);//паз для планки
        
}        
        
panelF.Build();
        
panelV.Name panelF.Name 'Планка ' block.Value;
        
//крепеж планок
        
blockFurnVis.Value.Mount(panelF,panelT,panelF.GabMin.inFurn,H-thick,thick/2);
        
blockFurnVis.Value.Mount(panelF,panelB,panelF.GabMin.inFurn,thick,thick/2);
        
blockFurnVis.Value.Mount(panelF,panelV,thick,H-thick-inFurn*2,thick/2);        
        
blockFurnVis.Value.Mount(panelF,panelV,thick,thick+inFurn*2,thick/2);
    }else{
        
panelV AddVertPanel(0,thick,thick,H-thick,thick);//задняя из материала корпуса
        
panelV.TextureOrientation ftoVertical;
        
panelV.Name 'Задняя ' block.Value;        
        
//крепеж задней
        
blockFurnVis.Value.Mount(panelV,panelT,thick/2,H-thick,thick inFurn);
        
blockFurnVis.Value.Mount(panelV,panelB,thick/2,thick,thick inFurn);
        
blockFurnVis.Value.Mount(panelV,panelR,thick,H-thick-inFurn*2,thick/2);        
        
blockFurnVis.Value.Mount(panelV,panelR,thick,thick+inFurn*2,thick/2);
    }
    if (
blockCut.Value){//пазы для панелей
        
Cut (panelL);
        
Cut (panelV);
        
Cut (panelR);
        
Cut (panelT);
        
Cut (panelB);                
    }
    
blockFurnVis.Value.Mount(panelV,panelT,thick/2,H-thick,blockCut.Value?inFurn:inFurn-10);
    
blockFurnVis.Value.Mount(panelV,panelB,thick/2,thick,inFurn);
    
FurnMake(panelB);
    
FurnMake(panelT);
    
panelV.Build();    
    
panelL.Build();
    
panelR.Build();
    
panelB.Build();
    
panelT.Build();
    
panelB.Name panelT.Name 'Полка ' block.Value;
    
panelL.Name panelR.Name 'Стоев ' block.Value;
    
blockHook.Value.Mount1 (panelL ,thick ,thick 24,inBack 37,);//навесы
    
blockHook.Value.Mount1 (panelV ,panelV.GabMin.xthick 24,inBack 37,);//навесы
    
}
//Функция крепежа
function FurnMake(pan){
    var 
pan.GabMin.thick/2;
    
blockFurnVis.Value.Mount(pan,panelL,thick,y,inFurn);
    
blockFurnVis.Value.Mount(pan,panelL,thick,y,lL inFurn);
    
blockFurnVis.Value.Mount(pan,panelR,lR inFurn,y,thick/2);
    
blockFurnVis.Value.Mount(pan,panelR,inFurn,y,thick/2);
}
//функция угла и радиуса
function AngRad(pan){
    
pan.RotateX(90);
    var 
sf 0;//для заглубления полок
    
var x1 pan.GMin.x;
    var 
y1 pan.GMin.y;    
    
//нахождение точек для построения 
    
var y2 y1 Math.round(doorsLW.Value Math.cos(Math.PI/180*angel.Value));
    var 
x2 x1 Math.round(doorsLW.Value Math.sin(Math.PI/180*angel.Value));
    var 
x3 pan.GMax.x;
    var 
y3 pan.GMax.y;
    var 
ind = (blockCut.Value)?thick inBack:thick;//если паз
    
var cd pan.Contour;
    var 
cont NewContour();
    
Math.abs(radius.Value) + ((radius.Value 0)?faceMat.Thickness:0); //радиус к положительному
    
hs Math.sqrt((Math.pow(r,2))-(Math.pow(doorsLW.Value,2)/4));//высота сегмента(для третей точки)
    
ly hs*(Math.sin(Math.PI/180*angel.Value));//сторона по гипотенузе *высота сегмента*
    
lx hs*(Math.sin(Math.PI/180*(90-angel.Value)));//сторона по гипотенузе *высота сегмента*
     //ищем среднюю точку дуги
    
var x4 x1 + (x2 x1)/2;
    var 
y4 y1 + (y2 y1)/2;
    if (
plank.Value){//вырез под планки
        
switch(pan){
            case 
panelT:
                
cont.AddRectangle(x3,y3,x3 c100,y3 c100);
            break;
            case 
shelf:
                
cont.AddRectangle(x3,y3,x3 c100 ind,y3 c100 ind);
                
sf shelfFront.Value;
            break;
        }
    }
    if(
angel.ItemIndex == 3){//для Г-ного построения
        
tt faseType.ItemIndex == 4?20:faceMat.Thickness;//смещение от толщины фасада
        
y2 y1 doorsRW.Value sf thick tt;//точка по у
        
x2 x1 doorsLW.Value sf thick tt;// точка по х
        
cont.AddRectangle(x1,y1,x2,y2);//прямоугольник
    
}else{
        if (
radius.Value == 0){//угол
            
cont.AddLine(x1,y1,x1,y2+sf);//сторона по х
            
cont.AddLine(x1,y2+sf,x2+sf,y1);//гипотенуза
            
cont.AddLine(x2+sf,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(x1y2 ,x4y4,x2y1);//дуга
            
cont.AddLine(x2,y1,x1,y1);//сторона по у
        
}
    }
    
cd.Subtraction(cont);
    
pan.RotateX(-90);
}

//пазы
function Cut (pan){
    var 
c0 inB-1;//отступ до паза
    
var c1 backMat.Thickness 1;//ширина паза
    
var c2 thick c0;//глубина паза
    
var c3 inBack c1;//отступ от края до паза
    
var c4 inBack;//размер для построения паза
    
var cut pan.AddCut('Паз ('+c1+'х'+c2+'x'+c3+')'); // добавим паз
    
var traj cut.Trajectory// траектория фрезы
    
StartEditing(pan);  // редактировать панель
    
switch (pan){
        case 
panelT:
            
traj.AddLine(pan.GMin.x,- c4pan.GMax.x, - c4);  // горизонтальная линия
            
cut.Contour.AddRectangle(00c1c2);
            if (
plank.Value) {
                
traj.AddLine(pan.GMax.c3,pan.GMin.y,pan.GMax.c3pan.GMax.y);  // горизонтальная линия
            
}
        break;
        case 
panelB:
            
traj.AddLine(pan.GMin.x,-c4pan.GMax.,- c4);  // горизонтальная линия
            
cut.Contour.AddRectangle(0,c0,c1 ,thick ); // нижний паз
            
if (plank.Value) {
                
traj.AddLine(pan.GMax.c4,pan.GMin.y,pan.GMax.c4pan.GMax.y);  // горизонтальная линия
        
}
        break;
        case 
panelL:
            
traj.AddLine(c40c4 H);     // вертикальная линия
            
cut.Contour.AddRectangle(00c1c2); // левый паз
        
break;
        case 
panelV:
            
traj.AddLine(c40c4 ,H);     // вертикальная линия
            
cut.Contour.AddRectangle(c1c00thick); // правый паз
        
break;
        case 
panelR :
            if(
plank.Value){
                
traj.AddLine(pan.GMax.c30,pan.GMax.c3 ,H); // вертикальная линия
            
cut.Contour.AddRectangle(00c1c2); // правый паз
            
}
            
        break;
        case 
panelF:
            
traj.AddLine(pan.GMax.c30,pan.GMax.c3 ,H); // вертикальная линия
            
cut.Contour.AddRectangle(c180thick); // правый паз
        
break;
        
    }
}
//вырезы под навесы
function BackContour (pan){
    var 
bc pan.Contour;
    var 
bcont NewContour();
    var 
x1 pan.GMin.x;
    var 
x2 pan.GMax.x;
    var 
y1 pan.GMin.y;
    var 
y2 pan.GMax.y;
    var 
= ((blockCut.Value)? 22:30);
    var 
= ((blockCut.Value)? 37:45);
    
bcont.AddRectangle (x1y2,x1 y2 h);//левая сторона
    
bcont.AddRectangle (x2 y2x2 y2 h);//правая сторона
    
bc.Subtraction(bcont);
}

function 
Shelf (){
    
blockMat.SetActive();
    if(
shelfCount.Value ){
        
//формула вычесления растояния полок
        
var sF ;
        var 
fshelf Math.round((thick thick shelfCount.Value)/(+shelfCount.Value 1));//между полками
        
var shelfY 0;//точка установки
        
var x2 = (!plank.Value)?thick:inBack;
            for (var 
0shelfCount.Valuek++){
                
shelfY += fshelf thick;//до следующей полки
                
shelf AddHorizPanel(thick,inBackx2thickshelfY );//полка
                
shelf.TextureOrientation ftoHorizontal;
                
shelf.Name 'Полка ' block.Value;
                
AngRad(shelf);
                
shelf.AddButt(butt,plank.Value?6:4);
                if (
angel.ItemIndex == 3){
                    
shelf.AddButt(buttplank.Value?7:5);
                }
                
shelf.Build();
                
FurnMake(shelf);
            }
    }
}
//Двери
function Door (){
    if(
doorsLW.Value && face.ItemIndex != 2){
        
faceMat.SetActive();
        
thF ActiveMaterial.Thickness;        
        
blockD BeginBlock('Дверь');
        
doorL AddFrontPanel(00,doorsLW.Value 220);//левая дверь        
        
doorsFurn OpenFurniture('Петля.f3d');//можно изменить 
        
DoorsFurn(doorL,doorsFurn);//установка петель        
        
doorL.TextureOrientation faceTex.ItemIndex == 0?ftoVertical:ftoHorizontal;
        
doorL.Name 'Дверь 'block.Value;
        
Milling(doorL);    //фрезеровка
        
EndBlock();        
        var 
xT thick f;//сдвиг двери х
        
var zT lL f;//сдвиг двери по z
        
if (angel.ItemIndex == 3){                  
            
xT f;
            
zT lL;    
            
blockDR BeginBlock('Дверь');
            
faceMat.SetActive();
            
doorR AddFrontPanel(0,0,doorsRW.Value  *2,2,0);//правая дверь
            
DoorsFurn(doorR,doorsFurn);
            
Milling(doorR);
            
doorR.Build();    
            
doorR.Name doorL.Name;
            
doorR.TextureOrientation doorL.TextureOrientation;            
            
EndBlock();
            
blockDR.RotateY(270);    //поворот правой двери
            
blockDR.Translate(doorsLW.Value thF,f,lL thF);//сдвиг правой двери                
        
}else {                        
            if(
radius.Value != 0){                                            
                
NewContour();
                
c.Clear();
                
//расчет угла петли для радиусной двери
                
anFurn = (180 - (360/((Math.PI r)/42)))/- (Math.asin((r-hs)/r) * 180) / Math.PI;                
                
xT thick;
                
zT lL;
                if(
radius.Value 0){//выпуклая дверь                    
                    
blockD.RotateY(-anFurn);//поворот блока для петли
                    
doorL.RotateY(anFurn);    //обратно только дверь        
                    //дуга двери по радиусу по трем точкам
                    
c.AddArc({x0y0}, {xdoorsLW.Valuey0}, {xdoorsLW.Value/2yhs-r});
                    
doorL.BentContour c;                        
                    
doorL.Bent true;// Указываем, что панель гнутая
                    
doorL.Contour.Clear();
                    
doorL.Contour.AddRectangle(f0,c.ObjLength() - f2);// Задаём контур панели.
                    
doorL.BentDirection 0;    
                }else if(
radius.Value 0){                    
                    
blockD.RotateY(anFurn);
                    
doorL.RotateY(-anFurn);
                    
c.AddArc({xdoorsLW.Valuey0}, {x0y0}, {xdoorsLW.Value/2yhs}); 
                    
doorL.BentContour c;// Задаём траекторию
                    
doorL.Bent true;// Указываем, что панель гнутая
                    
doorL.Contour.Clear();
                    
doorL.Contour.AddRectangle(00c.ObjLength() , 2);// Ширина равна длине траектории гнутой панели
                    
doorL.BentDirection 1;                    
                }
                
//условия для расположения петель справа для радиуса
                
if ((locat.ItemIndex == &&  face.ItemIndex == 1) || (locat.ItemIndex == &&  face.ItemIndex == 0)){
                        
copy AddSymmetry(blockDNewVector(ld/200), AxisX);//симметрия двери
                        
DeleteObject(blockD);//удаление
                        
blockD copy;//копия
                
}        
            }
            
blockD.RotateY(270 + (+angel.Value));//поворот двери под углом
        
}
        
doorL.Build();
        
blockD.Translate(xT,f,zT);//смещение левой двери
    
}
}
//фрезеровка
function Milling(door){
    if (
faseType.ItemIndex != && radius.Value == ){
        var 
x1 door.GMin.x;
        var 
x2 door.GMax.x;
        var 
y1 door.GMin.y;
        var 
y2 door.GMax.y;
        var 
cd door.Contour;
        var 
cont NewContour();
        
doorW Math.abs(x1 x2);//длина двери
        
doorH = (2);//высота двери
        
switch (faseType.ItemIndex){
            case 
1:      //шесть окон          
                
rectW Math.round(((doorW) - 150)/2);//ширина окошек
                
rectHC Math.round((thick 4) / thick/2);    //высота середины полок
                
rectH Math.round((rectHC 180)/2);// высота крайних окошек
                
cont.AddRectangle (x1 60y1 60x1 60 rectWy1 60 rectH);
                
cont.AddRectangle (x2 60y1 60x2 60 rectWy1 60 rectH);
                
cont.AddRectangle (x1 60y1 90 rectHx1 60 rectWy2 90 rectH);
                
cont.AddRectangle (x2 60y1 90 rectHx2 60 rectWy2 90 rectH);
                
cont.AddRectangle (x1 60y2 60x1 60 rectWy2 60 rectH);
                
cont.AddRectangle (x2 60y2 60x2 60 rectWy2 60 rectH);
                
cd.Subtraction(cont);
                
Glass(x1 50,y1 50,x2 50,y2 50,0);
            break;
            case 
2://четыре окна
                
rectW Math.round(((doorW) - 150)/2);//ширина окошек
                
rectH Math.round((150)/2);// высота окошек
                
cont.AddRectangle (x1 60y1 60x1 60 rectWy1 60 rectH);
                
cont.AddRectangle (x2 60y1 60x2 60 rectWy1 60 rectH);
                
cont.AddRectangle (x1 60y2 60x1 60 rectWy2 60 rectH);
                
cont.AddRectangle (x2 60y2 60x2 60 rectWy2 60 rectH);
                
cd.Subtraction(cont);
                
Glass(x1 50,y1 50,x2 50,y2 50,0);
            break;
            case 
3//одно окно
                
cont.AddRectangle (x1 60y1 60x2 60y2 -60);
                
Glass(x1 50,y1 50,x2 50,y2 50,0);
            break;        
            case 
4://алюминиевый профиль
                
DeleteObject(door);
                
cont AddTrajectory('Траектория');
                
cont.Trajectory2D.AddRectangle(x1,y1,x2,y2);
                
file 'Профиль F1-11.frw';
                
cont.Contour2D.Load(file);
                
cont.MaterialWidth 45;//
                
cont.Name 'Профиль F1-11';
                
cont.Build();
                
Glass(x1 3,y1 3,x2 3,y2 3,18);
            break;        
        }
    }
}
//установка петель
function DoorsFurn(door,furn){     
    var 
x;
    if(
radius.Value == && ((locat.ItemIndex == && face.ItemIndex == 1) || (locat.ItemIndex == && face.ItemIndex == 0))){        
        
door.GabMax.21;    
    }else {
        
door.GabMin.21;
    }
    
furn.Mount1(door,,door.GabMin.inFurn 2door.GabMin.z,0);
    
furn.Mount1(door,,door.GabMax.inFurn 2door.GabMin.z,0);    


//стекло для фрезеровок
function Glass(x1,y1,x2,y2,z){
    
glassMat.SetActive();
    
thickG ActiveMaterial.Thickness;
    
glass AddFrontPanel(x1,y1,x2,y2,thickG);
    
glass.Build();
    
glass.Name 'Стекло';

[свернуть]
Вложения
Тип файла: rar Петля.rar (2.7 Кб, 209 просмотров)
Тип файла: rar Навес.rar (2.4 Кб, 233 просмотров)
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
11 пользователя(ей) сказали cпасибо:
Старый 08.05.2019, 18:35   #60
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 162
Сказал(а) спасибо: 57
Поблагодарили 242 раз(а) в 45 сообщениях
Вес репутации: 137
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Шип-паз

Увлекся лазерной резкой и для соединения деталей нужны "шип-паз", т.к нравиться работать в Базис-Мебельщик, соответственно написал небольшой скрипт для построения шип-паз двух перпендикулярных пересекающихся панелей. Если панели нужно под углом, то панели выставить как обычно, запустить скрип и потом вращать как нужно, например крыша домика.
Работает в Базис Мебельщик 8 (народная)
PHP код:
var pan1 GetObject("Укажите первую панель");
    var 
pan2 GetObject("Укажите вторую панель");
    if(
pan1 == undefined){
        
pan1 GetObject("Укажите первую панель");
    }
    var 
pan1Copy AddCopy(pan1);
    if(
pan2 == undefined){
        
pan2 GetObject("Укажите вторую панель");
    }
    var 
pan2Copy AddCopy(pan2);

MakeProperties();

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

function 
MakeProperties(){
    
prop Action.Properties;
    
countSh prop.NewNumber  ('Количество'2);
    
prop.OnChange = function() {
    
Make();
    }
}
    
Make();

function 
Make(){
    
pan1.Contour.Clear();
    
pan1.Contour.Addition(pan1Copy.Contour);
    
pan2.Contour.Clear();
    
pan2.Contour.Addition(pan2Copy.Contour);
    var 
minX1 Math.round(pan1.GabMin.x);
    var 
maxX1 Math.round(pan1.GabMax.x);
    var 
minY1 Math.round(pan1.GabMin.y);
    var 
maxY1 Math.round(pan1.GabMax.y);
    var 
minZ1 Math.round(pan1.GabMin.z);
    var 
maxZ1 Math.round(pan1.GabMax.z);
    var 
minX2 Math.round(pan2.GabMin.x);
    var 
maxX2 Math.round(pan2.GabMax.x);
    var 
minY2 Math.round(pan2.GabMin.y);
    var 
maxY2 Math.round(pan2.GabMax.y);
    var 
minZ2 Math.round(pan2.GabMin.z);
    var 
maxZ2 Math.round(pan2.GabMax.z);

    var 
pan1X1 0;
    var 
pan1Y1 0;
    var 
pan1X2 0;
    var 
pan1Y2 0;
    var 
pan2X1 0;
    var 
pan2Y1 0;
    var 
pan2X2 0;
    var 
pan2Y2 0;

    var 
min 0;
    var 
max 0;
    var 
cp1 NewContour();
    var 
k1 Math.floor(countSh.Value/2);
    var 
cp2 NewContour();
    var 
k2 countSh.Value/2;
    switch(
pan1.Thickness){
        case 
maxX1 minX1://первая вертик
            
switch(pan2.Thickness){
                case 
maxZ2 minZ2://вторая фронт
                    
if(minY1 >= minY2){
                        
min =  minY1;
                        
pan2Y1 minY1 minY2;
                    } else {
                        
min minY2;
                        
pan1Y1 minY2 minY1;
                    }
                    if (
maxY1 >= maxY2){
                        
max maxY2;
                    } else{
                        
max maxY1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1X1 minZ2 minZ1;
                    
pan1X2 pan1X1 pan2.Thickness;
                    
pan1Y1 += rect;
                    
Undo.Changing(pan1);
                    for (var 
0k1i++) {
                        
pan1Y2 pan1Y1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2 );
                        
pan1Y1 pan1Y2 rect;

                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
pan2X1 minX1 minX2;
                    
pan2X2 pan2X1 pan1.Thickness;
                    
Undo.Changing(pan2);
                    for (var 
0k2j++) {
                        
pan2Y2 pan2Y1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2);
                        
pan2Y1 pan2Y2 rect;
                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();
                break;
                case 
maxY2 minY2://вторая горизонт
                    
if(minZ1 >= minZ2){
                        
min minZ1;
                    } else {
                        
min minZ2;
                        
pan2Y1 minZ2 minZ1;
                    }
                    if (
maxZ1 >= maxZ2){
                        
max maxZ2;
                        
pan1X1 maxZ1 maxZ2;
                    } else{
                        
max maxZ1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1Y1 minY2 minY1;
                    
pan1Y2 pan1Y1 pan2.Thickness;
                    
pan1X1 pan1.GMax.pan1X1 rect;
                    
Undo.Changing(pan1);
                    for (var 
0k1i++) {
                        
pan1X2 pan1X1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2 );
                        
pan1X1 pan1X2 rect;

                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
pan2X1 minX1 minX2;
                    
pan2X2 pan2X1 pan1.Thickness;
                   
Undo.Changing(pan2);
                    for (var 
0k2j++) {
                        
pan2Y2 pan2Y1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2);
                        
pan2Y1 pan2Y2 rect;
                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();
                break;            
            }
        break;
        case 
maxZ1 minZ1 :// первая фронт
            
switch(pan2.Thickness){
                case 
maxX2 minX2://вторая вертик
                    
if(minY1 >= minY2){
                        
min =  minY1;
                        
pan2Y1 minY1 minY2
                    } else {
                        
min minY2;
                        
pan1Y1 minY2 minY1;
                    }
                    if (
maxY1 >= maxY2){
                        
max maxY2;
                    } else{
                        
max maxY1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1X1 minX2 minX1;
                    
pan1X2 pan1X1 pan2.Thickness;
                    
pan1Y1 pan1Y1 rect;
                    
Undo.Changing(pan1);
                    for (var 
0k1j++) {
                        
pan1Y2 pan1Y1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2);
                        
pan1Y1 pan1Y2 rect;
                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
pan2X1 minZ1 minZ2;
                    
pan2X2 pan2X1 pan1.Thickness;
                    
Undo.Changing(pan2);
                    for (var 
0k2i++) {
                        
pan2Y2 pan2Y1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2 );
                        
pan2Y1 pan2Y2 rect;

                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();
                break;
                case 
maxY2 minY2://вторая горизонт
                    
if(minX1 >= minX2){
                        
min minX1;
                        
pan2X1 minX1 minX2;
                    }else{
                        
min minX2;
                        
pan1X1 minX2 minX1;
                    }
                    if(
maxX1 >= maxX2){
                        
max maxX2;
                    }else{
                        
max maxX1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1Y1 minY2 minY1;
                    
pan1Y2 pan1Y1 pan2.Thickness;
                    
pan1X1 += rect;
                    
pan1X2 rect;
                    
Undo.Changing(pan1);
                    for (var 
0k1j++) {
                        
pan1X2 pan1X1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2);
                        
pan1X1 pan1X2 rect;
                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
Undo.Changing(pan2);
                    
pan2Y1 maxZ2 maxZ1;
                    
pan2Y2 pan2Y1 pan1.Thickness;
                    for (var 
0k2i++) {
                        
pan2X2 pan2X1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2 );
                        
pan2X1 pan2X2 rect;

                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();
                break;
            }
        break;
        case 
maxY1 minY1://первая горизонт
            
switch(pan2.Thickness){
                case 
maxX2 minX2://вторая вертик
                    
if(minZ1 >= minZ2){
                        
min minZ1;
                        
pan1Y1 minZ1 minZ2;
                    } else {
                        
min minZ2;
                    }
                    if (
maxZ1 >= maxZ2){
                        
max maxZ2;
                    } else{
                        
max maxZ1;
                        
pan2X1 maxZ2 maxZ1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1X1 minX2 minX1;
                    
pan1X2 pan1X1 pan2.Thickness;
                    
pan1Y1 += rect;
                    
pan1Y2 pan1Y1 rect;
                   
Undo.Changing(pan1);
                    for (var 
0k1j++) {
                        
pan1Y2 pan1Y1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2);
                        
pan1Y1 pan1Y2 rect;
                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
pan2Y1 minY1 minY2;
                    
pan2Y2 pan2Y1 pan1.Thickness;
                    
pan2X1 pan2.GMax.pan2X1;
                    
Undo.Changing(pan2);
                    for (var 
0k2i++) {
                        
pan2X2 pan2X1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2 );
                        
pan2X1 pan2X2 rect;
                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();
                break;
                case 
maxZ2 minZ2://вторая фронт
                    
if(minX1 >= minX2){
                        
min minX1;
                        
pan2X1 minX1 minX2;
                    }else{
                        
min minX2;
                        
pan1X1 minX2 minX1;
                    }
                    if(
maxX1 >= maxX2){
                        
max maxX2;
                    }else{
                        
max maxX1;
                    }
                    
rect Math.ceil((max min)/countSh.Value);
                    
pan1Y1 maxZ2 maxZ1;
                    
pan1Y2 pan1Y1 pan2.Thickness;
                    
pan1X1 += rect;
                    
Undo.Changing(pan1);
                    for (var 
0k1j++) {
                        
pan1X2 pan1X1 rect;
                        
cp1.AddRectangle(pan1X1pan1Y1,pan1X2pan1Y2);
                        
pan1X1 pan1X2 rect;
                    }
                    
pan1.Contour.Subtraction(cp1);
                    
pan1.Build();
                    
pan2Y1 minY1 minY2;
                    
pan2Y2 pan2Y1 pan1.Thickness;
                    
Undo.Changing(pan2);
                    for (var 
0k2i++) {
                        
pan2X2 pan2X1 rect;
                        
cp2.AddRectangle(pan2X1pan2Y1,pan2X2pan2Y2 );
                        
pan2X1 pan2X2 rect;

                    }
                    
pan2.Contour.Subtraction(cp2);
                    
pan2.Build();

                break;            
            }
        break;    
    }    
}

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

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 11-2023 - Скрипты AlexBolton Базис-мебельщик. Скрипты 968 23.03.2024 13:39
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1441 27.02.2024 10:48
Скрипты в чертежах sergio1982 Базис-мебельщик. Скрипты 35 10.02.2024 15:45
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1524 07.12.2022 19:53
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 10:36


Текущее время: 13:51. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика