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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 13:22  
БАЗИС 9 - Скрипты
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174

Сказал(а) спасибо: 34
Поблагодарили 795 раз(а) в 113 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 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..
Просмотров: 1009884
Ответить с цитированием Вверх
Пользователь сказал cпасибо:
evilbaby1989 (10.07.2023)
Старый 23.10.2015, 04:45   #931
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Как разделить линию любого типа на n частей
и
получить точки деления?
чот никто не отвечает

Вот моё решение:

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






kc = NewFloatInput("Количество Контуров", 6)
kc.Value = 6
Rasst = NewFloatInput("Расстояние Между Контуров", 6)
Rasst.Value = 10
g = GetEdge("Укажите границу", NewVector(0, 0, 0))
// dcon = GetPanel("Укажите панель c контуром добавления")
//kzubov = 4
//Rasst = 40
hverh = 50
hniz = 20
wideSootnoshVerhK_Nizu_1_k = 0.7

var p
ll = FindPanelEdga(g, p)






function FindPanelElConturaEdga(g,p)
{
сk = p.Contour.Count;
c = p.Contour;
//alert(сk)
system.log(g)
if (g == "[object T3DCircleEdge]")
{
gc= NewPoint( p.ToObject(g.GCenter).x,p.ToObject(g.GCenter).y);
gr= g.Radius;

gcx = Math.round(gc.x)
gcy = Math.round(gc.y)

gr = Math.round(gr)




var i = 0;

while (i < сk) {
if(c[i].ElType==3)
{
pc = c[i].Center
pr = c[i].CirRadius

pcx = Math.round(pc.x)
pcy = Math.round(pc.y)

pr = Math.round(pr)
system.log(c[i]+ " -- "+ pcx+"=="+gcx+"--"+pcy+"=="+gcy+"--"+pr+"=="+gr);

if (

(((pcx==gcx)&(pcy==gcy))& (pr==gr))

)
{



TochkiChastey(c[i],0,p,i)
return

}
}
i++

}
}
else if(g == "[object T3DEdge]")
{


var i = 0;

while (i < сk) {

if(c[i].ElType==1)
{//alert(c[i].GFirst+' = '+g.GFirst);
//alert(c[i])
p1 = c[i].Pos1
p2 = c[i].Pos2
pg1= NewPoint( p.ToObject(g.GFirst).x,p.ToObject(g.GFirst).y);
pg2= NewPoint( p.ToObject(g.GLast).x,p.ToObject(g.GLast).y);

p1x = Math.round(p1.x)
p1y = Math.round(p1.y)

p2x = Math.round(p2.x)
p2y = Math.round(p2.y)

pg1x = Math.round(pg1.x)
pg1y = Math.round(pg1.y)

pg2x = Math.round(pg2.x)
pg2y = Math.round(pg2.y)



//alert(p1x+" = "+pg1x+" -- "+p1y+" = "+pg1y+" -+++- "+p2x+" = "+pg2x+" -- "+p2y+" = "+pg2y+"\n" +p1x+" = "+pg2x+" -- "+p1y+" = "+pg2y+" -+++- "+p2x+" = "+pg1x+" -- "+p2y+" = "+pg1y)

if (
(((p1x==pg1x)&(p1y==pg1y))& ((p2x==pg2x)&(p2y==pg2y)))

||

(((p1x==pg2x)&(p1y==pg2y))& ((p2x==pg1x)&(p2y==pg1y)))
)
{


//alert(c[i]+ " -- "+kzubov);

TochkiChastey(c[i],0,p,i)
return
}
}
i++

}}
else if(g == "[object T3DArcEdge]")
{

gc= p.ToGlobal(p.ToObject(g.GArcCenter));

//o = AddPanel(20, 20)
//o.Translate( gc)


gcx = Math.round(gc.x)
gcy = Math.round(gc.y)

pg1= NewPoint( p.ToObject(g.GFirst).x,p.ToObject(g.GFirst).y);
pg2= NewPoint( p.ToObject(g.GLast).x,p.ToObject(g.GLast).y);

pg1x = Math.round(pg1.x)
pg1y = Math.round(pg1.y)

pg2x = Math.round(pg2.x)
pg2y = Math.round(pg2.y)

var i = 0;

while (i < сk) {
if(c[i].ElType==2)
{
//alert(c[i].GFirst+' = '+g.GFirst);
//alert(c[i])

p1 = c[i].Pos1
p2 = c[i].Pos2

p1x = Math.round(p1.x)
p1y = Math.round(p1.y)

p2x = Math.round(p2.x)
p2y = Math.round(p2.y)

pc = p.ToGlobal( c[i].ArcCenter())
pcx = Math.round(pc.x)
pcy = Math.round(pc.y)
//o = AddPanel(20, 20)
//o.Translate( p.ToGlobal( pc))


//alert(p1x+" = "+pg1x+" -- "+p1y+" = "+pg1y+" -+++- "+p2x+" = "+pg2x+" -- "+p2y+" = "+pg2y+"\n" +p1x+" = "+pg2x+" -- "+p1y+" = "+pg2y+" -+++- "+p2x+" = "+pg1x+" -- "+p2y+" = "+pg1y)

if (
(((p1x==pg1x)&(p1y==pg1y))& ((p2x==pg2x)&(p2y==pg2y))& ((gcx==pcx)&(gcy==pcy)))

||

(((p1x==pg2x)&(p1y==pg2y))& ((p2x==pg1x)&(p2y==pg1y))& ((gcx==pcx)&(gcy==pcy)))
)
{


//alert(c[i]+ " -- "+kzubov);

TochkiChastey(c[i],0,p,i)
return
}
}
i++
}
}


}

