autopep8
This commit is contained in:
		
							parent
							
								
									73ce323271
								
							
						
					
					
						commit
						ac1b0cfd31
					
				
					 2 changed files with 106 additions and 100 deletions
				
			
		
							
								
								
									
										167
									
								
								danmaku2ass.py
									
										
									
									
									
								
							
							
						
						
									
										167
									
								
								danmaku2ass.py
									
										
									
									
									
								
							|  | @ -137,12 +137,12 @@ def ReadCommentsNiconico(f, fontsize): | ||||||
|                 elif mailstyle == 'shita': |                 elif mailstyle == 'shita': | ||||||
|                     pos = 2 |                     pos = 2 | ||||||
|                 elif mailstyle == 'big': |                 elif mailstyle == 'big': | ||||||
|                     size = fontsize*1.44 |                     size = fontsize * 1.44 | ||||||
|                 elif mailstyle == 'small': |                 elif mailstyle == 'small': | ||||||
|                     size = fontsize*0.64 |                     size = fontsize * 0.64 | ||||||
|                 elif mailstyle in NiconicoColorMap: |                 elif mailstyle in NiconicoColorMap: | ||||||
|                     color = NiconicoColorMap[mailstyle] |                     color = NiconicoColorMap[mailstyle] | ||||||
|             yield (max(int(comment.getAttribute('vpos')), 0)*0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n')+1)*size, CalculateLength(c)*size) |             yield (max(int(comment.getAttribute('vpos')), 0) * 0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n') + 1) * size, CalculateLength(c) * size) | ||||||
|         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): |         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): | ||||||
|             logging.warning(_('Invalid comment: %s') % comment.toxml()) |             logging.warning(_('Invalid comment: %s') % comment.toxml()) | ||||||
|             continue |             continue | ||||||
|  | @ -159,10 +159,10 @@ def ReadCommentsAcfun(f, fontsize): | ||||||
|             p = str(comment['c']).split(',') |             p = str(comment['c']).split(',') | ||||||
|             assert len(p) >= 6 |             assert len(p) >= 6 | ||||||
|             assert p[2] in ('1', '2', '4', '5', '7') |             assert p[2] in ('1', '2', '4', '5', '7') | ||||||
|             size = int(p[3])*fontsize/25.0 |             size = int(p[3]) * fontsize / 25.0 | ||||||
|             if p[2] != '7': |             if p[2] != '7': | ||||||
|                 c = str(comment['m']).replace('\\r', '\n').replace('\r', '\n') |                 c = str(comment['m']).replace('\\r', '\n').replace('\r', '\n') | ||||||
|                 yield (float(p[0]), int(p[5]), i, c, {'1': 0, '2': 0, '4': 2, '5': 1}[p[2]], int(p[1]), size, (c.count('\n')+1)*size, CalculateLength(c)*size) |                 yield (float(p[0]), int(p[5]), i, c, {'1': 0, '2': 0, '4': 2, '5': 1}[p[2]], int(p[1]), size, (c.count('\n') + 1) * size, CalculateLength(c) * size) | ||||||
|             else: |             else: | ||||||
|                 c = dict(json.loads(comment['m'])) |                 c = dict(json.loads(comment['m'])) | ||||||
|                 yield (float(p[0]), int(p[5]), i, c, 'acfunpos', int(p[1]), size, 0, 0) |                 yield (float(p[0]), int(p[5]), i, c, 'acfunpos', int(p[1]), size, 0, 0) | ||||||
|  | @ -182,8 +182,8 @@ def ReadCommentsBilibili(f, fontsize): | ||||||
|             if comment.childNodes.length > 0: |             if comment.childNodes.length > 0: | ||||||
|                 if p[1] in ('1', '4', '5', '6'): |                 if p[1] in ('1', '4', '5', '6'): | ||||||
|                     c = str(comment.childNodes[0].wholeText).replace('/n', '\n') |                     c = str(comment.childNodes[0].wholeText).replace('/n', '\n') | ||||||
|                     size = int(p[2])*fontsize/25.0 |                     size = int(p[2]) * fontsize / 25.0 | ||||||
|                     yield (float(p[0]), int(p[4]), i, c, {'1': 0, '4': 2, '5': 1, '6': 3}[p[1]], int(p[3]), size, (c.count('\n')+1)*size, CalculateLength(c)*size) |                     yield (float(p[0]), int(p[4]), i, c, {'1': 0, '4': 2, '5': 1, '6': 3}[p[1]], int(p[3]), size, (c.count('\n') + 1) * size, CalculateLength(c) * size) | ||||||
|                 elif p[1] == '7':  # positioned comment |                 elif p[1] == '7':  # positioned comment | ||||||
|                     c = str(comment.childNodes[0].wholeText) |                     c = str(comment.childNodes[0].wholeText) | ||||||
|                     yield (float(p[0]), int(p[4]), i, c, 'bilipos', int(p[3]), int(p[2]), 0, 0) |                     yield (float(p[0]), int(p[4]), i, c, 'bilipos', int(p[3]), int(p[2]), 0, 0) | ||||||
|  | @ -201,8 +201,8 @@ def ReadCommentsTudou(f, fontsize): | ||||||
|             assert comment['pos'] in (3, 4, 6) |             assert comment['pos'] in (3, 4, 6) | ||||||
|             c = str(comment['data']) |             c = str(comment['data']) | ||||||
|             assert comment['size'] in (0, 1, 2) |             assert comment['size'] in (0, 1, 2) | ||||||
|             size = {0: 0.64, 1: 1, 2: 1.44}[comment['size']]*fontsize |             size = {0: 0.64, 1: 1, 2: 1.44}[comment['size']] * fontsize | ||||||
|             yield (int(comment['replay_time']*0.001), int(comment['commit_time']), i, c, {3: 0, 4: 2, 6: 1}[comment['pos']], int(comment['color']), size, (c.count('\n')+1)*size, CalculateLength(c)*size) |             yield (int(comment['replay_time'] * 0.001), int(comment['commit_time']), i, c, {3: 0, 4: 2, 6: 1}[comment['pos']], int(comment['color']), size, (c.count('\n') + 1) * size, CalculateLength(c) * size) | ||||||
|         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): |         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): | ||||||
|             logging.warning(_('Invalid comment: %r') % comment) |             logging.warning(_('Invalid comment: %r') % comment) | ||||||
|             continue |             continue | ||||||
|  | @ -237,8 +237,8 @@ def ReadCommentsMioMio(f, fontsize): | ||||||
|             message = comment.getElementsByTagName('message')[0] |             message = comment.getElementsByTagName('message')[0] | ||||||
|             c = str(message.childNodes[0].wholeText) |             c = str(message.childNodes[0].wholeText) | ||||||
|             pos = 0 |             pos = 0 | ||||||
|             size = int(message.getAttribute('fontsize'))*fontsize/25.0 |             size = int(message.getAttribute('fontsize')) * fontsize / 25.0 | ||||||
|             yield (float(comment.getElementsByTagName('playTime')[0].childNodes[0].wholeText), int(calendar.timegm(time.strptime(comment.getElementsByTagName('times')[0].childNodes[0].wholeText, '%Y-%m-%d %H:%M:%S')))-28800, i, c, {'1': 0, '4': 2, '5': 1}[message.getAttribute('mode')], int(message.getAttribute('color')), size, (c.count('\n')+1)*size, CalculateLength(c)*size) |             yield (float(comment.getElementsByTagName('playTime')[0].childNodes[0].wholeText), int(calendar.timegm(time.strptime(comment.getElementsByTagName('times')[0].childNodes[0].wholeText, '%Y-%m-%d %H:%M:%S'))) - 28800, i, c, {'1': 0, '4': 2, '5': 1}[message.getAttribute('mode')], int(message.getAttribute('color')), size, (c.count('\n') + 1) * size, CalculateLength(c) * size) | ||||||
|         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): |         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): | ||||||
|             logging.warning(_('Invalid comment: %s') % comment.toxml()) |             logging.warning(_('Invalid comment: %s') % comment.toxml()) | ||||||
|             continue |             continue | ||||||
|  | @ -248,20 +248,20 @@ CommentFormatMap = {'Niconico': ReadCommentsNiconico, 'Acfun': ReadCommentsAcfun | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def WriteCommentBilibiliPositioned(f, c, width, height, styleid): | def WriteCommentBilibiliPositioned(f, c, width, height, styleid): | ||||||
|     #BiliPlayerSize = (512, 384)  # Bilibili player version 2010 |     # BiliPlayerSize = (512, 384)  # Bilibili player version 2010 | ||||||
|     #BiliPlayerSize = (540, 384)  # Bilibili player version 2012 |     # BiliPlayerSize = (540, 384)  # Bilibili player version 2012 | ||||||
|     BiliPlayerSize = (672, 438)  # Bilibili player version 2014 |     BiliPlayerSize = (672, 438)  # Bilibili player version 2014 | ||||||
|     ZoomFactor = GetZoomFactor(BiliPlayerSize, (width, height)) |     ZoomFactor = GetZoomFactor(BiliPlayerSize, (width, height)) | ||||||
| 
 | 
 | ||||||
|     def GetPosition(InputPos, isHeight): |     def GetPosition(InputPos, isHeight): | ||||||
|         isHeight = int(isHeight)  # True -> 1 |         isHeight = int(isHeight)  # True -> 1 | ||||||
|         if isinstance(InputPos, int): |         if isinstance(InputPos, int): | ||||||
|             return ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1] |             return ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1] | ||||||
|         elif isinstance(InputPos, float): |         elif isinstance(InputPos, float): | ||||||
|             if InputPos > 1: |             if InputPos > 1: | ||||||
|                 return ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1] |                 return ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1] | ||||||
|             else: |             else: | ||||||
|                 return BiliPlayerSize[isHeight]*ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1] |                 return BiliPlayerSize[isHeight] * ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1] | ||||||
|         else: |         else: | ||||||
|             try: |             try: | ||||||
|                 InputPos = int(InputPos) |                 InputPos = int(InputPos) | ||||||
|  | @ -283,30 +283,30 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid): | ||||||
|         alpha = safe_list(str(comment_args.get(2, '1')).split('-')) |         alpha = safe_list(str(comment_args.get(2, '1')).split('-')) | ||||||
|         from_alpha = float(alpha.get(0, 1)) |         from_alpha = float(alpha.get(0, 1)) | ||||||
|         to_alpha = float(alpha.get(1, from_alpha)) |         to_alpha = float(alpha.get(1, from_alpha)) | ||||||
|         from_alpha = 255-round(from_alpha*255) |         from_alpha = 255 - round(from_alpha * 255) | ||||||
|         to_alpha = 255-round(to_alpha*255) |         to_alpha = 255 - round(to_alpha * 255) | ||||||
|         rotate_z = int(comment_args.get(5, 0)) |         rotate_z = int(comment_args.get(5, 0)) | ||||||
|         rotate_y = int(comment_args.get(6, 0)) |         rotate_y = int(comment_args.get(6, 0)) | ||||||
|         lifetime = float(comment_args.get(3, 4500)) |         lifetime = float(comment_args.get(3, 4500)) | ||||||
|         duration = int(comment_args.get(9, lifetime*1000)) |         duration = int(comment_args.get(9, lifetime * 1000)) | ||||||
|         delay = int(comment_args.get(10, 0)) |         delay = int(comment_args.get(10, 0)) | ||||||
|         fontface = comment_args.get(12) |         fontface = comment_args.get(12) | ||||||
|         isborder = comment_args.get(11, 'true') |         isborder = comment_args.get(11, 'true') | ||||||
|         from_rotarg = ConvertFlashRotation(rotate_y, rotate_z, from_x, from_y, width, height) |         from_rotarg = ConvertFlashRotation(rotate_y, rotate_z, from_x, from_y, width, height) | ||||||
|         to_rotarg = ConvertFlashRotation(rotate_y, rotate_z, to_x, to_y, width, height) |         to_rotarg = ConvertFlashRotation(rotate_y, rotate_z, to_x, to_y, width, height) | ||||||
|         styles = ['\\org(%d, %d)' % (width/2, height/2)] |         styles = ['\\org(%d, %d)' % (width / 2, height / 2)] | ||||||
|         if from_rotarg[0:2] == to_rotarg[0:2]: |         if from_rotarg[0:2] == to_rotarg[0:2]: | ||||||
|             styles.append('\\pos(%.0f, %.0f)' % (from_rotarg[0:2])) |             styles.append('\\pos(%.0f, %.0f)' % (from_rotarg[0:2])) | ||||||
|         else: |         else: | ||||||
|             styles.append('\\move(%.0f, %.0f, %.0f, %.0f, %.0f, %.0f)' % (from_rotarg[0:2]+to_rotarg[0:2]+(delay, delay+duration))) |             styles.append('\\move(%.0f, %.0f, %.0f, %.0f, %.0f, %.0f)' % (from_rotarg[0:2] + to_rotarg[0:2] + (delay, delay + duration))) | ||||||
|         styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (from_rotarg[2:7])) |         styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (from_rotarg[2:7])) | ||||||
|         if (from_x, from_y) != (to_x, to_y): |         if (from_x, from_y) != (to_x, to_y): | ||||||
|             styles.append('\\t(%d, %d, ' % (delay, delay+duration)) |             styles.append('\\t(%d, %d, ' % (delay, delay + duration)) | ||||||
|             styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (to_rotarg[2:7])) |             styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (to_rotarg[2:7])) | ||||||
|             styles.append(')') |             styles.append(')') | ||||||
|         if fontface: |         if fontface: | ||||||
|             styles.append('\\fn%s' % ASSEscape(fontface)) |             styles.append('\\fn%s' % ASSEscape(fontface)) | ||||||
|         styles.append('\\fs%.0f' % (c[6]*ZoomFactor[0])) |         styles.append('\\fs%.0f' % (c[6] * ZoomFactor[0])) | ||||||
|         if c[5] != 0xffffff: |         if c[5] != 0xffffff: | ||||||
|             styles.append('\\c&H%s&' % ConvertColor(c[5])) |             styles.append('\\c&H%s&' % ConvertColor(c[5])) | ||||||
|             if c[5] == 0x000000: |             if c[5] == 0x000000: | ||||||
|  | @ -314,14 +314,14 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid): | ||||||
|         if from_alpha == to_alpha: |         if from_alpha == to_alpha: | ||||||
|             styles.append('\\alpha&H%02X' % from_alpha) |             styles.append('\\alpha&H%02X' % from_alpha) | ||||||
|         elif (from_alpha, to_alpha) == (255, 0): |         elif (from_alpha, to_alpha) == (255, 0): | ||||||
|             styles.append('\\fad(%.0f,0)' % (lifetime*1000)) |             styles.append('\\fad(%.0f,0)' % (lifetime * 1000)) | ||||||
|         elif (from_alpha, to_alpha) == (0, 255): |         elif (from_alpha, to_alpha) == (0, 255): | ||||||
|             styles.append('\\fad(0, %.0f)' % (lifetime*1000)) |             styles.append('\\fad(0, %.0f)' % (lifetime * 1000)) | ||||||
|         else: |         else: | ||||||
|             styles.append('\\fade(%(from_alpha)d, %(to_alpha)d, %(to_alpha)d, 0, %(end_time).0f, %(end_time).0f, %(end_time).0f)' % {'from_alpha': from_alpha, 'to_alpha': to_alpha, 'end_time': lifetime*1000}) |             styles.append('\\fade(%(from_alpha)d, %(to_alpha)d, %(to_alpha)d, 0, %(end_time).0f, %(end_time).0f, %(end_time).0f)' % {'from_alpha': from_alpha, 'to_alpha': to_alpha, 'end_time': lifetime * 1000}) | ||||||
|         if isborder == 'false': |         if isborder == 'false': | ||||||
|             styles.append('\\bord0') |             styles.append('\\bord0') | ||||||
|         f.write('Dialogue: -1,%(start)s,%(end)s,%(styleid)s,,0,0,0,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+lifetime), 'styles': ''.join(styles), 'text': text, 'styleid': styleid}) |         f.write('Dialogue: -1,%(start)s,%(end)s,%(styleid)s,,0,0,0,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0] + lifetime), 'styles': ''.join(styles), 'text': text, 'styleid': styleid}) | ||||||
|     except (IndexError, ValueError) as e: |     except (IndexError, ValueError) as e: | ||||||
|         try: |         try: | ||||||
|             logging.warning(_('Invalid comment: %r') % c[3]) |             logging.warning(_('Invalid comment: %r') % c[3]) | ||||||
|  | @ -335,7 +335,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
| 
 | 
 | ||||||
