이것은 매우 도움이 될 수 있지만하지 않을 수 있습니다 우리가 내가 있었다 다른 프로젝트에 일의이 유형을 달성하는 방법 실제 회선을 계산 한 다음 "실제"펜을 사용하여 각 회선을 개별 회선으로 그려주는 사용자 지정 "펜"을 구현하는 것입니다. 이런 식으로해야한다면 실제로 "펜"레벨의 StartCap 및/또는 EndCap을 각 대시에 적용 할 수 있습니다.
사용자 정의 "펜"은 대시/갭 길이의 배열 또는 시퀀스 (또는 내부적으로 특정 대시/갭 길이로 해석되는 표준 펜 스타일의 열거 형)를 받아 들여야합니다.
우리는 GDI 기반의 드로잉 시스템을 사용하여 이것을 오래 전에했는데, GDI를 지원하는 선 스타일보다 더 많은 선 스타일을 지원해야했습니다.
재미있는 연습이지만 설명하는대로 대시를 반드시 써야하는 경우가 아니라면 더 많은 문제가 발생할 수 있습니다. 여기
[편집]
은 당신이 그렇게 경사하는 경우는,이 작업을 수행하는 방법에 대한 몇 가지 예제 코드입니다.
첫 번째는 Graphics 개체의 확장 메서드입니다. 펜, 대시 길이, 간격 길이, 시작점 및 끝점이 필요합니다. 그것은 p1-> p2 라인을 따라 보간하고 "dash"길이 세그먼트를 그리고 "gap"길이 세그먼트를 건너 뜁니다. 전달 된 펜은 화살표 엔드 캡이있는 견고한 모양이어야합니다 (원하는 효과를 얻기 위해).
코드는 꽤 거칠지 만 동작은 다음과 같습니다. 입력 줄이 전체 대시 + 갭 길이보다 짧으면 입력 된 펜을 사용하여 선이 그대로 그려집니다. 입력 라인이 전체 대시 + 갭 길이보다 길면 라인의 "나머지"가 대시 + 갭 길이보다 작을 때까지 "대시"길이 라인이 그려지며, 나머지는 그대로 그려집니다 입력 펜으로
경로 드로잉을 구현하려는 경우 중간 값 정점 주변을 보간해야합니다 (단, 저렴한 가격으로 각 세그먼트의 대시를 별도로 계산하지 않는 한). 나는 코드가 큰 (또는 ;-)도 반드시 좋은 것을 주장하지 않습니다
private void button1_Click(object sender, EventArgs e)
{
using (var p = new Pen(Color.FromArgb(190, Color.Green), 5))
{
p.StartCap = LineCap.Round;
p.EndCap = LineCap.ArrowAnchor;
p.CustomEndCap = new AdjustableArrowCap(3, 3);
p.DashStyle = DashStyle.Solid;
var graph = this.CreateGraphics();
graph.DrawDashedLine(p, 20, 10, new PointF(20, 20), new PointF(500, 500));
}
}
을하지만, 그것은 당신에게 좋은 출발점을 제공한다 : 여기
public static void DrawDashedLine(this Graphics g, Pen p, float dash, float gap, PointF s, PointF e)
{
float dx = e.X - s.X;
float dy = e.Y - s.Y;
float len = (float)Math.Sqrt(dx * dx + dy * dy);
float remainder = len;
float vx = dx/len;
float vy = dy/len;
if (len <= dash + gap)
{
g.DrawLine(p, s, e);
return;
}
PointF last = s;
while (remainder > dash + gap)
{
PointF p1 = new PointF(last.X, last.Y);
PointF p2 = new PointF(p1.X + vx*dash, p1.Y + vy*dash);
g.DrawLine(p, p1, p2);
last = new PointF(p2.X + vx*gap, p2.X + vy*gap);
remainder = remainder - dash - gap;
}
if (remainder > 0)
{
g.DrawLine(p, last, e);
}
}
}
당신이 그것을 부를 것이다 어떻게 당신이 진짜로 당신의 지시 한 선을 당기기에 흥미있는 경우에.
행운을 빈다.
당신이 갖고있는 것의 스크린 캡과 당신이 원하는 것의 모형은 매우 도움이 될 것입니다. –
그가 원하는 것은 마치 대시가 선이가는 방향 (즉, EndCap의 화살표와 같은 방향)을 나타내는 화살표를 갖는 것입니다. 또는 화살표가 아니라면 대시를 그 끝에 붙이고 다른 끝을 평평하게 또는 둥글게하십시오. – wageoghe
할 수 없습니다. DashCap은 대시의 양쪽 끝에 적용됩니다. –