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

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

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565

Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: ()

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


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 425466
Ответить с цитированием Вверх
Старый 07.07.2019, 07:02   #441
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
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
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордится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
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
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
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордится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
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

Как копировать все настройки Panel.Butts c одной панели на другую, затерев при этом все имеющиеся Butts на целевой панели?
IStiv вне форума   Ответить с цитированием Вверх
Старый 13.07.2019, 21:25   #446
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордится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
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордится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
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

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

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

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

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

Нет ли у кого уже ясного представления или готового кода?
v22884 вне форума   Ответить с цитированием Вверх
Старый 19.07.2019, 10:00   #449
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордится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
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
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 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


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


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

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