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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 14.09.2019, 00:17  
БАЗИС 11-2023 - Скрипты
 
Аватар для AlexBolton
AlexBolton
Модератор
Регистрация: 19.02.2008
Адрес: www
Сообщений: 3,982

Сказал(а) спасибо: 7,296
Поблагодарили 16,977 раз(а) в 3,228 сообщениях
Версия для печати Отправить по электронной почте
AlexBolton AlexBolton вне форума 14.09.2019, 00:17
Рейтинг: ()

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.

Новшества Базис Мебельщик версии 11:
.....
6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....

Новшества Базис Мебельщик версии 2021:

16. Отладчик скриптов.



VISUAL CODE

Код:
Примеры скриптов из видео

Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
node.js обновился с 7.0.0 до 8.11.3

Напиши себе Базис или Моя первая тумбочка 2
Комплект - руководство+ файлы+ скрипт

Обратите внимание на полезные ответы в этой теме!

__________________
.
▓▒░ Халявы не бывает ░▒▓

[ Как правильно задавать вопросы на форумах ] | [ Как просто, быстро и правильно опубликовать фото и файлы в сообщении 10.04.2024]

[ USDownloader - удобно и безопасно скачиваем с файлообменников 21.04.2024] | [ Обходим блокировки сайтов, торрентов, месенджеров, ФО - RU - UA]


Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д. >сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...

Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
Просмотров: 620413
Ответить с цитированием Вверх
14 пользователя(ей) сказали cпасибо:
Старый 31.03.2022, 23:38   #671
kos100pudov
Местный
 
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
kos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личность
По умолчанию

Цитата:
Сообщение от Ильдар43 Посмотреть сообщение
Спасибо за ответ. Мне надо из файла считать артикул (второй столбик) и два последних столбца (это габариты).
уточнение.
у вас высота получается неизменна?
фрагменты лежат в одной папке?
фрагменты эластичные?
все фрагменты вставляем в одну модель?
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
kos100pudov вне форума   Ответить с цитированием Вверх
Старый 01.04.2022, 00:15   #672
Ильдар43
Новичок
 
Регистрация: 30.11.2021
Сообщений: 15
Сказал(а) спасибо: 5
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
Ильдар43 пока не определено
По умолчанию

Цитата:
Сообщение от kos100pudov Посмотреть сообщение
уточнение.
у вас высота получается неизменна?
фрагменты лежат в одной папке?
фрагменты эластичные?
все фрагменты вставляем в одну модель?
Да, да, да, да. (На все вопросы )
Ильдар43 вне форума   Ответить с цитированием Вверх
Старый 01.04.2022, 11:30   #673
kos100pudov
Местный
 
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
kos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личность
По умолчанию

Цитата:
Сообщение от Ильдар43 Посмотреть сообщение
Да, да, да, да. (На все вопросы )
Цитата:
Сообщение от Ильдар43 Посмотреть сообщение
Здравствуйте.Помогите, пожалуйста, разобраться с работой с файлами. В таблице Excel есть список фрагментов и их кол-во , которые должны присутствовать на сцене. Как с помощью скрипта поставить их в модель? Все фрагменты лежат в одной папке. Больше интересует работа (чтение /запись) с таблицей.
Цитата:
Сообщение от kos100pudov Посмотреть сообщение
...Ну раз все молчат, значит корректного решения для работы с файлами эксель до сих пор нет. Скрипт для вашей задачи не представляет никакой сложности, кроме багов при работе с эксель. Если вы готовы пересохранять ваш эксель в тот же csv или "текстовый с табуляцией", то скрипт под эти файы я вам для примера набросаю, это просто. Кидайте csv или txt и на словах какие данные нам из этих файлов нужны.
Цитата:
Сообщение от Ильдар43 Посмотреть сообщение
Спасибо за ответ. Мне надо из файла считать артикул (второй столбик) и два последних столбца (это габариты).
забирайте.
в начале скрипта необходимые настройки, поправите под себя.
читает файлы txt с табуляцией (как вы выкладывали) и файлы csv с разделителем "точка с запятой".
путь к фрагментам и какие столбцы нужно читать.

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