|     def GetPosition(InputPos, isHeight): |     def GetPosition(InputPos, isHeight): | ||||||
|         isHeight = int(isHeight)  # True -> 1 |         isHeight = int(isHeight)  # True -> 1 | ||||||
|         return AcfunPlayerSize[isHeight]*ZoomFactor[0]*InputPos*0.001+ZoomFactor[isHeight+1] |         return AcfunPlayerSize[isHeight] * ZoomFactor[0] * InputPos * 0.001 + ZoomFactor[isHeight + 1] | ||||||
| 
 | 
 | ||||||
|     def GetTransformStyles(x=None, y=None, scale_x=None, scale_y=None, rotate_z=None, rotate_y=None, color=None, alpha=None): |     def GetTransformStyles(x=None, y=None, scale_x=None, scale_y=None, rotate_z=None, rotate_y=None, color=None, alpha=None): | ||||||
|         styles = [] |         styles = [] | ||||||
|  | @ -349,18 +349,18 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
|                 scale_x = 1 |                 scale_x = 1 | ||||||
|             if scale_y is None: |             if scale_y is None: | ||||||
|                 scale_y = 1 |                 scale_y = 1 | ||||||
|             styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (rotarg[2:5]+(rotarg[5]*scale_x, rotarg[6]*scale_y))) |             styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (rotarg[2:5] + (rotarg[5] * scale_x, rotarg[6] * scale_y))) | ||||||
|         else: |         else: | ||||||
|             if scale_x is not None: |             if scale_x is not None: | ||||||
|                 styles.append('\\fscx%.0f' % (scale_x*100)) |                 styles.append('\\fscx%.0f' % (scale_x * 100)) | ||||||
|             if scale_y is not None: |             if scale_y is not None: | ||||||
|                 styles.append('\\fscy%.0f' % (scale_y*100)) |                 styles.append('\\fscy%.0f' % (scale_y * 100)) | ||||||
|         if color is not None: |         if color is not None: | ||||||
|             styles.append('\\c&H%s&' % ConvertColor(color)) |             styles.append('\\c&H%s&' % ConvertColor(color)) | ||||||
|             if color == 0x000000: |             if color == 0x000000: | ||||||
|                 styles.append('\\3c&HFFFFFF&') |                 styles.append('\\3c&HFFFFFF&') | ||||||
|         if alpha is not None: |         if alpha is not None: | ||||||
|             alpha = 255-round(alpha*255) |             alpha = 255 - round(alpha * 255) | ||||||
|             styles.append('\\alpha&H%02X' % alpha) |             styles.append('\\alpha&H%02X' % alpha) | ||||||
|         return out_x, out_y, styles |         return out_x, out_y, styles | ||||||
| 
 | 
 | ||||||
