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

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


Реклама на портале PROMEBELclub
шкаф-купе со скидкой по акции
Реклама на портале PROMEBELclub

искусственный камень Мебель196. Мебельный интернет-магазин в Екатеринбурге.
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
Модератор
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 561

Сказал(а) спасибо: 291
Поблагодарили 433 раз(а) в 181 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: (3 голосов - 4.00 средняя оценка)

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


Последний раз редактировалось systland; 26.12.2017 в 10:52..
Просмотров: 107433
Ответить с цитированием Вверх
Старый 07.07.2019, 07:02   #441
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 30 раз(а) в 12 сообщениях
Вес репутации: 47
IStiv на пути к лучшему
Сообщение checked list box

вопрос по Forms. выбираю подход к задаче.
Логика такая: скрипт работает, в определенный момент пользователю нужно выдать, список с "галочками" что бы он выбрал параметры для продолжения,сам список генерится скриптом и всегда разный/динамический. м.б. порядка 30 элементов.

т.е. мне необходим контрол типа , как в C# checked list box.

1. В принципе можно попробовать стандартный базисный checkBox пихая в название имя моего параметра и создавая их в цикле по количеству параметров..., растягивая основную форму.

2. прикрутить какую нибудь сложную штуку типа App.js/Electron , там есть что мне нужно, но решение избыточно..

3.Вроде еще как то в самом базисе можно такое делать в интерфейсе?

м.б. кто что подобное реализовывал, подскажите пожалуйста какой подход оптимальней?
IStiv вне форума   Ответить с цитированием Вверх
Старый 08.07.2019, 09:37   #442
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 345
Сказал(а) спасибо: 93
Поблагодарили 610 раз(а) в 225 сообщениях
Вес репутации: 185
Letos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всем
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
вопрос по Forms. выбираю подход к задаче.
Логика такая: скрипт работает, в определенный момент пользователю нужно выдать, список с "галочками" что бы он выбрал параметры для продолжения,сам список генерится скриптом и всегда разный/динамический. м.б. порядка 30 элементов.

т.е. мне необходим контрол типа , как в C# checked list box.

1. В принципе можно попробовать стандартный базисный checkBox пихая в название имя моего параметра и создавая их в цикле по количеству параметров..., растягивая основную форму.

2. прикрутить какую нибудь сложную штуку типа App.js/Electron , там есть что мне нужно, но решение избыточно..

3.Вроде еще как то в самом базисе можно такое делать в интерфейсе?

м.б. кто что подобное реализовывал, подскажите пожалуйста какой подход оптимальней?

1 подход был бы хорош, если бы была прокрутка на форме. А так при большом количестве чекбоксов форма вылезет за границы экрана.

По третьему пункту могу предложить лишь добавление чекбоксов на окно свойств объекта:

PHP код:
/**
 * Добавление чекбоксов на форму
 * @param {string[]} names список заголовков чекбоксов
 * @param {ScriptProperty} parent родительское свойство, в котором будут чекбоксы
 */
function MakeCheckBoxes(namesparent){
    
parent.Clear(); // очистка родительского свойства от всех вложенных свойств
    
for (var 0names.lengthi++){
        
parent.NewBool(names[i]);
    }

Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
IStiv (08.07.2019)
Старый 08.07.2019, 17:29   #443
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 30 раз(а) в 12 сообщениях
Вес репутации: 47
IStiv на пути к лучшему
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
1 подход был бы хорош, если бы была прокрутка на форме. А так при большом количестве чекбоксов форма вылезет за границы экрана.

По третьему пункту могу предложить лишь добавление чекбоксов на окно свойств объекта:

PHP код:
/**
 * Добавление чекбоксов на форму
 * @param {string[]} names список заголовков чекбоксов
 * @param {ScriptProperty} parent родительское свойство, в котором будут чекбоксы
 */
function MakeCheckBoxes(namesparent){
    
parent.Clear(); // очистка родительского свойства от всех вложенных свойств
    
for (var 0names.lengthi++){
        
parent.NewBool(names[i]);
    }

1. значит будет n окошек по 10 чекбоков) ну как вариант
2.-
3. а оно нормально скролится вниз будет при большом кол-ве свойств?
IStiv вне форума   Ответить с цитированием Вверх
Старый 08.07.2019, 17:40   #444
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 345
Сказал(а) спасибо: 93
Поблагодарили 610 раз(а) в 225 сообщениях
Вес репутации: 185
Letos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всем
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
1. значит будет n окошек по 10 чекбоков) ну как вариант
2.-
3. а оно нормально скролится вниз будет при большом кол-ве свойств?
1. Не очень удобно, на мой взгляд.
2. Не знаю, что сказать - мало опыта.
3. С массивом на 175 элементов не лагало вроде. А скролл стандартный базисный - просто на панели "Свойства" вместо свойств выделенных объектов отображаются те свойства, которые были добавлены скриптом.
Letos вне форума   Ответить с цитированием Вверх
Старый 13.07.2019, 20:21   #445
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 30 раз(а) в 12 сообщениях
Вес репутации: 47
IStiv на пути к лучшему
По умолчанию

