예제 #1
0
 def App_Cont_or_Calc_IntPts(self, cont, points, i, tol):
     #Hinzufügen falls es keine geschlossene Polyline ist
     if self.geo[0].Pa.isintol(self.geo[-1].Pe, tol):
         self.analyse_and_opt()
         cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length))
     else:
         points.append(PointsClass(point_nr=len(points),geo_nr=i,\
                                   Layer_Nr=self.Layer_Nr,\
                                   be=self.geo[0].Pa,
                                   en=self.geo[-1].Pe,be_cp=[],en_cp=[]))
    def Search_Paths(self,
                     c_nr=None,
                     c=None,
                     p_nr=None,
                     dir=None,
                     points=None):

        #Richtung der Suche definieren (1= pos, 0=neg bedeutet mit dem Ende Anfangen)

        #Wenn es der erste Aufruf ist und eine neue Kontur angelegt werden muss
        if len(c) == 0:
            c.append(ContourClass(cont_nr=0, order=[[p_nr, dir]]))

        #Suchen des Punktes innerhalb der points List (nötig da verwendete Punkte gelöscht werden)
        for new_p_nr in range(len(points)):
            if points[new_p_nr].point_nr == p_nr:
                break

        #Nächster Punkt abhängig von der Richtung
        if dir == 0:
            weiter = points[new_p_nr].en_cp
        elif dir == 1:
            weiter = points[new_p_nr].be_cp

        #Schleife für die Anzahl der Abzweig Möglichkeiten
        for i in range(len(weiter)):
            #Wenn es die erste Möglichkeit ist Hinzufügen zur aktuellen Kontur
            if i == 0:
                if not (c[c_nr].is_contour_closed()):
                    c[c_nr].order.append(weiter[0])

            #Es gibt einen Abzweig, es wird die aktuelle Kontur kopiert und dem
            #anderen Zweig gefolgt
            elif i > 0:
                if not (c[c_nr].is_contour_closed()):
                    #print 'Abzweig ist möglich'
                    c.append(deepcopy(c[c_nr]))
                    del c[-1].order[-1]
                    c[-1].order.append(weiter[i])

        for i in range(len(weiter)):
            #print 'I ist: ' +str(i)
            if i == 0:
                new_c_nr = c_nr
            else:
                new_c_nr = len(c) - len(weiter) + i

            new_p_nr = c[new_c_nr].order[-1][0]
            new_dir = c[new_c_nr].order[-1][1]
            if not (c[new_c_nr].is_contour_closed()):
                c = self.Search_Paths(copy(new_c_nr), c, copy(new_p_nr),
                                      copy(new_dir), points)
        return c
    def Search_Contours(self, geo=None, all_points=None, cont=None):

        points = deepcopy(all_points)

        while (len(points)) > 0:
            #print '\n Neue Suche'
            #Wenn nichts gefunden wird dann einfach die Kontur hochzählen
            if (len(points[0].be_cp) == 0) & (len(points[0].en_cp) == 0):
                #print '\nGibt Nix'
                cont.append(
                    ContourClass(len(cont), 0, [[points[0].point_nr, 0]], 0))
            elif (len(points[0].be_cp) == 0) & (len(points[0].en_cp) > 0):
                #print '\nGibt was Rückwärts (Anfang in neg dir)'
                new_cont_pos = self.Search_Paths(0, [], points[0].point_nr, 0,
                                                 points)
                cont.append(
                    self.Get_Best_Contour(len(cont), new_cont_pos, geo,
                                          points))
            elif (len(points[0].be_cp) > 0) & (len(points[0].en_cp) == 0):
                #print '\nGibt was Vorwärt (Ende in pos dir)'
                new_cont_neg = self.Search_Paths(0, [], points[0].point_nr, 1,
                                                 points)
                cont.append(
                    self.Get_Best_Contour(len(cont), new_cont_neg, geo,
                                          points))
            elif (len(points[0].be_cp) > 0) & (len(points[0].en_cp) > 0):
                #print '\nGibt was in beiden Richtungen'
                #Suchen der möglichen Pfade
                new_cont_pos = self.Search_Paths(0, [], points[0].point_nr, 1,
                                                 points)
                #Bestimmen des besten Pfades und übergabe in cont
                cont.append(
                    self.Get_Best_Contour(len(cont), new_cont_pos, geo,
                                          points))

                #Falls der Pfad nicht durch den ersten Punkt geschlossen ist
                if cont[-1].closed == 0:
                    #print '\Pfad nicht durch den ersten Punkt geschlossen'
                    cont[-1].reverse()
                    new_cont_neg = self.Search_Paths(0, [cont[-1]],
                                                     points[0].point_nr, 0,
                                                     points)
                    cont[-1] = self.Get_Best_Contour(
                        len(cont) - 1, new_cont_neg, geo, points)

            else:
                print 'FEHLER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
            points = self.Remove_Used_Points(cont[-1], points)
            cont[-1] = self.Contours_Points2Geo(cont[-1], all_points)
            cont[-1].analyse_and_opt(geo)

        return cont
예제 #4
0
 def App_Cont_or_Calc_IntPts(self, cont, points, i, tol):
     cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length))