timeline_markers列表如何在Blender中运行?

时间:2016-06-11 13:28:40

标签: python list blender

我有以下代码:

import bpy
import math
import random


Markers = []

for marker in bpy.context.scene.timeline_markers:
    frame = marker.frame
    Markers.extend([frame])

print('-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+')
print(Markers)
Markers = sorted(Markers)
print(Markers)

当我执行它时,它为第一个打印语句提供了两个不同的输出,在标记=排序(标记)之前和之后。

这是输出:

  

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +   [33,93,151,212,265,409,640,786,524,317]   [33,93,151,212,265,317,409,524,640,786]

当循环读取时间轴中的项目时,标记不是按顺序递增吗?

但是,假设它不是这样的,这是如何工作的?

2 个答案:

答案 0 :(得分:0)

您的代码没有问题。代码工作得很好,这就是它的原因。您将分配给相同的变量,这就是它显示不同输出的原因。当您执行print(Markers)时,它会提供原始结果。在Markers = sorted(Markers)之后修改列表。因此,请分配给其他变量,例如Sorted_Markers = sorted(Markers)

你可以在这里查看差异。

In [1]: markers = [33, 93, 151, 212, 265, 409, 640, 786, 524, 317]
In [2]: print (markers)
[33, 93, 151, 212, 265, 409, 640, 786, 524, 317]
In [3]: sorted_marker = sorted(markers)
In [3]: print (markers)
[33, 93, 151, 212, 265, 409, 640, 786, 524, 317]
In [4]: print (sorted_marker)
[33, 93, 151, 212, 265, 317, 409, 524, 640, 786]

答案 1 :(得分:0)

您假设timeline_markers存储为排序列表,但事实并非如此。虽然它们作为公共列表/数组呈现给python,但它们由blender内部存储为链表。如果您追溯源代码,您会发现它们使用DNA_listBase.h中定义的ListBase并在listbase.c中实现。

虽然我们将标记视为与时间线匹配的顺序中的序列,但保持它们排序并没有真正的需要或好处。如果要按帧顺序显示标记列表,则只需自己对它们进行排序。