<div>
<!-- d3js -->
<svg>
</svg>
</div>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
var svg = d3.select("svg");
// 그림이 직접 그려지는 것이 아니고, 정의만 해주는 것입니다.
// 이후에 필요할 때 직접 가져와서 쓸수 있죠.
svg.append("defs").append("marker")
.attr("id", "arrow1") // 해당 요소의 id을 추가하고요.
.attr("markerUnits", "strokeWidth")
.attr("markerWidth", "12").attr("markerHeight", "12")// 너비와 높이를 정해주고,
.attr("viewBox", "0 0 12 12")//해당 개체가 어떻게 보여줄지 정하고,
.attr("refX", "6").attr("refY", "6")
// marker가 선에 그려질 경우 어떤 포인트에서 그려질지를 정합니다.
// 예를 들어, viewbox가 "0 0 12 12"인 상태에서 각각 6으로 잡을 경우에는 중점이 딱 떨어지게 되겠죠.
.attr("orient", "auto")// 이걸 없애면 선의 방향에 맞춰서 그려지지 않습니다.
// 이제 해당 부분에 그려질 그림을 그려줍니다.
// 아래처럼 반드시 하나의 그림만 추가될 필요는 없고, 여러 그림이 추가될 수 있습니다.
var marker1 = d3.select("#arrow1");
marker1.append("polygon")
.attr("points", "0 0, 0 12, 12 12, 12 0")
.attr("fill", "black");
marker1.append("polygon")
.attr("points", "0 0, 0 6, 6 6, 12 0, 0 0")
.attr("fill", "blue");
var line = svg.append("line")
.attr("x1", 150).attr("y1", 10)
.attr("x2", 200).attr("y2", 50)
.attr("stroke", "red")
.attr("stroke-width", 2)
//이렇게 정의해서 사용할 수 있습니다.
.attr("marker-end", "url(#arrow1)");
</script>
댓글남기기