Как копировать все настройки Panel.Butts c одной панели на другую, затерев при этом все имеющиеся Butts на целевой панели?
IStiv вне форума   Ответить с цитированием Вверх
Старый 13.07.2019, 21:25   #446
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 345
Сказал(а) спасибо: 93
Поблагодарили 610 раз(а) в 225 сообщениях
Вес репутации: 185
Letos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всем
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
Как копировать все настройки Panel.Butts c одной панели на другую, затерев при этом все имеющиеся Butts на целевой панели?
panel1 - исходная
panel2 - целевая.
Нюанс: кромка привязывается к номеру элемента контура, поэтому вполне вероятно, что результат не будет таким, каким хотелось бы его видеть.
Код (копирование кромок с одной панели на другую):
PHP код:
var butts1 panel1.Butts;
var 
butts2 panel2.Butts;
butts2.Clear();
for (var 
0butts1.Counti++){
    
butts2.Add().Assign(butts1[i]);

Letos вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
bbb i ko (13.07.2019), IStiv (15.07.2019), Ovsyanicov (15.07.2019), v22884 (14.07.2019)
Старый 18.07.2019, 09:20   #447
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 422
Сказал(а) спасибо: 223
Поблагодарили 873 раз(а) в 175 сообщениях
Вес репутации: 284
v22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личность
По умолчанию

DXF панели.
1) контур панели(пока без подрезки канта).
2) Пазы на отдельные слои по имени паза.
это уже было. Добавлено:
3) Отверстия
(пока только в пласть и перпендикулярные) на слои с именами вида o3h2.

СПАСИБО Letos и всем.

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











//system.exec('c:/Windows/system32/cmd.exe', '/c md "'+ActiveFilePathNomenklatury()+'ЧПУ"')


$$FileName = Action.ModelFilename
system.log($$FileName)
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;
}


system.exec('c:/Windows/system32/cmd.exe', '/c md "'+ActiveFilePathNomenklatury()+'ЧПУ"')



VydelenniyeV_CNC()


function VydelenniyeV_CNC() {
var ar = [] //массив всех выделенных панелей
var OrigSel = []
for (i = 0; i < Model.SelectionCount; i++) {
if (!Model.Selections[i].AsPanel)
continue

OrigSel.push(Model.Selections[i])
}
for (i = 0; i < OrigSel.length; i++) {

if (OrigSel[i].ArtPos == "") {
alert("Расставь Позиции!");
return
}
p = OrigSel[i]
tOr = p.TextureOrientation //0-нет, 1-гор, 2 - верт
if (tOr ==1)
{
cRotation = 90;
}
else{cRotation=0}



// alert(p.ArtPos+ ' -- ' +tOr)
//kh = p.ContourHeight
//kw = p.ContourWidth
//alert(kh+ ' -- ' +kw+ ' -- ' +tOr)
ap = [] // массив контуров панелИ
contourData = {}
contourData.Pos = p.ArtPos
c = p.Contour.MakeCopy()

c.Rotate(0, 0, cRotation);

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

//? для пазов выборки Тип = 2 ?
if (p.Cuts[ic].CutType===2)
{c = p.Cuts[ic].Contour.MakeCopy()}
else
{
c = p.Cuts[ic].Trajectory.MakeCopy()
}

c.Rotate(0, 0, cRotation);

contourData.c = c
var cutName = ""
if(p.Cuts[ic].Sign.toString().trim().length>0)
{

cutName = p.Cuts[ic].Sign
}
else
{
cutName = p.Cuts[ic].Name
}
system.log(cutName)
contourData.sloy=cutName
ap.push(contourData);
}
//--------------Слои отверстий
apO = sloiOtverstiy(p,cRotation)
var holesNames = apO[0]
var holesContours = apO[1]
for(io=0;io<holesNames.length;io++)
{
contourData = {}
contourData.Pos = p.ArtPos
contourData.c = holesContours[io]
contourData.sloy= holesNames[io]
ap.push(contourData);
}
//--------------Слои отверстий




ar.push(ap)
Model.Selections = OrigSel
}

for (var ia = 0; ia < ar.length; ia++) {
DXF(ar[ia])

}

for (i = 0; i < OrigSel.length; i++) {
OrigSel[i].Selected = true
}
}







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)
}











function sloiOtverstiy(p,cRotation)
{
fs = krepej(p)
var res22 = Dyriavim(fs,p)
return res22

}

function krepej(p)
{
if(!p.AsPanel) {return}
var ar = p.FindConnectedFasteners(p)
return ar
}

function Dyriavim(fs,p)
{
// alert(fs[0])

var holesContours = []
var holesNames = []

for(iif=0;iif<fs.length;iif++)
{
f=fs[iif]
// alert(f)
c = f.Holes;
var i = 0;
сk = f.Holes.Count;
//HoleCon = NewContour();

while (i < сk) {
if(!CheckHole(c[i],f, p)&&!CheckHole2(c[i],f, p))
{
i++
continue
}
if (CheckWithPanel(f.NToGlobal(c[i].Direction), p))
{
i++
continue
}
if (c[i].Radius<1.9/2)
{
i++
continue
}
HolePosG = f.ToGlobal(c[i].Position);
p.Selected = false
HolePosG = p.ToObject(HolePosG)
if (c[i].Contour==null)
{
holeName = "o"+(c[i].Radius*2).toString()+"h"+HoleFaceDepth(c[i],f, p).toString()
var ihn = holesNames.indexOf(holeName)
if(ihn==-1)
{
holesNames.push(holeName)
HoleCon = NewContour()
holesContours.push(HoleCon)
} else
{
HoleCon = holesContours[ihn]
}

HoleCon.AddCircle(HolePosG.x, HolePosG.y, c[i].Radius)
}
else
{

holeName = "Qh"+HoleFaceDepth(c[i],f, p).toString()
var ihn = holesNames.indexOf(holeName)
if(ihn==-1)
{
holesNames.push(holeName)
HoleCon = holesContours.push(NewContour())
} else
{
HoleCon = holesContours[ihn]
}


HoleCon.AddList(c[i].Contour.MakeCopy());
HoleCon.Move(HolePosG.x, HolePosG.y)
}
i++
}


/*StartEditing(p)
Undo.Changing(p)
//StartEditing(p)
p.Contour.Subtraction(HoleCon);
system.log(p.ArtPos+ " -- "+p.Name)
p.Build()
*/

}
for(ic = 0;ic<holesContours.length;ic++)
{
holesContours[ic].Rotate(0, 0, cRotation);
}

var res22 = []
res22.push( holesNames)
res22.push(holesContours )
return res22
}

function CheckHole2(hole,fast, panel){
for(id=1;id<20;id++)
{
if(CheckHole(hole,fast, panel,id/20))
{
return true
}
}
return false
}

function CheckHole(hole,fast, panel,delim){
var holeCenter = fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * (hole.Depth * delim),
y: hole.Position.y + hole.Direction.y * (hole.Depth * delim),
z: hole.Position.z + hole.Direction.z * (hole.Depth * delim),
})
holeCenter = panel.ToObject(holeCenter);
return (holeCenter.x > panel.GMin.x) && (holeCenter.x < panel.GMax.x) &&
(holeCenter.y > panel.GMin.y) && (holeCenter.y < panel.GMax.y) &&
(holeCenter.z > panel.GMin.z) && (holeCenter.z < panel.GMax.z);
}


function Equals(n1, n2){
return Math.abs(n1 - n2) < 0.001;
}

function EqualsV(v1, v2) {
return Equals(v1.x, v2.x) &&
Equals(v1.y, v2.y) &&
Equals(v1.z, v2.z);
}

function CheckWithPanel(gDir, panel){
return (EqualsV(gDir, panel.NToGlobal(AxisX)) ||
EqualsV(gDir, panel.NToGlobal(Axis_X)) ||
EqualsV(gDir, panel.NToGlobal(AxisY)) ||
EqualsV(gDir, panel.NToGlobal(Axis_Y)))
}



/**
* Глубина отверстия в пласти панели
* @param {*} hole Отверстие
* @param {Object3} fast Фурнитура, которой принадлежит отверстие
* @param {Panel} panel Панель
*/
function HoleFaceDepth(hole, fast, panel){
// минимум и максимум панели
var pMin = panel.GMin.z, pMax = panel.GMax.z;
// начальная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
var holeStart = panel.ToObject(fast.ToGlobal(hole.Position)).z;
// конечная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
var holeEnd = panel.ToObject(fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * hole.Depth,
y: hole.Position.y + hole.Direction.y * hole.Depth,
z: hole.Position.z + hole.Direction.z * hole.Depth
})).z;
// Если начальная координата больше конечной - меняем их местами
if (holeStart > holeEnd){
var swap = holeStart;
holeStart = holeEnd;
holeEnd = swap;
}
var result = Math.min(holeEnd, pMax) - Math.max(holeStart, pMin);
return Math.round(result*10)/10
}



