프로젝트

일반

사용자정보

개정판 91a08862

ID91a0886291963e64f1c94f7e51797598fe08535c
상위 191b4efb
하위 ce386dc9

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

issue #563: 4 test

Change-Id: I92f171c88d34f0d7da903dec521d2932c7434b22

차이점 보기:

DTI_PID/DTI_PID/LineNoTracer.py
919 919
                remain_count_past = remain_count
920 920

  
921 921
        # fourth step : body connected split run or split owner run sort
922
        fixed_merged_run_infos = [] # [[run_info1, run_info2, ... in order], [merged run items]]
923
        waiting_merged_run_infos = [] # [[run_info1, run_info2, ... in order], [merged run items]]
922
        fixed_merged_run_infos = [] # [[run_info1, run_info2, ... in order], [merged run with items]]
923
        waiting_merged_run_infos = [] # [[run_info1, run_info2, ... in order], [merged run with items]]
924 924
        
925 925
        # waiting run merge and sort
926 926
        consumed_count_past = 0
......
975 975
                    if index1 == index2:
976 976
                        continue
977 977
                    waiting_merged_run_info2 = waiting_merged_run_infos[index2]
978
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info1[1], waiting_merged_run_info2[1])
978
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info1[1], waiting_merged_run_info2[1], sort_connect_info=False)
979 979
                    if result:
980 980
                        if header:
981 981
                            if reverse:
......
1001 1001
                break
1002 1002

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

  
1013
                result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_run_infos[index1], fixed_run_infos[index2])
1012
                result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_run_infos[index1], fixed_run_infos[index2], sort=False)
1014 1013
                if result:
1015 1014
                    fixed_run_infos[index1].consumed = True
1016 1015
                    fixed_run_infos[index2].consumed = True
1017 1016
                    consumed_count_past += 2
1018 1017
                    if header:
1019
                        waiting_merged_run_infos.append([[fixed_run_infos[index2], fixed_run_infos[index1]], merged_run_info])
1018
                        fixed_merged_run_infos.append([[fixed_run_infos[index2], fixed_run_infos[index1]], merged_run_info])
1020 1019
                    else:
1021
                        waiting_merged_run_infos.append([[fixed_run_infos[index1], fixed_run_infos[index2]], merged_run_info])
1020
                        fixed_merged_run_infos.append([[fixed_run_infos[index1], fixed_run_infos[index2]], merged_run_info])
1022 1021
                    break
1023 1022
        
1024 1023
        while True:
......
1028 1027
                    consumed_count += 1
1029 1028
                    continue
1030 1029

  
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])
1030
                for fixed_merged_run_info in fixed_merged_run_infos:
1031
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_merged_run_info[1], fixed_run_infos[index], sort=False)
1033 1032
                    if result:
1034 1033
                        fixed_run_infos[index].consumed = True
1035 1034
                        consumed_count += 1
1036 1035
                        if header:
1037
                            waiting_merged_run_info[0].insert(0, fixed_run_infos[index])
1038
                            waiting_merged_run_info[1] = merged_run_info
1036
                            fixed_merged_run_info[0].insert(0, fixed_run_infos[index])
1037
                            fixed_merged_run_info[1] = merged_run_info
1039 1038
                        else:
1040
                            waiting_merged_run_info[0].append(fixed_run_infos[index])
1041
                            waiting_merged_run_info[1] = merged_run_info
1039
                            fixed_merged_run_info[0].append(fixed_run_infos[index])
1040
                            fixed_merged_run_info[1] = merged_run_info
1042 1041
                        break
1043 1042

  
1044 1043
            if consumed_count_past == consumed_count:
......
1048 1047

  
1049 1048
        while True:
1050 1049
            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)):
1050
            for index1 in range(len(fixed_merged_run_infos)):
1051
                fixed_merged_run_info1 = fixed_merged_run_infos[index1]
1052
                for index2 in range(len(fixed_merged_run_infos)):
1054 1053
                    if index1 == index2:
1055 1054
                        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])
1055
                    fixed_merged_run_info2 = fixed_merged_run_infos[index2]
1056
                    result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_merged_run_info1[1], fixed_merged_run_info2[1], sort=False)
1058 1057
                    if result:
1059 1058
                        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
1059
                            fixed_merged_run_info1[0] = fixed_merged_run_info2[0]
1060
                            fixed_merged_run_info1[1] = merged_run_info
1067 1061
                        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
1062
                            fixed_merged_run_info1[0].extend(fixed_merged_run_info2[0])
