2017-12-11 13 views
1

GoJS 다이어그램을 구문 분석하려고하는데 사용자가 원형, 원 노드, 사각형 노드, 삼각형에서 다른 범주를 드래그 할 수 있습니다. 끝까지 도달 할 때까지 한 방향으로 그들을 서로 연결할 수 있습니다.GoJS 그래프 파서

필요한 기능은 그래프를 구문 분석하고 사용자 종속성 그래프에 따라 가능한 경로 목록을 제공하는 것입니다. 샘플 그래프가

enter image description here

내 기능이 코드 같은 것입니다 여기에 표시됩니다 :

function collectPaths(y, x) { 
           var stack = new go.List(go.node); 
           var coll = new go.List(go.List); 
           lock = false; 
           function find(y, x) { 
            console.log(y.data.name); 
            y.findNodesInto().each(function (n) { 
             console.log(y.data.name + " ●▬● " + n.data.name); 
             if ((n.data.key == x.data.key) && !(lock)) { // success 
              console.log(n.data.name); 
              var path = stack.copy(); 
              path.reverse(); 
              coll.add(path); 
             } else if((n.data.key !=x.data.key) && lock){ 
              // stack.add(n); 
              console.log(n.data.name); 
              if (n.data.category === "triangle") { 

               pp = pp.findNodesInto(); 
               var it = pp.iterator; 
               var m = new go.Map(go.node, "number"); 
               lock = true; 
               while (it.next()) { 
                m.pop(it.value,it.value); 
                stack.add(it.value); 
                console.log(it.value.data.name); 
                find(it.value, x); 
               } 
               var tempList=go.list(go.node); 
               tempList.each(function (pn) { 
                pn = tempList.pop(); 
                if (!"undefined") { 
                 stack.add(parent); 
                 find(parent, x); 
                 // stack.add(pn); 
                 console.log(pn.data.name); 
                } else { 
                 pn = tempList.pop(); 
                 find(pn, x); 
                } 
               }); 
              } else { 
               console.log(n.data.name); 
               stack.add(n); 
               find(n, x); 
               stack.removeAt(stack.count - 1); 
              } 
             } 
             lock = false; 
            }); 
           } // end of full stack collection 
           find(y, x); 
           return coll; 
          } 

하지만 기능은 필요한 출력을 제공하지 않습니다.

N30 – N40 – N10 
N1 -N2-N3-N4-N10 
N5-N6-N9-N10 
N5-N10 
N7-N8-N10 
N7-N8-N11-N10 

내가 할 수있는 일이 같은

예상 출력은 다음과 같이 그림에 대한 연결?

답변

1

샘플 https://gojs.net/latest/samples/distances.html은 노드 쌍 사이의 모든 경로를 찾는 방법을 보여줍니다. collectAllPaths 함수를 사용하려고합니다. 임의의 그래프를 작성하거나 노드 사이의 거리를 찾거나 사용자가 시작 및 끝 노드를 대화식으로 선택할 수 있도록 도와주는 함수를 삭제할 수 있습니다.

+0

고맙습니다. @Walter, 삼각형의 모든 부모 노드를 직렬화하는 데 도움을 주실 수 있습니까? 사용자가 삼각형을 어디에 둘 수 있는지 존중하십시오. – MhdBanat