|  | @ -371,7 +371,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
|     try: |     try: | ||||||
|         comment_args = c[3] |         comment_args = c[3] | ||||||
|         text = ASSEscape(str(comment_args['n']).replace('\r', '\n')) |         text = ASSEscape(str(comment_args['n']).replace('\r', '\n')) | ||||||
|         common_styles = ['\org(%d, %d)' % (width/2, height/2)] |         common_styles = ['\org(%d, %d)' % (width / 2, height / 2)] | ||||||
|         anchor = {0: 7, 1: 8, 2: 9, 3: 4, 4: 5, 5: 6, 6: 1, 7: 2, 8: 3}.get(comment_args.get('c', 0), 7) |         anchor = {0: 7, 1: 8, 2: 9, 3: 4, 4: 5, 5: 6, 6: 1, 7: 2, 8: 3}.get(comment_args.get('c', 0), 7) | ||||||
|         if anchor != 7: |         if anchor != 7: | ||||||
|             common_styles.append('\\an%s' % anchor) |             common_styles.append('\\an%s' % anchor) | ||||||
|  | @ -384,7 +384,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
|             fontbold = bool(font.get('b')) |             fontbold = bool(font.get('b')) | ||||||
|             if fontbold: |             if fontbold: | ||||||
|                 common_styles.append('\\b1') |                 common_styles.append('\\b1') | ||||||
|         common_styles.append('\\fs%.0f' % (c[6]*ZoomFactor[0])) |         common_styles.append('\\fs%.0f' % (c[6] * ZoomFactor[0])) | ||||||
|         isborder = bool(comment_args.get('b', True)) |         isborder = bool(comment_args.get('b', True)) | ||||||
|         if not isborder: |         if not isborder: | ||||||
|             common_styles.append('\\bord0') |             common_styles.append('\\bord0') | ||||||
|  | @ -401,7 +401,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
|         action_time = float(comment_args.get('l', 3.0)) |         action_time = float(comment_args.get('l', 3.0)) | ||||||
|         actions = list(comment_args.get('z', [])) |         actions = list(comment_args.get('z', [])) | ||||||
|         to_out_x, to_out_y, transform_styles = GetTransformStyles(to_x, to_y, to_scale_x, to_scale_y, to_rotate_z, to_rotate_y, to_color, to_alpha) |         to_out_x, to_out_y, transform_styles = GetTransformStyles(to_x, to_y, to_scale_x, to_scale_y, to_rotate_z, to_rotate_y, to_color, to_alpha) | ||||||
|         FlushCommentLine(f, text, common_styles+['\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)]+transform_styles, c[0]+from_time, c[0]+from_time+action_time, styleid) |         FlushCommentLine(f, text, common_styles + ['\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)] + transform_styles, c[0] + from_time, c[0] + from_time + action_time, styleid) | ||||||
|         action_styles = transform_styles |         action_styles = transform_styles | ||||||
|         for action in actions: |         for action in actions: | ||||||
|             action = dict(action) |             action = dict(action) | ||||||
|  | @ -434,11 +434,11 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid): | ||||||
|                 pos_style = '\\pos(%.0f, %.0f)' % (to_out_x, to_out_y) |                 pos_style = '\\pos(%.0f, %.0f)' % (to_out_x, to_out_y) | ||||||
|             else: |             else: | ||||||
|                 pos_style = '\\move(%.0f, %.0f, %.0f, %.0f)' % (from_out_x, from_out_y, to_out_x, to_out_y) |                 pos_style = '\\move(%.0f, %.0f, %.0f, %.0f)' % (from_out_x, from_out_y, to_out_x, to_out_y) | ||||||
|             styles = common_styles+transform_styles |             styles = common_styles + transform_styles | ||||||
|             styles.append(pos_style) |             styles.append(pos_style) | ||||||
|             if action_styles: |             if action_styles: | ||||||
|                 styles.append('\\t(%s)' % (''.join(action_styles))) |                 styles.append('\\t(%s)' % (''.join(action_styles))) | ||||||
|             FlushCommentLine(f, text, styles, c[0]+from_time, c[0]+from_time+action_time, styleid) |             FlushCommentLine(f, text, styles, c[0] + from_time, c[0] + from_time + action_time, styleid) | ||||||
|     except (IndexError, ValueError) as e: |     except (IndexError, ValueError) as e: | ||||||
|         logging.warning(_('Invalid comment: %r') % c[3]) |         logging.warning(_('Invalid comment: %r') % c[3]) | ||||||
| 
 | 
 | ||||||
