2009-10-24 5 views
1

대화식 WPF 그래프/트리 도구로 작업하고 있으며 노드와 캔버스를 캔버스에 배치했습니다. 노드는 사용자 정의 컨트롤이며 링크는 단순히 선 모양이며 링크는 현재 노드의 중심에서 다른 노드의 중심으로 이동합니다.캔버스의 WPF 요소 자르기

노드가 약간 투명하게 보이고 노드 뒤에 링크가 보이기를 원할 때 문제가 발생합니다. 가장 편리한 솔루션은 선에 클리핑 또는 불투명 마스크를 적용하는 것이므로 노드 뒤에 그려지지 않으므로 어떻게 될지 생각할 수 없습니다.

기본적으로 노드의 경계 상자 지오메트리를 알아내어 선의 자르기 지오메트리로 사용할 수 없습니다. 물론 대체 솔루션에도 관심이 있습니다!

답변

1

당신이 솔루션을 과소 평가하고있는 것처럼 보입니다. 왜 선들이 중심에서 시작하는 대신에 노드의 올바른 쪽에서 시작/끝나도록 링크의 논리를 바꾸지 않습니까 ??? 이 작업을 수행하기 위해 더 많은 수학을 수행하면됩니다.

즉, Visual의 테두리 상자를 얻으려면 VisualTreeHelper::GetContentBounnds 도우미 메서드를 사용할 수 있습니다.

+0

네의 경계를 찾는 것에 대해 번거 로움 할 필요가 없습니다, 그 생각하지만 난 그 방법 좋아하지 않는 두 가지 이유가있다. 1) 캔버스에서 패닝 및 확대/축소를 사용 중이고 노드 크기는 내용 및 노드 별 크기 변환에 따라 다릅니다. 캔버스 좌표에서 노드의 정확한 크기를 알아 내기 란 어렵습니다. 나는 그것이 가능하다는 것을 안다, 나는 단지 고투하고있다. 2) 노드의 정확한 범위를 알았더라도 선과 노드 가장자리가 수직이 아닌 경우 경계에 조인 할 두꺼운 선을 그릴 경우 아티팩트가 생성됩니다. 대신 노드 지오메트리로 선을 자르면 완벽하게 결합됩니다. – angularsen

+0

충분히 공정하면 경계 상자를 가져 오는 방법을 알려줄 수 있습니다. 나는 나의 대답을 업데이트 할 것이다. –

+0

고마워, 그게 내가 찾고 있던 바로 그거야! – angularsen

0

우리는 비슷한 것을 연구했고 우리의 솔루션은 다른 레이어에 링크와 노드를 배치하는 것이 었습니다.

노드가 링크 위에 나타나고 링크의 팁이 노드에 의해 숨겨 지도록하려면 노드 계층이 링크 앞에 오도록 레이어의 z 순서를 변경하면됩니다. 층.

레이어로 우리는 VisualHosts (VisualHost 클래스 here을 찾았습니다) 노드와 링크 개체는 DrawingVisuals였습니다.

잘 작동하고 등 사용자의 노드

+0

문제는 선이 그 뒤에 표시되는 약간 투명한 노드에서 발생했습니다. 그래서 선이 노드의 끝에서 끝나기를 바랍니다. – angularsen