Example #1
0
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)
Example #2
0
 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)
Example #3
0
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)
Example #4
0
 def __init__(self):
     self.start_pt = machine.Point2d()
     self.end_pt = machine.Point2d()
Example #5
0
    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