|  | @ -453,16 +453,16 @@ def GetZoomFactor(SourceSize, TargetSize): | ||||||
|         pass |         pass | ||||||
|     GetZoomFactor.Cached_Size = (SourceSize, TargetSize) |     GetZoomFactor.Cached_Size = (SourceSize, TargetSize) | ||||||
|     try: |     try: | ||||||
|         SourceAspect = SourceSize[0]/SourceSize[1] |         SourceAspect = SourceSize[0] / SourceSize[1] | ||||||
|         TargetAspect = TargetSize[0]/TargetSize[1] |         TargetAspect = TargetSize[0] / TargetSize[1] | ||||||
|         if TargetAspect < SourceAspect:  # narrower |         if TargetAspect < SourceAspect:  # narrower | ||||||
|             ScaleFactor = TargetSize[0]/SourceSize[0] |             ScaleFactor = TargetSize[0] / SourceSize[0] | ||||||
|             GetZoomFactor.Cached_Result = (ScaleFactor, 0, (TargetSize[1]-TargetSize[0]/SourceAspect)/2) |             GetZoomFactor.Cached_Result = (ScaleFactor, 0, (TargetSize[1] - TargetSize[0] / SourceAspect) / 2) | ||||||
|         elif TargetAspect > SourceAspect:  # wider |         elif TargetAspect > SourceAspect:  # wider | ||||||
|             ScaleFactor = TargetSize[1]/SourceSize[1] |             ScaleFactor = TargetSize[1] / SourceSize[1] | ||||||
|             GetZoomFactor.Cached_Result = (ScaleFactor, (TargetSize[0]-TargetSize[1]*SourceAspect)/2, 0) |             GetZoomFactor.Cached_Result = (ScaleFactor, (TargetSize[0] - TargetSize[1] * SourceAspect) / 2, 0) | ||||||
|         else: |         else: | ||||||
|             GetZoomFactor.Cached_Result = (TargetSize[0]/SourceSize[0], 0, 0) |             GetZoomFactor.Cached_Result = (TargetSize[0] / SourceSize[0], 0, 0) | ||||||
|         return GetZoomFactor.Cached_Result |         return GetZoomFactor.Cached_Result | ||||||
|     except ZeroDivisionError: |     except ZeroDivisionError: | ||||||
|         GetZoomFactor.Cached_Result = (1, 0, 0) |         GetZoomFactor.Cached_Result = (1, 0, 0) | ||||||
|  | @ -476,7 +476,7 @@ def GetZoomFactor(SourceSize, TargetSize): | ||||||
| # Result: (transX, transY, rotX, rotY, rotZ, scaleX, scaleY) | # Result: (transX, transY, rotX, rotY, rotZ, scaleX, scaleY) | ||||||
| def ConvertFlashRotation(rotY, rotZ, X, Y, width, height): | def ConvertFlashRotation(rotY, rotZ, X, Y, width, height): | ||||||
|     def WrapAngle(deg): |     def WrapAngle(deg): | ||||||
|         return 180-((180-deg) % 360) |         return 180 - ((180 - deg) % 360) | ||||||
|     rotY = WrapAngle(rotY) |     rotY = WrapAngle(rotY) | ||||||
|     rotZ = WrapAngle(rotZ) |     rotZ = WrapAngle(rotZ) | ||||||
|     if rotY in (90, -90): |     if rotY in (90, -90): | ||||||
|  | @ -485,37 +485,37 @@ def ConvertFlashRotation(rotY, rotZ, X, Y, width, height): | ||||||
|         outX = 0 |         outX = 0 | ||||||
|         outY = -rotY  # Positive value means clockwise in Flash |         outY = -rotY  # Positive value means clockwise in Flash | ||||||
|         outZ = -rotZ |         outZ = -rotZ | ||||||
|         rotY *= math.pi/180.0 |         rotY *= math.pi / 180.0 | ||||||
|         rotZ *= math.pi/180.0 |         rotZ *= math.pi / 180.0 | ||||||
|     else: |     else: | ||||||
|         rotY *= math.pi/180.0 |         rotY *= math.pi / 180.0 | ||||||
|         rotZ *= math.pi/180.0 |         rotZ *= math.pi / 180.0 | ||||||
|         outY = math.atan2(-math.sin(rotY)*math.cos(rotZ), math.cos(rotY))*180/math.pi |         outY = math.atan2(-math.sin(rotY) * math.cos(rotZ), math.cos(rotY)) * 180 / math.pi | ||||||
|         outZ = math.atan2(-math.cos(rotY)*math.sin(rotZ), math.cos(rotZ))*180/math.pi |         outZ = math.atan2(-math.cos(rotY) * math.sin(rotZ), math.cos(rotZ)) * 180 / math.pi | ||||||
|         outX = math.asin(math.sin(rotY)*math.sin(rotZ))*180/math.pi |         outX = math.asin(math.sin(rotY) * math.sin(rotZ)) * 180 / math.pi | ||||||
|     trX = (X*math.cos(rotZ)+Y*math.sin(rotZ))/math.cos(rotY)+(1-math.cos(rotZ)/math.cos(rotY))*width/2-math.sin(rotZ)/math.cos(rotY)*height/2 |     trX = (X * math.cos(rotZ) + Y * math.sin(rotZ)) / math.cos(rotY) + (1 - math.cos(rotZ) / math.cos(rotY)) * width / 2 - math.sin(rotZ) / math.cos(rotY) * height / 2 | ||||||
|     trY = Y*math.cos(rotZ)-X*math.sin(rotZ)+math.sin(rotZ)*width/2+(1-math.cos(rotZ))*height/2 |     trY = Y * math.cos(rotZ) - X * math.sin(rotZ) + math.sin(rotZ) * width / 2 + (1 - math.cos(rotZ)) * height / 2 | ||||||
|     trZ = (trX-width/2)*math.sin(rotY) |     trZ = (trX - width / 2) * math.sin(rotY) | ||||||
|     FOV = width*math.tan(2*math.pi/9.0)/2 |     FOV = width * math.tan(2 * math.pi / 9.0) / 2 | ||||||
|     try: |     try: | ||||||
|         scaleXY = FOV/(FOV+trZ) |         scaleXY = FOV / (FOV + trZ) | ||||||
|     except ZeroDivisionError: |     except ZeroDivisionError: | ||||||
|         logging.error('Rotation makes object behind the camera: trZ == %.0f' % trZ) |         logging.error('Rotation makes object behind the camera: trZ == %.0f' % trZ) | ||||||
|         scaleXY = 1 |         scaleXY = 1 | ||||||
|     trX = (trX-width/2)*scaleXY+width/2 |     trX = (trX - width / 2) * scaleXY + width / 2 | ||||||
|     trY = (trY-height/2)*scaleXY+height/2 |     trY = (trY - height / 2) * scaleXY + height / 2 | ||||||
|     if scaleXY < 0: |     if scaleXY < 0: | ||||||
|         scaleXY = -scaleXY |         scaleXY = -scaleXY | ||||||
|         outX += 180 |         outX += 180 | ||||||
|         outY += 180 |         outY += 180 | ||||||
|         logging.error('Rotation makes object behind the camera: trZ == %.0f < %.0f' % (trZ, FOV)) |         logging.error('Rotation makes object behind the camera: trZ == %.0f < %.0f' % (trZ, FOV)) | ||||||
|     return (trX, trY, WrapAngle(outX), WrapAngle(outY), WrapAngle(outZ), scaleXY*100, scaleXY*100) |     return (trX, trY, WrapAngle(outX), WrapAngle(outY), WrapAngle(outZ), scaleXY * 100, scaleXY * 100) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, duration_marquee, duration_still, filter_regex, reduced, progress_callback): | def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, duration_marquee, duration_still, filter_regex, reduced, progress_callback): | ||||||
|     styleid = 'Danmaku2ASS_%04x' % random.randint(0, 0xffff) |     styleid = 'Danmaku2ASS_%04x' % random.randint(0, 0xffff) | ||||||
|     WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid) |     WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid) | ||||||
|     rows = [[None]*(height-bottomReserved+1) for i in range(4)] |     rows = [[None] * (height - bottomReserved + 1) for i in range(4)] | ||||||
|     for idx, i in enumerate(comments): |     for idx, i in enumerate(comments): | ||||||
|         if progress_callback and idx % 1000 == 0: |         if progress_callback and idx % 1000 == 0: | ||||||
|             progress_callback(idx, len(comments)) |             progress_callback(idx, len(comments)) | ||||||
|  | @ -523,7 +523,7 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi | ||||||
|             if filter_regex and filter_regex.search(i[3]): |             if filter_regex and filter_regex.search(i[3]): | ||||||
|                 continue |                 continue | ||||||
|             row = 0 |             row = 0 | ||||||
|             rowmax = height-bottomReserved-i[7] |             rowmax = height - bottomReserved - i[7] | ||||||
|             while row <= rowmax: |             while row <= rowmax: | ||||||
|                 freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, duration_marquee, duration_still) |                 freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, duration_marquee, duration_still) | ||||||
|                 if freerows >= i[7]: |                 if freerows >= i[7]: | ||||||
|  | @ -549,26 +549,26 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi | ||||||
| 
 | 
 | ||||||
