|
|
|
|
|
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..
|
Просмотров: 996124
|
Пользователь сказал cпасибо:
|
|
25.02.2016, 13:07
|
#1011
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 507
|
Цитата:
Сообщение от AndrianoS
Возможно ли, чтобы действия скрипта остались в истории модели?
|
Да, можно. StartEditing(объект);
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
27.02.2016, 02:50
|
#1012
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Цитата:
Сообщение от тех.нолог
v22884, почему бы не реализовать фрезеровку фасадов немного иначе...
Сделать готовые файлы всех типов фасадов для ЧПУ, т.к. как не крути, но Мебельщик не в состоянии учесть всех тонкостей фрезеровки (входы/выходы фрез, очередность операций и т.д.)...
На штрих-коде указывать тип фасада (т.е. при построении моделей дать правильные имена-артикулы фасадам)...
При сканировании на ЧПУ выскакивает сразу готовый файл фрезеровки и работнику достаточно просто изменить габариты...
плюсы: фрезеровка идеально проработана за ранее и нет заморочек в самом Мебельщике вообще
минусы: ручное изменение габарита
PS: для себя реализовали именно так.
|
Цитата:
Сообщение от тех.нолог
v22884, почему бы не реализовать фрезеровку фасадов немного иначе...
Сделать готовые файлы всех типов фасадов для ЧПУ, т.к. как не крути, но Мебельщик не в состоянии учесть всех тонкостей фрезеровки (входы/выходы фрез, очередность операций и т.д.)...
На штрих-коде указывать тип фасада (т.е. при построении моделей дать правильные имена-артикулы фасадам)...
При сканировании на ЧПУ выскакивает сразу готовый файл фрезеровки и работнику достаточно просто изменить габариты...
плюсы: фрезеровка идеально проработана за ранее и нет заморочек в самом Мебельщике вообще
минусы: ручное изменение габарита
PS: для себя реализовали именно так.
|
Спасибо за развёрнутый ответ - совет.
Однако, описываемый способ хорош для ХОРОШЕГО СТАНКА, для конкретного способа обработки.
У нас БЫЛА такая ситуация: оч. хороший станок холзхер изимастер 7050. Описанная схема подходит под такой станок.
Была до пожара 01.01.12 когда 30 млн.руб. за 10минут на моих глазах превратились в пепел.
Теперь у нас самый сраный, самый простой китайский станок 1325. Один плюс - нестинг.
И мы делаем через Арткам. В нём есть возможность по слоям разложить.
Поэтому "тонкости фрезеровки" нас не интересует.
Нас интересует связка: Вывод клиенту вида фасадов в моделе, например на кухне --- экспорт в работу именно этих контуров фасадов.
А то что на хороших станках можно поменять размер фасада...
Неужели, Вы ещё не сталкивались с ситуацией когда клиент заказал рисунок фасада, а станочник даже если и интелектуально достаточно развит и Старался сделать хорошо и правильно, сделал рисунок не ТАК как представлял его клиент на какой-то из деталей, например на каком-нибудь мелком лобике.
ВОПРОС ОТКРЫТ:
ВЫВОД КОНТУРА В DXF.
|
|
|
Пользователь сказал cпасибо:
|
|
27.02.2016, 06:51
|
#1013
|
Местный
Регистрация: 03.01.2016
Адрес: Украина. Харьков
Сообщений: 481
Сказал(а) спасибо: 316
Поблагодарили 507 раз(а) в 200 сообщениях
Вес репутации: 251
|
Все рисунки принимаются от дизайнера в контурах, далее руками (не станочника) прописываются в родной программе, т.к. я уже говорил, Мебельщик ужасно работает с контурами... помимо отсутствия плавных линий куча не верных заходов и выходов фрез, короче рисунки, фрезы, входы-выходы, слоя, очередность - все делается специально обученым человеком. Сотрудник на ЧПУ ни чего сам не делает, он получает готовые файлы, его задача просканировать бирку и правильно положить деталь.
Оффтоп, пожар жесть.
|
|
|
Пользователь сказал cпасибо:
|
|
27.02.2016, 07:44
|
#1014
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Экспорт контуров в DXF на определённый слой
Скрытый текст
t1 = "0\nVISION3D DXF\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n 1\nAC1015\n 9\n$ACADMAINTVER\n 70\n6\n 9\n$DWGCODEPAGE\n 3\nANSI_1251\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n10\n0.0\n20\n0.0\n9\n$EXTMAX\n10\n1000.0\n20\n1000.0\n9\n$LINMIN\n10\n0.0\n20\n0.0\n9\n$LINMAX\n10\n1000.0\n20\n1000.0\n0\nENDSEC\n0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n64\n3\nSolid line\n72\n65\n73\n0\n40\n0.000000\n0\nENDTAB\n0\nTABLE\n2\n"
//alert(t1)
t2_doSloya = "LAYER\n70\n6\n0\nLAYER\n 5\n110D0\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n"
//alert(t2_doSloya)
t3_PosleSloya = "70\n64\n 62\n7\n 6\nCONTINUOUS\n0\n"
//alert(t3_PosleSloya)
t4_DoObjektov = "ENDTAB\n0\nTABLE\n2\nSTYLE\n70\n0\n0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nBLOCKS\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n"
//alert(t4_DoObjektov)
l1_sloy = "0\nLINE\n 5\n110D1\n330\n1F\n100\nAcDbEntity\n 8\n"
//alert(l1_sloy)
l2_x1 = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbLine\n 10\n"
//alert(l2_x1)
l3_y1 = " 20\n"
l4_x2 = " 11\n"
l5_y2 = " 21\n"
a1_sloy = " 0\nARC\n 5\n110D2\n330\n1F\n100\nAcDbEntity\n 8\n"
a2_cX = " 6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
//alert(a2_cX)
a3_cY = " 20\n"
a4_R = " 40\n"
a5_p1A = "100\nAcDbArc\n 50\n"
a6_p2A = " 51\n"
c1_sloy = "0\nCIRCLE\n 5\n110D3\n330\n1F\n100\nAcDbEntity\n 8\n"
c2_cX = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
c3_cY = " 20\n"
c4_R = " 40\n"
kanec = "0\nENDSEC\n0\nEOF"
p = AddPanel(100, 200)
c= p.Contour
cc = NewContour()
cc.AddCircle(100, 0, 100)
c.Addition(cc)
cc = NewContour()
cc.AddCircle(50, 50, 15)
c.Subtraction(cc)
p.Build()
c= p.Contour
sloy = "Фреза Фигурная"
tdxf = t1+ t2_doSloya+ sloy +"\n" + t3_PosleSloya + t4_DoObjektov
for(i=0;i<c.Count;i++)
{
if(c[i].ElType == 1)
{
tdxf = tdxf + l1_sloy + sloy +"\n" + l2_x1 + c[i].Pos1.x +"\n" + l3_y1 + c[i].Pos1.y +"\n" + l4_x2 + c[i].Pos2.x +"\n" + l5_y2 + c[i].Pos2.y +"\n"
}
else if (c[i].ElType == 2)
{
tdxf = tdxf + a1_sloy + sloy +"\n" + a2_cX + c[i].Center.x +"\n" + a3_cY + c[i].Center.y +"\n" + a4_R + c[i].ArcRadius() +"\n" + a5_p1A + c[i].Pos1Angle() *(180/Math.PI) +"\n" + a6_p2A + c[i].Pos2Angle() *(180/Math.PI)+"\n"
}
else if (c[i].ElType == 3)
{
tdxf = tdxf + c1_sloy + sloy +"\n" + c2_cX + c[i].Center.x +"\n" + c3_cY + c[i].Center.y +"\n" + c4_R + c[i].CirRadius +"\n"
}
}
tdxf = tdxf + kanec
system.writeTextFile('ПерыйDXF.dxf', tdxf)
[свернуть]
http://paulbourke.net/dataformats/dxf/min3d.html
|
|
|
8 пользователя(ей) сказали cпасибо:
|
|
28.02.2016, 05:20
|
#1015
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Экспорт контуров в DXF на определённый слой
немного доделанный(дуги не правильно рисовались)
и под свои нужды
Скрытый текст
system.secureExec("" +
"AQAA/wF4nGNigAA2IA7OLy1KTv0PBIwgIUaYlD6Q" +
"KGNIZChiUGBQAUI3hkyGHIZUBj+gWC6QVmCwBWJH" +
"hmSGEqBMPkMegx6DP0MBnFcM5DszZIB1pQDZ6Pqt" +
"GQD3jBbQ" +
"");
function ActiveFileName()
{
return $$FileName;
}
function ActiveFilePath()
{
return $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1);
}
function ActiveFileNameS_RasshireniyemTolko()
{
return $$FileName.substring($$FileName.lastIndexOf("\\") + 1, $$FileName.length);
}
function ActiveFilePathNomenklatury()
{
PathNomenklatury = $$FileName.lastIndexOf("\\Прямые")+ 1
// alert(PathNomenklatury)
if(PathNomenklatury>0)
{
PathNomenklatury = $$FileName.substring(0, PathNomenklatury);
}
else
{
PathNomenklatury = $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1)
}
return PathNomenklatury;
}
VydelenniyeV_CNC()
function VydelenniyeV_CNC() {
ar = [] //массив всех выделенных панелей
for (i = 0; i < Model.SelectionCount; i++) {
if (!Model.Selections[i].AsPanel) {
continue
}
if (Model.Selections[i].ArtPos == "") {
alert("Расставь Позиции!");
return
}
p = Model.Selections[i]
ap = [] // массив контуров панелИ
contourData = {}
contourData.Pos = p.ArtPos
contourData.c = p.Contour
sloyKontura = "Контур заготовки"
contourData.sloy= sloyKontura
ap.push(contourData);
for (ic = 0; ic < p.Cuts.Count; ic++) {
//alert( p.Cuts[ic].Name )
contourData = {}
contourData.Pos = p.ArtPos
contourData.c = p.Cuts[ic].Trajectory
contourData.sloy= p.Cuts[ic].Name
ap.push(contourData);
}
ar.push(ap)
}
for (ia = 0; ia < ar.length; ia++) {
DXF(ar[ia])
}
}
function DXF(data) {
t1 = "0\nVISION3D DXF\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n 1\nAC1015\n 9\n$ACADMAINTVER\n 70\n6\n 9\n$DWGCODEPAGE\n 3\nANSI_1251\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n10\n0.0\n20\n0.0\n9\n$EXTMAX\n10\n1000.0\n20\n1000.0\n9\n$LINMIN\n10\n0.0\n20\n0.0\n9\n$LINMAX\n10\n1000.0\n20\n1000.0\n0\nENDSEC\n0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n64\n3\nSolid line\n72\n65\n73\n0\n40\n0.000000\n0\nENDTAB\n0\nTABLE\n2\n"
//alert(t1)
t2_doSloya = "LAYER\n70\n6\n0\nLAYER\n 5\n110D0\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n"
//alert(t2_doSloya)
t3_PosleSloya = "70\n64\n 62\n7\n 6\nCONTINUOUS\n0\n"
//alert(t3_PosleSloya)
t4_DoObjektov = "ENDTAB\n0\nTABLE\n2\nSTYLE\n70\n0\n0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nBLOCKS\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n"
//alert(t4_DoObjektov)
l1_sloy = "0\nLINE\n 5\n110D1\n330\n1F\n100\nAcDbEntity\n 8\n"
//alert(l1_sloy)
l2_x1 = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbLine\n 10\n"
//alert(l2_x1)
l3_y1 = " 20\n"
l4_x2 = " 11\n"
l5_y2 = " 21\n"
a1_sloy = " 0\nARC\n 5\n110D2\n330\n1F\n100\nAcDbEntity\n 8\n"
a2_cX = " 6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
//alert(a2_cX)
a3_cY = " 20\n"
a4_R = " 40\n"
a5_p1A = "100\nAcDbArc\n 50\n"
a6_p2A = " 51\n"
c1_sloy = "0\nCIRCLE\n 5\n110D3\n330\n1F\n100\nAcDbEntity\n 8\n"
c2_cX = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
c3_cY = " 20\n"
c4_R = " 40\n"
kanec = "0\nENDSEC\n0\nEOF"
sloi = []
for(i=0;i< data.length;i++)
{
//alert('!!!'+data[i].sloy)
if(sloi.indexOf(data[i].sloy)== -1)
{
sloi.push(data[i].sloy)
}
}
tdxf = t1
for(i=0;i< sloi.length;i++)
{
tdxf = tdxf + t2_doSloya + sloi[i] + "\n" + t3_PosleSloya
}
tdxf = tdxf + t4_DoObjektov
for(ic=0;ic< data.length;ic++)
{
c = data[ic].c
sloy = data[ic].sloy
for (i = 0; i < c.Count; i++) {
if (c[i].ElType == 1) {
tdxf = tdxf + l1_sloy + sloy + "\n" + l2_x1 + c[i].Pos1.x + "\n" + l3_y1 + c[i].Pos1.y + "\n" + l4_x2 + c[i].Pos2.x + "\n" + l5_y2 + c[i].Pos2.y + "\n"
} else if (c[i].ElType == 2) {
p1A = c[i].Pos1Angle() * (180 / Math.PI)
p2A = c[i].Pos2Angle() * (180 / Math.PI)
if(!c[i].ArcDir)
{
pp=p1A
p1A = p2A
p2A = pp
}
//else {dir='1'}
tdxf = tdxf + a1_sloy + sloy + "\n" + a2_cX + c[i].Center.x + "\n" + a3_cY + c[i].Center.y + "\n" + a4_R + c[i].ArcRadius() + "\n" + a5_p1A + p1A + "\n" + a6_p2A + p2A + "\n"
} else if (c[i].ElType == 3) {
tdxf = tdxf + c1_sloy + sloy + "\n" + c2_cX + c[i].Center.x + "\n" + c3_cY + c[i].Center.y + "\n" + c4_R + c[i].CirRadius + "\n"
}
}
}
tdxf = tdxf + kanec
system.writeTextFile(ActiveFilePathNomenklatury()+ 'ЧПУ\\' + data[0].Pos + '.dxf', tdxf)
}
[свернуть]
Экспорт контуров в DXF на определённый слой
ищё чуть даработана: разворачивает контуры направлением текстуры Вертикально
Скрытый текст
system.secureExec("" +
"AQAA/wF4nGNigAA2IA7OLy1KTv0PBIwgIUaYlD6Q" +
"KGNIZChiUGBQAUI3hkyGHIZUBj+gWC6QVmCwBWJH" +
"hmSGEqBMPkMegx6DP0MBnFcM5DszZIB1pQDZ6Pqt" +
"GQD3jBbQ" +
"");
function ActiveFileName()
{
return $$FileName;
}
function ActiveFilePath()
{
return $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1);
}
function ActiveFileNameS_RasshireniyemTolko()
{
return $$FileName.substring($$FileName.lastIndexOf("\\") + 1, $$FileName.length);
}
function ActiveFilePathNomenklatury()
{
PathNomenklatury = $$FileName.lastIndexOf("\\Прямые")+ 1
// alert(PathNomenklatury)
if(PathNomenklatury>0)
{
PathNomenklatury = $$FileName.substring(0, PathNomenklatury);
}
else
{
PathNomenklatury = $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1)
}
return PathNomenklatury;
}
VydelenniyeV_CNC()
function VydelenniyeV_CNC() {
ar = [] //массив всех выделенных панелей
for (i = 0; i < Model.SelectionCount; i++) {
if (!Model.Selections[i].AsPanel) {
continue
}
if (Model.Selections[i].ArtPos == "") {
alert("Расставь Позиции!");
return
}
p = Model.Selections[i]
tOr = p.TextureOrientation //0-нет, 1-гор, 2 - верт
// alert(p.ArtPos+ ' -- ' +tOr)
//kh = p.ContourHeight
//kw = p.ContourWidth
//alert(kh+ ' -- ' +kw+ ' -- ' +tOr)
ap = [] // массив контуров панелИ
contourData = {}
contourData.Pos = p.ArtPos
c = p.Contour.MakeCopy()
if (tOr ==1)
{
c.Rotate(0, 0, 90);
}
contourData.c = c
sloyKontura = "Контур заготовки"
contourData.sloy= sloyKontura
ap.push(contourData);
for (ic = 0; ic < p.Cuts.Count; ic++) {
//alert( p.Cuts[ic].Name )
contourData = {}
contourData.Pos = p.ArtPos
c = p.Cuts[ic].Trajectory.MakeCopy()
if (tOr ==1)
{
c.Rotate(0, 0, 90);
}
contourData.c = c
contourData.sloy= p.Cuts[ic].Name
ap.push(contourData);
}
ar.push(ap)
}
for (ia = 0; ia < ar.length; ia++) {
DXF(ar[ia])
}
}
function DXF(data) {
t1 = "0\nVISION3D DXF\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n 1\nAC1015\n 9\n$ACADMAINTVER\n 70\n6\n 9\n$DWGCODEPAGE\n 3\nANSI_1251\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n10\n0.0\n20\n0.0\n9\n$EXTMAX\n10\n1000.0\n20\n1000.0\n9\n$LINMIN\n10\n0.0\n20\n0.0\n9\n$LINMAX\n10\n1000.0\n20\n1000.0\n0\nENDSEC\n0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n64\n3\nSolid line\n72\n65\n73\n0\n40\n0.000000\n0\nENDTAB\n0\nTABLE\n2\n"
//alert(t1)
t2_doSloya = "LAYER\n70\n6\n0\nLAYER\n 5\n110D0\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n"
//alert(t2_doSloya)
t3_PosleSloya = "70\n64\n 62\n7\n 6\nCONTINUOUS\n0\n"
//alert(t3_PosleSloya)
t4_DoObjektov = "ENDTAB\n0\nTABLE\n2\nSTYLE\n70\n0\n0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nBLOCKS\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n"
//alert(t4_DoObjektov)
l1_sloy = "0\nLINE\n 5\n110D1\n330\n1F\n100\nAcDbEntity\n 8\n"
//alert(l1_sloy)
l2_x1 = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbLine\n 10\n"
//alert(l2_x1)
l3_y1 = " 20\n"
l4_x2 = " 11\n"
l5_y2 = " 21\n"
a1_sloy = " 0\nARC\n 5\n110D2\n330\n1F\n100\nAcDbEntity\n 8\n"
a2_cX = " 6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
//alert(a2_cX)
a3_cY = " 20\n"
a4_R = " 40\n"
a5_p1A = "100\nAcDbArc\n 50\n"
a6_p2A = " 51\n"
c1_sloy = "0\nCIRCLE\n 5\n110D3\n330\n1F\n100\nAcDbEntity\n 8\n"
c2_cX = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
c3_cY = " 20\n"
c4_R = " 40\n"
kanec = "0\nENDSEC\n0\nEOF"
sloi = []
for(i=0;i< data.length;i++)
{
//alert('!!!'+data[i].sloy)
if(sloi.indexOf(data[i].sloy)== -1)
{
sloi.push(data[i].sloy)
}
}
tdxf = t1
for(i=0;i< sloi.length;i++)
{
tdxf = tdxf + t2_doSloya + sloi[i] + "\n" + t3_PosleSloya
}
tdxf = tdxf + t4_DoObjektov
for(ic=0;ic< data.length;ic++)
{
c = data[ic].c
sloy = data[ic].sloy
for (i = 0; i < c.Count; i++) {
if (c[i].ElType == 1) {
tdxf = tdxf + l1_sloy + sloy + "\n" + l2_x1 + c[i].Pos1.x + "\n" + l3_y1 + c[i].Pos1.y + "\n" + l4_x2 + c[i].Pos2.x + "\n" + l5_y2 + c[i].Pos2.y + "\n"
} else if (c[i].ElType == 2) {
p1A = c[i].Pos1Angle() * (180 / Math.PI)
p2A = c[i].Pos2Angle() * (180 / Math.PI)
if(!c[i].ArcDir)
{
pp=p1A
p1A = p2A
p2A = pp
}
//else {dir='1'}
tdxf = tdxf + a1_sloy + sloy + "\n" + a2_cX + c[i].Center.x + "\n" + a3_cY + c[i].Center.y + "\n" + a4_R + c[i].ArcRadius() + "\n" + a5_p1A + p1A + "\n" + a6_p2A + p2A + "\n"
} else if (c[i].ElType == 3) {
tdxf = tdxf + c1_sloy + sloy + "\n" + c2_cX + c[i].Center.x + "\n" + c3_cY + c[i].Center.y + "\n" + c4_R + c[i].CirRadius + "\n"
}
}
}
tdxf = tdxf + kanec
system.writeTextFile(ActiveFilePathNomenklatury()+ 'ЧПУ\\' + data[0].Pos + '.dxf', tdxf)
}
[свернуть]
Последний раз редактировалось AlexBolton; 28.02.2016 в 11:41.
Причина: правила п III.18
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
02.03.2016, 05:01
|
#1016
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Надо вытащить Базис-Скриптом эскиз Панели в JPG или BMP или WMF или Любой графический.
Либо эскиз вида Базис-мебельщика в окне свойств,
либо эскиз вида Базис-раскроя для этикетки,
либо любой эскиз с отверстиями и желательно окантовкой.
Нужно для древнего сверловочника.
Есть варианты?
|
|
|
06.03.2016, 06:12
|
#1017
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Цитата:
Сообщение от Briz
AddEquidistant : new HDefinition("?undefined:contour,offset,false,false ", 'Добавить эквидистанту контура. Последние 2 параметры отвечают за направление и скругление')
|
Как определяется направление?
тру или фэлс не равно внутрь или наружу замкнутого контура.
наверно относительно нуля контура....... ??????????????
Почему, чтобы наружу была эквидистанта, в первом случае направление указывать одно, а в остальных другое?:
p= AddPanel(200, 100)
c= p.Contour
c0 = NewContour()
c0.AddEquidistant(c, 10, true, false)
p= AddPanel(200, 100)
c= p.Contour
c.Clear()
c.Addition(c0)
p.Build()
c0 = NewContour()
c0.AddEquidistant(c, 10, false, false)
p= AddPanel(200, 100)
c= p.Contour
c.Clear()
c.Addition(c0)
p.Build()
c0 = NewContour()
c0.AddEquidistant(c, 10, false, false)
p= AddPanel(200, 100)
c= p.Contour
c.Clear()
c.Addition(c0)
p.Build()
c0 = NewContour()
c0.AddEquidistant(c, 10, false, false)
p= AddPanel(200, 100)
c= p.Contour
c.Clear()
c.Addition(c0)
p.Build()
Есть ли предусмотренный способ получить контур панели с учётом подрезки канта?
Где-то храниться?
или есть Функция?
Пока не идеально срабатывающий скрипт подрезки:
Скрытый текст
p = Model.Selections[0]
StartEditing(p)
cp = p.Contour
ar = []
for(i=0;i<cp.Count;i++)
{
PodrezatElementContura(cp,i,2,ar)
}
system.log('ar = '+ar.length)
for(i=0;i<ar.length;i++)
{
cp.Subtraction(ar[i])
}
p.Build()
function PodrezatElementContura(cp,i,offset,ar)
{
c = NewContour()
el = c.AddCopy(cp[i])
//c = cp.MakeCopy()
co = NewContour()
co.AddCopy(c[0])
//--- Удаление элемента
index = cp.IndexOf(cp[i])
//cp.Extract(index)
//--- Удаление элемента
if(cp[i].ElType==3)
{
//napr = NarujniyLicOntur(cp[i],cp)
c.AddEquidistant(co, offset, false, false)
}
else{
c.AddEquidistant(co, offset, false, false)
t1 = c[0].Pos1
t2 = c[1].Pos1
x1 = t1.x
y1 = t1.y
x2 = t2.x
y2 = t2.y
c.AddLine(x1, y1, x2, y2)
t1 = c[0].Pos2
t2 = c[1].Pos2
x1 = t1.x
y1 = t1.y
x2 = t2.x
y2 = t2.y
c.AddLine(x1, y1, x2, y2)
}
//cp.Subtraction(c)
ar.push(c)
system.log(c.Count)
}
function NarujniyLicOntur(el,cp) {
var contours = FindClosedContours(cp);
vnutr = 0
avnu=[]
naruj = 0
anar=[]
for (var k = 0; k < contours.length; k++)
{
system.log('да'+cp.IndexOf(contours[k][0]))
system.log('да'+cp.IndexOf(el))
if (cp.IndexOf(contours[k][0])== cp.IndexOf(el)){
system.log('да')
vnutr2 = false
for (var k2 = 0; k2 < contours.length; k2++)
{
if(k==k2){continue}
if (contours[k].IsInContour(contours[k2]))
{
vnutr2 = true
break
}
}
if( vnutr2)
{vnutr = vnutr +1
avnu.push(k)
}
else{naruj = naruj + 1
anar.push(k)}
// messages.push('Длина контура ' + k + ' = ' + contours[k].ObjLength());
}
}
}
function FindClosedContours(contour) {
// создаем копию исходного контура панели
var contourCopy = NewContour();
contourCopy.Addition(contour);
contourCopy = contour
var result = [];
while (true) {
closedContour = NewContour();
// выделяем замкнутые контуры и добавляем их в результирующий массив
if (contourCopy.FindContour(closedContour, true))
result.push(closedContour)
else
break;
}
return result;
}
[свернуть]
подскажите, пожалуйста,
- наверняка есть более прямые решения
- если нет, то каков алгоритм:
подрезки на стыках дуга-дуга, дуга-линия -- они не простые.
Там как бы удлиняются линии и дуги и на пересечениях отрезаются концы линий и дуг/ или конец дуги/линии переносится на точку пересечения.
Если так -- тогда вопрос: на сколько удлинить, так чтобы правильно определить точку пересечения?
Как Определяется направление Эквидистанты в команде?
Какой способ получить контур панели с учётом подрезки канта самый простой?
Как экспортировать любой из стандартных эскизов панели в любой из растровых форматов?
Последний раз редактировалось DTioutiou; 27.03.2016 в 06:33.
|
|
|
10.03.2016, 08:47
|
#1018
|
Новичок
Регистрация: 27.10.2015
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
Вес репутации: 0
|
>>Как Определяется направление Эквидистанты в команде?
Рискну предположить, что определение направления смещения
задается относительно геометрического центра cnt-контура
[(cnt.MaxX-cnt.MinX)/2,(cnt.MaxY-cnt.MinY)/2]
True -вовне, False -вовнутрь. (-не проверял)
>>Какой способ получить контур панели с учётом подрезки канта самый простой?
Если речь о нахождении точек сопряжения новых элементов контура построенного через offset(эквидистанта) -то есть некоторые мысли как их найти:
используем 2 факта:
1. Т.пересечения лежит на биссектриссе нормалей в т.пересечения
исходных элементов. Т.е. ищем этот угол из точки pt1 (см.рис.)
2. Теперь нужно расстояние - расстояние от существующей т.пересечения к искомой, т.пересечения находим из формул ... (см.рис.)
...Далее функцией polar(угол,дистанция) находим искомую точку.
...ну с направлением угла нужно еще подумать -зависит от направления offset
Есть еще вариант использовать системные функции, - но они далеко не все документированы и рассчитывать на них не следует.
Дзен Путь - мало помалу писать собственную библиотеку классов, библиотеку функций для решения своих насущных мебельных проблем.
>>Как экспортировать любой из стандартных эскизов панели в любой из растровых форматов?
-'Стандартные эскизы' -не получить средствами Базиса.
-Правильный путь, - это путь которым Вы и двигались при экспорте в DXF...
-Кривинький путь (лишь бы что-то получить) - копировать растровые куски экрана - пример ранее был. Управлять окном Базиса, - жать на кнопки за пользователя можно посредством такого продукта как AutoIT (тоже скрипты).
|
|
|
Пользователь сказал cпасибо:
|
|
11.03.2016, 03:42
|
#1019
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
function ShowFolderList(folderspec)
{
var fso, f, fc, s;
fso = NewCOMObject ("Scripting.FileSystemObject");
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.SubFolders);
s = "";
for (;!fc.atEnd(); fc.moveNext())
{
s += fc.item();
s += "<br>";
}
return(s);
}
Enumerator is not defined
как сделать?
function ShowFolderList(folderspec)
{
var fso, f, fc, s;
fso = NewCOMObject ("Scripting.FileSystemObject");
f = fso.GetFolder(folderspec);
fc = f.SubFolders;
for (var key in fc) {
s += fc.item();
s += "<br>";
}
return(s);
}
тож не работает...
Последний раз редактировалось DTioutiou; 11.03.2016 в 08:42.
|
|
|
11.03.2016, 15:10
|
#1020
|
Пользователь
Регистрация: 26.09.2014
Сообщений: 46
Сказал(а) спасибо: 55
Поблагодарили 15 раз(а) в 5 сообщениях
Вес репутации: 124
|
Народ, подскажите пожалуйста есть ли такой скрипт, чтобы находил в модели все пазы и подрезал их длину с обоих сторон на определенное значение? Например, есть деталь, где есть паз под ХДФ. Но надо чтоб этот паз шел не полностью вдоль стороны, а не доходил до конца на 14мм и начинался не сначала детали, а также с отступом на 14мм. ( Тему как-то поднимал, но видимо решения не найдено)
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 00:19. Часовой пояс GMT +3.
|