1063
                            fixed_merged_run_info1[1] = merged_run_info
1074 1064
                        merged = True
1075 1065
                        break
1076 1066
                if merged:
1077
                    waiting_merged_run_infos.pop(index2)
1067
                    fixed_merged_run_infos.pop(index2)
1078 1068
                    break
1079 1069
            if not merged:
1080 1070
                break
1081
        '''
1071

  
1072
        for fixed_run_info in fixed_run_infos:
1073
            if fixed_run_info.consumed:
1074
                continue
1075
            else:
1076
                fixed_merged_run_infos.append([[fixed_run_info], fixed_run_info.run])
1077

  
1078
        # sort merged waiting runs by using merged fixed runs
1079
        remain_count_past = len(waiting_merged_run_infos)
1080
        while True:
1081
            remain_count = 0
1082
            for run_index in reversed(range(len(waiting_merged_run_infos))):
1083
                waiting_run_info = waiting_merged_run_infos[run_index][0]
1084
                waiting_merged_run = waiting_merged_run_infos[run_index][1].run
1085

  
1086
                find = False
1087
                for fixed_merged_run_info in fixed_merged_run_infos:
1088
                    fixed_merged_run = fixed_merged_run_info[1].run
1089
                    if len(waiting_merged_run.items) > 1 and len(fixed_merged_run.items) > 1 and type(waiting_merged_run.items[0]) is QEngineeringLineItem and type(waiting_merged_run.items[-1]) is QEngineeringLineItem:
1090
                        if waiting_merged_run.items[0].connectors[0].connectedItem in fixed_merged_run.items and waiting_merged_run.items[-1].connectors[1].connectedItem in fixed_merged_run.items:
1091
                            if fixed_merged_run.items.index(waiting_merged_run.items[0].connectors[0].connectedItem) > fixed_merged_run.items.index(waiting_merged_run.items[-1].connectors[1].connectedItem):
1092
                                for waiting_run_info in waiting_merged_run_infos[run_index][0]:
1093
                                    waiting_run_info.reverse()
1094
                                waiting_merged_run_infos[run_index][0].reverse()
1095
                                reverse_order = []
1096
                                for index in reversed(range(len(waiting_merged_run_infos[run_index][1].run.items))):
1097
                                    reverse_order.append(waiting_merged_run_infos[run_index][1].run.items[index])
1098
                                waiting_merged_run_infos[run_index][1].run.items = reverse_order
1099
                                fixed_merged_run_infos.append(waiting_merged_run_infos[run_index])
1100
                                waiting_merged_run_infos.pop(run_index)
1101
                                find = True
1102
                                break
1103
                            else:
1104
                                fixed_merged_run_infos.append(waiting_merged_run_infos[run_index])
1105
                                waiting_merged_run_infos.pop(run_index)
1106
                                find = True
1107
                                break                        
1108
                        
1109
                if not find:
1110
                    remain_count += 1
1111

  
1112
            if remain_count_past == remain_count:
1113
                break
1114
            else:
1115
                remain_count_past = remain_count
1082 1116

  
1083 1117
    except Exception as ex:
1084 1118
        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, sort=True):
39
    def merge_and_sort_if_possible(run_info1, run_info2, sort=True, sort_connect_info=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 42
        """ if sort is False, do not modify and sort just merge """
43
        """ if sort_connect_info is False just sort item order not connection info and flow """
43 44

  
44 45
        connected = False
45 46
        merged_items = []
......
70 71
            connected = True
71 72
            header = False
72 73
            reverse = True
73
            run_info2.reverse()
74
            if sort_connect_info:
75
                run_info2.reverse()
76
            else:
77
                reverse_order = []
78
                for index in reversed(range(len(run_info2.run.items))):
79
                    reverse_order.append(run_info2.run.items[index])
80
                run_info2.run.items = reverse_order
74 81
            merged_items = run_info1.run.items + run_info2.run.items
75 82
        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 83
                    run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \
......
95 102
            connected = True
96 103
            header = True
97 104
            reverse = True
98
            run_info2.reverse()
105
            if sort_connect_info:
106
                run_info2.reverse()
107
            else:
108
                reverse_order = []
109
                for index in reversed(range(len(run_info2.run.items))):
110
                    reverse_order.append(run_info2.run.items[index])
111
                run_info2.run.items = reverse_order
99 112
            merged_items = run_info2.run.items + run_info1.run.items
100 113

  
101 114
        if connected:

내보내기 Unified diff

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