| def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee, duration_still): | def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee, duration_still): | ||||||
|     res = 0 |     res = 0 | ||||||
|     rowmax = height-bottomReserved |     rowmax = height - bottomReserved | ||||||
|     targetRow = None |     targetRow = None | ||||||
|     if c[4] in (1, 2): |     if c[4] in (1, 2): | ||||||
|         while row < rowmax and res < c[7]: |         while row < rowmax and res < c[7]: | ||||||
|             if targetRow != rows[c[4]][row]: |             if targetRow != rows[c[4]][row]: | ||||||
|                 targetRow = rows[c[4]][row] |                 targetRow = rows[c[4]][row] | ||||||
|                 if targetRow and targetRow[0]+duration_still > c[0]: |                 if targetRow and targetRow[0] + duration_still > c[0]: | ||||||
|                     break |                     break | ||||||
|             row += 1 |             row += 1 | ||||||
|             res += 1 |             res += 1 | ||||||
|     else: |     else: | ||||||
|         try: |         try: | ||||||
|             thresholdTime = c[0]-duration_marquee*(1-width/(c[8]+width)) |             thresholdTime = c[0] - duration_marquee * (1 - width / (c[8] + width)) | ||||||
|         except ZeroDivisionError: |         except ZeroDivisionError: | ||||||
|             thresholdTime = c[0]-duration_marquee |             thresholdTime = c[0] - duration_marquee | ||||||
|         while row < rowmax and res < c[7]: |         while row < rowmax and res < c[7]: | ||||||
|             if targetRow != rows[c[4]][row]: |             if targetRow != rows[c[4]][row]: | ||||||
|                 targetRow = rows[c[4]][row] |                 targetRow = rows[c[4]][row] | ||||||
|                 try: |                 try: | ||||||
|                     if targetRow and (targetRow[0] > thresholdTime or targetRow[0]+targetRow[8]*duration_marquee/(targetRow[8]+width) > c[0]): |                     if targetRow and (targetRow[0] > thresholdTime or targetRow[0] + targetRow[8] * duration_marquee / (targetRow[8] + width) > c[0]): | ||||||
|                         break |                         break | ||||||
|                 except ZeroDivisionError: |                 except ZeroDivisionError: | ||||||
|                     pass |                     pass | ||||||
|  | @ -579,7 +579,7 @@ def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee, | ||||||
| 
 | 
 | ||||||
