コード例 #1
0
    def StartPanel(self, panel):
      '''Метод вызывается автоматически перед началом обработки каждой панели'''
      self.millingTech = []
      self.drills=[]
      self.slots = [] # Пропилы
      self.millingSlots = []
      self.workingsides=[]        # Список сторон панели, которые нужно будет обработать
      self.writer=Writer()
      self.isSlotsFX = False
      self.isSlotsFY = False
      self.isSlotsAY = False
      self.isBlindHoleF = False

      self.fname="" # Имя файла управляющей программы
      self.panelName=panel.name
      self.panel = panel
      b = self.panel.bounding_box
      self.NumOrder = ''
      self.Selobj = 0
      for a in self.panel.attributes:
        if a.name=='Selobj':
          self.Selobj = int(a.value)
        if a.name=='NumOrder':
          self.NumOrder = str(a.value)+"_"
      # Анализируем габарит панели и поворачиваем ее длинной стороной вдоль X
      #Xpanel=b.max.x-b.min.x
      #Ypanel=b.max.y-b.min.y
      self.panel.Translate(machine.Vector2d(-b.min.x,-b.min.y))
      self.panelThickness = panel.thickness
      self.panelWidth = self.panel.panel_width
      self.panelLength = self.panel.panel_length
      self.panelNum = panel.common_pos
      # Собираем контура
      self.Contour()
      return True
コード例 #2
0
    def StartPanel(self, panel):
        '''Метод вызывается автоматически перед началом обработки каждой панели'''
        #      self.millingTech = []
        #      self.drills=[]
        #      self.slots = [] # Пропилы
        #      self.workingsides=[]        # Список сторон панели, которые нужно будет обработать

        self.fname = ""  # Имя файла управляющей программы
        #self.panelName=panel.name
        self.panel = panel
        b = self.panel.bounding_box
        #      print (os.path.split(self.settings.database_name)[1])
        a = os.path.split(self.settings.database_name)[1]
        #      b=a.split('.')
        #      print (b)
        self.NumOrder = a.split('.')[0]  #"" #self.settings.database_name
        self.Selobj = 0
        for a in self.panel.attributes:
            if a.name == 'Selobj':
                self.Selobj = int(a.value)
            if a.name == 'NumOrder':
                self.NumOrder = str(a.value) + "_"
        # Анализируем габарит панели и поворачиваем ее
        w = 0
        if abs(self.panel.bounding_box.size_x-self.panel.detail.bounding_box.size_x) +\
        abs(self.panel.bounding_box.size_y-self.panel.detail.bounding_box.size_y) >\
        abs(self.panel.bounding_box.size_x-self.panel.detail.bounding_box.size_y) +\
        abs(self.panel.bounding_box.size_y-self.panel.detail.bounding_box.size_x):
            self.panel.Rotate(0.5 * vpi, self.panel.bounding_box.min)
            w = self.panel.bounding_box.max.x - self.panel.bounding_box.min.x
        self.panel.Translate(
            machine.Vector2d(w + self.panel.detail.bounding_box.min.x,
                             self.panel.detail.bounding_box.min.y))
        b = self.panel.bounding_box
        if b.min.x < xmin - eps_d or b.max.x > xmax + eps_d:
            print("Панель #", self.panel.common_pos, " (", panel.name,
                  ") не проходит по габаритам X(", b.min.x, "-", b.max.x, ")")
            print("Габариты панели: ", b.max.x - b.min.x, b.max.y - b.min.y)
            return
        if b.min.y < ymin - eps_d or b.max.y > ymax + eps_d:
            print("Панель #", self.panel.common_pos, " (", panel.name,
                  ") не проходит по габаритам Y(", b.min.y, "-", b.max.y, ")")
            print("Габариты панели: ", b.max.x - b.min.x, b.max.y - b.min.y)
            return
