2014-08-29 110 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