프로젝트

일반

사용자정보

개정판 191b4efb

ID191b4efb0ad82bcf39a148cf4c41f406e2ee992c
상위 b4dbcc45
하위 a1842d07, 91a08862

함의성이(가) 5년 이상 전에 추가함

issue #563: fourth step on going

Change-Id: I1b572403c5c83ac2c11217fe1ec1f7195df5b3bd

차이점 보기:

DTI_PID/DTI_PID/LineNoTracer.py
1001 1001
                break
1002 1002

  
1003 1003
        # fixed run merge
1004
        '''
1004 1005
        consumed_count_past = 0
1006
        for index1 in range(len(fixed_run_infos)):
1007
            if fixed_run_infos[index1].consumed:
1008
                continue
1009
            for index2 in range(len(fixed_run_infos)):
1010
                if index1 == index2 or fixed_run_infos[index2].consumed:
1011
                    continue
1012

  
1013
                result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_run_infos[index1], fixed_run_infos[index2])
1014
                if result:
1015
                    fixed_run_infos[index1].consumed = True
1016
                    fixed_run_infos[index2].consumed = True
1017
                    consumed_count_past += 2
1018
                    if header:
1019
                        waiting_merged_run_infos.append([[fixed_run_infos[index2], fixed_run_infos[index1]], merged_run_info])
1020
                    else:
1021
                        waiting_merged_run_infos.append([[fixed_run_infos[index1], fixed_run_infos[index2]], merged_run_info])
1022
                    break
1023
        
1024
        while True:
1025
            consumed_count = 0
1026
            for index in range(len(fixed_run_infos)):
1027
                if fixed_run_infos[index].consumed:
1028
                    consumed_count += 1
1029
                    continue
1030

  
1031
                for waiting_merged_run_info in waiting_merged_run_infos:
1032
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info[1], fixed_run_infos[index])
1033
                    if result:
1034
                        fixed_run_infos[index].consumed = True
1035
                        consumed_count += 1
1036
                        if header:
1037
                            waiting_merged_run_info[0].insert(0, fixed_run_infos[index])
1038
                            waiting_merged_run_info[1] = merged_run_info
1039
                        else:
1040
                            waiting_merged_run_info[0].append(fixed_run_infos[index])
1041
                            waiting_merged_run_info[1] = merged_run_info
1042
                        break
1005 1043

  
1044
            if consumed_count_past == consumed_count:
1045
                break
1046
            else:
1047
                consumed_count_past = consumed_count
1048

  
1049
        while True:
1050
            merged = False
1051
            for index1 in range(len(waiting_merged_run_infos)):
1052
                waiting_merged_run_info1 = waiting_merged_run_infos[index1]
1053
                for index2 in range(len(waiting_merged_run_infos)):
1054
                    if index1 == index2:
1055
                        continue
1056
                    waiting_merged_run_info2 = waiting_merged_run_infos[index2]
1057
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info1[1], waiting_merged_run_info2[1])
1058
                    if result:
1059
                        if header:
1060
                            if reverse:
1061
                                for waiting_run_info in waiting_merged_run_info2[0]:
1062
                                    waiting_run_info.reverse()
1063
                                waiting_merged_run_info2[0].reverse()
1064
                                waiting_merged_run_info2[0].extend(waiting_merged_run_info1[0])
1065
                            waiting_merged_run_info1[0] = waiting_merged_run_info2[0]
1066
                            waiting_merged_run_info1[1] = merged_run_info
1067
                        else:
1068
                            if reverse:
1069
                                for waiting_run_info in waiting_merged_run_info2[0]:
1070
                                    waiting_run_info.reverse()
1071
                                waiting_merged_run_info2[0].reverse()
1072
                            waiting_merged_run_info1[0].extend(waiting_merged_run_info2[0])
1073
                            waiting_merged_run_info1[1] = merged_run_info
1074
                        merged = True
1075
                        break
1076
                if merged:
1077
                    waiting_merged_run_infos.pop(index2)
1078
                    break
1079
            if not merged:
1080
                break
1081
        '''
