using System;
using Dll_CSharp_VSensor;
using System.Collections.Generic;
namespace testdll
{
    public class Program
    {
        public static int cameraSize = 2;
        static void Main(string[] args)
        {
            try
            {
                //获取相对路径
                string path = System.IO.Directory.GetCurrentDirectory();
                //实例化设备
                VSensorDLL[] VSensor = new VSensorDLL[cameraSize];
                for (int i = 0; i < cameraSize; i++)
                {
                    VSensor[i] = new VSensorDLL();
                }
                //多相机
                for (int i = 0; i < cameraSize; i++)
                {
                    //获取设备列表
                    List<VSensorCameraInfoCLR> list = new List<VSensorCameraInfoCLR>(20);
                    for (int j = 0; j < 20; j++)
                    {
                        list.Add(new VSensorCameraInfoCLR());
                    }
                    int num = 0;
                    VSensor[i].GetDeviceList(ref list, ref num);
                    for (int j = 0; j < num; j++)
                    {
                        Console.WriteLine("device num {0} : list[{1}] = {2}\n", j, j, list[j].CameraName);
                    }
                    //连接第一台设备
                    int status = VSensor[i].DeviceConnect(i);
                    if (status != 0)
                    {
                        Console.WriteLine("connect device failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                    //设备参数初始化，仅上电时需要进行此操作，初始化需要等待15s
                    Console.WriteLine("waiting for parameter init...\n");
                    status = VSensor[i].DeviceParameterInit();
                    if (status != 0)
                    {
                        Console.WriteLine("parameter init failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                    //设置为采集模式
                    status = VSensor[i].SetCaptureMode(1);
                    if (status != 0)
                    {
                        Console.WriteLine("set capture mode failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                    //单次采集测试
                    Console.WriteLine("single restruction ...\n");
                    status = VSensor[i].SingleRestruction(0);
                    if (status != 0)
                    {
                        Console.WriteLine("single restruction failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                    //获取当前相机输出分辨率
                    int width = 0;
                    int height = 0;
                    VSensor[i].GetImageResolution(ref width, ref height);
                    VSensorResultCLR result = new VSensorResultCLR(width, height);
                    VSensor[i].GetRestructionResult(0, 0, 1, ref result);
                    //保存点云为ply格式
                    status = VSensor[i].Save3DCloud(path + @"\test.ply", result, 0);
                    if (status != 0)
                    {
                        Console.WriteLine("save 3D points failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                    //反初始化设备
                    status = VSensor[i].DeviceUnInit();
                    if (status != 0)
                    {
                        Console.WriteLine("device release failed, status = {0}\n", status);
                        Console.ReadLine();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ex:{ex}");
            }
            Console.WriteLine("run success");
            Console.ReadLine();
            Console.ReadKey();
        }
    }
}
