我正在使用InkCanvas在WPF中編寫基本的圖形編輯器。我製作了一些自定義形狀(從Stroke繼承)。當我在InkCanvas上繪製線條時,我首先和最後一點並劃一條線。這很好,但現在我不喜歡默認的「筆劃」,所以我決定重寫DynamicRenderer來實時渲染線條。WPF InkCanvas:用DynamicRenderer畫線
問題是,DynamicRenderer從原點繪製直線到筆劃的每一個點,我顯然不希望這樣,因爲它使"fan"排成一行。
有我的自定義代碼,我正在尋找解決方案,如果可能的話,只從原點到最後點畫線。
class LineRenderer : DynamicRenderer
{
private Point firstPoint;
private Pen pen = new Pen(new SolidColorBrush(Colors.Gray),1);
public LineRenderer()
{
firstPoint = new Point(double.PositiveInfinity, double.PositiveInfinity);
}
protected override void OnStylusDown(RawStylusInput rawStylusInput)
{
firstPoint = new Point(rawStylusInput.GetStylusPoints().First().ToPoint().X, rawStylusInput.GetStylusPoints().First().ToPoint().Y);
base.OnStylusDown(rawStylusInput);
}
protected override void OnDraw(DrawingContext drawingContext,
StylusPointCollection stylusPoints,
Geometry geometry, Brush fillBrush)
{
drawingContext.DrawLine(pen, firstPoint, stylusPoints.First().ToPoint());
}
protected override void OnStylusUp(RawStylusInput rawStylusInput)
{
firstPoint = new Point(double.PositiveInfinity, double.PositiveInfinity);
base.OnStylusUp(rawStylusInput);
}
}
當我移動我的鼠標,我想繪製線第一點(這就是爲什麼它是固定的)指向光標所在的位置。這有效,但是它爲運動路線上的每個單點畫線。我只需要一行:從第一個點(我點擊/固定的點)移動到當前光標位置。 –
看看發生了什麼你的ondraw被稱爲線上的每一個點,所以它畫線從你的第一點到你在canvas上得到的每一個點..所以你必須更新你的第一個點到你的當前點,直到獲得該線draw..the代碼我給剛纔檢查它..它會工作..你可以檢查這個通過在ondraw方法上放置斷點.. – loop
看起來我們不瞭解對方,所以我畫了一些圖[鏈接] (http://errolek.cz/img/schema.png)。我點擊(紅圈)並移動鼠標(紅線)。紅色長方形是被選中的點。當我移動鼠標時,我想繪製藍線(當時是一條)。你的代碼只是連接紅色矩形並沿着紅色矩形連線。 –