#      p0 = self.panel.bounding_box.min
#      p0.x = 0
#      p0.y = 0
#      self.panel.Rotate(0.5*vpi, p0)
        self.panelThickness = panel.thickness
        self.panelWidth = self.panel.panel_width
        self.panelLength = self.panel.panel_length
        self.panelNum = panel.common_pos
        self.writer.panelName = panel.name
        # Собираем контура
        self.Contour()
        return True
コード例 #3
0
def lengSegment(con):
    '''Возвращает длину сегмента или None'''
    res=None
    if type(con)==machine.Arc:
        v1 =con.tangent(1)
        v2 =con.tangent(0)
        res=vpi*con.radius*(angleGet(v1, v2))/180
    elif type(con)==machine.Line:
        vx=con.end_pt.x-con.start_pt.x
        vy=con.end_pt.y-con.start_pt.y
        vt=machine.Vector2d(vx,vy) 
        res=vt.length
    return res
コード例 #4
0
    def TransformToSide(self, panel, posit, toback=False):
        '''Функция устанавливает положение панели panel в соответствие с заданной сторонй posit.
    Если toback = True, то положение возвращается из posit в стандартное (АЕ)

    Если передено корректное положение, то функция возвращает True. Иначе - False
    '''
        b = panel.bounding_box
        ypanel = b.max.x - b.min.x
        ypanel = b.max.y - b.min.y
        matr = machine.Matrix3d()
        # Добавляем в матрицу преобразования в зависимости от положенияя
        if posit == "AE":
            pass  # Это нормальное положение панели
        elif posit == "AC":
            matr = machine.Matrix3d.rotate(vpi / 2)
            matr *= machine.Matrix3d.translate(machine.Vector2d(-ypanel, 0))
        elif posit == "AD":
            matr = machine.Matrix3d.rotate(vpi)
            matr *= machine.Matrix3d.translate(
                machine.Vector2d(-xpanel, -ypanel))
        elif posit == "AB":
            matr = machine.Matrix3d.rotate(-vpi / 2)
            matr *= machine.Matrix3d.translate(machine.Vector2d(0, -xpanel))
        elif posit == "FE":
            matr = machine.Matrix3d.overturn_y(0, panel.thickness / 2)
            matr *= machine.Matrix3d.translate(machine.Vector2d(-xpanel, 0))
        elif posit == "FC":
            matr = machine.Matrix3d.overturn_y(0, panel.thickness / 2)
            matr *= machine.Matrix3d.rotate(vpi / 2)
        elif posit == "FD":
            matr = machine.Matrix3d.overturn_y(0, panel.thickness / 2)
            matr *= machine.Matrix3d.rotate(vpi)
            matr *= machine.Matrix3d.translate(machine.Vector2d(0, -ypanel))
        elif posit == "FB":
            matr = machine.Matrix3d.overturn_y(0, panel.thickness / 2)
            matr *= machine.Matrix3d.rotate(-vpi / 2)
            matr *= machine.Matrix3d.translate(
                machine.Vector2d(-ypanel, -xpanel))
        else:
            return False
        # Если нужно восстановить положение, то инвертируем матрицу
        if toback:
            matr.inverse()
        panel.Transform(matr)
        return True
