Skip to content

Instantly share code, notes, and snippets.

@endrebak
Last active May 20, 2021 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save endrebak/96a9abeefcb3ff827ae717076161c182 to your computer and use it in GitHub Desktop.
Save endrebak/96a9abeefcb3ff827ae717076161c182 to your computer and use it in GitHub Desktop.
(defn draw-dag []
(let [reader (d3-dag/dagStratify)
dag (.then
(d3/json "https://raw.githubusercontent.com/erikbrinkman/d3-dag/main/examples/grafo.json")
(fn [dag-data] (reader dag-data)))]
(.then dag
(fn [dag]
(let [node-radius 20
padding 1.5
base (* node-radius padding 2)
node-size #js (fn [] #js [base base])
layout (->
(d3-dag/sugiyama)
(.nodeSize #js [60 60])
(.layering (d3-dag/layeringSimplex))
(.decross (d3-dag/decrossOpt))
(.coord (d3-dag/coordQuad))
(.nodeSize node-size))
obj (layout dag)
_ (js/console.log obj)])))))
;; {dag: LayoutDagRoot, width: NaN, height: NaN}
;; dag: LayoutDagRoot
;; dagRoots: Array(6)
;; 0: LayoutDagNode {data: {…}, dataChildren: Array(1), layer: 0, y: NaN, x: NaN}
;; 1: LayoutDagNode {data: {…}, dataChildren: Array(1), layer: 4, y: NaN, x: NaN}
;; 2: LayoutDagNode {data: {…}, dataChildren: Array(2), layer: 0, y: NaN, x: NaN}
;; 3: LayoutDagNode {data: {…}, dataChildren: Array(1), layer: 5, y: NaN, x: NaN}
;; 4: LayoutDagNode {data: {…}, dataChildren: Array(1), layer: 4, y: NaN, x: NaN}
;; 5: LayoutDagNode {data: {…}, dataChildren: Array(3), layer: 2, y: NaN, x: NaN}
;; length: 6
;; __proto__: Array(0)
;; __proto__: Object
;; height: NaN
;; width: NaN
;; __proto__: Object
function rest(dag) {
layering = d3.layeringSimplex()
decrossing = d3.decrossOpt()
coords = d3.coordQuad()
nodeRadius = 20
padding = 1.5;
const base = nodeRadius * 2 * padding;
nodeSize = () => [base, base]
layout = d3.sugiyama()
.nodeSize([60, 60])
.layering(layering)
.decross(decrossing)
.coord(coords)
.nodeSize(nodeSize)
const { width, height } = layout(dag)
console.log("dag", dag)
}
async function drawDag() {
source = "Grafo"
reader = d3.dagStratify()
const dag = await d3.json("https://raw.githubusercontent.com/erikbrinkman/d3-dag/main/examples/grafo.json").then(
(dag_data) => reader(dag_data)
)
rest(dag)
}
drawDag()
// dag
// u {dagRoots: Array(6)}
// dagRoots: Array(6)
// 0: c {data: {…}, dataChildren: Array(1), layer: 0, y: 30, x: 155.7358827800636}
// 1: c {data: {…}, dataChildren: Array(1), layer: 4, y: 270, x: 30.00000000000017}
// 2: c {data: {…}, dataChildren: Array(2), layer: 0, y: 30, x: 95.7358827800636}
// 3: c {data: {…}, dataChildren: Array(1), layer: 5, y: 330, x: 290.1165496825605}
// 4: c {data: {…}, dataChildren: Array(1), layer: 4, y: 270, x: 291.5933421459292}
// 5: c {data: {…}, dataChildren: Array(3), layer: 2, y: 150, x: 139.75963955241934}
// length: 6
// __proto__: Array(0)
// __proto__: Object
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment