【问题标题】:Kivy: editing the line graphicKivy:编辑线条图形
【发布时间】:2014-08-29 09:22:56
【问题描述】:

我目前正在使用线形图形来表示图形中的边。要是能指明方向就好了!

我希望有一种简单的方法可以更改线条,使它们具有红色提示(或类似的东西)。

如果你愿意,我可以提供我的基本代码,但目前我根本没有为此实现任何东西,我想它只是提供一个框架。

我的一个想法是在当前行上画一条红色的附加线,但是我不确定我是否可以在画布上为单个小部件提供多行? (这会导致问题)。

询问是否需要更多详细信息:)

编辑:

我用来绘制和编辑线条的附加代码:

def __init__(self, **kwargs):
    super(GraphEdge, self).__init__(**kwargs)
    with self.canvas:
        Color(self.col, 1, 1, 1)
        self.line = Line(points=[100, 200, 200, 200], width = 2.0)
        self.center = ((self.line.points[0]+self.line.points[2])/2,(self.line.points[1]+self.line.points[3])/2)
        self.size = [math.sqrt(((self.line.points[0]-self.line.points[2])**2 + (self.line.points[1]-self.line.points[3])**2))]*2
    with self.canvas.after:
        Color(1,0,0,1)
        Line(points=[self.line.points[0],self.line.points[1], 400,400], width = 3)

上面的代码绘制了线条,最后一部分只是展示了我在画布上绘制第二条线。

然后我需要更新这些行的位置,目前我的代码(第一行)如下:

    if self.collide_widget(node):
        distance_from_0 = [math.sqrt(((self.line.points[0]-node.center[0])**2 + (self.line.points[1]-node.center[1])**2))]*2
        distance_from_1 = [math.sqrt(((self.line.points[2]-node.center[0])**2 + (self.line.points[3]-node.center[1])**2))]*2

        if distance_from_0 <= distance_from_1:
            if (self.connected_point_0 is False):
                print "collision"                
                if node is not self.connected_node_1:
                    self.connected_point_0 = True
                    self.connected_node_0 = node
                    node.edgeList.append(self)
                    self.line.points = node.center + self.line.points[2:]
                    self.size = 50,50
                    self.center = (self.line.points[2],self.line.points[3])
            return True

这只是一个提供想法的sn-p。

我希望能够根据第一行的位置更新第二行(还有一些其他的事情需要担心,比如节点的大小,但这可以稍后处理)。

这种多重绘图的想法也很可能不是最好的方法,实际上使用其他方法会更容易!

【问题讨论】:

  • 我不明白为什么不能在画布上添加多行。只需确保将它们分组到一个 InstructionGroup 中,这样您就可以轻松地将它们作为一个整体添加/删除。一个想法是创建一个派生自 InstructionGroup 的类并添加行(基线和红色提示)。然后,您可以创建该类的实例并将其添加为一个画布指令。顺便提一句。查看 kivy.garden.graph,这是开始绘制图表和学习如何制作自己的自定义图表的好地方。
  • 我以前从未见过这些东西。我会试一试并报告,谢谢!
  • 查看 garden.graph 之后,这并不是我真正想要的。我正在尝试允许创建网络图,就像在图论中一样:)
  • 我添加了一些示例代码来解释我想要实现的目标。我确实可以画多条线,但我不确定如何最好地更新它们。这也将非常棘手,所以我想要一个更好的方法:D。有没有办法改变线源图形?
  • 所以我设法让多行方法工作,一切都很顺利!您能否发布一个答案,以便我可以选择它 Calvin?我现在有一个新问题,如何在线条上旋转尺寸框!如果我无法弄清楚,我会为此发布一个新问题:)。谢谢

标签: python python-2.7 drawing kivy


【解决方案1】:

由于 Calvin 没有回复,我将自己发布答案。

最终得出多条线是最简单的方法。没有什么特别需要做的。

【讨论】:

  • 没问题!我发现最困难的部分是管理所有图形指令,因此请记住组的概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多