Compare commits

..

5 Commits

Author SHA1 Message Date
CJK_mkp 869c8ce31b Merge pull request #29 from awesome-iwb/beta
ICC CE 1.6.1 (Beta 1.6.1)
2025-06-17 22:38:48 +08:00
CJK_mkp 0b7b55224f add:直线拉直与端点吸附 2025-06-17 22:37:37 +08:00
CJK_mkp 2a23be44f2 add:有关触屏体验改进的功能 2025-06-17 22:05:22 +08:00
CJK_mkp fa0cbb4d3f fix:修复日志重复输出 2025-06-17 21:45:50 +08:00
CJK_mkp 38bc4decf6 fix:issue #13 #23 2025-06-17 21:24:47 +08:00
11 changed files with 5901 additions and 5396 deletions
+57 -1
View File
@@ -377,6 +377,23 @@
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold" IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchShowCursor_Toggled" /> Toggled="ToggleSwitchShowCursor_Toggled" />
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="启用压感触屏模式" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchEnablePressureTouchMode"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchEnablePressureTouchMode_Toggled" />
</ui:SimpleStackPanel>
<TextBlock Text="# 开启后,触屏设备也将支持压感效果,适用于部分支持压感但无法被系统识别的触屏设备。" TextWrapping="Wrap" Foreground="#a1a1aa" />
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="屏蔽压感" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchDisablePressure"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchDisablePressure_Toggled" />
</ui:SimpleStackPanel>
<TextBlock Text="# 开启后,将忽略所有设备的压感信息,使所有笔画具有统一的粗细。与压感触屏模式互斥。" TextWrapping="Wrap" Foreground="#a1a1aa" />
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="橡皮大小" VerticalAlignment="Center" <TextBlock Foreground="#fafafa" Text="橡皮大小" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" /> FontSize="14" Margin="0,0,16,0" />
@@ -553,7 +570,46 @@
</CheckBox> </CheckBox>
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0"
Stroke="#3f3f46" StrokeThickness="1" Margin="0,4,0,4" />
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="直线自动拉直" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchAutoStraightenLine"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchAutoStraightenLine_Toggled" />
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left"
Visibility="{Binding ElementName=ToggleSwitchAutoStraightenLine, Path=IsOn, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Foreground="#fafafa" Text="长度阈值" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<Slider Name="AutoStraightenLineThresholdSlider" Width="150" Minimum="30" Maximum="300"
Value="30" TickFrequency="30" IsSnapToTickEnabled="True"
ValueChanged="AutoStraightenLineThresholdSlider_ValueChanged" />
<TextBlock Foreground="#fafafa" Text="{Binding ElementName=AutoStraightenLineThresholdSlider, Path=Value, StringFormat={}{0:0}}"
VerticalAlignment="Center" FontSize="14" Margin="16,0,0,0" />
</ui:SimpleStackPanel>
<TextBlock Text="# 开启后,当绘制的直线超过设定长度阈值时,将自动调整为完美直线。" TextWrapping="Wrap" Foreground="#a1a1aa" />
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0"
Stroke="#3f3f46" StrokeThickness="1" Margin="0,4,0,4" />
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Foreground="#fafafa" Text="直线端点吸附" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchLineEndpointSnapping"
IsOn="True" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchLineEndpointSnapping_Toggled" />
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left"
Visibility="{Binding ElementName=ToggleSwitchLineEndpointSnapping, Path=IsOn, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Foreground="#fafafa" Text="吸附距离" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<Slider Name="LineEndpointSnappingThresholdSlider" Width="150" Minimum="5" Maximum="50"
Value="15" TickFrequency="5" IsSnapToTickEnabled="True"
ValueChanged="LineEndpointSnappingThresholdSlider_ValueChanged" />
<TextBlock Foreground="#fafafa" Text="{Binding ElementName=LineEndpointSnappingThresholdSlider, Path=Value, StringFormat={}{0:0}}"
VerticalAlignment="Center" FontSize="14" Margin="16,0,0,0" />
</ui:SimpleStackPanel>
<TextBlock Text="# 开启后,当绘制的直线端点靠近其他直线端点时,将自动吸附连接。" TextWrapping="Wrap" Foreground="#a1a1aa" />
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
</GroupBox> </GroupBox>
<GroupBox Name="GroupBoxAppearanceNewUI"> <GroupBox Name="GroupBoxAppearanceNewUI">
+13
View File
@@ -159,6 +159,19 @@ namespace Ink_Canvas {
inkCanvas1.UseCustomCursor = true; inkCanvas1.UseCustomCursor = true;
// 修复触屏和数位笔时光标不显示:强制显示光标,不再依赖鼠标或触控状态 // 修复触屏和数位笔时光标不显示:强制显示光标,不再依赖鼠标或触控状态
inkCanvas1.ForceCursor = true; inkCanvas1.ForceCursor = true;
// 根据编辑模式设置不同的光标
if (inkCanvas1.EditingMode == InkCanvasEditingMode.EraseByPoint) {
var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Eraser.cur", UriKind.Relative));
if (sri != null)
inkCanvas1.Cursor = new Cursor(sri.Stream);
} else if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) {
var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Pen.cur", UriKind.Relative));
if (sri != null)
inkCanvas1.Cursor = new Cursor(sri.Stream);
} else if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
inkCanvas1.Cursor = Cursors.Cross;
}
} else { } else {
inkCanvas1.UseCustomCursor = false; inkCanvas1.UseCustomCursor = false;
inkCanvas1.ForceCursor = false; inkCanvas1.ForceCursor = false;
+7 -5
View File
@@ -162,14 +162,16 @@ namespace Ink_Canvas {
/// <summary> /// <summary>
/// 检查WPS进程是否正在运行 /// 检查WPS进程是否正在运行
/// </summary> /// </summary>
private bool IsWPSRunning() /// <param name="writeLog">是否记录日志,默认为true</param>
private bool IsWPSRunning(bool writeLog = true)
{ {
foreach (var processName in GetPossibleWPSProcessNames()) foreach (var processName in GetPossibleWPSProcessNames())
{ {
var processes = Process.GetProcessesByName(processName); var processes = Process.GetProcessesByName(processName);
if (processes.Length > 0) if (processes.Length > 0)
{ {
LogHelper.WriteLogToFile($"检测到WPS进程: {processName}", LogHelper.LogType.Info); if (writeLog)
LogHelper.WriteLogToFile($"检测到WPS进程: {processName}", LogHelper.LogType.Info);
return true; return true;
} }
} }
@@ -188,7 +190,7 @@ namespace Ink_Canvas {
if (!isPowerPointInitialized) if (!isPowerPointInitialized)
{ {
// 检测WPS和PowerPoint进程 // 检测WPS和PowerPoint进程
bool wpsRunning = IsWPSRunning(); bool wpsRunning = IsWPSRunning(true);
var pptProcesses = Process.GetProcessesByName("POWERPNT"); var pptProcesses = Process.GetProcessesByName("POWERPNT");
// 根据设置和进程状态决定模式 // 根据设置和进程状态决定模式
@@ -269,7 +271,7 @@ namespace Ink_Canvas {
} }
// 检查进程是否还在 // 检查进程是否还在
bool currentWpsRunning = IsWPSRunning(); bool currentWpsRunning = IsWPSRunning(false); // 定期检查不输出日志
var currentPptProcesses = Process.GetProcessesByName("POWERPNT"); var currentPptProcesses = Process.GetProcessesByName("POWERPNT");
// 检测应用程序是否关闭 // 检测应用程序是否关闭
@@ -375,7 +377,7 @@ namespace Ink_Canvas {
} }
} }
catch (Exception ex) { catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); LogHelper.WriteLogToFile($"TimerCheckPPT_Elapsed 异常: {ex.Message}", LogHelper.LogType.Error);
Application.Current.Dispatcher.Invoke(() => { Application.Current.Dispatcher.Invoke(() => {
BtnPPTSlideShow.Visibility = Visibility.Collapsed; BtnPPTSlideShow.Visibility = Visibility.Collapsed;
timerCheckPPT.Start(); timerCheckPPT.Start();
+63 -1
View File
@@ -694,6 +694,62 @@ namespace Ink_Canvas {
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchEnablePressureTouchMode_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Canvas.EnablePressureTouchMode = ToggleSwitchEnablePressureTouchMode.IsOn;
// 如果启用了压感触屏模式,则自动关闭屏蔽压感
if (Settings.Canvas.EnablePressureTouchMode && Settings.Canvas.DisablePressure) {
Settings.Canvas.DisablePressure = false;
ToggleSwitchDisablePressure.IsOn = false;
}
SaveSettingsToFile();
}
private void ToggleSwitchDisablePressure_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Canvas.DisablePressure = ToggleSwitchDisablePressure.IsOn;
// 如果启用了屏蔽压感,则自动关闭压感触屏模式
if (Settings.Canvas.DisablePressure && Settings.Canvas.EnablePressureTouchMode) {
Settings.Canvas.EnablePressureTouchMode = false;
ToggleSwitchEnablePressureTouchMode.IsOn = false;
}
SaveSettingsToFile();
}
private void ToggleSwitchAutoStraightenLine_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Canvas.AutoStraightenLine = ToggleSwitchAutoStraightenLine.IsOn;
SaveSettingsToFile();
}
private void AutoStraightenLineThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
if (!isLoaded) return;
Settings.Canvas.AutoStraightenLineThreshold = (int)e.NewValue;
SaveSettingsToFile();
}
private void ToggleSwitchLineEndpointSnapping_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Canvas.LineEndpointSnapping = ToggleSwitchLineEndpointSnapping.IsOn;
SaveSettingsToFile();
}
private void LineEndpointSnappingThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
if (!isLoaded) return;
Settings.Canvas.LineEndpointSnappingThreshold = (int)e.NewValue;
SaveSettingsToFile();
}
#endregion #endregion
#region Canvas #region Canvas
@@ -1412,7 +1468,7 @@ namespace Ink_Canvas {
Settings.Automation.IsAutoKillVComYouJiao = false; Settings.Automation.IsAutoKillVComYouJiao = false;
Settings.Automation.IsAutoKillInkCanvas = false; Settings.Automation.IsAutoKillInkCanvas = false;
Settings.Automation.IsAutoKillICA = false; Settings.Automation.IsAutoKillICA = false;
Settings.Automation.IsAutoKillIDT = true; Settings.Automation.IsAutoKillIDT = false;
Settings.Automation.IsAutoKillSeewoLauncher2DesktopAnnotation = false; Settings.Automation.IsAutoKillSeewoLauncher2DesktopAnnotation = false;
Settings.Automation.IsSaveScreenshotsInDateFolders = false; Settings.Automation.IsSaveScreenshotsInDateFolders = false;
Settings.Automation.IsAutoSaveStrokesAtScreenshot = true; Settings.Automation.IsAutoSaveStrokesAtScreenshot = true;
@@ -1447,6 +1503,12 @@ namespace Ink_Canvas {
Settings.Canvas.HideStrokeWhenSelecting = false; Settings.Canvas.HideStrokeWhenSelecting = false;
Settings.Canvas.ClearCanvasAndClearTimeMachine = false; Settings.Canvas.ClearCanvasAndClearTimeMachine = false;
Settings.Canvas.FitToCurve = true; Settings.Canvas.FitToCurve = true;
Settings.Canvas.EnablePressureTouchMode = false;
Settings.Canvas.DisablePressure = false;
Settings.Canvas.AutoStraightenLine = true;
Settings.Canvas.AutoStraightenLineThreshold = 30;
Settings.Canvas.LineEndpointSnapping = true;
Settings.Canvas.LineEndpointSnappingThreshold = 15;
Settings.Canvas.UsingWhiteboard = false; Settings.Canvas.UsingWhiteboard = false;
Settings.Canvas.HyperbolaAsymptoteOption = 0; Settings.Canvas.HyperbolaAsymptoteOption = 0;
@@ -434,6 +434,12 @@ namespace Ink_Canvas {
inkCanvas.ForceCursor = false; inkCanvas.ForceCursor = false;
} }
// 初始化压感触屏模式开关状态
ToggleSwitchEnablePressureTouchMode.IsOn = Settings.Canvas.EnablePressureTouchMode;
// 初始化屏蔽压感开关状态
ToggleSwitchDisablePressure.IsOn = Settings.Canvas.DisablePressure;
ComboBoxPenStyle.SelectedIndex = Settings.Canvas.InkStyle; ComboBoxPenStyle.SelectedIndex = Settings.Canvas.InkStyle;
BoardComboBoxPenStyle.SelectedIndex = Settings.Canvas.InkStyle; BoardComboBoxPenStyle.SelectedIndex = Settings.Canvas.InkStyle;
@@ -500,6 +506,14 @@ namespace Ink_Canvas {
ToggleSwitchFitToCurve.IsOn = false; ToggleSwitchFitToCurve.IsOn = false;
drawingAttributes.FitToCurve = false; drawingAttributes.FitToCurve = false;
} }
// 初始化直线自动拉直相关设置
ToggleSwitchAutoStraightenLine.IsOn = Settings.Canvas.AutoStraightenLine;
AutoStraightenLineThresholdSlider.Value = Settings.Canvas.AutoStraightenLineThreshold;
// 初始化直线端点吸附相关设置
ToggleSwitchLineEndpointSnapping.IsOn = Settings.Canvas.LineEndpointSnapping;
LineEndpointSnappingThresholdSlider.Value = Settings.Canvas.LineEndpointSnappingThreshold;
} else { } else {
Settings.Canvas = new Canvas(); Settings.Canvas = new Canvas();
} }
@@ -19,7 +19,109 @@ namespace Ink_Canvas {
try { try {
inkCanvas.Opacity = 1; inkCanvas.Opacity = 1;
if (Settings.InkToShape.IsInkToShapeEnabled && !Environment.Is64BitProcess) {
// 直线自动拉直功能
if (Settings.Canvas.AutoStraightenLine && e.Stroke.StylusPoints.Count > 1 && drawingShapeMode == 0 && penType == 0) {
// 获取起点和终点
StylusPoint startPoint = e.Stroke.StylusPoints[0];
StylusPoint endPoint = e.Stroke.StylusPoints[e.Stroke.StylusPoints.Count - 1];
// 计算直线长度
double length = Math.Sqrt(Math.Pow(endPoint.X - startPoint.X, 2) + Math.Pow(endPoint.Y - startPoint.Y, 2));
// 判断是否需要拉直
if (length >= Settings.Canvas.AutoStraightenLineThreshold) {
// 判断是否符合直线特征(计算点到直线的最大距离)
double maxDistance = 0;
for (int i = 1; i < e.Stroke.StylusPoints.Count - 1; i++) {
StylusPoint point = e.Stroke.StylusPoints[i];
double distance = DistanceFromPointToLine(point, startPoint, endPoint);
maxDistance = Math.Max(maxDistance, distance);
}
// 如果最大距离小于线长的15%,认为是直线
if (maxDistance < length * 0.15) {
// 创建新的直线点集合
StylusPointCollection newPoints = new StylusPointCollection();
// 直线端点吸附功能
if (Settings.Canvas.LineEndpointSnapping) {
bool startPointSnapped = false;
bool endPointSnapped = false;
// 获取画布上的所有笔画
StrokeCollection allStrokes = inkCanvas.Strokes;
// 排除当前笔画
StrokeCollection otherStrokes = new StrokeCollection();
foreach (Stroke stroke in allStrokes) {
if (stroke != e.Stroke) {
otherStrokes.Add(stroke);
}
}
// 查找最近的端点
double minStartDistance = Settings.Canvas.LineEndpointSnappingThreshold;
double minEndDistance = Settings.Canvas.LineEndpointSnappingThreshold;
StylusPoint nearestToStart = startPoint;
StylusPoint nearestToEnd = endPoint;
foreach (Stroke stroke in otherStrokes) {
// 只考虑直线(只有两个点的笔画)
if (stroke.StylusPoints.Count == 2) {
StylusPoint strokeStart = stroke.StylusPoints[0];
StylusPoint strokeEnd = stroke.StylusPoints[1];
// 计算当前笔画起点到其他笔画端点的距离
double distanceToStrokeStart = Distance(startPoint, strokeStart);
double distanceToStrokeEnd = Distance(startPoint, strokeEnd);
// 如果距离小于阈值且小于当前最小距离,更新最近点
if (distanceToStrokeStart < minStartDistance) {
minStartDistance = distanceToStrokeStart;
nearestToStart = strokeStart;
startPointSnapped = true;
}
if (distanceToStrokeEnd < minStartDistance) {
minStartDistance = distanceToStrokeEnd;
nearestToStart = strokeEnd;
startPointSnapped = true;
}
// 计算当前笔画终点到其他笔画端点的距离
double distanceEndToStrokeStart = Distance(endPoint, strokeStart);
double distanceEndToStrokeEnd = Distance(endPoint, strokeEnd);
// 如果距离小于阈值且小于当前最小距离,更新最近点
if (distanceEndToStrokeStart < minEndDistance) {
minEndDistance = distanceEndToStrokeStart;
nearestToEnd = strokeStart;
endPointSnapped = true;
}
if (distanceEndToStrokeEnd < minEndDistance) {
minEndDistance = distanceEndToStrokeEnd;
nearestToEnd = strokeEnd;
endPointSnapped = true;
}
}
}
// 应用吸附结果
newPoints.Add(startPointSnapped ? nearestToStart : startPoint);
newPoints.Add(endPointSnapped ? nearestToEnd : endPoint);
} else {
// 不启用吸附,直接使用原始端点
newPoints.Add(startPoint);
newPoints.Add(endPoint);
}
// 替换原有笔迹
e.Stroke.StylusPoints = newPoints;
}
}
}
if (Settings.InkToShape.IsInkToShapeEnabled && drawingShapeMode == 0 && !isInMultiTouchMode && penType == 0) {
void InkToShapeProcess() { void InkToShapeProcess() {
try { try {
newStrokes.Add(e.Stroke); newStrokes.Add(e.Stroke);
@@ -320,13 +422,27 @@ namespace Ink_Canvas {
InkToShapeProcess(); InkToShapeProcess();
} }
foreach (var stylusPoint in e.Stroke.StylusPoints) // 如果启用了屏蔽压感功能,强制所有点的压感值为0.5
//LogHelper.WriteLogToFile(stylusPoint.PressureFactor.ToString(), LogHelper.LogType.Info); if (Settings.Canvas.DisablePressure) {
// 检查是否是压感笔书写 var stylusPoints = new StylusPointCollection();
//if (stylusPoint.PressureFactor != 0.5 && stylusPoint.PressureFactor != 0) foreach (var point in e.Stroke.StylusPoints) {
if ((stylusPoint.PressureFactor > 0.501 || stylusPoint.PressureFactor < 0.5) && var newPoint = new StylusPoint(point.X, point.Y, 0.5f);
stylusPoint.PressureFactor != 0) stylusPoints.Add(newPoint);
return; }
e.Stroke.StylusPoints = stylusPoints;
return; // 跳过后续的压感处理
}
// 检查是否是压感笔书写,如果启用了压感触屏模式则跳过此检查
if (!Settings.Canvas.EnablePressureTouchMode) {
foreach (var stylusPoint in e.Stroke.StylusPoints)
//LogHelper.WriteLogToFile(stylusPoint.PressureFactor.ToString(), LogHelper.LogType.Info);
// 检查是否是压感笔书写
//if (stylusPoint.PressureFactor != 0.5 && stylusPoint.PressureFactor != 0)
if ((stylusPoint.PressureFactor > 0.501 || stylusPoint.PressureFactor < 0.5) &&
stylusPoint.PressureFactor != 0)
return;
}
try { try {
if (e.Stroke.StylusPoints.Count > 3) { if (e.Stroke.StylusPoints.Count > 3) {
@@ -540,5 +656,31 @@ namespace Ink_Canvas {
public StylusPoint GetCenterPoint(StylusPoint point1, StylusPoint point2) { public StylusPoint GetCenterPoint(StylusPoint point1, StylusPoint point2) {
return new StylusPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2); return new StylusPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2);
} }
/// <summary>
/// 计算点到直线的距离
/// </summary>
/// <param name="point">点</param>
/// <param name="lineStart">直线起点</param>
/// <param name="lineEnd">直线终点</param>
/// <returns>距离</returns>
private double DistanceFromPointToLine(StylusPoint point, StylusPoint lineStart, StylusPoint lineEnd) {
double lineLength = Math.Sqrt(Math.Pow(lineEnd.X - lineStart.X, 2) + Math.Pow(lineEnd.Y - lineStart.Y, 2));
if (lineLength == 0) return 0;
double area = Math.Abs(
(lineEnd.X - lineStart.X) * (lineStart.Y - point.Y) -
(lineStart.X - point.X) * (lineEnd.Y - lineStart.Y)
);
return area / lineLength;
}
/// <summary>
/// 计算两点之间的距离
/// </summary>
private double Distance(StylusPoint p1, StylusPoint p2) {
return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
}
} }
} }
+13 -1
View File
@@ -48,6 +48,18 @@ namespace Ink_Canvas
public bool FitToCurve { get; set; } = true; public bool FitToCurve { get; set; } = true;
[JsonProperty("clearCanvasAndClearTimeMachine")] [JsonProperty("clearCanvasAndClearTimeMachine")]
public bool ClearCanvasAndClearTimeMachine { get; set; } = false; public bool ClearCanvasAndClearTimeMachine { get; set; } = false;
[JsonProperty("enablePressureTouchMode")]
public bool EnablePressureTouchMode { get; set; } = false; // 是否启用压感触屏模式
[JsonProperty("disablePressure")]
public bool DisablePressure { get; set; } = false; // 是否屏蔽压感
[JsonProperty("autoStraightenLine")]
public bool AutoStraightenLine { get; set; } = true; // 是否启用直线自动拉直
[JsonProperty("autoStraightenLineThreshold")]
public int AutoStraightenLineThreshold { get; set; } = 30; // 直线自动拉直的长度阈值(像素)
[JsonProperty("lineEndpointSnapping")]
public bool LineEndpointSnapping { get; set; } = true; // 是否启用直线端点吸附
[JsonProperty("lineEndpointSnappingThreshold")]
public int LineEndpointSnappingThreshold { get; set; } = 15; // 直线端点吸附的距离阈值(像素)
[JsonProperty("usingWhiteboard")] [JsonProperty("usingWhiteboard")]
public bool UsingWhiteboard { get; set; } public bool UsingWhiteboard { get; set; }
@@ -308,7 +320,7 @@ namespace Ink_Canvas
public bool IsAutoKillICA { get; set; } = false; public bool IsAutoKillICA { get; set; } = false;
[JsonProperty("isAutoKillIDT")] [JsonProperty("isAutoKillIDT")]
public bool IsAutoKillIDT { get; set; } = true; public bool IsAutoKillIDT { get; set; } = false;
[JsonProperty("isSaveScreenshotsInDateFolders")] [JsonProperty("isSaveScreenshotsInDateFolders")]
public bool IsSaveScreenshotsInDateFolders { get; set; } = false; public bool IsSaveScreenshotsInDateFolders { get; set; } = false;
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff