|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 9 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.
2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.
Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.
__________________________________________________ _______________
Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.
Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL ( сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]
Последний раз редактировалось systland; 23.09.2016 в 11:52..
|
Просмотров: 993304
|
Пользователь сказал cпасибо:
|
|
30.09.2014, 09:40
|
#501
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Сообщите, пожалуйста, как прочитать Базис скриптом(ну или Java) список файлов.
Найденный вариант:
import java.io.File;
File myFolder = new File("c:\myfolder");
File[] files = myFolder.listFiles();
-- Не работает.
Хочу сохранять настройки скрипта в разных файлах с разными произвольными именами: например для одного типа крепежа одни настройки, для другого -- другие.
Ну и при запуске скрипта читать список файлов и помещать этот список в Combo.
|
|
|
30.09.2014, 10:13
|
#502
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
Цитата:
Как тогда по OpenFurniture извлекать параметрическую фурнитуру (где она физически храниться)?
|
Эта функция не работает с параметрической фурнитурой
Цитата:
Как затормозить команду выбора крепежа NewFurnitureInput? А то скрипт строит полку, но игнорирует окошко выбора.
|
А вот эта функция работает с параметрической фурнитурой
Props = Action.Properties;
Furn = Props.NewFurniture('Фурнитура');
Furn.Click();
if (Furn.CanClearValue()) {
P1 = GetPanel("Укажите панель");
}
Добавлено через 26 минут
Цитата:
Хочу сохранять настройки скрипта в разных файлах с разными произвольными именами: например для одного типа крепежа одни настройки, для другого -- другие.
Ну и при запуске скрипта читать список файлов и помещать этот список в Combo.
|
Базис не позволяет работать с файловой системой. Я бы рекомендовал писать настройки через формат JSON
// запись настроек
Settings = {};
Settings.Крепеж1 = {};
Settings.Крепеж1.Количество = 2;
Settings.Крепеж2 = {Количество: 5, Интервал: 6};
system.writeTextFile('Settings.json', JSON.stringify(Settings))
// чтение настроек
Settings2 = JSON.parse(system.readTextFile('Settings.json'));
alert(Settings2.Крепеж1.Количество);
alert(Settings.Крепеж2.Интервал);
|
|
|
30.09.2014, 10:34
|
#503
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 507
|
Цитата:
Как затормозить команду выбора крепежа NewFurnitureInput? А то скрипт строит полку, но игнорирует окошко выбора.
|
Или можно так, затормозить команду выбора крепежа.
Скрытый текст
ShelfFast = NewFurnitureInput('Крепёж');
Bok1 = GetPanel("Укажите 1-ую вертикальную панель");
Bok2 = GetPanel("Укажите 2-ую вертикальную панель");
x1 = Bok1.GabMax.x ;
x2 = Bok2.GabMin.x ;
z11 = Bok1.GabMin.z;
z12 = Bok1.GabMax.z;
z21 = Bok2.GabMin.z;
z22 = Bok2.GabMax.z;
z1 = Math.max(Bok1.GabMin.z, Bok2.GabMin.z);
z2 = Math.min(Bok1.GabMax.z, Bok2.GabMax.z);
function MoveOdj() {
DeleteNewObjects()
Polka = AddHorizPanel(x1, z1, x2, z2, Action.Pos3.y);
Polka.TextureOrientation = TextureOrientation.Horizontal;
zp1 = Polka.GabMin.z;
zp2 = Polka.GabMax.z;
Polka.PositionY = Action.Pos3.y
}
function Krep() {
PosY = Polka.PositionY
ShelfFast.Mount(Polka, Bok1, x1, PosY, z2 - 37);
ShelfFast.Mount(Polka, Bok2, x2, PosY, z2 - 37);
ShelfFast.Mount(Polka, Bok1, x1, PosY, z1 + 32);
ShelfFast.Mount(Polka, Bok2, x2, PosY, z1 + 32);
}
Action.ShowPoints = true;
Action.OnMove = function() {
MoveOdj()
};
Action.OnClick = function() {
Krep();
Action.Commit();
Action.Cancel();
};
Action.Continue(); [свернуть]
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
30.09.2014, 17:24
|
#504
|
Местный
Регистрация: 16.11.2011
Адрес: Москва / Пенза
Сообщений: 1,135
Сказал(а) спасибо: 307
Поблагодарили 1,257 раз(а) в 524 сообщениях
Вес репутации: 516
|
А разрушать необходимые сборки никто не пробовал?
То есть по сути, я думал в поиске по всем объектам (Model.forEach) вначале найти нужные сборки (как выделить именно сборки то же не нашел, только проверку, что объект структурный, а не панель Assem.List == true). Потом так же задать поиск по модели и для всех объектов, у кого Obj.Owner равен найденной сбороке присвоить заместо этого ее родителя...
И фиг, сравнение родителя с найденным объектом ничего не дает...
Скрытый текст
Model.forEach
(function(Obj)
{
if(Obj.List == true)
{
if(Obj.Name == '123')
{
alert('нашел ');//находит
Model.forEach
(function(Obj2)
{
if(Obj2.Owner == Obj)
{
alert('и дочек нашел');//никогда не выскакивает
StartEditing(VlObj);
Obj2.Owner = Obj.Owner;
};
}
);
};
};
}
);
[свернуть]
Сам спросил, вроде сам решил... через UID... вы знаете что это такое? и я нет...
__________________
Нахожусь в режиме поиска интересных задач, связанных с Базисом. Москва, 2015.
|
|
|
01.10.2014, 00:36
|
#505
|
Местный
Регистрация: 06.01.2008
Сообщений: 107
Сказал(а) спасибо: 20
Поблагодарили 10 раз(а) в 9 сообщениях
Вес репутации: 211
|
Цитата:
Может кому пригодится такой скрипт. Он формирует из файла раскроя obl набор панелей прямоугольной формы в Базисе. Панели имеют кромку указанную в таблице раскроя.
Мы не занимаемся коммерческим раскроем. Но предистория такая.
Пришел "очень нужный" человек для нашей фирмы. В нем проснулся мастер. Он САМ разработал мебель, хотел чтобы мы напилили, покромили и присадили детали. Отказать ему - себе дороже.
Он принес размеры деталей и кроме размеров надо было где-то радиус сделать, где-то фаску и т.д. В Раскрое это никак не сделаешь. В Базисе тоскливо каждую панель в нужный размер загонять. Поступили проще.
Ввели размеры панелей и кромку в Базис-Раскрое, перегнали с помощью этого скрипта в Базис и там нужные панели отредактировали и добавили сквозные и глухие отверстия.
После этого и смета автоматом считается и программы для ЧПУ формируются.
|
А можно то же самое реализовать, но чтобы он сохранял контуры деталей и отверстия? как бы нестинг карта
|
|
|
01.10.2014, 07:49
|
#506
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Цитата:
Сообщение от n1me
А можно то же самое реализовать, но чтобы он сохранял контуры деталей и отверстия? как бы нестинг карта
|
это возможно.
Скопировать контуры в 1 панель -- легко.
Сделать в контуре отверстия по отверстиям крепежа -- реализовано в скрипте для мойки.
(для полной дореализации функции не хватает определения крепежа на определённой панели, Как определить крепёж на панели?)
Самое интересное это непосредственно алгоритм компановки. но Тож реализуемо. Но самое сложное, особенно если нужно так же красиво как в Арткаме.
Кстате спасибо за идею!
Полноценную компоновку пока не берусь, а контуры криволинейных в одну панель для быстрой отправки в DXF -- это хорошая не сложно реализуемая идея.
Спасибо.
|
|
|
01.10.2014, 09:02
|
#507
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Как определить сторону соприкосновения панели1 к панели2 ?
|
|
|
01.10.2014, 09:10
|
#508
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
p = P1.GCenter;
p = P1.ToGlobal(p);
p = P2.ToObject(p);
if (p.z < 0)
..
else
...
|
|
|
01.10.2014, 09:21
|
#509
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Цитата:
Сообщение от n1me
самое реализовать, но чтобы он сохранял контуры деталей и отверстия? как бы нестинг карта
|
За йчатки нестинга:
Скрытый текст
BtnMake = NewButtonInput('Закончить');
BtnMake.OnChange = function() {
// Make(); //Вызываем функцию построения всех панелей
Action.Finish();
}
Action.Continue();
// continue action
pr = AddPanel(0, 0)
cr = pr.Contour
cr.Clear()
dx=0
dy=0
i=0
while (i<1000)
{
p = GetPanel('Укажите панель');
c = p.Contour.MakeCopy()
c.Move(dx, dy)
dx = dx + c.Width + 30
cr.Addition(c)
pr.Build()
i++
}
[свернуть]
|
|
|
01.10.2014, 10:28
|
#510
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
p = P1.GCenter; // наверно габаритный центр панели1
p = P1.ToGlobal(p); // в ГСК
p = P2.ToObject(p); //эта точка относительно нуля панели2
if (p.z < 0) // p.z - это измерение вдоль толщины панели2
..
else
...
То есть если я правильно понял, то условием p.z < 0 выясняем как габаритный центр панели1 соотноситься к нулевой стороне панели2?
Значит ли это, что надо перебирать другие точки в первой строке p = P1.GCenter;?
Уважаемый Briz, не могли бы Вы пояснить использование кода.
|
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:18. Часовой пояс GMT +3.
|