Код HTML:
//папка с фрагментами для загрузки.слэш должен быть правый
var frag_dir = 'блабла/блабла/фрагменты/';
//настройки номеров столбцов для чтения. отсчет начинается с нуля
var col_name = 1; //номер столбца "имя фрагмента"
var col_count = 3; //номер столбца "количество"
var col_width = 4; //номер столбца "ширина" - для игнорирования укажите отрицательное значение
var col_height = -1; //номер столбца "высота" - для игнорирования укажите отрицательное значение
var col_depth = 5; //номер столбца "глубина" - для игнорирования укажите отрицательное значение
//*****************************************************************************
var frag_bias = 0;
var frag_count = 0;
var file_full_name = system.askFileName(); //вызываем диалог выбора файла - получаем полный путь и имя файла
var file_ext = file_full_name.split('.'); //разбиваем на части через точку
file_ext = file_ext[file_ext.length - 1]; //берем последнюю часть, т.е. расширение файла
var file = system.readTextFile(file_full_name).split('\r\n'); //открываем файл
if (file_ext == 'txt') {
    for (var i = 0; i < file.length; ++i) {
        file[i] = file[i].split('\t');
    }
} else if (file_ext == 'csv') {
    for (var i = 0; i < file.length; ++i) {
        file[i] = file[i].split(';');
    }
} else {
    alert('ошибка выбора файла\r\nперезапустите скрипт и выберите файл\r\nв формате ".txt" или ".csv"');
    Action.Finish();
}
for (var i = 0; i < file.length; ++i) {
    var frag_file = frag_dir + file[i][col_name] + '.fr3d';
    if (system.fileExists(frag_file)) { //если существует файл с названием из файла
        var frag = OpenFurniture(frag_file); //загружаем фрагмент
        for (var r = 0; r < file[i][col_count]; ++r) {
            if (frag) {
                var obj = frag.Make(0, 0);
                obj.Owner = Model.Temp;
                obj.Build();
                obj.ElasticResize({
                    x: file[i][col_width] || obj.GSize.x,
                    y: file[i][col_height] || obj.GSize.y,
                    z: file[i][col_depth] || obj.GSize.z
                });
                obj.Translate({
                    x: frag_bias
                });
                obj.Build();
                frag_bias += obj.GSize.x + 500;
                frag_count += 1;
            }
        }
    }
}
Action.Commit();
alert('загружено ' + frag_count + ' объектов');
[свернуть]
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
kos100pudov вне форума   Ответить с цитированием Вверх
6 пользователя(ей) сказали cпасибо:
Старый 02.04.2022, 00:49   #674
Ильдар43
Новичок
 
Регистрация: 30.11.2021
Сообщений: 15
Сказал(а) спасибо: 5
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
Ильдар43 пока не определено
По умолчанию

kos100pudov, СПАСИБО тебе огромное. Почти весь код написал, я некоторые вещи не просил - хотел сам потренироваться, но ты профессионал и доводишь дела до конца.
А с текстовым файлом, действительно, не так сложно получилось. Спасибо
Ильдар43 вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
kos100pudov (02.04.2022)
Старый 11.04.2022, 09:26   #675
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 166
Сказал(а) спасибо: 57
Поблагодарили 244 раз(а) в 46 сообщениях
Вес репутации: 139
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию

Устанавливаю схему крепежа через MountScheme. Есть проблема, при повторном запуске скрипта схема крепежа не устанавливается, хотя значения в поле NewFurniture прописано, если заного выбираю устанавливается. Это только у меня так не сохраняется или так и работает, постоянно нужно выбирать схему? И есть ли решение?

Цитата:
Сообщение от Максим Геннадьевич Посмотреть сообщение
Устанавливаю схему крепежа через MountScheme. Есть проблема, при повторном запуске скрипта схема крепежа не устанавливается, хотя значения в поле NewFurniture прописано, если заного выбираю устанавливается. Это только у меня так не сохраняется или так и работает, постоянно нужно выбирать схему? И есть ли решение?
Код в котором не сохраняется установка схемы крепежа.
PHP код:
var p1 AddHorizPanel(0,0,1000,1000,1000);
var 
p2 AddVertPanel(0,0,1000,p1.GabMin.y,0);
var 
FileOptions 'cupboard.xml';
var 
prop Action.Properties;
Action.OnStart = function (){
   
prop.Load(FileOptions);
} ;
var 
scheme prop.NewFurniture('схема');
prop.OnChange = function (){
scheme.Value.MountScheme(p1p2FurniturePosition.InsideNewVector(000));
Action.Commit();
prop.Save(FileOptions);
Action.Finish();
 }
