我目前使用線條圖形來表示圖形中的邊緣。雖然能夠展示方向,但這將是一件好事!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
這只是一個片段給一個想法。
我想能夠根據第一行的位置更新第二行(還有一些其他的事情要擔心,如節點的大小,但可以稍後處理)。
這種多重繪圖的想法很可能不是最好的方法,事實上使用別的東西會使這變得更容易!
我不明白爲什麼你不能在畫布上添加乘法線。請確保將它們分組在一個InstructionGroup中,以便您可以輕鬆地將它們作爲一個整體添加/刪除它們。 其中一個想法是創建一個從InstructionGroup派生的類並添加行(基線和紅色提示)。然後,您可以創建該類的實例並將其添加爲一個畫布指令。 Btw。看看kivy.garden.graph,這是一個開始繪製圖形和學習如何製作自己的自定義圖形的好地方。 – Lobsterman 2014-08-29 18:39:54
我以前沒見過這些東西。我會嘗試一下並報告,謝謝! – user124784 2014-08-30 06:21:28
看過garden.graph之後,它並不是我真正想要的。我試圖允許創建網絡圖,就像在圖論中:) – user124784 2014-08-30 06:24:03