コード例 #5
0
    def CheckConstraints(self,operation, listDrillDimMashine=['B', 'C', 'D', 'E', 'A', 'F']):
        '''Определение положения панели, при котором данная операция может быть выполнена

        operation - операция
        self - ограничения станка

        Функция возвращает кортеж положений панели вида <Plane><Side>,
        где <Plane> - пласть панели, расположенная вверху (А или F)
        <Side> - сторона панели, расположенная вперед (B, C, D, E)
        '''
        poslist=[]	# Список положений
        if not isinstance(operation,machine.Operation):
            return tuple(poslist)

        # Проверяем габариты по Z. Если не проходит, то ничего не поможет
        panel=operation.panel	# Панель операции
        b=panel.bounding_box
        #ypanel=bbox.max.y-bbox.min.y
        #xpanel=bbox.max.x-bbox.min.x
        xpanel, ypanel = GetGab_bounding_box(panel)
        if (panel.thickness>=self.zmax_constr or panel.thickness<=self.zmin_constr):
            return tuple(poslist)

        # Проверяем отверстия
        xmin=self.xmin_constr
        xmax=self.xmax_constr
        ymin=self.ymin_constr
        ymax=self.ymax_constr
        if isinstance(operation,machine.Drilling):
            position=operation.position
            matr3d=machine.Matrix3d()
            matr3d.translate(machine.Vector2d(-b.min.x,-b.min.y))
            position.transform(matr3d)
            x=operation.position.x
            y=operation.position.y
            side=GetDrillPlane(operation)
            if side=="X":
                return tuple(poslist)
            # print('side=',side)
            # Проверяем пласти панели
            if ((operation.depth>=panel.thickness and side=="F") or side=="A"): # Проверяем сторону А
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,x,y):
                    self.AppendPosition(poslist,"AE")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,ypanel-y,x):
                    self.AppendPosition(poslist,"AC")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,y,xpanel-x):
                    self.AppendPosition(poslist,"AB")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,xpanel-x,ypanel-y):
                    self.AppendPosition(poslist,"AD")

            if ((operation.depth>=panel.thickness and side=="A") or side=="F"):  # Если отверстие сквозное или сторона F
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,xpanel-x,y):
                    self.AppendPosition(poslist,"FE")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,y,x):
                    self.AppendPosition(poslist,"FC")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,ypanel-y,xpanel-x):
                    self.AppendPosition(poslist,"FB")
                if self._CheckPositGabs(xmin,xmax,ymin,ymax,x,ypanel-y):
                    self.AppendPosition(poslist,"FD")

            if (side=="B"): # Проверяем сторону B
                if ((y <= (eps_d + ymax)) and
                    ((y +eps_d) >= ymin) and
                    ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AE")
                if (((ypanel-y)<= (eps_d + xmax)) and
                    ((ypanel-y) +eps_d >= xmin) and
                    ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AC")
                if ((y <= (eps_d + xmax)) and
                    ((y +eps_d) >= xmin) and
                    (xpanel <= (eps_d + ymax)) and
                    ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AB")
                if (((ypanel-y) <= (eps_d + ymax)) and
                    (((ypanel-y) +eps_d) >= ymin) and
                    (xpanel <= (eps_d + xmax)) and
                    ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AD")
                if ((y <= (eps_d + ymax)) and
                    ((y +eps_d) >= ymin) and
                    (xpanel <= (eps_d + xmax)) and
                    ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FE")
                if ((y <= eps_d + xmax) and
                    (y+eps_d >= xmin) and
                    ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FD")
                if (((ypanel-y) <= (eps_d + xmax)) and
                    (((ypanel-y) +eps_d) >= xmin) and
                    ((xpanel) <= (eps_d + ymax)) and
                    ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FB")
                if (((ypanel-y) <= (eps_d + ymax)) and
                    (((ypanel-y) +eps_d) >= ymin) and
                    ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FC")

            if (side=="C"): # Проверяем сторону C
                if (y<= eps_d + ymax and
                    y+eps_d >= ymin and
                    xpanel<= xmax and
                    ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AE")
                if (((ypanel-y)<= (eps_d + xmax)) and
                    ((ypanel-y)+eps_d) >= xmin and
                    (xpanel<= (eps_d + ymax)) and
                    ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AC")
                if ((y<= (eps_d + xmax)) and
                    ((y+eps_d) >= xmin) and
                    ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AB")
                if (((ypanel-y)<= (eps_d + ymax)) and
                    (((ypanel-y)+eps_d) >= ymin) and
                    ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AD")
                if ((y<= (eps_d + ymax)) and
                    ((y+eps_d) >= ymin) and
                    ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FE")
                if ((y<= eps_d + xmax) and
                    (y+eps_d >= xmin) and
                    (xpanel<= eps_d + ymax) and
                    ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FC")
                if ((ypanel-y<= eps_d + xmax) and
                    (ypanel-y+eps_d >= xmin) and
                    ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FB")
                if ((ypanel-y<= eps_d + ymax) and
                    (ypanel-y+eps_d >= ymin) and
                    (xpanel<= eps_d + xmax) and
                    ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FD")

            if (side=="D"): # Проверяем сторону D
                if ((x<= eps_d + xmax) and (x+eps_d >= xmin) and ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AE")
                if ((x<= eps_d + ymax) and (x+eps_d >= ymin) and (ypanel<= eps_d + xmax) and ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AC")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=ymin) and ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AB")
                if ((xpanel-x<= eps_d +xmax) and (xpanel-x+eps_d >=xmin) and (ypanel<= eps_d +ymax) and ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AD")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=xmin) and ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FE")
                if ((x<= eps_d +ymax) and (x+eps_d >=ymin) and ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FC")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=ymin) and (ypanel<= eps_d +xmax) and ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FB")
                if ((x<= eps_d +xmax) and (x+eps_d >=xmin) and (ypanel<= eps_d +ymax) and ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FD")

            if (side=="E"): # Проверяем сторону E
                if ((x<= eps_d +xmax) and (x+eps_d >=xmin) and (ypanel<= eps_d +ymax) and ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AE")
                if ((x<= eps_d +ymax) and (x+eps_d >=ymin) and ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AC")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=ymin) and (ypanel<= eps_d +xmax) and ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AB")
                if ((xpanel-x<= eps_d +xmax) and (xpanel-x+eps_d >=xmin) and ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"AD")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=xmin) and (ypanel<= eps_d +ymax) and ('E' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FE")
                if ((x<= eps_d +ymax) and (x+eps_d >=ymin) and (ypanel<= eps_d +xmax) and ('C' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FC")
                if ((xpanel-x<= eps_d +ymax) and (xpanel-x+eps_d >=ymin) and ('B' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FB")
                if ((x<= eps_d +xmax) and (x+eps_d >=xmin) and ('D' in listDrillDimMashine)):
                    self.AppendPosition(poslist,"FD")

        posit=tuple(poslist)
        return posit
コード例 #6
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
コード例 #7
0
    def _CheckDrilling(self, operation):
        '''Проверка операции Сверловка
    operation - операция Сверловка
    self - ограничения станка
  
    Функция возвращает кортеж положений панели вида <Plane><Side>,
    где <Plane> - пласть панели, расположенная вверху (А или F)
    <Side> - сторона панели, расположенная вперед (B, C, D, E)
    '''

        # Проверяем отверстия
        poslist = []  # Список положений
        panel = operation.panel  # Панель операции
        bbox = panel.bounding_box
        ypanel = bbox.max.y - bbox.min.y
        xpanel = bbox.max.x - bbox.min.x
        xmin = self.xmin_constr
        xmax = self.xmax_constr
        ymin = self.ymin_constr
        ymax = self.ymax_constr
        if isinstance(operation, machine.Drilling):
            position = operation.position
            matr3d = machine.Matrix3d()
            matr3d.translate(machine.Vector2d(-bbox.min.x, -bbox.min.y))
            position.transform(matr3d)
            x = position.x
            y = position.y
            side = GetDrillPlane(operation)
            if side == "X":
                return tuple(poslist)

            # Проверяем пласти панели
            if (side == "A"):  # Проверяем сторону А
                if _CheckPositGabs(xmin, xmax, ymin, ymax, x, y):
                    self.AppendPosition(poslist, "AE")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, ypanel - y, x):
                    self.AppendPosition(poslist, "AC")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, y, xpanel - x):
                    self.AppendPosition(poslist, "AB")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, xpanel - x,
                                   ypanel - y):
                    self.AppendPosition(poslist, "AD")

            if ((operation.depth >= panel.thickness and side == "A")
                    or side == "F"):  # Если отверстие сквозное или сторона F
                if _CheckPositGabs(xmin, xmax, ymin, ymax, xpanel - x, y):
                    self.AppendPosition(poslist, "FE")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, y, x):
                    self.AppendPosition(poslist, "FC")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, ypanel - y,
                                   xpanel - x):
                    self.AppendPosition(poslist, "FB")
                if _CheckPositGabs(xmin, xmax, ymin, ymax, x, ypanel - y):
                    self.AppendPosition(poslist, "FD")

            if (side == "B"):  # Проверяем сторону B
                if (y < ymax and y > ymin):
                    self.AppendPosition(poslist, "AE")
                if (ypanel - y < xmax and ypanel - y > xmin):
                    self.AppendPosition(poslist, "AC")
                if (y < xmax and y > xmin and xpanel < ymax):
                    self.AppendPosition(poslist, "AB")
                if (ypanel - y < ymax and ypanel - y > ymin and xpanel < xmax):
                    self.AppendPosition(poslist, "AD")
                if (y < ymax and y > ymin and xpanel < xmax):
                    self.AppendPosition(poslist, "FE")
                if (y < xmax and y > xmin):
                    self.AppendPosition(poslist, "FC")
                if (ypanel - y < xmax and ypanel - y > xmin and xpanel < ymax):
                    self.AppendPosition(poslist, "FB")
                if (ypanel - y < ymax and ypanel - y > ymin):
                    self.AppendPosition(poslist, "FD")

            if (side == "C"):  # Проверяем сторону C
                if (y < ymax and y > ymin and xpanel < xmax):
                    self.AppendPosition(poslist, "AE")
                if (ypanel - y < xmax and ypanel - y > xmin and xpanel < ymax):
                    self.AppendPosition(poslist, "AC")
                if (y < xmax and y > xmin):
                    self.AppendPosition(poslist, "AB")
                if (ypanel - y < ymax and ypanel - y > ymin):
                    self.AppendPosition(poslist, "AD")
                if (y < ymax and y > ymin):
                    self.AppendPosition(poslist, "FE")
                if (y < xmax and y > xmin and xpanel < ymax):
                    self.AppendPosition(poslist, "FC")
                if (ypanel - y < xmax and ypanel - y > xmin):
                    self.AppendPosition(poslist, "FB")
                if (ypanel - y < ymax and ypanel - y > ymin and xpanel < xmax):
                    self.AppendPosition(poslist, "FD")

            if (side == "D"):  # Проверяем сторону D
                if (x < xmax and x > xmin):
                    self.AppendPosition(poslist, "AE")
                if (x < ymax and x > ymin and ypanel < xmax):
                    self.AppendPosition(poslist, "AC")
                if (xpanel - x < ymax and xpanel - x > ymin):
                    self.AppendPosition(poslist, "AB")
                if (xpanel - x < xmax and xpanel - x > xmin and ypanel < ymax):
                    self.AppendPosition(poslist, "AD")
                if (xpanel - x < ymax and xpanel - x > xmin):
                    self.AppendPosition(poslist, "FE")
                if (x < ymax and x > ymin):
                    self.AppendPosition(poslist, "FC")
                if (xpanel - x < ymax and xpanel - x > ymin and ypanel < xmax):
                    self.AppendPosition(poslist, "FB")
                if (x < xmax and x > xmin and ypanel < ymax):
                    self.AppendPosition(poslist, "FD")

            if (side == "E"):  # Проверяем сторону E
                if (x < xmax and x > xmin and ypanel < ymax):
                    self.AppendPosition(poslist, "AE")
                if (x < ymax and x > ymin):
                    self.AppendPosition(poslist, "AC")
                if (xpanel - x < ymax and xpanel - x > ymin and ypanel < xmax):
                    self.AppendPosition(poslist, "AB")
                if (xpanel - x < xmax and xpanel - x > xmin):
                    self.AppendPosition(poslist, "AD")
                if (xpanel - x < ymax and xpanel - x > xmin and ypanel < ymax):
                    self.AppendPosition(poslist, "FE")
                if (x < ymax and x > ymin and ypanel < xmax):
                    self.AppendPosition(poslist, "FC")
                if (xpanel - x < ymax and xpanel - x > ymin):
                    self.AppendPosition(poslist, "FB")
                if (x < xmax and x > xmin):
                    self.AppendPosition(poslist, "FD")
        return tuple(poslist)