Exemplo n.º 1
0
        /// <summary>
        /// draw cicle with dots
        /// </summary>
        /// <param name="laser"></param>
        /// <param name="rtc"></param>
        /// <param name="radius"></param>
        /// <param name="durationMsec"></param>
        private static bool DrawCircleWithDots(ILaser laser, IRtc rtc, float radius, float durationMsec)
        {
            if (rtc.CtlGetStatus(RtcStatus.Busy))
            {
                return(false);
            }
            Console.WriteLine("WARNING !!! LASER IS BUSY ... DrawCircleWithDots");
            timer = Stopwatch.StartNew();
            bool success = true;

            success &= rtc.ListBegin(laser);
            for (float angle = 0; angle < 360; angle += 1)
            {
                double x = radius * Math.Sin(angle * Math.PI / 180.0);
                double y = radius * Math.Cos(angle * Math.PI / 180.0);
                success &= rtc.ListJump(new Vector2((float)x, (float)y));
                //laser signal on during specific time (지정된 짧은 시간동안 레이저 출사)
                success &= rtc.ListLaserOn(durationMsec);
                if (!success)
                {
                    break;
                }
            }
            success &= rtc.ListEnd();
            if (success)
            {
                success &= rtc.ListExecute(true);
            }
            Console.WriteLine($"Processing time = {timer.ElapsedMilliseconds / 1000.0:F3}s");
            return(success);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 원(호)를 따라 매 1도마다 점 찍기
 /// </summary>
 /// <param name="rtc"></param>
 /// <param name="radius"></param>
 /// <param name="durationMsec"></param>
 private static void DrawCircleWithDots(ILaser laser, IRtc rtc, double radius, double durationMsec)
 {
     rtc.ListBegin(laser);
     for (double angle = 0; angle < 360; angle += 1)
     {
         double x = radius * Math.Sin(angle * Math.PI / 180.0);
         double y = radius * Math.Cos(angle * Math.PI / 180.0);
         rtc.ListJump(new Vector2((float)x, (float)y));
         rtc.ListLaserOn(durationMsec);
     }
     rtc.ListEnd();
 }
Exemplo n.º 3
0
        private static bool DrawCircle(ILaser laser, IRtc rtc)
        {
            bool success = true;
            var  rtcExt  = rtc as IRtcExtension;

            //리스트 시작
            success &= rtc.ListBegin(laser);
            //아나로그1 에 5V 출력
            success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0.5f);
            //1 초 동안 대기
            success &= rtc.ListWait(1000);
            //아나로그1 에 0V 출력
            success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0);
            //점프
            success &= rtc.ListJump(new Vector2(10, 0));
            //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 켜기
            success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x01);
            //레이저 출력 시작
            success &= rtc.ListLaserOn();
            //0.5 초 동안 대기
            success &= rtc.ListWait(500);
            //레이저 출력 중지
            success &= rtc.ListLaserOff();
            //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 끄기
            success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x00);
            //점프
            success &= rtc.ListJump(new Vector2(-10, 0));
            //매 100us 마다 X 방향으로 0.1 mm 이동하면서 아나로그 1번 출력으로 픽셀 출력(Raster Operation)을 준비 (100개)
            success &= rtcExt.ListPixelLine(100, new Vector2(0.1F, 0), 100, ExtensionChannel.ExtAO2);
            for (int i = 0; i < 100; i++)
            {
                success &= rtcExt.ListPixel(10, 0.5f); //10us 펄스 생성및 아나로그2 에 5V 출력
            }
            if (success)
            {
                //리스트 종료
                success &= rtc.ListEnd();
                //나머지 데이타 가공 완료 대기
                success &= rtc.ListExecute(true);
            }
            return(success);
        }