Вырез мойки
1) Выделить одну фурнитурину.
2) Запустить скрипт.
Добавляет отверстие произвольной фурнитуры в контуры всех панелей, которых касаются отверстия этой фурнитурины.
PHP код:
//p = GetPanel("Укажи панель.")
m = Model.Selections[0]
arp = m.FindFastenedObjects()
for(var i3 = 0;i3<arp.length;i3++){
p= arp[i3]
if(p.AsPanel){
arp = m.FindFastenedObjects()
csub = NewContour()
for (var i = 0; i < m.Holes.Count; i++) {
var c0_ = m.Holes[i]
HolePosG = m.ToGlobal(c0_.Position);
HolePosG2 = p.ToObject(HolePosG)
if (c0_.Contour==null)
{
csub.AddCircle(HolePosG2.x, HolePosG2.y, c0_.Radius)
}
else{
c_ = c0_.Contour.MakeCopy()
c_.Symmetry(0, 0, 0, 1, false);
var c0 = testC(c_)
c0.LocalMatrix = c0_.TransformMatrix()
c0.AssignTransform(m)
c0.Position = HolePosG
//posH = c0.ToGlobal(NewVector(0, 0, 0))
//posL = p.ToObject(posH)
//csub.AddList(c_.MakeCopy())
//csub.Move(posL.x,posL.y)
for (var j = 0; j < c_.Count; j++) {
var e1 = c_[j]
if (e1.ElType == 3) {
}
else {
var v1 = c0.ToGlobal(NewVector(e1.Pos1.x, e1.Pos1.y, 0))
var v1 = p.ToObject(v1)
p1 = NewPoint(v1.x, v1.y)
var v2 = c0.ToGlobal(NewVector(e1.Pos2.x, e1.Pos2.y, 0))
var v2 = p.ToObject(v2)
p2 = NewPoint(v2.x, v2.y)
if (e1.ElType == 2) {
var vm = c0.ToGlobal(NewVector(e1.ArcCenter().x, e1.ArcCenter().y, 0))
var vm = p.ToObject(vm)
pm = NewPoint(vm.x, vm.y)
var arc = csub.AddArc3(p1,pm,p2)
if(arc == undefined)
{
csub.AddLine(p1,p2)
}
}else
{
csub.AddLine(p1,p2)
}
}
//testP(v1)
}
}
}
Undo.Changing(p)
p.Contour.Subtraction(csub)
p.Build()
DeleteNewObjects()
}}
function testC(c00, name = '') {
var c0 = AddContour()
c0.Name = name
var c = c0.Contour
c.AddList(c00.MakeCopy())
return c0
}
function testP(v1, name = "", rad = 10) {
var c0 = AddContour()
c0.Name = name
var c = c0.Contour
c.AddCircle(0, 0, rad)
c0.Translate(v1)
}
function Distance(p1, p2) {
var dx = p2.x - p1.x;
var dy = p2.y - p1.y;
var dz = 0;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
Были прошлые версии, но не правильно крутили контур на панеле.