UNPKG

create-gojs-kit

Version:

A CLI for downloading GoJS samples, extensions, and docs

290 lines (251 loc) 12.1 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover"/> <meta name="description" content="Show the visual elements of a simple diagram as a tree diagram -- each Node is data bound to an element of the other Diagram." /> <meta itemprop="description" content="Show the visual elements of a simple diagram as a tree diagram -- each Node is data bound to an element of the other Diagram." /> <meta property="og:description" content="Show the visual elements of a simple diagram as a tree diagram -- each Node is data bound to an element of the other Diagram." /> <meta name="twitter:description" content="Show the visual elements of a simple diagram as a tree diagram -- each Node is data bound to an element of the other Diagram." /> <link rel="preconnect" href="https://rsms.me/"> <link rel="stylesheet" href="../assets/css/style.css"> <!-- Copyright 1998-2025 by Northwoods Software Corporation. --> <meta itemprop="name" content="Visual Tree of another Diagram" /> <meta property="og:title" content="Visual Tree of another Diagram" /> <meta name="twitter:title" content="Visual Tree of another Diagram" /> <meta property="og:image" content="https://gojs.net/latest/assets/images/screenshots/visualtree.png" /> <meta itemprop="image" content="https://gojs.net/latest/assets/images/screenshots/visualtree.png" /> <meta name="twitter:image" content="https://gojs.net/latest/assets/images/screenshots/visualtree.png" /> <meta property="og:url" content="https://gojs.net/latest/samples/visualTree.html" /> <meta property="twitter:url" content="https://gojs.net/latest/samples/visualTree.html" /> <meta name="twitter:card" content="summary_large_image" /> <meta property="og:type" content="website" /> <meta property="twitter:domain" content="gojs.net" /> <title> Visual Tree of another Diagram | GoJS Diagramming Library </title> </head> <body> <!-- This top nav is not part of the sample code --> <nav id="navTop" class=" w-full h-[var(--topnav-h)] z-30 bg-white border-b border-b-gray-200"> <div class="max-w-screen-xl mx-auto flex flex-wrap items-start justify-between px-4"> <a class="text-white bg-nwoods-primary font-bold !leading-[calc(var(--topnav-h)_-_1px)] my-0 px-2 text-4xl lg:text-5xl logo" href="../"> GoJS </a> <div class="relative"> <button id="topnavButton" class="h-[calc(var(--topnav-h)_-_1px)] px-2 m-0 text-gray-900 bg-inherit shadow-none md:hidden hover:!bg-inherit hover:!text-nwoods-accent hover:!shadow-none" aria-label="Navigation"> <svg class="h-7 w-7 block" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"> <path d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> <div id="topnavList" class="hidden md:block"> <div class="absolute right-0 z-30 flex flex-col items-end rounded border border-gray-200 p-4 pl-12 shadow bg-white text-gray-900 font-semibold md:flex-row md:space-x-4 md:items-start md:border-0 md:p-0 md:shadow-none md:bg-inherit"> <a href="../learn/">Learn</a> <a href="../samples/">Samples</a> <a href="../intro/">Intro</a> <a href="../api/">API</a> <a href="../download.html">Download</a> <a href="https://forum.nwoods.com/c/gojs/11" target="_blank" rel="noopener">Forum</a> <a id="tc" href="https://nwoods.com/contact.html" target="_blank" rel="noopener" onclick="getOutboundLink('https://nwoods.com/contact.html', 'contact');">Contact</a> <a id="tb" href="https://nwoods.com/sales/index.html" target="_blank" rel="noopener" onclick="getOutboundLink('https://nwoods.com/sales/index.html', 'buy');">Buy</a> </div> </div> </div> </div> </nav> <script> window.addEventListener("DOMContentLoaded", function () { // topnav var topButton = document.getElementById("topnavButton"); var topnavList = document.getElementById("topnavList"); if (topButton && topnavList) { topButton.addEventListener("click", function (e) { topnavList .classList .toggle("hidden"); e.stopPropagation(); }); document.addEventListener("click", function (e) { // if the clicked element isn't the list, close the list if (!topnavList.classList.contains("hidden") && !e.target.closest("#topnavList")) { topButton.click(); } }); // set active <a> element var url = window .location .href .toLowerCase(); var aTags = topnavList.getElementsByTagName('a'); for (var i = 0; i < aTags.length; i++) { var lowerhref = aTags[i] .href .toLowerCase(); if (lowerhref.endsWith('.html')) lowerhref = lowerhref.slice(0, -5); if (url.startsWith(lowerhref)) { aTags[i] .classList .add('active'); break; } } } }); </script> <div class="flex flex-col prose"> <div class="w-full max-w-screen-xl mx-auto"> <!-- * * * * * * * * * * * * * --> <!-- Start of GoJS sample code --> <script src="https://cdn.jsdelivr.net/npm/gojs@3.1.0"></script> <div id="allSampleContent" class="p-4 w-full"> <script id="code"> function init() { myDiagram = new go.Diagram('myDiagramDiv', { 'undoManager.isEnabled': true }); // define the "sample" Node template myDiagram.nodeTemplate = new go.Node('Auto') .bindTwoWay('location') .add( new go.Shape('RoundedRectangle', { fill: 'white', strokeWidth: 0 }) // define the node's outer shape .bind('fill', 'color'), new go.TextBlock({ margin: 8 }) // define the node's text .bind('text') ); myDiagram.linkTemplate = new go.Link({ curve: go.Curve.Bezier }) .add( new go.Shape({ strokeWidth: 1.5 }), new go.Shape({ toArrow: 'Standard' }) ); myDiagram.model = new go.GraphLinksModel( [ { key: 1, text: 'Alpha', color: 'lightblue', location: new go.Point(0, 0) }, { key: 2, text: 'Beta', color: 'pink', location: new go.Point(60, 80) } ], [ { from: 1, to: 2 }, { from: 2, to: 1 } ] ); // Now we can initialize a Diagram that looks at the visual tree that constitutes the Diagram above. myVisualTree = new go.Diagram('myVisualTree', { initialContentAlignment: go.Spot.Left, initialAutoScale: go.AutoScale.Uniform, isReadOnly: true, // do not allow users to modify or select in this view allowSelect: false, layout: new go.TreeLayout({ nodeSpacing: 5 }) // automatically laid out as a tree }); myVisualTree.nodeTemplate = new go.Node('Auto') .add( new go.Shape({ fill: 'white', stroke: null }), // assume a dark background new go.TextBlock({ font: 'bold 13px monospace', stroke: 'black', margin: 3 }) // bind the text to the Diagram/Layer/Part/GraphObject converted to a string .bind('text', '', x => { // if the node represents a link, be sure to include the "to/from" data for that link if (x instanceof go.Link) { var s = 'Link#' + x.data.__gohashid; s += '(' + x.data.from + ' to ' + x.data.to + ')'; return s; } else return x.toString(); }) ); myVisualTree.linkTemplate = new go.Link({ corner: 10 }) .add( new go.Shape({ stroke: 'white', strokeWidth: 2 }) ); drawVisualTree(); } function drawVisualTree() { var visualNodeDataArray = []; // recursively walk the visual tree, collecting objects as we go function traverseVisualTree(obj, parent) { obj.vtkey = visualNodeDataArray.length; visualNodeDataArray.push(obj); if (parent) { obj.parentKey = parent.vtkey; } if (obj instanceof go.Diagram) { var lit = obj.layers; while (lit.next()) traverseVisualTree(lit.value, obj); } else if (obj instanceof go.Layer) { var pit = obj.parts; while (pit.next()) traverseVisualTree(pit.value, obj); } else if (obj instanceof go.Panel) { var eit = obj.elements; while (eit.next()) traverseVisualTree(eit.value, obj); } } traverseVisualTree(myDiagram, null); myVisualTree.model = new go.TreeModel({ nodeKeyProperty: 'vtkey', nodeParentKeyProperty: 'parentKey', nodeDataArray: visualNodeDataArray }); } window.addEventListener('DOMContentLoaded', init); </script> <div id="sample"> <b>myDiagram</b>, the diagram being inspected:<br /> <div id="myDiagramDiv" style="border: 1px solid black; width: 300px; height: 200px"></div> <br /> <button onclick="drawVisualTree()">Draw Visual Tree</button> <br /> <br /> <b>myVisualTree</b>, showing the Layers, Nodes and Links that are in <b>myDiagram</b> above:<br /> <div id="myVisualTree" style="border: 1px solid black; background: #1f4963; width: 100%; height: 400px"></div> <p> This sample shows the actual visual tree of a running Diagram. The Diagram that we inspect is named "myDiagramDiv" and initially contains two simple Nodes and two Links. The Diagram below it is named "myVisualTree" and shows the visual tree of "myDiagramDiv". </p> <p> You can also try selecting, copying, and deleting parts in <b>myDiagram</b> and then click on "Draw Visual Tree" again to see how the visual tree in <b>myDiagram</b> changes. </p> <p> The <b>traverseVisualTree</b> function is what walks the visual tree of "myDiagramDiv" and constructs the corresponding Nodes and Links used in "myVisualTree". The text for each Node in "myVisualTree" is data-bound to the actual Diagram/Layer/Part/GraphObject object. That object is converted to a text string by using the <b>toString</b> method. </p> <p> See also the <a href="visualTreeGrouping.html">Visual Tree Using Groups</a> sample, to show the same visual tree using nested groups. For more uses of the <a>TreeLayout</a>, see the <a href="DOMTree.html">DOM Tree</a> and <a href="classHierarchy.html">Class Hierarchy Tree</a> samples. </p> </div> </div> <!-- * * * * * * * * * * * * * --> <!-- End of GoJS sample code --> </div> <div id="allTagDescriptions" class="p-4 w-full max-w-screen-xl mx-auto"> <hr/> <h3 class="text-xl">GoJS Features in this sample</h3> <!-- blacklist tags that do not correspond to a specific GoJS feature --> <h4>Tree Layout</h4> <p> This predefined layout is used for placing Nodes of a tree-structured graph in layers (rows or columns). For discussion and examples of the most commonly used properties of the <a href="../api/symbols/TreeLayout.html">TreeLayout</a>, see the <a href="../intro/trees.html">Trees</a> page in the Introduction. More information can be found in the <a href="../intro/layouts.html#TreeLayout">GoJS Intro</a>. </p> <p> <a href="../samples/index.html#treelayout">Related samples</a> </p> <hr> </div> </div> </body> <!-- This script is part of the gojs.net website, and is not needed to run the sample --> <script src="../assets/js/goSamples.js"></script> </html>