1006 1082

  
1007 1083
    except Exception as ex:
1008 1084
        from App import App 
DTI_PID/DTI_PID/Shapes/EngineeringLineTracerRunItem.py
36 36
            self.run.reverse()
37 37
    
38 38
    @staticmethod
39
    def merge_and_sort_if_possible(run_info1, run_info2):
39
    def merge_and_sort_if_possible(run_info1, run_info2, sort=True):
40 40
        """ return True, and merged run items if run is connected, True if run2 is come first """
41 41
        """ run_info1 is fixed, modify run_info2 """
42
        """ if sort is False, do not modify and sort just merge """
42 43

  
43 44
        connected = False
44 45
        merged_items = []
......
46 47
        reverse = False
47 48
        merged_Tracer = None
48 49

  
49
        if (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \
50
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0]) or \
51
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[-1]) or \
50
        if (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[0]) and \
51
                    run_info2.run.items[0].is_connected(run_info1.run.items[-1])) or \
52
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \
53
                    run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \
54
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[-1] and \
55
                    run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \
52 56
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \
53 57
                    run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]):
54 58
            connected = True
55 59
            header = False
56 60
            reverse = False
57 61
            merged_items = run_info1.run.items + run_info2.run.items
58
        elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[-1])) or \
59
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[-1]) or \
60
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[-1]) or \
62
        elif sort and ((len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[-1]) and \
63
                    run_info2.run.items[-1].is_connected(run_info1.run.items[-1])) or \
64
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[-1] and \
65
                    run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \
66
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[-1] and \
67
                    run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \
61 68
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \
62
                    run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]):
69
                    run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0])):
63 70
            connected = True
64 71
            header = False
65 72
            reverse = True
66 73
            run_info2.reverse()
67 74
            merged_items = run_info1.run.items + run_info2.run.items
68
        elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[-1])) or \
69
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[-1]) or \
70
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]) or \
75
        elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[-1]) and \
76
                    run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \
77
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[-1] and \
78
                    run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \
79
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0] and \
80
                    run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \
71 81
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \
72 82
                    run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]):
73 83
            connected = True
74 84
            header = True
75 85
            reverse = False
76 86
            merged_items = run_info2.run.items + run_info1.run.items
77
        elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \
78
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0]) or \
79
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]) or \
87
        elif sort and ((len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[0]) and \
88
                    run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \
89
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \
90
                    run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \
91
                (len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0] and \
92
                    run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \
80 93
                (len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \
81
                    run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]):
94
                    run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0])):
82 95
            connected = True
83 96
            header = True
84 97
            reverse = True
......
90 103
            merged_run.items = merged_items
91 104
            merged_Tracer = QEngineeringLineTracerRunItem(merged_run)
92 105

  
93
        return connected, merged_Tracer, header, reverse
94

  
95
    @staticmethod
96
    def merge_if_possible(run_info1, run_info2):
97
        """ return True, and merged run items if run is connected, True if run2 is come first """
98
        """ do not sort, all items already was sorted """
99

  
100
        connected = False
101
        merged_items = []
102
        header = False
103
        merged_Tracer = None
104

  
105
        if run_info1.run.items[-1].is_connected(run_info2.run.items[0]):
106
            connected = True
107
            header = False
108
            merged_items = run_info1.run.items + run_info2.run.items
109
        elif run_info1.run.items[0].is_connected(run_info2.run.items[-1]):
110
            connected = True
111
            header = True
112
            merged_items = run_info2.run.items + run_info1.run.items
113

  
114
        if connected:
115
            merged_run = QEngineeringRunItem()
116
            merged_run.items = merged_items
117
            merged_Tracer = QEngineeringLineTracerRunItem(merged_run)
118

  
119
        return connected, merged_Tracer, header
106
        return connected, merged_Tracer, header, reverse

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)