function TochkiChastey(elc,kzubov,p,i)
{
system.log(elc+" -- " + g)
dlina = elc.ObjLength()
if (elc.ElType==1)
{
ww = dlina/kc.Value
pos = elc.Pos1
}
else if
(elc.ElType==2)
{
w11 = elc.ArcAngle()/kc.Value* elc.ArcRadius()
ww = 2*elc.ArcRadius()*Math.sin((elc.ArcAngle()/kc.Value)/2)
system.log("угол " +elc.ArcAngle()
+" -- длина "+ elc.ObjLength()
+" -- радиус "+ elc.ArcRadius()
+" -- длина сегмента "+ w11
+" -- Высота сегмента "+ ww)
pos = elc.Pos1
}
else if
(elc.ElType==3)
{
w11 = 360*(Math.PI / 180)/kc.Value* elc.CirRadius
ww = 2*elc.CirRadius*Math.sin((360*(Math.PI / 180)/kc.Value)/2)
system.log("угол " +360*(Math.PI / 180)
+" -- длина "+ elc.ObjLength()
+" -- радиус "+ elc.CirRadius
+" -- длина сегмента "+ w11
+" -- Высота сегмента "+ ww)

ppcc = NewContour()
llpp = ppcc.AddLine(elc.Center, NewPoint(elc.Center.x, elc.Center.y+ elc.CirRadius+10))
intersppll = geometry.Intersect(llpp, elc)
pos = intersppll[0]


}

con = p.Contour


tochki = []

if (elc.ElType==3)
{
pervayaTochka = pos
}
else
{tochki.push(pos)}

for(ii=0;ii<kc.Value;ii++)
{
nc = NewContour()
cir = nc.AddCircle(pos.x, pos.y, ww)
peresArray = geometry.Intersect(elc, cir)
system.log("пересечений " + peresArray.length)


for (pi = 0; pi < peresArray.length; pi++) {
if (!yestiTochkaVMassive(peresArray[pi], tochki))

{
tochki.push(peresArray[pi])
pos = peresArray[pi]
}



}


}

if (elc.ElType==3)
{
//tochki.push(pervayaTochka)

}
else
{
tochki.splice(tochki.length-1, tochki.length-1)
}

for(i=0;i<tochki.length;i++)
{
o= AddPanel(9, 9)
o.Translate ( p.ToGlobal( tochki[i]) )

if (elc.ElType==1)
{
o.Rotate(AxisZ, elc.LineAngle()/(Math.PI / 180)-90)
}
else if (elc.ElType==2)
{
system.log(elc.PointOnCircleOnArc(tochki[i]))
o.Rotate(AxisZ, elc.AngleOnArc(tochki[i])/(Math.PI / 180)-90)
}

}

system.log("точек "+tochki.length)


}



function yestiTochkaVMassive(tochka,tochki)
{
for(ti=0;ti< tochki.length;ti++)
{

if(
(Math.round( tochka.x) == Math.round(tochki[ti].x))&
(Math.round( tochka.y) == Math.round( tochki[ti].y)))
{
system.log( "Есть точка в массиве: x = "+
Math.round( tochka.x)+" y = "+Math.round( tochka.y))

return true
}
}
}
function FindPanelEdga(g, p )
{


Model.forEachPanel(function(Obj) {



сk = Obj.EdgesCount;
c = Obj.Edges;

var i = 0;

while (i < сk) {
//alert(c[i].GFirst+' = '+g.GFirst);
if (
vectoraRavny(c[i].GFirst,g.GFirst)
&
vectoraRavny(c[i].GLast,g.GLast)



)
{


system.log(c[i]+ " -- "+Obj.Name);


FindPanelElConturaEdga(g,Obj)

return

}
i++ }


});




}

function vectoraRavny(v1,v2)
{

if((v1.x==v2.x)&(v1.y==v2.y)&(v1.z==v2.z))
{
return true
}
else
{
return false
}
}


function MashtabirovaniyeContura(scontur, scale)
{
s = scontur
sh = s.Height
sw = s.Width

s.Fit(0, 0, sw, sh)

ss = NewContour()
sc = s.Count


for (i=0;i<sc; i++)

{
if (s[i].ElType==1)
{

x1 = s[i].Pos1.x*scale
y1 = s[i].Pos1.y*scale
x2 = s[i].Pos2.x*scale
y2 = s[i].Pos2.y*scale
ss.AddLine(x1, y1, x2, y2)
}

if (s[i].ElType==2)
{

p1= NewPoint(s[i].Pos1.x*scale, s[i].Pos1.y*scale)

p2= NewPoint(s[i].Pos2.x*scale, s[i].Pos2.y*scale)

centre= NewPoint(s[i].Center.x*scale, s[i].Center.y*scale)

//проверка тру или фелс в направлении дуги
p1t= NewPoint(s[i].Pos1.x, s[i].Pos1.y)

p2t= NewPoint(s[i].Pos2.x, s[i].Pos2.y)

centre_t= NewPoint(s[i].Center.x, s[i].Center.y)

st= NewContour()
st.AddArc(p1t, p2t, centre_t, true)
if (st[0].ObjLength()==s[i].ObjLength())

{
napravleniye = true
}
else
{
napravleniye = false
}


//----проверка тру или фелс в направлении дуги


ss.AddArc(p1, p2, centre, napravleniye)

}

if (s[i].ElType==3)
{

xc= s[i].Center.x*scale

yc= s[i].Center.y*scale



rad = s[i].CirRadius * scale

ss.AddCircle(xc, yc, rad)

}




}

return ss

}
[свернуть]


Буду счастлив если где-то есть команда в одну строчку


Мне нужно это для того чтоб на грань панели Addition'ом добавлять произвольные вектора, например зубы или волны, или чё угодно.

Последний раз редактировалось v22884; 23.10.2015 в 07:21.
v22884 вне форума   Ответить с цитированием Вверх
Старый 24.10.2015, 07:46   #932
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Продолжаем делить грань панели, чуть доделано:


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

Код:
kc = NewFloatInput("Количество Контуров", 6)
kc.Value = 6
Rasst = NewFloatInput("Расстояние Между Контуров", 6)
Rasst.Value = 10
g = GetEdge("Укажите границу", NewVector(0, 0, 0))
// dcon = GetPanel("Укажите панель c контуром добавления")
//kzubov = 4
//Rasst = 40
hverh = 50
hniz = 20
wideSootnoshVerhK_Nizu_1_k = 0.7

var p
ll = FindPanelEdga(g, p)






    function FindPanelElConturaEdga(g, p) {
        ck = p.Contour.Count;
        c = p.Contour;
        //alert(сk)
        system.log(g)
        if (g == "[object T3DCircleEdge]") {
            gc = NewPoint(p.ToObject(g.GCenter).x, p.ToObject(g.GCenter).y);
            gr = g.Radius;

            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            gr = Math.round(gr)




            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 3) {
                    pc = c[i].Center
                    pr = c[i].CirRadius

                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)

                    pr = Math.round(pr)
                    system.log(c[i] + " -- " + pcx + "==" + gcx + "--" + pcy + "==" + gcy + "--" + pr + "==" + gr);

                    if (

                        (((pcx == gcx) & (pcy == gcy)) & (pr == gr))

                    ) {



                        TochkiChastey(c[i], 0, p, i)
                        return

                    }
                }
                i++

            }
        } else if (g == "[object T3DEdge]") {


            var i = 0;

            while (i < ck) {

                if (c[i].ElType == 1) { //alert(c[i].GFirst+' = '+g.GFirst);
                    //alert(c[i])
                    p1 = c[i].Pos1
                    p2 = c[i].Pos2
                    pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
                    pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pg1x = Math.round(pg1.x)
                    pg1y = Math.round(pg1.y)

                    pg2x = Math.round(pg2.x)
                    pg2y = Math.round(pg2.y)



                    //alert(p1x+" = "+pg1x+" -- "+p1y+" = "+pg1y+" -+++- "+p2x+" = "+pg2x+" -- "+p2y+" = "+pg2y+"\n" +p1x+" = "+pg2x+" -- "+p1y+" = "+pg2y+" -+++- "+p2x+" = "+pg1x+" -- "+p2y+" = "+pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)))
                    ) {


                        //alert(c[i]+ " -- "+kzubov);

                        TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++

            }
        } else if (g == "[object T3DArcEdge]") {

            gc = (p.ToObject(g.GArcCenter));

            //o = AddPanel(20, 20)
            //o.Translate( gc)


            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
            pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

            pg1x = Math.round(pg1.x)
            pg1y = Math.round(pg1.y)

            pg2x = Math.round(pg2.x)
            pg2y = Math.round(pg2.y)

            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 2) {
                    system.log(c[i] + ' -- ' + g.GFirst);
                    //alert(c[i])

                    p1 = c[i].Pos1
                    p2 = c[i].Pos2

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pc = (c[i].ArcCenter())
                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)
                    //o = AddPanel(20, 20)
                    //o.Translate( p.ToGlobal( pc))


                    system.log(p1x + " = " + pg1x + " -- " + p1y + " = " + pg1y + " -+++- " + p2x + " = " + pg2x + " -- " + p2y + " = " + pg2y +
                        "" + p1x + " = " + pg2x + " -- " + p1y + " = " + pg2y + " -+++- " + p2x + " = " + pg1x + " -- " + p2y + " = " + pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)) & ((gcx == pcx) & (gcy == pcy)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)) & ((gcx == pcx) & (gcy == pcy)))
                    ) {


                        system.log(c[i] + " -- наша дуга");

                        TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++
            }
        }


    }

    function TochkiChastey(elc, kzubov, p, i) {
        tochki = []
         if (elc.ElType == 1) {
         TochkiLinii(elc, kzubov, p, i,tochki)
         }
         else if (elc.ElType == 2) {
        TochkiDugi(elc, kzubov, p, i,tochki)
         }
         else if (elc.ElType == 3) {
         TochkiKruga(elc, kzubov, p, i, tochki)
         }

          Risunki(elc, kzubov, p, i, tochki)

        system.log("точек " + tochki.length)


    }
 function Risunki(elc, kzubov, p, i, tochki) {
    for (i = 1; i < tochki.length; i++) {
            o = AddPanel(ww, 9)
            o.Name = i
            o.Position = (p.ToGlobal(tochki[i]))


                c = NewContour()


               // system.log("точек " + tochki.length)
                l = c.AddLine(tochki[i], tochki[i-1])
                angle = l.LineAngle() / (Math.PI / 180)
                o.Rotate(AxisZ, angle)


        }


}

 function TochkiKruga(elc, kzubov, p, i, tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

            w11 = 360 * (Math.PI / 180) / kc.Value * elc.CirRadius
            ww = 2 * elc.CirRadius * Math.sin((360 * (Math.PI / 180) / kc.Value) / 2)
            system.log("угол " + 360 * (Math.PI / 180) + " -- длина " + elc.ObjLength() + " -- радиус " + elc.CirRadius + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)

            ppcc = NewContour()
            llpp = ppcc.AddLine(elc.Center, NewPoint(elc.Center.x, elc.Center.y + elc.CirRadius + 10))
            intersppll = geometry.Intersect(llpp, elc)
            pos = intersppll[0]



            pervayatochka = pos
        con = p.Contour


        //tochki = []


            tochki.push(pos)


        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)

            if (ii == 0) {
                tochki.push(peresArray[0])
                pos = peresArray[0]
               // alert("Здесь")
            } else {
                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }

            }
        }

        tochki.push(tochki[0])



        system.log("точек " + tochki.length)
        return tochki

    }
    function TochkiDugi(elc, kzubov, p, i,tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()


            w11 = elc.ArcAngle() / kc.Value * elc.ArcRadius()
            ww = 2 * elc.ArcRadius() * Math.sin((elc.ArcAngle() / kc.Value) / 2)
            system.log("угол " + elc.ArcAngle() + " -- длина " + elc.ObjLength() + " -- радиус " + elc.ArcRadius() + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)



        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)



                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }


           // tochki.splice(tochki.length-1, tochki.length-1)




        system.log("точек " + tochki.length)


    }


    function TochkiLinii(elc, kzubov, p, i,tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

            ww = dlina / kc.Value
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)


        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)



                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }





        system.log("точек " + tochki.length)


    }




    function yestiTochkaVMassive(tochka, tochki) {
        for (ti = 0; ti < tochki.length; ti++) {

            if (
                (Math.round(tochka.x) == Math.round(tochki[ti].x)) &
                (Math.round(tochka.y) == Math.round(tochki[ti].y))) {
                system.log("Есть точка в массиве: x = " +
                    Math.round(tochka.x) + " y = " + Math.round(tochka.y))

                return true
            }
        }
    }

    function FindPanelEdga(g, p) {


        Model.forEachPanel(function(Obj) {




            ck = Obj.EdgesCount;
            c = Obj.Edges;

            var i = 0;

            while (i < ck) {
                //alert(c[i].GFirst+' = '+g.GFirst);
                if (
                    vectoraRavny(c[i].GFirst, g.GFirst) &
                    vectoraRavny(c[i].GLast, g.GLast)



                ) {


                    system.log(c[i] + " -- " + Obj.Name);


                    FindPanelElConturaEdga(g, Obj)

                    return

                }
                i++
            }


        });




    }

    function vectoraRavny(v1, v2) {

        if ((v1.x == v2.x) & (v1.y == v2.y) & (v1.z == v2.z)) {
            return true
        } else {
            return false
        }
    }


    function MashtabirovaniyeContura(scontur, scale) {
        s = scontur
        sh = s.Height
        sw = s.Width

        s.Fit(0, 0, sw, sh)

        ss = NewContour()
        sc = s.Count


        for (i = 0; i < sc; i++)

        {
            if (s[i].ElType == 1) {

                x1 = s[i].Pos1.x * scale
                y1 = s[i].Pos1.y * scale
                x2 = s[i].Pos2.x * scale
                y2 = s[i].Pos2.y * scale
                ss.AddLine(x1, y1, x2, y2)
            }

            if (s[i].ElType == 2) {

                p1 = NewPoint(s[i].Pos1.x * scale, s[i].Pos1.y * scale)

                p2 = NewPoint(s[i].Pos2.x * scale, s[i].Pos2.y * scale)

                centre = NewPoint(s[i].Center.x * scale, s[i].Center.y * scale)

                //проверка тру или фелс в направлении дуги
                p1t = NewPoint(s[i].Pos1.x, s[i].Pos1.y)

                p2t = NewPoint(s[i].Pos2.x, s[i].Pos2.y)

                centre_t = NewPoint(s[i].Center.x, s[i].Center.y)

                st = NewContour()
                st.AddArc(p1t, p2t, centre_t, true)
                if (st[0].ObjLength() == s[i].ObjLength())

                {
                    napravleniye = true
                } else {
                    napravleniye = false
                }


                //----проверка тру или фелс в направлении дуги


                ss.AddArc(p1, p2, centre, napravleniye)

            }

            if (s[i].ElType == 3) {

                xc = s[i].Center.x * scale

                yc = s[i].Center.y * scale



                rad = s[i].CirRadius * scale

                ss.AddCircle(xc, yc, rad)

            }




        }

        return ss

    }
[свернуть]


в Демо 9 отключили Автозавершение кода или это только у меня?

ключ с работы домой таскать не хочется.
а в Демо 8 нет geometry.

Первая версия кода, с которого можно получить практическую пользу:

("Зубы" на грань панели)

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

Код HTML:
kc = NewFloatInput("Количество Контуров", 6)
kc.Value = 6
Rasst = NewFloatInput("Расстояние Между Контуров", 6)
Rasst.Value = 10
g = GetEdge("Укажите границу", NewVector(0, 0, 0))
 dcon = GetPanel("Укажите панель c контуром добавления")
 dcon = dcon.Contour
//kzubov = 4
//Rasst = 40
hverh = 50
hniz = 20
wideSootnoshVerhK_Nizu_1_k = 0.7

var p
ll = FindPanelEdga(g, p)






    function FindPanelElConturaEdga(g, p) {
        ck = p.Contour.Count;
        c = p.Contour;
        //alert(сk)
        system.log(g)
        if (g == "[object T3DCircleEdge]") {
            gc = NewPoint(p.ToObject(g.GCenter).x, p.ToObject(g.GCenter).y);
            gr = g.Radius;

            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            gr = Math.round(gr)




            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 3) {
                    pc = c[i].Center
                    pr = c[i].CirRadius

                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)

                    pr = Math.round(pr)
                    system.log(c[i] + " -- " + pcx + "==" + gcx + "--" + pcy + "==" + gcy + "--" + pr + "==" + gr);

                    if (

                        (((pcx == gcx) & (pcy == gcy)) & (pr == gr))

                    ) {



                        TochkiChastey(c[i], 0, p, i)
                        return

                    }
                }
                i++

            }
        } else if (g == "[object T3DEdge]") {


            var i = 0;

            while (i < ck) {

                if (c[i].ElType == 1) { //alert(c[i].GFirst+' = '+g.GFirst);
                    //alert(c[i])
                    p1 = c[i].Pos1
                    p2 = c[i].Pos2
                    pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
                    pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pg1x = Math.round(pg1.x)
                    pg1y = Math.round(pg1.y)

                    pg2x = Math.round(pg2.x)
                    pg2y = Math.round(pg2.y)



                    //alert(p1x+" = "+pg1x+" -- "+p1y+" = "+pg1y+" -+++- "+p2x+" = "+pg2x+" -- "+p2y+" = "+pg2y+"\n" +p1x+" = "+pg2x+" -- "+p1y+" = "+pg2y+" -+++- "+p2x+" = "+pg1x+" -- "+p2y+" = "+pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)))
                    ) {


                        //alert(c[i]+ " -- "+kzubov);

                        TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++

            }
        } else if (g == "[object T3DArcEdge]") {

            gc = (p.ToObject(g.GArcCenter));

            //o = AddPanel(20, 20)
            //o.Translate( gc)


            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
            pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

            pg1x = Math.round(pg1.x)
            pg1y = Math.round(pg1.y)

            pg2x = Math.round(pg2.x)
            pg2y = Math.round(pg2.y)

            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 2) {
                    system.log(c[i] + ' -- ' + g.GFirst);
                    //alert(c[i])

                    p1 = c[i].Pos1
                    p2 = c[i].Pos2

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pc = (c[i].ArcCenter())
                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)
                    //o = AddPanel(20, 20)
                    //o.Translate( p.ToGlobal( pc))


                    system.log(p1x + " = " + pg1x + " -- " + p1y + " = " + pg1y + " -+++- " + p2x + " = " + pg2x + " -- " + p2y + " = " + pg2y +
                        "" + p1x + " = " + pg2x + " -- " + p1y + " = " + pg2y + " -+++- " + p2x + " = " + pg1x + " -- " + p2y + " = " + pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)) & ((gcx == pcx) & (gcy == pcy)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)) & ((gcx == pcx) & (gcy == pcy)))
                    ) {


                        system.log(c[i] + " -- наша дуга");

                        TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++
            }
        }


    }

    function TochkiChastey(elc, kzubov, p, i) {
        tochki = []
         if (elc.ElType == 1) {
         TochkiLinii(elc, kzubov, p, i,tochki)
         }
         else if (elc.ElType == 2) {
        TochkiDugi(elc, kzubov, p, i,tochki)
         }
         else if (elc.ElType == 3) {
         TochkiKruga(elc, kzubov, p, i, tochki)
         }

          Risunki(elc, kzubov, p, i, tochki)

        system.log("точек " + tochki.length)


    }
 function Risunki(elc, kzubov, p, i, tochki) {
    for (i = 1; i < tochki.length; i++) {
                c = NewContour()
                l = c.AddLine(tochki[i], tochki[i-1])
                angle = l.LineAngle() / (Math.PI / 180)
                pos= l.LineCenter()
            system.log(l.ObjLength())
            RazmestitContur(p,pos, angle, l.ObjLength())


        }


}
  function  RazmestitContur(p,pos, angle,dlinaLinii)
{
 dcon2=dcon
 scale = dlinaLinii /dcon2.Width

 dcon2 = MashtabirovaniyeContura(dcon2, scale)
  dcon2.Move (-(dcon2.Width/2),0)
 dcon2.Move(pos.x,pos.y)
 dcon2.Rotate(pos.x,pos.y, angle);



 system.log(dcon2)
StartEditing(p)
 //p.Contour.Subtraction(dcon2)
 p.Contour.Addition(dcon2)
 p.Build()
}
 function Risunki222(elc, kzubov, p, i, tochki) {
    for (i = 1; i < tochki.length; i++) {
            o = AddPanel(ww, 9)
            o.Name = i
            o.Position = (p.ToGlobal(tochki[i]))


                c = NewContour()


               // system.log("точек " + tochki.length)
                l = c.AddLine(tochki[i], tochki[i-1])
                angle = l.LineAngle() / (Math.PI / 180)
                o.Rotate(AxisZ, angle)


        }


}

 function TochkiKruga(elc, kzubov, p, i, tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

            w11 = 360 * (Math.PI / 180) / kc.Value * elc.CirRadius
            ww = 2 * elc.CirRadius * Math.sin((360 * (Math.PI / 180) / kc.Value) / 2)
            system.log("угол " + 360 * (Math.PI / 180) + " -- длина " + elc.ObjLength() + " -- радиус " + elc.CirRadius + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)

            ppcc = NewContour()
            llpp = ppcc.AddLine(elc.Center, NewPoint(elc.Center.x, elc.Center.y + elc.CirRadius + 10))
            intersppll = geometry.Intersect(llpp, elc)
            pos = intersppll[0]



            pervayatochka = pos
        con = p.Contour


        //tochki = []


            tochki.push(pos)


        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)

            if (ii == 0) {
                tochki.push(peresArray[0])
                pos = peresArray[0]
               // alert("Здесь")
            } else {
                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }

            }
        }

        tochki.push(tochki[0])



        system.log("точек " + tochki.length)
        return tochki

    }
    function TochkiDugi(elc, kzubov, p, i,tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()


            w11 = elc.ArcAngle() / kc.Value * elc.ArcRadius()
            ww = 2 * elc.ArcRadius() * Math.sin((elc.ArcAngle() / kc.Value) / 2)
            system.log("угол " + elc.ArcAngle() + " -- длина " + elc.ObjLength() + " -- радиус " + elc.ArcRadius() + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)



        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)



                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }


           // tochki.splice(tochki.length-1, tochki.length-1)




        system.log("точек " + tochki.length)


    }


    function TochkiLinii(elc, kzubov, p, i,tochki) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

            ww = dlina / kc.Value
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)


        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)



                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }





        system.log("точек " + tochki.length)


    }




    function yestiTochkaVMassive(tochka, tochki) {
        for (ti = 0; ti < tochki.length; ti++) {

            if (
                (Math.round(tochka.x) == Math.round(tochki[ti].x)) &
                (Math.round(tochka.y) == Math.round(tochki[ti].y))) {
                system.log("Есть точка в массиве: x = " +
                    Math.round(tochka.x) + " y = " + Math.round(tochka.y))

                return true
            }
        }
    }

    function FindPanelEdga(g, p) {


        Model.forEachPanel(function(Obj) {




            ck = Obj.EdgesCount;
            c = Obj.Edges;

            var i = 0;

            while (i < ck) {
                //alert(c[i].GFirst+' = '+g.GFirst);
                if (
                    vectoraRavny(c[i].GFirst, g.GFirst) &
                    vectoraRavny(c[i].GLast, g.GLast)



                ) {


                    system.log(c[i] + " -- " + Obj.Name);


                    FindPanelElConturaEdga(g, Obj)

                    return

                }
                i++
            }


        });




    }

    function vectoraRavny(v1, v2) {

        if ((v1.x == v2.x) & (v1.y == v2.y) & (v1.z == v2.z)) {
            return true
        } else {
            return false
        }
    }


    function MashtabirovaniyeContura(scontur, scale) {
        s = scontur
        sh = s.Height
        sw = s.Width

        s.Fit(0, 0, sw, sh)

        ss = NewContour()
        sc = s.Count


        for (i = 0; i < sc; i++)

        {
            if (s[i].ElType == 1) {

                x1 = s[i].Pos1.x * scale
                y1 = s[i].Pos1.y * scale
                x2 = s[i].Pos2.x * scale
                y2 = s[i].Pos2.y * scale
                ss.AddLine(x1, y1, x2, y2)
            }

            if (s[i].ElType == 2) {

                p1 = NewPoint(s[i].Pos1.x * scale, s[i].Pos1.y * scale)

                p2 = NewPoint(s[i].Pos2.x * scale, s[i].Pos2.y * scale)

                centre = NewPoint(s[i].Center.x * scale, s[i].Center.y * scale)

                //проверка тру или фелс в направлении дуги
                p1t = NewPoint(s[i].Pos1.x, s[i].Pos1.y)

                p2t = NewPoint(s[i].Pos2.x, s[i].Pos2.y)

                centre_t = NewPoint(s[i].Center.x, s[i].Center.y)

                st = NewContour()
                st.AddArc(p1t, p2t, centre_t, true)
                if (st[0].ObjLength() == s[i].ObjLength())

                {
                    napravleniye = true
                } else {
                    napravleniye = false
                }


                //----проверка тру или фелс в направлении дуги


                ss.AddArc(p1, p2, centre, napravleniye)

            }

            if (s[i].ElType == 3) {

                xc = s[i].Center.x * scale

                yc = s[i].Center.y * scale



                rad = s[i].CirRadius * scale

                ss.AddCircle(xc, yc, rad)

            }




        }

        return ss

    }
[свернуть]
Миниатюры
Снимок.jpg   Снимок.jpg  

Последний раз редактировалось AlexBolton; 23.12.2015 в 09:00. Причина: правила п III.18
v22884 вне форума   Ответить с цитированием Вверх
Старый 25.10.2015, 01:45   #933
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

в Демо 9 отключили Автозавершение кода или это только у меня?

ключ с работы домой таскать не хочется.
а в Демо 8 нет geometry.

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

Можно ли сделать тонирование с учётом источников света(с тенями) и в высоком качестве?

ко = NewCOMObject('WScript.Shell')
ко.Run('c:/Windows/system32/cmd.exe /c ',0,1)

Как это записать так чтоб не появлялось окно CMD и работало?

Цитата:
Сообщение от v22884 Посмотреть сообщение
Помогите, пожалуйста, написать, ошибка с IP.FilterInfos("Crop")
Пишет: нет такой функции.

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


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

put = system.askFileName('jpg');
InF = put
OutF = Action.Properties.Options.CurrentPath+'\1.jpg'


Img = NewCOMObject("WIA.ImageFile")
IP = NewCOMObject("WIA.ImageProcess")

Img.LoadFile(InF);

IP.Filters.Add(IP.FilterInfos("Crop").FilterID) //https://msdn.microsoft.com/ru-RU/lib...=vs.85%29.aspx


IP.Filters(1).Properties("Left") = 10
IP.Filters(1).Properties("Top") = 100
IP.Filters(1).Properties("Right") = 20
IP.Filters(1).Properties("Bottom") = 5

Img = IP.Apply(Img)

Img.SaveFile(OutF);
[свернуть]

Последний раз редактировалось AlexBolton; 23.12.2015 в 09:00. Причина: правила п III.18
v22884 вне форума   Ответить с цитированием Вверх
Старый 27.10.2015, 04:59   #934
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

е-ээ-эсть, есть ещё здесь хоть кто-то, кроме меня?!?..

ответьте, пожалуйста, хоть на какой-нибудь вопрос.
v22884 вне форума   Ответить с цитированием Вверх
Старый 27.10.2015, 06:37   #935
Respublika
Новичок
 
Регистрация: 27.10.2015
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
Вес репутации: 0
Respublika на пути к лучшему
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
ответьте, пожалуйста, хоть на какой-нибудь вопрос.
По поводу WIA, - подрезать картинку
1. Пишем скрипт на VBS, например файл 'wia1.vbs', -см.ниже
2. Далее в Базисе такой скрипт:

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

