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
def App_Cont_or_Calc_IntPts(self, cont, points, i, tol): cont.append(ContourClass(len(cont), 1, [[i, 0]], self.length))