2014-08-29 82 views
0

我目前使用线条图形来表示图形中的边缘。虽然能够展示方向,但这将是一件好事!Kivy:编辑线条图形

我希望有一个简单的方法来改变线条,使他们有红色的提示(或类似的东西)。

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

我的一个想法是在红色的当前行上画一条额外的线,但是我不确定我可以在画布上给出一个小部件多行吗? (这会导致问题)。

询问是否需要更多细节:)

编辑:

附我使用绘制代码和编辑行:

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 

这只是一个片段给一个想法。

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

这种多重绘图的想法很可能不是最好的方法,事实上使用别的东西会使这变得更容易!

+0

我不明白为什么你不能在画布上添加乘法线。请确保将它们分组在一个InstructionGroup中,以便您可以轻松地将它们作为一个整体添加/删除它们。 其中一个想法是创建一个从InstructionGroup派生的类并添加行(基线和红色提示)。然后,您可以创建该类的实例并将其添加为一个画布指令。 Btw。看看kivy.garden.graph,这是一个开始绘制图形和学习如何制作自己的自定义图形的好地方。 – Lobsterman 2014-08-29 18:39:54

+0

我以前没见过这些东西。我会尝试一下并报告,谢谢! – user124784 2014-08-30 06:21:28

+0

看过garden.graph之后,它并不是我真正想要的。我试图允许创建网络图,就像在图论中:) – user124784 2014-08-30 06:24:03

回答

0

由于卡尔文没有回应,我会自己发布答案。

它结束了绘制多行是最简单的方法。没有什么特别的必须要做。

+0

没问题!我发现最难的部分是管理所有的图形指令,所以要记住组的概念。 – Lobsterman 2014-09-02 13:03:12