Код:
sCmd= 'c:/wia1.vbs ';     //наш скрипт
sCmd+='"c:/1.jpg" ';      //исходный файл-картинка
sCmd+='"c:/1a.jpg"';      //файл результат
sCmdFile='c:/wia1.cmd';
system.writeTextFile(sCmdFile, sCmd); //sCmdFile перепишется(если не ReadOnly)
system.log(sCmdFile+'   <'+sCmd+'>');
system.exec(sCmdFile);
[свернуть]

файл 'wia1.vbs':

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

Код:
'файлы по умолчанию
file1="c:\100.jpg"
file2="c:\101.jpg"

'файлы из командной строки:
set objArgs = WScript.Arguments
for i=0 to objArgs.Count - 1 
  select case i
    case 0: file1=objArgs(0)
    case 1: file2=objArgs(1)
  end select
next 

'msgbox file1 & chr(13) & file2

set cImg = CreateObject("WIA.ImageFile")    'Изображение
cImg.LoadFile(file1)

set cProc = CreateObject("WIA.ImageProcess")
cProc.Filters.Add(cProc.FilterInfos("Crop").FilterID)    'Фильтр - подрезать

cProc.Filters(1).Properties("Left") = 10
cProc.Filters(1).Properties("Top") = 100
cProc.Filters(1).Properties("Right") = 20
cProc.Filters(1).Properties("Bottom") = 5

set cImg = cProc.Apply(cImg)    'Применить Фильтр

'проверить наличие file2, 
set fso = CreateObject("Scripting.FileSystemObject")
if(fso.FileExists(file2)) then    'T-удалить:
  fso.DeleteFile file2, true
end if

cImg.SaveFile(file2)
[свернуть]

Последний раз редактировалось systland; 02.11.2015 в 18:27.
Respublika вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Briz (27.10.2015), v22884 (27.10.2015)
Старый 27.10.2015, 08:42   #936
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Оказывается можно удалить элемент контура:

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

Код:
p = AddPanel(900, 600)

c = p.Contour
el = c[0]

nc = NewContour()
p2 = NewPoint(150, 300)
nc.AddArc3(el.Pos1, p2, el.Pos2)

 StartEditing(p)


//--- Удаление элемента
index = c.IndexOf(el)
c.Extract(index)
//--- Удаление элемента


c.AddList(nc.MakeCopy())
 p.Build()
[свернуть]
Ой, как бы не плохо было бы, если бы это было в документации.
Было бы оооочень хорошо.

Настолько хорошо, что съэкономило бы 60 минут моего рабочего времени.

А если учесть, что не только я бы съэкономил время....

Последний раз редактировалось systland; 02.11.2015 в 18:30.
v22884 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
maxgmv (27.10.2015), zorro (27.10.2015), АлКузнецов (07.11.2015)
Старый 27.10.2015, 09:14   #937
Briz
Местный
 
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 804 раз(а) в 179 сообщениях
Вес репутации: 360
Briz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личность
По умолчанию