//****----------------- Угол отверстия в пласть
function VectorDot(v1, v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
function VectorLength(v) {
return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
}

function VectorsAngle(v1, v2){
return Math.acos(VectorDot(v1, v2) / (VectorLength(v1) * VectorLength(v2))) * 180 / Math.PI
}


/// ------ Вызывать эту функцию -------------
function AngleBetweenHoleDirAndPanelFace(hole, fast, panel){
var pDir = panel.NToGlobal(AxisZ);
var hDir = fast.NToGlobal(hole.Direction);
return VectorsAngle(pDir, hDir);
}

//****----------------- Угол отверстия в пласть----------------








[свернуть]



1) выделить нужные панели
2) запустить скрипт.

создаёт в папке модели папку ЧПУ. Записывает в неё dxfы с именами позиций модели.

Иногда надо запустить 2 раза: видимо система не успевает создать папку ЧПУ. Кто знает как исправить буду рад рабочему коду.

чот не работает. только 1 деталь. щас исправлю.
ВРОДЕ ИСПРАВИЛ.

Последний раз редактировалось v22884; 18.07.2019 в 10:55.
v22884 вне форума   Ответить с цитированием Вверх
7 пользователя(ей) сказали cпасибо:
Старый 19.07.2019, 02:30   #448
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 422
Сказал(а) спасибо: 223
Поблагодарили 873 раз(а) в 175 сообщениях
Вес репутации: 284
v22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личностьv22884 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Отверстия(пока только в пласть
Есть малэнкая ошибка в глубине: для Ш-образного если он нарисован с сечением и есесено выпирает на пласти( то есть обхватывает панель и выпирает на 1мм), то этот мм пока прибавляется к глубине отверстия. И если начинается отверстие не от пласти, а где-то раньше.

Подправлю когда-нибудь...

ну и глухие делает как бы с одной пласти пока.

Надо определять какие отверстия с какой пласти.
Ясного представления пока нет.
Видимо надо играться с функцией CheckWithPanel и EqualsV.

Нет ли у кого уже ясного представления или готового кода?
v22884 вне форума   Ответить с цитированием Вверх
Старый 19.07.2019, 10:00   #449
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 345
Сказал(а) спасибо: 93
Поблагодарили 610 раз(а) в 225 сообщениях
Вес репутации: 185
Letos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всемLetos - это имя известно всем
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Надо определять какие отверстия с какой пласти.
Можно использовать такую функцию:
PHP код:
/** 
 * Определить пласть, с которой засверлено отверстие
 * @returns {boolean} true - задняя пласть (-Z по ЛСК панели), false - передняя пласть (+Z по ЛСК панели)
 * @param {*} hole Отверстие 
 * @param {Object3} fast Фурнитура, которой принадлежит отверстие 
 * @param {Panel} panel Панель 
 */ 
function GetPanelFace(holefastpanel){ 
    var 
lowz panel.LowZ;
    var 
highz panel.HighZ;
    
// начальная точка отверстия в ЛСК панели по оси Z (ось пласти панели) 
    
var holeStart panel.ToObject(fast.ToGlobal(hole.Position)).z
    var 
lowd Math.abs(holeStart lowz);
    var 
highd Math.abs(holeStart highz);
    return 
lowd highd;

Здесь берётся положение отверстия, переводится в ЛСК панели и сравнивается расстояние от положения отверстия до минимума панели с расстоянием от положения отверстия до максимума панели. Где меньше расстояние - с той пласти и сверлится отверстие.
Letos вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Ovsyanicov (21.07.2019), v22884 (21.07.2019), zorro (19.07.2019)
Старый 19.07.2019, 18:16   #450
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 30 раз(а) в 12 сообщениях
Вес репутации: 47
IStiv на пути к лучшему
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Иногда надо запустить 2 раза: видимо система не успевает создать папку ЧПУ. Кто знает как исправить буду рад рабочему коду.
PHP код:
system.exec('c:/Windows/system32/cmd.exe''/c md "' ActiveFilePathNomenklatury() + 'ЧПУ"'
Если Вы работает в БМ 10 . такие костыли городить не нужно.
в Node.js имеет ряд встроенных модулей. в т.ч. по работе с файловой системой. в т.ч. модуль FS
https://nodejs.org/docs/latest-v8.x/api/fs.html

PHP код:
var fs = require('fs');
fs.mkdirSync(absolutNameAndPt); // создать папку, аргумент абсолютный путь.  
var isExists fs.existsSync(absolutNameAndPt); // можно проверить есть ли папка. 

//и т.д. .. 
Обратите внимание у функции выше SYNC т.е. синхронный вариант функции создания папки.
IStiv вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Letos (22.07.2019), Ovsyanicov (21.07.2019), v22884 (21.07.2019)
Ответ

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10 1047 06.10.2019 09:42
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2228 12.09.2016 18:13
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 09:08


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


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
© 2007-2019 PROMEBEL