Action.Continue(); 
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
Старый 15.04.2022, 08:34   #676
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

Цитата:
Сообщение от kos100pudov Посмотреть сообщение
.IsAssemblyUnit - true/false - читается и назначается

также блок, фрагмент и схема крепежа с точки зрения скриптов один и тот же объект TFurnBlock. различить можно через свойство DatumMode
.DatumMode = 0 - блок
.DatumMode = 1....6 - фрагмент, цифра обозначает тип фрагмента, тип позиционирования/установки
.DatumMode = 7 - схема крепежа

DatumMode так же принудительно назначается при необходимости.
допустим выделив обычный блок и сделав Model.Selected.DatumMode=1; мы преобразуем его во фрагмент))
допустим есть красивый фрагмент с отверстиями, но отверстия нельзя отредактировать. Есть способ разрушить фрагмент на тела и отверстия?
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 15.04.2022, 09:50   #677
Dima1313
Местный
 
Регистрация: 16.06.2008
Адрес: Подольск Мск Обл
Сообщений: 686
Сказал(а) спасибо: 1,487
Поблагодарили 801 раз(а) в 237 сообщениях
Вес репутации: 422
Dima1313 - просто великолепная личностьDima1313 - просто великолепная личностьDima1313 - просто великолепная личностьDima1313 - просто великолепная личностьDima1313 - просто великолепная личностьDima1313 - просто великолепная личностьDima1313 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
допустим есть красивый фрагмент с отверстиями, но отверстия нельзя отредактировать. Есть способ разрушить фрагмент на тела и отверстия?
можно скриптом заменить отв в вашем фрагменте на нужные, только надо изменить диапазон, чтобы нашлись те которые есть во фрагменте, и прописать диаметр и глубину новых. см. скрипт, даже я понял, и периодически пользуюсь, прописывая разные диаметры для разных производств.

https://промебельклуб.рф/forum/showp...&postcount=227
Dima1313 вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
wizardpnz (15.04.2022)
Старый 15.04.2022, 11:16   #678
kos100pudov
Местный
 
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
kos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личность
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
допустим есть красивый фрагмент с отверстиями, но отверстия нельзя отредактировать. Есть способ разрушить фрагмент на тела и отверстия?
Как вариант, у меня есть скрипт который добавляет в модель отверстия с теми же параметрами что и у найденой фурнитуры(фрагмента). Саму фурнитуру удаляет, но это отключается.
т.е. по сути заменяет фурнитуру на набор не связанных между собой отверстий.
Такое подойдёт?
Пришли этот красивый фрагмент, гляну что в нем особенного)
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
kos100pudov вне форума   Ответить с цитированием Вверх
Старый 15.04.2022, 11:48   #679
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

Цитата:
Сообщение от kos100pudov Посмотреть сообщение
немного доработал предыдущий скрипт.
теперь можно вращать вокруг любого указанного ребра.
запускаем скрипт - указываем панель - указываем ребро - вводим угол поворота.

возможны повороты в обратную сторону если ребро не параллельно глобальным осям (под ипанутым углом) - тут сложно понять где начало и конец ребра, в какую сторону направлено, и естественно как вокруг него вращать, с какой точки зрения....

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