| def FindAlternativeRow(rows, c, height, bottomReserved): | def FindAlternativeRow(rows, c, height, bottomReserved): | ||||||
|     res = 0 |     res = 0 | ||||||
|     for row in range(height-bottomReserved-math.ceil(c[7])): |     for row in range(height - bottomReserved - math.ceil(c[7])): | ||||||
|         if not rows[c[4]][row]: |         if not rows[c[4]][row]: | ||||||
|             return row |             return row | ||||||
|         elif rows[c[4]][row][0] < rows[c[4]][res][0]: |         elif rows[c[4]][row][0] < rows[c[4]][res][0]: | ||||||
|  | @ -589,7 +589,7 @@ def FindAlternativeRow(rows, c, height, bottomReserved): | ||||||
| 
 | 
 | ||||||
| def MarkCommentRow(rows, c, row): | def MarkCommentRow(rows, c, row): | ||||||
|     try: |     try: | ||||||
|         for i in range(row, row+math.ceil(c[7])): |         for i in range(row, row + math.ceil(c[7])): | ||||||
|             rows[c[4]][i] = c |             rows[c[4]][i] = c | ||||||
|     except IndexError: |     except IndexError: | ||||||
|         pass |         pass | ||||||
|  | @ -597,7 +597,7 @@ def MarkCommentRow(rows, c, row): | ||||||
| 
 | 
 | ||||||
