|
|
|
using DevicesService.Commen;
|
|
|
|
using Functions.FileExt;
|
|
|
|
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
|
|
|
|
using System;
|
|
|
|
using System.Drawing;
|
|
|
|
using System.Globalization;
|
|
|
|
using System.IO;
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
using System.Text;
|
|
|
|
//0816加实时报点
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
public struct TOUCH_INFO
|
|
|
|
{
|
|
|
|
public int X;
|
|
|
|
public int Y;
|
|
|
|
public int Pressure;
|
|
|
|
public int SN;
|
|
|
|
public int btnID;//5寸 确定 重签 取消按钮
|
|
|
|
}
|
|
|
|
namespace DevicesService.Devices
|
|
|
|
{
|
|
|
|
public class SignDll
|
|
|
|
{
|
|
|
|
public static PointF endPos;
|
|
|
|
public static PointF beginPos;
|
|
|
|
public static PointF frontPos;
|
|
|
|
private static int xypointcount = 0;
|
|
|
|
private static int[] lastpointx = new int[3];
|
|
|
|
private static int[] lastpointy = new int[3];
|
|
|
|
Point mPoint = new Point(-1, -1);
|
|
|
|
private static System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
|
|
|
|
//private Graphics mGraphicsBuffer;
|
|
|
|
private static Pen pen = new Pen(Color.Black); //
|
|
|
|
public static int status = -1;
|
|
|
|
private static Bitmap bitmap = new Bitmap(594, 392);
|
|
|
|
public SignDll()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
endPos = new PointF(-1F, -1f);
|
|
|
|
beginPos = new PointF(-1F, -1f);
|
|
|
|
frontPos = new PointF(-1F, -1f);
|
|
|
|
lastpointx[0] = -1;
|
|
|
|
lastpointy[0] = -1;
|
|
|
|
lastpointx[1] = -1;
|
|
|
|
lastpointy[1] = -1;
|
|
|
|
lastpointx[2] = -1;
|
|
|
|
lastpointy[2] = -1;
|
|
|
|
xypointcount = 0;
|
|
|
|
}
|
|
|
|
catch (Exception ex) { Log.Info(ex.Message); }
|
|
|
|
finally { }
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void GetTouchNumber(int number)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
//1 签字确定按钮 2签字取消按钮 3 签字重签按钮(清空界面)
|
|
|
|
if (number == 1)
|
|
|
|
{
|
|
|
|
int ret = FiveInchDll.ComSignOK();
|
|
|
|
Console.WriteLine("ComSignOK:" + ret);
|
|
|
|
FiveInchDll.ComSetBackGroundAdv();
|
|
|
|
}
|
|
|
|
else if (number == 3)
|
|
|
|
{
|
|
|
|
|
|
|
|
string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\sign_ui.jpg";
|
|
|
|
int ret = FiveInchDll.ComSetSignBackgroundImage(UIFile);
|
|
|
|
Console.WriteLine("ComSetSignBackgroundImage:" + ret);
|
|
|
|
}
|
|
|
|
//2023-02-27 通知返回获取SN
|
|
|
|
else if (number == 17) //返回设备SN
|
|
|
|
{
|
|
|
|
StringBuilder sbDevSN = new StringBuilder();
|
|
|
|
FiveInchDll.ComGetDevSN_Async(sbDevSN);
|
|
|
|
Console.WriteLine("ComGetDevSN:" + sbDevSN);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
lastpointx[0] = -1;
|
|
|
|
lastpointy[0] = -1;
|
|
|
|
lastpointx[1] = -1;
|
|
|
|
lastpointy[1] = -1;
|
|
|
|
lastpointx[2] = -1;
|
|
|
|
lastpointy[2] = -1;
|
|
|
|
|
|
|
|
FiveInchDll.ComSetBackGroundAdv();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex) { Log.Info(ex.Message); }
|
|
|
|
finally { }
|
|
|
|
}
|
|
|
|
|
|
|
|
//0816加报点
|
|
|
|
public static void GetTouchPoint(TOUCH_INFO[] info1)
|
|
|
|
{
|
|
|
|
int x = 0, y = 0;
|
|
|
|
int pressurevl;
|
|
|
|
int dx = 0, dy = 0;
|
|
|
|
|
|
|
|
for (int k = 0; k < 80; k++)
|
|
|
|
{
|
|
|
|
|
|
|
|
x = info1[k].X;
|
|
|
|
y = info1[k].Y;
|
|
|
|
|
|
|
|
//落笔
|
|
|
|
if (info1[k].Pressure > 0)
|
|
|
|
{
|
|
|
|
if (info1[k].Pressure > 0 && info1[k].Pressure < 500)
|
|
|
|
{
|
|
|
|
pressurevl = 1;
|
|
|
|
pen.Width = 1;
|
|
|
|
}
|
|
|
|
else if (info1[k].Pressure >= 500 && info1[k].Pressure < 1000)
|
|
|
|
{
|
|
|
|
pressurevl = 2;
|
|
|
|
pen.Width = 2;
|
|
|
|
}
|
|
|
|
else if (info1[k].Pressure >= 1000 && info1[k].Pressure < 1500)
|
|
|
|
{
|
|
|
|
pressurevl = 3;
|
|
|
|
pen.Width = 3;
|
|
|
|
}
|
|
|
|
else if (info1[k].Pressure >= 1500 && info1[k].Pressure < 2048)
|
|
|
|
{
|
|
|
|
pressurevl = 4;
|
|
|
|
pen.Width = 4;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pressurevl = 0;
|
|
|
|
pen.Width = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//抬笔
|
|
|
|
pressurevl = 0;
|
|
|
|
|
|
|
|
lastpointx[0] = -1;
|
|
|
|
lastpointy[0] = -1;
|
|
|
|
lastpointx[1] = -1;
|
|
|
|
lastpointy[1] = -1;
|
|
|
|
lastpointx[2] = -1;
|
|
|
|
lastpointy[2] = -1;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (info1[k].Pressure > 10) //有画线宽度
|
|
|
|
{
|
|
|
|
lastpointx[2] = x;
|
|
|
|
lastpointy[2] = y;
|
|
|
|
|
|
|
|
|
|
|
|
if (lastpointx[2] != -1)
|
|
|
|
{
|
|
|
|
if (lastpointx[1] != -1 && lastpointx[0] != -1)
|
|
|
|
{
|
|
|
|
//float dx = Math.Abs(lastpointx[2] - beginPos.X);
|
|
|
|
//float dy = Math.Abs(endPos.Y - beginPos.Y);
|
|
|
|
|
|
|
|
dx = Math.Abs(lastpointx[2] - lastpointx[1]);
|
|
|
|
dy = Math.Abs(lastpointy[2] - lastpointy[1]);
|
|
|
|
if ((dx != 0) && (dy != 0))
|
|
|
|
{
|
|
|
|
|
|
|
|
if (lastpointy[1] != -1 && lastpointy[2] != -1) //y轴相同的点不画,直接跳过
|
|
|
|
{
|
|
|
|
if (lastpointx[1] != -1 && lastpointx[2] != -1) //第3个点和第二个点比较是否x坐标在同一个位置,不是就执行画第一个点到第二个点的线
|
|
|
|
{
|
|
|
|
//painter->drawLine(frontPos, beginPos); //画线
|
|
|
|
//g.DrawLine(pen, lastpointx[0], lastpointy[0], lastpointx[1], lastpointy[1]);
|
|
|
|
//painter->drawPoint(beginPos); //画点
|
|
|
|
//frontPos = beginPos;
|
|
|
|
//beginPos = endPos;
|
|
|
|
lastpointx[0] = lastpointx[1];
|
|
|
|
lastpointy[0] = lastpointy[1];
|
|
|
|
lastpointx[1] = lastpointx[2];
|
|
|
|
lastpointy[1] = lastpointy[2];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//是就执行画第一个点到第三个点的线
|
|
|
|
//painter->drawLine(frontPos, endPos);
|
|
|
|
//g.DrawLine(pen, lastpointx[0], lastpointy[0], lastpointx[2], lastpointy[2]);
|
|
|
|
//frontPos = endPos; //第三个点赋值第一个点
|
|
|
|
//beginPos = QPointF(0, 0); //第二个点置空
|
|
|
|
//beginPos.X = -1;
|
|
|
|
//beginPos.Y = -1;
|
|
|
|
lastpointx[0] = lastpointx[2];
|
|
|
|
lastpointy[0] = lastpointy[2];
|
|
|
|
lastpointx[1] = -1;
|
|
|
|
lastpointy[1] = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}//
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (lastpointx[1] != -1) //不为空在赋值,防止丢弃点时赋空值
|
|
|
|
{
|
|
|
|
lastpointx[0] = lastpointx[1];
|
|
|
|
lastpointy[0] = lastpointy[1];
|
|
|
|
}
|
|
|
|
lastpointx[1] = lastpointx[2];
|
|
|
|
lastpointy[1] = lastpointy[2];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
dx = dy = 0;
|
|
|
|
lastpointx[0] = -1;
|
|
|
|
lastpointy[0] = -1;
|
|
|
|
lastpointx[1] = -1;
|
|
|
|
lastpointy[1] = -1;
|
|
|
|
lastpointx[2] = -1;
|
|
|
|
lastpointy[2] = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//打开签字版
|
|
|
|
public static int OpenComDevice()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
status = FiveInchDll.OpenComDevice(GetTouchNumber);
|
|
|
|
Console.WriteLine("OpenComDevice:" + status);
|
|
|
|
if (status == 0)
|
|
|
|
{
|
|
|
|
//关闭报点
|
|
|
|
int ret = FiveInchDll.ComSendPoint(0, null);
|
|
|
|
if (true)
|
|
|
|
{
|
|
|
|
string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\adv_ui.jpg";
|
|
|
|
int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile);
|
|
|
|
Console.WriteLine("ComSendAdvantageImage:" + ret1);
|
|
|
|
FiveInchDll.ComSetBackGroundAdv();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (true)
|
|
|
|
{
|
|
|
|
string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\sign_ui.jpg";
|
|
|
|
int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile);
|
|
|
|
Console.WriteLine("ComSetSignBackgroundImage:" + ret1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(Exception ex) { Log.Info(ex.Message); }
|
|
|
|
finally { }
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
|
|
|
|
//关闭签字版
|
|
|
|
public static int CloseComDevice()
|
|
|
|
{
|
|
|
|
int ret = -1;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if (status == 0)
|
|
|
|
{
|
|
|
|
ret = FiveInchDll.CloseComDevice();
|
|
|
|
if (ret == 0)
|
|
|
|
{
|
|
|
|
status = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch { }
|
|
|
|
finally { }
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
//保存签字版数据
|
|
|
|
public static string ComSetPictureSavePath()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
DateTime dateTime = DateTime.Now;
|
|
|
|
string time = DateTime.Now.ToString(
|
|
|
|
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
|
|
|
|
var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Sign");
|
|
|
|
FileExt.MakeSureDirExist(dirpath);
|
|
|
|
var filepath = Path.Combine(dirpath, time);
|
|
|
|
string SignFile = dirpath + "\\" + time + ".png";
|
|
|
|
string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png";
|
|
|
|
int ret = FiveInchDll.ComSignOK();
|
|
|
|
if (ret == 0)
|
|
|
|
{
|
|
|
|
return SignFile;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class FiveInchDll
|
|
|
|
{
|
|
|
|
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
|
|
|
|
public delegate void GetTouchNumber(int number);
|
|
|
|
|
|
|
|
//0816加报点
|
|
|
|
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
|
|
|
|
public delegate void TOUCH_INFO_FUNC([MarshalAs(UnmanagedType.LPArray, SizeConst = 160)] TOUCH_INFO[] info);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSendPoint(int nState, [MarshalAs(UnmanagedType.FunctionPtr)] TOUCH_INFO_FUNC callback); //0816加报点
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int OpenComDevice([MarshalAs(UnmanagedType.FunctionPtr)] GetTouchNumber callback);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int CloseComDevice();
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSetSignBackgroundImage(string UIFile);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSetPictureSavePath(string PicturePath, int PicturePathLen);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSignOK();
|
|
|
|
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSetPenStyle(int PenStyle);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComGetDevSN(StringBuilder pDevSN, int iSync);
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComGetDevSN_Async(StringBuilder pDevSN);
|
|
|
|
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComWhiteScreen();
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSendAdvantageImage(string UIFile);
|
|
|
|
|
|
|
|
|
|
|
|
[DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
|
public static extern int ComSetBackGroundAdv();
|
|
|
|
}
|
|
|
|
}
|