//system.exec('c:/Windows/system32/cmd.exe', '/c md "'+ActiveFilePathNomenklatury()+'ЧПУ"')
$$FileName = Action.ModelFilename
system.log($$FileName)
function ActiveFileName()
{
return $$FileName;
}
function ActiveFilePath()
{
return $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1);
}
function ActiveFileNameS_RasshireniyemTolko()
{
return $$FileName.substring($$FileName.lastIndexOf("\\") + 1, $$FileName.length);
}
function ActiveFilePathNomenklatury()
{
PathNomenklatury = $$FileName.lastIndexOf("\\Прямые")+ 1
// alert(PathNomenklatury)
if(PathNomenklatury>0)
{
PathNomenklatury = $$FileName.substring(0, PathNomenklatury);
}
else
{
PathNomenklatury = $$FileName.substring(0, $$FileName.lastIndexOf("\\") + 1)
}
return PathNomenklatury;
}
system.exec('c:/Windows/system32/cmd.exe', '/c md "'+ActiveFilePathNomenklatury()+'ЧПУ"')
VydelenniyeV_CNC()
function VydelenniyeV_CNC() {
var ar = [] //массив всех выделенных панелей
var OrigSel = []
for (i = 0; i < Model.SelectionCount; i++) {
if (!Model.Selections[i].AsPanel)
continue
OrigSel.push(Model.Selections[i])
}
for (i = 0; i < OrigSel.length; i++) {
if (OrigSel[i].ArtPos == "") {
alert("Расставь Позиции!");
return
}
p = OrigSel[i]
tOr = p.TextureOrientation //0-нет, 1-гор, 2 - верт
if (tOr ==1)
{
cRotation = 90;
}
else{cRotation=0}
// alert(p.ArtPos+ ' -- ' +tOr)
//kh = p.ContourHeight
//kw = p.ContourWidth
//alert(kh+ ' -- ' +kw+ ' -- ' +tOr)
ap = [] // массив контуров панелИ
contourData = {}
contourData.Pos = p.ArtPos
c = p.Contour.MakeCopy()
c.Rotate(0, 0, cRotation);
contourData.c = c
sloyKontura = "Контур заготовки"
contourData.sloy= sloyKontura
ap.push(contourData);
for (ic = 0; ic < p.Cuts.Count; ic++) {
//alert( p.Cuts[ic].Name )
contourData = {}
contourData.Pos = p.ArtPos
//? для пазов выборки Тип = 2 ?
if (p.Cuts[ic].CutType===2)
{c = p.Cuts[ic].Contour.MakeCopy()}
else
{
c = p.Cuts[ic].Trajectory.MakeCopy()
}
c.Rotate(0, 0, cRotation);
contourData.c = c
var cutName = ""
if(p.Cuts[ic].Sign.toString().trim().length>0)
{
cutName = p.Cuts[ic].Sign
}
else
{
cutName = p.Cuts[ic].Name
}
system.log(cutName)
contourData.sloy=cutName
ap.push(contourData);
}
//--------------Слои отверстий
apO = sloiOtverstiy(p,cRotation)
var holesNames = apO[0]
var holesContours = apO[1]
for(io=0;io<holesNames.length;io++)
{
contourData = {}
contourData.Pos = p.ArtPos
contourData.c = holesContours[io]
contourData.sloy= holesNames[io]
ap.push(contourData);
}
//--------------Слои отверстий
ar.push(ap)
Model.Selections = OrigSel
}
for (var ia = 0; ia < ar.length; ia++) {
DXF(ar[ia])
}
for (i = 0; i < OrigSel.length; i++) {
OrigSel[i].Selected = true
}
}
function DXF(data) {
t1 = "0\nVISION3D DXF\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n 1\nAC1015\n 9\n$ACADMAINTVER\n 70\n6\n 9\n$DWGCODEPAGE\n 3\nANSI_1251\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n10\n0.0\n20\n0.0\n9\n$EXTMAX\n10\n1000.0\n20\n1000.0\n9\n$LINMIN\n10\n0.0\n20\n0.0\n9\n$LINMAX\n10\n1000.0\n20\n1000.0\n0\nENDSEC\n0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLTYPE\n70\n1\n0\nLTYPE\n2\nCONTINUOUS\n70\n64\n3\nSolid line\n72\n65\n73\n0\n40\n0.000000\n0\nENDTAB\n0\nTABLE\n2\n"
//alert(t1)
t2_doSloya = "LAYER\n70\n6\n0\nLAYER\n 5\n110D0\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n"
//alert(t2_doSloya)
t3_PosleSloya = "70\n64\n 62\n7\n 6\nCONTINUOUS\n0\n"
//alert(t3_PosleSloya)
t4_DoObjektov = "ENDTAB\n0\nTABLE\n2\nSTYLE\n70\n0\n0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nBLOCKS\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n"
//alert(t4_DoObjektov)
l1_sloy = "0\nLINE\n 5\n110D1\n330\n1F\n100\nAcDbEntity\n 8\n"
//alert(l1_sloy)
l2_x1 = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbLine\n 10\n"
//alert(l2_x1)
l3_y1 = " 20\n"
l4_x2 = " 11\n"
l5_y2 = " 21\n"
a1_sloy = " 0\nARC\n 5\n110D2\n330\n1F\n100\nAcDbEntity\n 8\n"
a2_cX = " 6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
//alert(a2_cX)
a3_cY = " 20\n"
a4_R = " 40\n"
a5_p1A = "100\nAcDbArc\n 50\n"
a6_p2A = " 51\n"
c1_sloy = "0\nCIRCLE\n 5\n110D3\n330\n1F\n100\nAcDbEntity\n 8\n"
c2_cX = "6\nCONTINUOUS\n 62\n7\n370\n60\n100\nAcDbCircle\n 10\n"
c3_cY = " 20\n"
c4_R = " 40\n"
kanec = "0\nENDSEC\n0\nEOF"
sloi = []
for(i=0;i< data.length;i++)
{
//alert('!!!'+data[i].sloy)
if(sloi.indexOf(data[i].sloy)== -1)
{
sloi.push(data[i].sloy)
}
}
tdxf = t1
for(i=0;i< sloi.length;i++)
{
tdxf = tdxf + t2_doSloya + sloi[i] + "\n" + t3_PosleSloya
}
tdxf = tdxf + t4_DoObjektov
for(ic=0;ic< data.length;ic++)
{
c = data[ic].c
sloy = data[ic].sloy
for (i = 0; i < c.Count; i++) {
if (c[i].ElType == 1) {
tdxf = tdxf + l1_sloy + sloy + "\n" + l2_x1 + c[i].Pos1.x + "\n" + l3_y1 + c[i].Pos1.y + "\n" + l4_x2 + c[i].Pos2.x + "\n" + l5_y2 + c[i].Pos2.y + "\n"
} else if (c[i].ElType == 2) {
p1A = c[i].Pos1Angle() * (180 / Math.PI)
p2A = c[i].Pos2Angle() * (180 / Math.PI)
if(!c[i].ArcDir)
{
pp=p1A
p1A = p2A
p2A = pp
}
//else {dir='1'}
tdxf = tdxf + a1_sloy + sloy + "\n" + a2_cX + c[i].Center.x + "\n" + a3_cY + c[i].Center.y + "\n" + a4_R + c[i].ArcRadius() + "\n" + a5_p1A + p1A + "\n" + a6_p2A + p2A + "\n"
} else if (c[i].ElType == 3) {
tdxf = tdxf + c1_sloy + sloy + "\n" + c2_cX + c[i].Center.x + "\n" + c3_cY + c[i].Center.y + "\n" + c4_R + c[i].CirRadius + "\n"
}
}
}
tdxf = tdxf + kanec
system.writeTextFile(ActiveFilePathNomenklatury()+ 'ЧПУ\\' + data[0].Pos + '.dxf', tdxf)
}
function sloiOtverstiy(p,cRotation)
{
fs = krepej(p)
var res22 = Dyriavim(fs,p)
return res22
}
function krepej(p)
{
if(!p.AsPanel) {return}
var ar = p.FindConnectedFasteners(p)
return ar
}
function Dyriavim(fs,p)
{
// alert(fs[0])
var holesContours = []
var holesNames = []
for(iif=0;iif<fs.length;iif++)
{
f=fs[iif]
// alert(f)
c = f.Holes;
var i = 0;
сk = f.Holes.Count;
//HoleCon = NewContour();
while (i < сk) {
if(!CheckHole(c[i],f, p)&&!CheckHole2(c[i],f, p))
{
i++
continue
}
if (CheckWithPanel(f.NToGlobal(c[i].Direction), p))
{
i++
continue
}
if (c[i].Radius<1.9/2)
{
i++
continue
}
HolePosG = f.ToGlobal(c[i].Position);
p.Selected = false
HolePosG = p.ToObject(HolePosG)
if (c[i].Contour==null)
{
holeName = "o"+(c[i].Radius*2).toString()+"h"+HoleFaceDepth(c[i],f, p).toString()
var ihn = holesNames.indexOf(holeName)
if(ihn==-1)
{
holesNames.push(holeName)
HoleCon = NewContour()
holesContours.push(HoleCon)
} else
{
HoleCon = holesContours[ihn]
}
HoleCon.AddCircle(HolePosG.x, HolePosG.y, c[i].Radius)
}
else
{
holeName = "Qh"+HoleFaceDepth(c[i],f, p).toString()
var ihn = holesNames.indexOf(holeName)
if(ihn==-1)
{
holesNames.push(holeName)
HoleCon = holesContours.push(NewContour())
} else
{
HoleCon = holesContours[ihn]
}
HoleCon.AddList(c[i].Contour.MakeCopy());
HoleCon.Move(HolePosG.x, HolePosG.y)
}
i++
}
/*StartEditing(p)
Undo.Changing(p)
//StartEditing(p)
p.Contour.Subtraction(HoleCon);
system.log(p.ArtPos+ " -- "+p.Name)
p.Build()
*/
}
for(ic = 0;ic<holesContours.length;ic++)
{
holesContours[ic].Rotate(0, 0, cRotation);
}
var res22 = []
res22.push( holesNames)
res22.push(holesContours )
return res22
}
function CheckHole2(hole,fast, panel){
for(id=1;id<20;id++)
{
if(CheckHole(hole,fast, panel,id/20))
{
return true
}
}
return false
}
function CheckHole(hole,fast, panel,delim){
var holeCenter = fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * (hole.Depth * delim),
y: hole.Position.y + hole.Direction.y * (hole.Depth * delim),
z: hole.Position.z + hole.Direction.z * (hole.Depth * delim),
})
holeCenter = panel.ToObject(holeCenter);
return (holeCenter.x > panel.GMin.x) && (holeCenter.x < panel.GMax.x) &&
(holeCenter.y > panel.GMin.y) && (holeCenter.y < panel.GMax.y) &&
(holeCenter.z > panel.GMin.z) && (holeCenter.z < panel.GMax.z);
}
function Equals(n1, n2){
return Math.abs(n1 - n2) < 0.001;
}
function EqualsV(v1, v2) {
return Equals(v1.x, v2.x) &&
Equals(v1.y, v2.y) &&
Equals(v1.z, v2.z);
}
function CheckWithPanel(gDir, panel){
return (EqualsV(gDir, panel.NToGlobal(AxisX)) ||
EqualsV(gDir, panel.NToGlobal(Axis_X)) ||
EqualsV(gDir, panel.NToGlobal(AxisY)) ||
EqualsV(gDir, panel.NToGlobal(Axis_Y)))
}
/**
* Глубина отверстия в пласти панели
* @param {*} hole Отверстие
* @param {Object3} fast Фурнитура, которой принадлежит отверстие
* @param {Panel} panel Панель
*/
function HoleFaceDepth(hole, fast, panel){
// минимум и максимум панели
var pMin = panel.GMin.z, pMax = panel.GMax.z;
// начальная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
var holeStart = panel.ToObject(fast.ToGlobal(hole.Position)).z;
// конечная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
var holeEnd = panel.ToObject(fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * hole.Depth,
y: hole.Position.y + hole.Direction.y * hole.Depth,
z: hole.Position.z + hole.Direction.z * hole.Depth
})).z;
// Если начальная координата больше конечной - меняем их местами
if (holeStart > holeEnd){
var swap = holeStart;
holeStart = holeEnd;
holeEnd = swap;
}
var result = Math.min(holeEnd, pMax) - Math.max(holeStart, pMin);
return Math.round(result*10)/10
}
//****----------------- Угол отверстия в пласть
function VectorDot(v1, v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
function VectorLength(v) {
return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
}
function VectorsAngle(v1, v2){
return Math.acos(VectorDot(v1, v2) / (VectorLength(v1) * VectorLength(v2))) * 180 / Math.PI
}
/// ------ Вызывать эту функцию -------------
function AngleBetweenHoleDirAndPanelFace(hole, fast, panel){
var pDir = panel.NToGlobal(AxisZ);
var hDir = fast.NToGlobal(hole.Direction);
return VectorsAngle(pDir, hDir);
}
//****----------------- Угол отверстия в пласть----------------
[свернуть]