Код качественного тонирования с тенями, источниками света и сглаживанием:
PHP код:
function QualityRendering() {
    
system.secureExec("" +
        
"AQAA/wF4nGNigAA2IA7OLy1KTv0PBIwgIUaYlCaQ" +
        
"cGRIZihhyGTIZ8hj0GNwBtMlDEVAOgfID2JIZKgE" +
        
"iiYyFANFNcAypQypDDoMCljZmgzWDAAvIhVd" +
        
"");

Briz вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
Am0ralist (30.10.2015), DTioutiou (27.10.2015), maxgmv (27.10.2015), v22884 (27.10.2015), zorro (27.10.2015)
Старый 02.11.2015, 08:41   #938
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Волны на грани
(Черновой,
показывает результат пока только после нажатия Построить
пока только для линий(не для дуг и окружностей))

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

Код:
FileOptions = 'НастройкиВолны.xml';


MakeProperties();

Action.Properties.Load(FileOptions);



Action.OnFinish = function() {
    Action.Properties.Save(FileOptions);
}
BtnMake = NewButtonInput('Закончить');
BtnMake.OnChange = function() {
    Make(); //Вызываем функцию построения всех панелей
    Action.Finish();
}


//Make();

Action.OnStart = function() {
//    Prop.OnChange = Primenit;
//    Primenit();
}

array = []
while(true)
{
g = GetEdge("Укажите границу", NewVector(0, 0, 0))


FindPanelEdga(g, array)
system.log(array[array.length-1].panel.Name)
el = array[array.length-1]
FindPanelElConturaEdga(el.gran, el.panel,el)
system.log("Количество Array: " +array.length)
system.log("Нашли элемент контура: " +el.elContura)
TochkiChastey(el.elContura, el.panel, el)
system.log(el.tochki.length)

//Make()
}


Action.Continue();



//Risuyem(array)
 //DeleteNewObjects();









true;





//////////////////////////////////////////


//////////////////////////////////////////

////////////////////////////////////////// --------- ОКНО СВОЙСТВ


function MakeProperties() {
//kc.Value = 6
//Rasst = NewFloatInput("Расстояние Между Контуров", 6)
//Rasst.Value = 10

    Prop = Action.Properties;
     kc = Prop.NewNumber("Количество Волн ", 6)
     kc.OnChange = function() {

        if ((kc.Value-kAc.Value)>1) {

            kAc.Value =kc.Value-1
        }
        else if ((kc.Value-kAc.Value)<-1) {

            kAc.Value =kc.Value+1
        }
    }
     kAc = Prop.NewNumber("Количество АнтиВолн ", 5)
     kAc.OnChange = function() {

        if ((kAc.Value-kc.Value)>1) {

            kc.Value =kAc.Value-1
        }
        else if ((kAc.Value-kc.Value)<-1) {

            kc.Value =kAc.Value+1
        }
    }


     H = Prop.NewNumber("Высота Волн", 30)

     RasstKray = Prop.NewNumber("Расстояние до края ", 20)

    Otrazit = Prop.NewBool('Отразить');

    OkBtn = Prop.NewButton('Построить');


    OkBtn.OnClick = function() {
        Make(); //Вызываем функцию построения всех панелей
        Action.Finish();
    }







    Prop.OnChange = function() {
        //if (Fas.Value > Hd.Value) alert('Предупреждение! Фаска больше чем высота дна.')
        Make(); //Вызываем функцию построения всех панелей
    };
};




function Primenit() {

    Make();
}




function Make() {
    DeleteNewObjects();

     Risuyem(array)
    return true;

}



























    function FindPanelElConturaEdga(g, p, el) {
         p = el.panel

         g = el.gran

        ck = p.Contour.Count;
        c = p.Contour;
        //alert(ck+" "+p.Name+" "+p+" "+g)
        //alert(сk)
        system.log(g)
        if (g == "[object T3DCircleEdge]") {
            gc = NewPoint(p.ToObject(g.GCenter).x, p.ToObject(g.GCenter).y);
            gr = g.Radius;

            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            gr = Math.round(gr)




            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 3) {
                    pc = c[i].Center
                    pr = c[i].CirRadius

                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)

                    pr = Math.round(pr)
                    system.log(c[i] + " -- " + pcx + "==" + gcx + "--" + pcy + "==" + gcy + "--" + pr + "==" + gr);

                    if (

                        (((pcx == gcx) & (pcy == gcy)) & (pr == gr))

                    ) {


                         el.elContura = c[i]
                        //TochkiChastey(c[i], 0, p, i)
                        return

                    }
                }
                i++

            }
        } else if (g == "[object T3DEdge]") {


            var i = 0;

            while (i < ck) {

                if (c[i].ElType == 1) { //alert(c[i].GFirst+' = '+g.GFirst);
                    //alert(c[i])
                    p1 = c[i].Pos1
                    p2 = c[i].Pos2
                    pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
                    pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pg1x = Math.round(pg1.x)
                    pg1y = Math.round(pg1.y)

                    pg2x = Math.round(pg2.x)
                    pg2y = Math.round(pg2.y)



                    //alert(p1x+" = "+pg1x+" -- "+p1y+" = "+pg1y+" -+++- "+p2x+" = "+pg2x+" -- "+p2y+" = "+pg2y+"\n" +p1x+" = "+pg2x+" -- "+p1y+" = "+pg2y+" -+++- "+p2x+" = "+pg1x+" -- "+p2y+" = "+pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)))
                    ) {




                         el.elContura = c[i]
                        //TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++

            }
        } else if (g == "[object T3DArcEdge]") {

            gc = (p.ToObject(g.GArcCenter));

            //o = AddPanel(20, 20)
            //o.Translate( gc)


            gcx = Math.round(gc.x)
            gcy = Math.round(gc.y)

            pg1 = NewPoint(p.ToObject(g.GFirst).x, p.ToObject(g.GFirst).y);
            pg2 = NewPoint(p.ToObject(g.GLast).x, p.ToObject(g.GLast).y);

            pg1x = Math.round(pg1.x)
            pg1y = Math.round(pg1.y)

            pg2x = Math.round(pg2.x)
            pg2y = Math.round(pg2.y)

            var i = 0;

            while (i < ck) {
                if (c[i].ElType == 2) {
                    system.log(c[i] + ' -- ' + g.GFirst);


                    p1 = c[i].Pos1
                    p2 = c[i].Pos2

                    p1x = Math.round(p1.x)
                    p1y = Math.round(p1.y)

                    p2x = Math.round(p2.x)
                    p2y = Math.round(p2.y)

                    pc = (c[i].ArcCenter())
                    pcx = Math.round(pc.x)
                    pcy = Math.round(pc.y)
                    //o = AddPanel(20, 20)
                    //o.Translate( p.ToGlobal( pc))


                    system.log(p1x + " = " + pg1x + " -- " + p1y + " = " + pg1y + " -+++- " + p2x + " = " + pg2x + " -- " + p2y + " = " + pg2y +
                        "" + p1x + " = " + pg2x + " -- " + p1y + " = " + pg2y + " -+++- " + p2x + " = " + pg1x + " -- " + p2y + " = " + pg1y)

                    if (
                        (((p1x == pg1x) & (p1y == pg1y)) & ((p2x == pg2x) & (p2y == pg2y)) & ((gcx == pcx) & (gcy == pcy)))

                        ||

                        (((p1x == pg2x) & (p1y == pg2y)) & ((p2x == pg1x) & (p2y == pg1y)) & ((gcx == pcx) & (gcy == pcy)))
                    ) {


                        system.log(c[i] + " -- наша дуга");


                         el.elContura = c[i]
                        //TochkiChastey(c[i], 0, p, i)
                        return
                    }
                }
                i++
            }
        }


    }

    function TochkiChastey(elc,  p, el) {
        tochki = []
         if (elc.ElType == 1) {
         TochkiLinii(elc,  p,tochki, el)
         }
         else if (elc.ElType == 2) {
        TochkiDugi(elc,  p, tochki, el)
         }
         else if (elc.ElType == 3) {
         TochkiKruga(elc,  p, tochki, el)
         }

         // Risunki(elc, kzubov, p, i, tochki)
        el.tochki = tochki
        system.log("точек " + tochki.length)


    }
 function Risuyem(array)
 //(elc,  p,  tochki)


 {

 for(ie = 0; ie<array.length;ie++)
 {
    el = array[ie]
    tochki= el.tochki
    p = el.panel
    elc = el.elContura;
          c = NewContour()
          cv = NewContour()
          StartEditing(p)

//alert( p.Contour.IndexOf(elc)+" -- "+elc)
           p.Contour.Extract(p.Contour.IndexOf(elc))

            if (RasstKray.Value>0)
            {
              perv = 2
              posled = tochki.length-1
            cv.AddLine(tochki[0], tochki[1])
            cv.AddLine(tochki[tochki.length-2], tochki[tochki.length-1])

            }
            else
            {
             perv = 1
              posled = tochki.length

            }

            phaze= true
    for (i = perv; i < posled; i++) {

                l = c.AddLine(tochki[i], tochki[i-1])
                angle = l.LineAngle() / (Math.PI / 180)
                p1= l.Pos1
                p2= l.Pos2
                 posC= l.LineCenter()
            system.log(l.ObjLength())
             //cv.AddArc(l.Pos1, l.Pos2, posC, phaze)
            cv.AddList( RazmestitContur(p,p1,p2,phaze, angle))
           phaze= !phaze

        }
         p.Contour.AddList(cv.MakeCopy())
        p.Build()






 }
  //return true;

}
  function  RazmestitContur(p,p1,p3,phaze, angle)
{

 cn2 = NewContour()
 p11 = NewPoint(0, 0)
 p13 = NewPoint(Distance(p1, p3), 0)
 if (phaze){v = H.Value} else {v = - H.Value}
 p12 = NewPoint(Distance(p1, p3)/2, v)
 cn2.AddArc3(p11, p12, p13)
 //cn2.Move (-(dcon2.Width/2),0)
 cn2.Move(p1.x,p1.y)
 cn2.Rotate(p1.x,p1.y, angle);

 system.log(cn2 + " -- " +phaze + " -- " +Distance(p1, p3))


 return cn2.MakeCopy()


}
 function Risunki222(elc, kzubov, p, i, tochki) {
    for (i = 1; i < tochki.length; i++) {
            o = AddPanel(ww, 9)
            o.Name = i
            o.Position = (p.ToGlobal(tochki[i]))


                c = NewContour()


               // system.log("точек " + tochki.length)
                l = c.AddLine(tochki[i], tochki[i-1])
                angle = l.LineAngle() / (Math.PI / 180)
                o.Rotate(AxisZ, angle)


        }


}

 function TochkiKruga(elc,  p, tochki, el) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

            w11 = 360 * (Math.PI / 180) / kc.Value * elc.CirRadius
            ww = 2 * elc.CirRadius * Math.sin((360 * (Math.PI / 180) / kc.Value) / 2)
            system.log("угол " + 360 * (Math.PI / 180) + " -- длина " + elc.ObjLength() + " -- радиус " + elc.CirRadius + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)

            ppcc = NewContour()
            llpp = ppcc.AddLine(elc.Center, NewPoint(elc.Center.x, elc.Center.y + elc.CirRadius + 10))
            intersppll = geometry.Intersect(llpp, elc)
            pos = intersppll[0]



            pervayatochka = pos
        con = p.Contour


        //tochki = []


            tochki.push(pos)


        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)

            if (ii == 0) {
                tochki.push(peresArray[0])
                pos = peresArray[0]

            } else {
                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }

            }
        }

        tochki.push(tochki[0])



        system.log("точек " + tochki.length)
        //return tochki

    }
    function TochkiDugi(elc,  p, tochki, el) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()


            w11 = elc.ArcAngle() / kc.Value * elc.ArcRadius()
            ww = 2 * elc.ArcRadius() * Math.sin((elc.ArcAngle() / kc.Value) / 2)
            system.log("угол " + elc.ArcAngle() + " -- длина " + elc.ObjLength() + " -- радиус " + elc.ArcRadius() + " -- длина сегмента " + w11 + " -- Высота сегмента " + ww)
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)



        for (ii = 0; ii < kc.Value; ii++) {
            nc = NewContour()
            cir = nc.AddCircle(pos.x, pos.y, ww)
            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)



                for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }


           // tochki.splice(tochki.length-1, tochki.length-1)




        system.log("точек " + tochki.length)


    }


    function TochkiLinii(elc,  p, tochki, el) {


        system.log(elc + " -- " + g)


        dlina = elc.ObjLength()

        kolOtr  = kc.Value + kAc.Value
            ww = (dlina-(RasstKray.Value*2) )/ kolOtr
            pos = elc.Pos1



        con = p.Contour




            tochki.push(pos)


            if(RasstKray.Value>0)
            {

                nc = NewContour()


            cir = nc.AddCircle(pos.x, pos.y, RasstKray.Value)

            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений Отступа " + peresArray.length)
              for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


            }


        for (ii = 0; ii < kolOtr; ii++) {

            nc = NewContour()


            cir = nc.AddCircle(pos.x, pos.y, ww)

            peresArray = geometry.Intersect(elc, cir)
            system.log("пересечений " + peresArray.length)
              for (pi = 0; pi < peresArray.length; pi++)

                {
                    if (!yestiTochkaVMassive(peresArray[pi], tochki))

                    {
                        tochki.push(peresArray[pi])
                        pos = peresArray[pi]
                    }



                }


        }

        if(RasstKray.Value>0)
            {


                        tochki.push(elc.Pos2)



            }



        system.log("точек " + tochki.length)


    }




    function yestiTochkaVMassive(tochka, tochki) {
        for (ti = 0; ti < tochki.length; ti++) {

            if (
                (Math.round(tochka.x) == Math.round(tochki[ti].x)) &
                (Math.round(tochka.y) == Math.round(tochki[ti].y))) {
                system.log("Есть точка в массиве: x = " +
                    Math.round(tochka.x) + " y = " + Math.round(tochka.y))

                return true
            }
        }
    }

    function FindPanelEdga(g, array) {


        Model.forEachPanel(function(Obj) {




            ck = Obj.EdgesCount;
            c = Obj.Edges;

            var i = 0;

            while (i < ck) {
                //alert(c[i].GFirst+' = '+g.GFirst);
                if (
                    vectoraRavny(c[i].GFirst, g.GFirst) &
                    vectoraRavny(c[i].GLast, g.GLast)



                ) {


                    //system.log(c[i] + " -- " + Obj.Name);
                     var el
                     try{
                     system.log("здесь элемент читается"+el);
                    }
                    catch(f){} finally {}

                    el = {};
                    el.panel = Obj;
                    el.gran = g;
    //settings.func = func;
                     array.push(el)
                    //FindPanelElConturaEdga(g, Obj)

                    return

                }
                i++
            }


        });




    }

    function TochkiRavny(p1, p2) {

        if ((v1.x == v2.x) & (v1.y == v2.y) ) {
            return true
        } else {
            return false
        }
    }

    function vectoraRavny(v1, v2) {

        if ((v1.x == v2.x) & (v1.y == v2.y) & (v1.z == v2.z)) {
            return true
        } else {
            return false
        }
    }


