def buildLine(segment, d): l = segment.end_pt.x - segment.start_pt.x m = segment.end_pt.y - segment.start_pt.y length = math.sqrt(l * l + m * m) l /= length m /= length start_pt = machine.Point2d(segment.start_pt.x + m * d, segment.start_pt.y - l * d) end_pt = machine.Point2d(segment.end_pt.x + m * d, segment.end_pt.y - l * d) return machine.Line(start_pt, end_pt)
def buildPoint(c, p, r, d): x = p.x - c.x y = p.y - c.y l = math.sqrt(x * x + y * y) x = x / l * (r + d) y = y / l * (r + d) return machine.Point2d(x, y)
def getMArc(s, e, c, r): # стартовая, конечная, центр радиус арки x = (e.x - s.x) / 2 + s.x # точка на хорде/2 от стартовой точки к конечной y = (e.y - s.y) / 2 + s.y x = x - c.x # вектор от центра арки к центру хорды y = y - c.y l = math.sqrt(x * x + y * y) x = x / l * abs(r) + c.x y = y / l * abs(r) + c.y return machine.Point2d(x, y)
def __init__(self): self.start_pt = machine.Point2d() self.end_pt = machine.Point2d()
def EndPanel(self): '''Функция вызывается в конце обработки каждой панели''' if (self.Selobj == 0): # Если это не выбранная панель, то не фиг ее обрабатывать return b = self.panel.bounding_box Ypanel=b.max.y-b.min.y Xpanel=b.max.x-b.min.x # Если необходимо, проверка на габариты # Utiles.CheckGabs(self,panel,xmin,xmax,ymin,ymax,zmin,zmax) # Запоминаем пропилы и отверстия. Они нам потребуются #slotsave=self.slots drillsave=self.drills self.writeOutputFile('_AE') # Создаем файл вывода и пишем в него накопленную информацию. ## Если есть пропилы вдоль Y по стороне A, поворачиваем панель if (self.isSlotsAY==True): # Поворачиваем относительно правого дальнего угла self.panel.Rotate(vpi/2,machine.Point2d(0,Ypanel)) b = self.panel.bounding_box Xpanel,Ypanel=Ypanel,Xpanel self.panel.Translate(machine.Vector2d(-b.min.x,-b.min.y)) self.panelWidth = self.panel.panel_length self.panelLength = self.panel.panel_width self.workingsides=[] self.workingsides.append(1) # Убираем фрезеровки self.millingTech=[] self.writeOutputFile("_AC") # Возвращаем поворот взад self.panel.Translate(machine.Vector2d(b.min.x,b.min.y)) self.panel.Rotate(-vpi/2,machine.Point2d(0,Xpanel)) Xpanel,Ypanel=Ypanel,Xpanel self.panelWidth = self.panel.panel_width self.panelLength = self.panel.panel_length # Если есть глухие отверстия или пропилы с обратной стороны, надо еще перевернуть панель if (self.isBlindHoleF==True or self.isSlotsFX==True or self.isSlotsFY== True): drlist=[] # Удаляем все отверстия, кроме глухих по F for d in self.drills: if (Utiles.GetDrillPlane(d)=="F"): drlist.append(d) self.drills=drlist # Убираем фрезеровки self.millingTech=[] # Переворачиваем относительно оси X b = self.panel.bounding_box self.panel.Overturn(0) self.panel.Rotate(-vpi,machine.Point2d(0,Xpanel)) self.panel.Translate(machine.Vector2d(Xpanel-b.min.x,0)) if (self.isBlindHoleF==True or self.isSlotsFX==True): self.writeOutputFile("_FD") ## B последнее - пропилы по F вдоль Y if (self.isSlotsFY==True): # Поворачиваем относительно правого дальнего угла self.panel.Rotate(vpi/2,machine.Point2d(0,Ypanel)) Xpanel,Ypanel=Ypanel,Xpanel b = self.panel.bounding_box self.panel.Translate(machine.Vector2d(-b.min.x,-b.min.y)) self.panelWidth = self.panel.panel_length self.panelLength = self.panel.panel_width self.writeOutputFile("_FC") return