| def WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid): | def WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid): | ||||||
|     f.write( |     f.write( | ||||||
| '''[Script Info] |         '''[Script Info] | ||||||
| ; Script generated by Danmaku2ASS | ; Script generated by Danmaku2ASS | ||||||
| ; https://github.com/m13253/danmaku2ass | ; https://github.com/m13253/danmaku2ass | ||||||
| Script Updated By: Danmaku2ASS (https://github.com/m13253/danmaku2ass) | Script Updated By: Danmaku2ASS (https://github.com/m13253/danmaku2ass) | ||||||
|  | @ -616,7 +616,7 @@ Style: %(styleid)s, %(fontface)s, %(fontsize).0f, &H%(alpha)02XFFFFFF, &H%(alpha | ||||||
| 
 | 
 | ||||||
| [Events] | [Events] | ||||||
| Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text | Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text | ||||||
| ''' % {'width': width, 'height': height, 'fontface': fontface, 'fontsize': fontsize, 'alpha': 255-round(alpha*255), 'outline': max(fontsize/25.0, 1), 'styleid': styleid} | ''' % {'width': width, 'height': height, 'fontface': fontface, 'fontsize': fontsize, 'alpha': 255 - round(alpha * 255), 'outline': max(fontsize / 25.0, 1), 'styleid': styleid} | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -624,10 +624,10 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, duration_ma | ||||||
|     text = ASSEscape(c[3]) |     text = ASSEscape(c[3]) | ||||||
|     styles = [] |     styles = [] | ||||||
|     if c[4] == 1: |     if c[4] == 1: | ||||||
|         styles.append('\\an8\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width/2, 'row': row}) |         styles.append('\\an8\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width / 2, 'row': row}) | ||||||
|         duration = duration_still |         duration = duration_still | ||||||
|     elif c[4] == 2: |     elif c[4] == 2: | ||||||
|         styles.append('\\an2\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width/2, 'row': ConvertType2(row, height, bottomReserved)}) |         styles.append('\\an2\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width / 2, 'row': ConvertType2(row, height, bottomReserved)}) | ||||||
|         duration = duration_still |         duration = duration_still | ||||||
|     elif c[4] == 3: |     elif c[4] == 3: | ||||||
|         styles.append('\\move(%(neglen)d, %(row)d, %(width)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])}) |         styles.append('\\move(%(neglen)d, %(row)d, %(width)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])}) | ||||||
|  | @ -635,13 +635,13 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, duration_ma | ||||||
|     else: |     else: | ||||||
|         styles.append('\\move(%(width)d, %(row)d, %(neglen)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])}) |         styles.append('\\move(%(width)d, %(row)d, %(neglen)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])}) | ||||||
|         duration = duration_marquee |         duration = duration_marquee | ||||||
|     if not (-1 < c[6]-fontsize < 1): |     if not (-1 < c[6] - fontsize < 1): | ||||||
|         styles.append('\\fs%.0f' % c[6]) |         styles.append('\\fs%.0f' % c[6]) | ||||||
|     if c[5] != 0xffffff: |     if c[5] != 0xffffff: | ||||||
|         styles.append('\\c&H%s&' % ConvertColor(c[5])) |         styles.append('\\c&H%s&' % ConvertColor(c[5])) | ||||||
|         if c[5] == 0x000000: |         if c[5] == 0x000000: | ||||||
|             styles.append('\\3c&HFFFFFF&') |             styles.append('\\3c&HFFFFFF&') | ||||||
|     f.write('Dialogue: 2,%(start)s,%(end)s,%(styleid)s,,0000,0000,0000,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+duration), 'styles': ''.join(styles), 'text': text, 'styleid': styleid}) |     f.write('Dialogue: 2,%(start)s,%(end)s,%(styleid)s,,0000,0000,0000,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0] + duration), 'styles': ''.join(styles), 'text': text, 'styleid': styleid}) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def ASSEscape(s): | def ASSEscape(s): | ||||||
|  | @ -651,9 +651,9 @@ def ASSEscape(s): | ||||||
|         if slen == len(sstrip): |         if slen == len(sstrip): | ||||||
|             return s |             return s | ||||||
|         else: |         else: | ||||||
|             llen = slen-len(s.lstrip(' ')) |             llen = slen - len(s.lstrip(' ')) | ||||||
|             rlen = slen-len(s.rstrip(' ')) |             rlen = slen - len(s.rstrip(' ')) | ||||||
|             return ''.join(('\u2007'*llen, sstrip, '\u2007'*rlen)) |             return ''.join(('\u2007' * llen, sstrip, '\u2007' * rlen)) | ||||||
|     return '\\N'.join((ReplaceLeadingSpace(i) or ' ' for i in str(s).replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').split('\n'))) |     return '\\N'.join((ReplaceLeadingSpace(i) or ' ' for i in str(s).replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').split('\n'))) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -662,7 +662,7 @@ def CalculateLength(s): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def ConvertTimestamp(timestamp): | def ConvertTimestamp(timestamp): | ||||||
|     timestamp = round(timestamp*100.0) |     timestamp = round(timestamp * 100.0) | ||||||
|     hour, minute = divmod(timestamp, 360000) |     hour, minute = divmod(timestamp, 360000) | ||||||
|     minute, second = divmod(minute, 6000) |     minute, second = divmod(minute, 6000) | ||||||
|     second, centsecond = divmod(second, 100) |     second, centsecond = divmod(second, 100) | ||||||
|  | @ -682,14 +682,14 @@ def ConvertColor(RGB, width=1280, height=576): | ||||||
|     else:  # VobSub always uses BT.601 colorspace, convert to BT.709 |     else:  # VobSub always uses BT.601 colorspace, convert to BT.709 | ||||||
|         ClipByte = lambda x: 255 if x > 255 else 0 if x < 0 else round(x) |         ClipByte = lambda x: 255 if x > 255 else 0 if x < 0 else round(x) | ||||||
|         return '%02X%02X%02X' % ( |         return '%02X%02X%02X' % ( | ||||||
|             ClipByte(R*0.00956384088080656+G*0.03217254540203729+B*0.95826361371715607), |             ClipByte(R * 0.00956384088080656 + G * 0.03217254540203729 + B * 0.95826361371715607), | ||||||
|             ClipByte(R*-0.10493933142075390+G*1.17231478191855154+B*-0.06737545049779757), |             ClipByte(R * -0.10493933142075390 + G * 1.17231478191855154 + B * -0.06737545049779757), | ||||||
|             ClipByte(R*0.91348912373987645+G*0.07858536372532510+B*0.00792551253479842) |             ClipByte(R * 0.91348912373987645 + G * 0.07858536372532510 + B * 0.00792551253479842) | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def ConvertType2(row, height, bottomReserved): | def ConvertType2(row, height, bottomReserved): | ||||||
|     return height-bottomReserved-row |     return height - bottomReserved - row | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def ConvertToFile(filename_or_file, *args, **kwargs): | def ConvertToFile(filename_or_file, *args, **kwargs): | ||||||
|  | @ -708,6 +708,7 @@ def FilterBadChars(f): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class safe_list(list): | class safe_list(list): | ||||||
|  | 
 | ||||||
|     def get(self, index, default=None): |     def get(self, index, default=None): | ||||||
|         try: |         try: | ||||||
|             return self[index] |             return self[index] | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ except (AttributeError, ImportError): | ||||||
| 
 | 
 | ||||||
| extcode = 0 | extcode = 0 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| def main(): | def main(): | ||||||
|     logging.basicConfig(level=logging.INFO) |     logging.basicConfig(level=logging.INFO) | ||||||
|     for Y in (120, 360): |     for Y in (120, 360): | ||||||
|  | @ -23,50 +24,54 @@ def main(): | ||||||
|                     logging.info('(%3d, %3d), %4d, %4d => %4d, %4d, %4d, %4d%%' % (X, Y, rotY, rotZ, outX, outY, outZ, scaleX)) |                     logging.info('(%3d, %3d), %4d, %4d => %4d, %4d, %4d, %4d%%' % (X, Y, rotY, rotZ, outX, outY, outZ, scaleX)) | ||||||
|                     CompareMatrix(rotY, rotZ, outX, outY, outZ) |                     CompareMatrix(rotY, rotZ, outX, outY, outZ) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| def CompareMatrix(rotY, rotZ, outX, outY, outZ): | def CompareMatrix(rotY, rotZ, outX, outY, outZ): | ||||||
|     def ApproxEqual(a, b, e=0.015): |     def ApproxEqual(a, b, e=0.015): | ||||||
|         assert e >= 0 |         assert e >= 0 | ||||||
|         a_b = a-b |         a_b = a - b | ||||||
|         if -e < a_b < e: |         if -e < a_b < e: | ||||||
|             return 0 |             return 0 | ||||||
|         else: |         else: | ||||||
|             return a_b |             return a_b | ||||||
|  | 
 | ||||||
|     def FormatError(i, j, l, r): |     def FormatError(i, j, l, r): | ||||||
|         global extcode |         global extcode | ||||||
|         if ApproxEqual(l, r) != 0: |         if ApproxEqual(l, r) != 0: | ||||||
|             extcode = 1 |             extcode = 1 | ||||||
|             logging.error('l[%s][%s]=%9.6f      r[%s][%s]=%9.6f' % (i, j, l, i, j, r)) |             logging.error('l[%s][%s]=%9.6f      r[%s][%s]=%9.6f' % (i, j, l, i, j, r)) | ||||||
|     def sind(x): |  | ||||||
|         return math.sin(x*math.pi/180.0) |  | ||||||
|     def cosd(x): |  | ||||||
|         return math.cos(x*math.pi/180.0) |  | ||||||
| 
 | 
 | ||||||
|     l = cosd(rotY)*cosd(rotZ) |     def sind(x): | ||||||
|     r = -sind(outX)*sind(outY)*sind(outZ)+cosd(outY)*cosd(outZ) |         return math.sin(x * math.pi / 180.0) | ||||||
|  | 
 | ||||||
|  |     def cosd(x): | ||||||
|  |         return math.cos(x * math.pi / 180.0) | ||||||
|  | 
 | ||||||
|  |     l = cosd(rotY) * cosd(rotZ) | ||||||
|  |     r = -sind(outX) * sind(outY) * sind(outZ) + cosd(outY) * cosd(outZ) | ||||||
|     FormatError(0, 0, l, r) |     FormatError(0, 0, l, r) | ||||||
|     l = cosd(rotY)*sind(rotZ) |     l = cosd(rotY) * sind(rotZ) | ||||||
|     r = -cosd(outX)*sind(outZ) |     r = -cosd(outX) * sind(outZ) | ||||||
|     FormatError(0, 1, l, r) |     FormatError(0, 1, l, r) | ||||||
|     l = sind(rotY) |     l = sind(rotY) | ||||||
|     r = -sind(outX)*cosd(outY)*sind(outZ)-sind(outY)*cosd(outZ) |     r = -sind(outX) * cosd(outY) * sind(outZ) - sind(outY) * cosd(outZ) | ||||||
|     FormatError(0, 2, l, r) |     FormatError(0, 2, l, r) | ||||||
|     l = -sind(rotZ) |     l = -sind(rotZ) | ||||||
|     r = sind(outX)*sind(outY)*cosd(outZ)+cosd(outY)*sind(outZ) |     r = sind(outX) * sind(outY) * cosd(outZ) + cosd(outY) * sind(outZ) | ||||||
|     FormatError(1, 0, l, r) |     FormatError(1, 0, l, r) | ||||||
|     l = cosd(rotZ) |     l = cosd(rotZ) | ||||||
|     r = cosd(outX)*cosd(outZ) |     r = cosd(outX) * cosd(outZ) | ||||||
|     FormatError(1, 1, l, r) |     FormatError(1, 1, l, r) | ||||||
|     l = 0 |     l = 0 | ||||||
|     r = sind(outX)*cosd(outY)*cosd(outZ)-sind(outY)*sind(outZ) |     r = sind(outX) * cosd(outY) * cosd(outZ) - sind(outY) * sind(outZ) | ||||||
|     FormatError(1, 2, l, r) |     FormatError(1, 2, l, r) | ||||||
|     l = -sind(rotY)*cosd(rotZ) |     l = -sind(rotY) * cosd(rotZ) | ||||||
|     r = cosd(outX)*sind(outY) |     r = cosd(outX) * sind(outY) | ||||||
|     FormatError(2, 0, l, r) |     FormatError(2, 0, l, r) | ||||||
|     l = -sind(rotY)*sind(rotZ) |     l = -sind(rotY) * sind(rotZ) | ||||||
|     r = -sind(outX) |     r = -sind(outX) | ||||||
|     FormatError(2, 1, l, r) |     FormatError(2, 1, l, r) | ||||||
|     l = cosd(rotY) |     l = cosd(rotY) | ||||||
|     r = cosd(outX)*cosd(outY) |     r = cosd(outX) * cosd(outY) | ||||||
|     FormatError(2, 2, l, r) |     FormatError(2, 2, l, r) | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Star Brilliant
						Star Brilliant