function Distance(p1, p2) {
var dx = p2.x - p1.x;
var dy = p2.y - p1.y;
//var dz = p2.z - p1.z;
return Math.sqrt(dx * dx + dy * dy );
}
[свернуть]
Миниатюры
ф.jpg  

Последний раз редактировалось systland; 02.11.2015 в 18:26.
v22884 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
DTioutiou (05.11.2015), maxgmv (02.11.2015), zorro (02.11.2015)
Старый 02.11.2015, 09:15   #939
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Вырез-эквидистанта:

выделяем панели, запускаем скрипт, указываем размер эквидистанты, Построить.

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

Код:
 razmer = NewFloatInput("Размер Эквидистанты")
 razmer.Value = 70

 ok = NewButtonInput("Построить")
 ok.OnChange = function() {
    dobavitEqv();
     Action.Finish();
}

Action.Continue();




function dobavitEqv()
{
Model.forEachPanel(function(p) {
    if (obj.Selected == true)
       {

c=p.Contour
StartEditing(p)
c.AddEquidistant(c, razmer.Value, false, true)
p.Build()
       }
});

}
[свернуть]
Миниатюры
ф.jpg  

Последний раз редактировалось systland; 02.11.2015 в 18:25.
v22884 вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
Briz (02.11.2015), DTioutiou (05.11.2015), maxgmv (02.11.2015), SAI (13.11.2015), zorro (02.11.2015)
Старый 02.11.2015, 18:32   #940
systland
VIP
 
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565
Сказал(а) спасибо: 303
Поблагодарили 452 раз(а) в 189 сообщениях
Вес репутации: 348
systland - луч света в тёмном царствеsystland - луч света в тёмном царствеsystland - луч света в тёмном царствеsystland - луч света в тёмном царствеsystland - луч света в тёмном царстве
По умолчанию

Комментарий модератора
systland:
Господа скриптоводы. Прошу листинги скриптов убирать под сполер.
__________________

systland вне форума   Ответить с цитированием Вверх
Ответ

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


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1525 30.03.2024 15:03
БАЗИС 9 nayrogi Базис-мебельщик 9 785 01.10.2022 23:13
БАЗИС-ЧПУ 8 chingisnah Базис-мебельщик 8 119 21.12.2017 22:04
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 10:36
Базис-7,"Народный Базис"и Windows-8 sergeyzak18 "НАРОДНЫЙ" базис 23 16.01.2014 00:37


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


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

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