2014-08-29 3 views
0

현재 그래프의 가장자리를 나타 내기 위해 선 그래픽을 사용하고 있습니다. 그래도 방향을 보여줄 수 있으면 좋을 것입니다!Kivy : 선 그래픽 편집

나는 빨간 팁 (또는 비슷한 것)을 갖도록 줄을 바꾸는 쉬운 방법이 있기를 바라고 있습니다.

원하는 경우 내 기본 코드를 제공 할 수 있지만 현재로서는 전혀 구현되지 않은 것이므로 프레임 워크를 제공 할 것입니다.

내가 가진 한 가지 아이디어는 빨간색으로 채워진 현재 줄 위에 추가 선을 그리는 것이지만 캔버스에 단일 위젯을 여러 줄 줄 수 있는지 확신 할 수 없습니까? (이것은 문제를 일으킬 것입니다).이

연결된 I 그릴 사용하고 코드 편집 라인 :

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

+0

이전에이 중 하나를 보지 못했습니다. 나는 그들을 밖으로 시도하고 다시보고, 감사합니다! – user124784

+0

garden.graph를 본 후에는 실제로 내가 뭘하는지 알 수 없습니다. 그래프 이론과 같은 네트워크 그래프 생성을 허용하려고합니다. – user124784

답변

0

Calvin이 응답하지 않았기 때문에 나는 직접 답변을 게시 할 것입니다.

그 그림을 여러 줄로 작성하는 것이 가장 쉬운 방법이었습니다. 특별히 특별한 일은 없었습니다.

+0

문제는 없습니다! 가장 어려운 부분은 모든 그래픽 명령을 관리하는 것이 었으므로 그룹 개념을 명심하십시오. – Lobsterman