|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 9 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 795 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.
2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.
Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.
__________________________________________________ _______________
Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.
Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL ( сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]
Последний раз редактировалось systland; 23.09.2016 в 11:52..
|
Просмотров: 1009884
|
Пользователь сказал cпасибо:
|
|
23.10.2015, 04:45
|
#931
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
Цитата:
Сообщение от 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.
|
|
|
24.10.2015, 07:46
|
#932
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
Продолжаем делить грань панели, чуть доделано:
Скрытый текст
Код:
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
}
[свернуть]
Последний раз редактировалось AlexBolton; 23.12.2015 в 09:00.
Причина: правила п III.18
|
|
|
25.10.2015, 01:45
|
#933
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
в Демо 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
|
|
|
27.10.2015, 04:59
|
#934
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
е-ээ-эсть, есть ещё здесь хоть кто-то, кроме меня?!?..
ответьте, пожалуйста, хоть на какой-нибудь вопрос.
|
|
|
27.10.2015, 06:37
|
#935
|
Новичок
Регистрация: 27.10.2015
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от 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.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
27.10.2015, 08:42
|
#936
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
Оказывается можно удалить элемент контура:
Скрытый текст
Код:
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.
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
27.10.2015, 09:14
|
#937
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 804 раз(а) в 179 сообщениях
Вес репутации: 360
|
Код качественного тонирования с тенями, источниками света и сглаживанием:
PHP код:
function QualityRendering() {
system.secureExec("" +
"AQAA/wF4nGNigAA2IA7OLy1KTv0PBIwgIUaYlCaQ" +
"cGRIZihhyGTIZ8hj0GNwBtMlDEVAOgfID2JIZKgE" +
"iiYyFANFNcAypQypDDoMCljZmgzWDAAvIhVd" +
"");
}
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
02.11.2015, 08:41
|
#938
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
Волны на грани
(Черновой,
показывает результат пока только после нажатия Построить
пока только для линий(не для дуг и окружностей))
Скрытый текст
Код:
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 );
}
[свернуть]
Последний раз редактировалось systland; 02.11.2015 в 18:26.
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
02.11.2015, 09:15
|
#939
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 455
Сказал(а) спасибо: 243
Поблагодарили 1,099 раз(а) в 210 сообщениях
Вес репутации: 389
|
Вырез-эквидистанта:
выделяем панели, запускаем скрипт, указываем размер эквидистанты, Построить.
Скрытый текст
Код:
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()
}
});
}
[свернуть]
Последний раз редактировалось systland; 02.11.2015 в 18:25.
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
02.11.2015, 18:32
|
#940
|
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565
Сказал(а) спасибо: 303
Поблагодарили 452 раз(а) в 189 сообщениях
Вес репутации: 348
|
Комментарий модератора
systland:
Господа скриптоводы. Прошу листинги скриптов убирать под сполер.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 23:56. Часовой пояс GMT +3.
|