Код HTML:
//заменяем запятые на точку
function CommaToPoint(text) {
    var out_text = '';
    for (var i = 0; i < text.length; ++i) {
        if (text[i] == ',') {
            out_text += '.';
        } else {
            out_text += text[i];
        }
    }
    return out_text;
}
//***********************************************************************//
var panel = GetPanel('Укажите панель');
var edge = GetEdge('Укажите ребро для поворота', Model);
var angle = CommaToPoint(prompt('Укажите угол поворота'));
//зацикливаем пока пользователь не введет корректное число - исключаем ввод текста
while (!+angle) {
    angle = CommaToPoint(prompt('Укажите угол поворота ТОЛЬКО ЦИФРА с точкой или запятой'));
}
StartEditing(Model);
//составляем массив пересекающей панель фурнитуры
var fasts = panel.FindConnectedFasteners();
//перезаписываем массив фурнитуры, добавляем для каждой фурнитуры инфу о ее "родителе"
for (var i = 0; i < fasts.length; ++i) {
    fasts[i] = [fasts[i], fasts[i].Owner];
}
//добавляем в массив саму панель и ее "родителя"
fasts[fasts.length] = [panel, panel.Owner];
//создаем временный блок
var temp_block = AddBlock();
temp_block.Build();
Action.Commit();
temp_block = Model.Objects[Model.Count - 1];
//задаем блоку позицию равную начальной точке указанного ребра
temp_block.Position = edge.GFirst;
//переносим все объекты массива в блок
for (var i = 0; i < fasts.length; ++i) {
    fasts[i][0].ReTransform(fasts[i][0].Owner, temp_block);
    fasts[i][0].Owner = temp_block;
}
//поворачиваем весь блок вокруг указанного ребра
//при повороте вокург Х угол поворота обратный - особенности СК Базиса
//вычисляем к какой из осей ребро наиболее "параллельно"
//если ребро максимально вытянуто вдоль оси Х ГСК
if ((Math.abs(edge.GDir().x) > Math.abs(edge.GDir().y)) && (Math.abs(edge.GDir().x) > Math.abs(edge.GDir().z))) {
    //простейшая проверка на начало и конец ребра, работает корректно только для "правильных" ребер
    if ((edge.GFirst.x + edge.GFirst.y + edge.GFirst.z) < (edge.GLast.x + edge.GLast.y + edge.GLast.z)) {
        temp_block.Rotate(edge.GDir(), -angle);
    } else {
        temp_block.Rotate(edge.GDir(), angle);
    }
}
//если ребро максимально вытянуто вдоль оси Y или Z ГСК
else {
    //простейшая проверка на начало и конец ребра, работает корректно только для "правильных" ребер
    if ((edge.GFirst.x + edge.GFirst.y + edge.GFirst.z) < (edge.GLast.x + edge.GLast.y + edge.GLast.z)) {
        temp_block.Rotate(edge.GDir(), angle);
    } else {
        temp_block.Rotate(edge.GDir(), -angle);
    }
}
temp_block.Build();
//переносим все объекты из блока в их прежних "родителей"
for (var i = 0; i < fasts.length; ++i) {
    fasts[i][0].ReTransform(fasts[i][0].Owner, fasts[i][1]);
    fasts[i][0].Owner = fasts[i][1];
}
//удаляем блок
DeleteObject(temp_block);
Action.Commit();
[свернуть]


p.s. работает в 21. в 8-ке точно не сработает из-за ".FindConnectedFasteners()" - как его эмулировать я писал как то ранее... может еще что то вылезет, не проверял..
спасибо, теперь осталось сделать поворот всех панелей во фронтальную плоскость, нужно для выгрузки векторного изображения для схем сборок
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 15.04.2022, 13:10   #680
kos100pudov
Местный
 
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
kos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личностьkos100pudov - просто великолепная личность
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
спасибо, теперь осталось сделать поворот всех панелей во фронтальную плоскость, нужно для выгрузки векторного изображения для схем сборок
давайте уточните с самого начала, что нужно.
я подозреваю, что вам нужно повернуть панели во фронтальную плоскость вместе с фурнитурой. но тогда возникает вопрос. если две панели соединены одним уголком или конфирматом, то после поворота каждой из этих панелей, вместе с какой из них должен повернуться (остаться) уголок или конфирмат??
или для начала необходимо разбить фурнитуру на отдельные отверстия, чтоб у каждой панели были свои отверстия, которые повернуться вместе с панелью. а сама фурнитура останется "в воздухе" или вообще удалится.
опишите подробнее что конкретно нужно и что должно произойти.
__________________
Оно поди конечно если, а как коснись чего-нибудь, так вот те на пожалуйста..
kos100pudov вне форума   Ответить с цитированием Вверх
Ответ

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


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис ЧПУ 2021/2024 AlexBolton Базис-мебельщик 2021-2024 138 26.04.2024 15:25
БАЗИС 10 - Скрипты systland Базис-мебельщик. Скрипты 715 14.04.2024 07:03
V-Ray в Базис Мебельщик 11/2023 nayrogi Система БАЗИС 73 12.04.2024 17:08
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1442 04.04.2024 11:28
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1525 30.03.2024 15:03


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


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

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