예제 #1
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            try
            {
                _CenterOffsetResult = null;
                _RotationResult     = null;
                _StretchResult      = null;
                _HanwhaResult       = null;
                var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

                //Calculate
                CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
                RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());
                StretchAlgorithm sAlgo     = new StretchAlgorithm();
                HanwhaHAVAvg     hanwhaAvg = new HanwhaHAVAvg();

                _CenterOffsetResult = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
                _RotationResult     = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);
                _StretchResult      = (StretchResult)sAlgo.Calculate(null, currentPanel, null);
                _HanwhaResult       = (HanwhaResult)hanwhaAvg.Calculate(Boxes, null, null);
                _WipeReason         = JudgeWipeHelper.JudgeWipeByPriorityStrategy(currentPanel, Boxes);
            }
            catch (Exception e)
            {
                throw new CaculateException(e.Message);
            }
        }
예제 #2
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            try
            {
                _CenterOffsetResult    = null;
                _RotationResult        = null;
                _StretchResult         = null;
                _DefectStatisticResult = null;

                var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

                //Calculate
                CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
                RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());
                StretchAlgorithm   sAlgo      = new StretchAlgorithm();
                DefectStatistic    dsAlgo     = new DefectStatistic();
                EkraFiducailOffset ekraFMAlgo = new EkraFiducailOffset();

                _CenterOffsetResult    = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
                _RotationResult        = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);
                _StretchResult         = (StretchResult)sAlgo.Calculate(null, currentPanel, null);
                _DefectStatisticResult = (DefectStatisticResult)dsAlgo.Calculate(Boxes, currentPanel, null);

                //Wipe
                _WipeReason = JudgeWipeHelper.JudgeWipeByPriorityStrategy(currentPanel, Boxes);
            }
            catch (Exception e)
            {
                throw new CaculateException(e.Message);
            }
        }
예제 #3
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            try
            {
                _CenterOffsetResult    = null;
                _RotationResult        = null;
                _StretchResult         = null;
                _DefectStatisticResult = null;

                var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

                //Calculate
                CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
                RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());
                StretchAlgorithm sAlgo  = new StretchAlgorithm();
                DefectStatistic  dsAlgo = new DefectStatistic();


                _CenterOffsetResult    = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
                _RotationResult        = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);
                _StretchResult         = (StretchResult)sAlgo.Calculate(null, currentPanel, null);
                _DefectStatisticResult = (DefectStatisticResult)dsAlgo.Calculate(Boxes, currentPanel, null);//=>從failbox來
            }
            catch (Exception e)
            {
                throw new CaculateException(e.Message);
            }
        }
예제 #4
0
        private static void TestTiltSensor(RotationResult actualRotationResult, RotationResult expectedRotationResult, double toleranceDegrees)
        {
            // X axis
            Console.WriteLine($"Expected rotation X: {expectedRotationResult.XRotation}°. Actual rotation X: {actualRotationResult.XRotation}°. Tolerance: +{toleranceDegrees}/-{toleranceDegrees}");
            if (actualRotationResult.XRotation <= expectedRotationResult.XRotation + toleranceDegrees && actualRotationResult.XRotation >= expectedRotationResult.XRotation - toleranceDegrees)
            {
                ConsoleHelper.WriteLine($"Test {_testNumber} 'rotation X' passed", ConsoleColor.Green);
            }
            else
            {
                ConsoleHelper.WriteLine($"Test {_testNumber} 'rotation X' failed", ConsoleColor.Red);
            }

            // Y axis
            Console.WriteLine($"Expected rotation Y: {expectedRotationResult.YRotation}°. Actual rotation Y: {actualRotationResult.YRotation}°. Tolerance: +{toleranceDegrees}/-{toleranceDegrees}");
            if (actualRotationResult.YRotation <= expectedRotationResult.YRotation + toleranceDegrees && actualRotationResult.YRotation >= expectedRotationResult.YRotation - toleranceDegrees)
            {
                ConsoleHelper.WriteLine($"Test {_testNumber} 'rotation Y' passed", ConsoleColor.Green);
            }
            else
            {
                ConsoleHelper.WriteLine($"Test {_testNumber} 'rotation Y' failed", ConsoleColor.Red);
            }

            _testNumber++;
        }
예제 #5
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            try
            {
                _CenterOffsetResult    = null;
                _RotationResult        = null;
                _StretchResult         = null;
                _DefectStatisticResult = null;

                var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

                //Calculate
                CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
                RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());
                StretchAlgorithm sAlgo  = new StretchAlgorithm();
                DefectStatistic  dsAlgo = new DefectStatistic();
                //Yamaha該方法和Ese要計算 each box的HAV percentage 平均功能一致,故重用
                PadHAVAvg padAvgAlgo = new PadHAVAvg();

                _CenterOffsetResult    = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
                _RotationResult        = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);
                _StretchResult         = (StretchResult)sAlgo.Calculate(null, currentPanel, null);
                _DefectStatisticResult = (DefectStatisticResult)dsAlgo.Calculate(Boxes, currentPanel, null); //=>從failbox來
                _PadHAVAvgResult       = (PadHAVAvgResult)padAvgAlgo.Calculate(Boxes, null, null);           //YAMAHA需要額外的avg統計
                _WipeReason            = JudgeWipeHelper.JudgeWipeByPriorityStrategy(currentPanel, Boxes);
            }
            catch (Exception e)
            {
                throw new CaculateException(e.Message);
            }
        }
        private ContinousBendingMomentLoad(ILoadWithPosition startPosition, ILoadWithPosition endPosition)
            : base(startPosition, endPosition)
        {
            BendingMomentResult = new BendingMomentResult(this);

            RotationResult           = new RotationResult(this);
            VerticalDeflectionResult = new VerticalDeflectionResult(this);
        }
예제 #7
0
 public void SetRotationResult(double xRotation, double yRotation)
 {
     this.rotationResult = new RotationResult
     {
         XRotation = xRotation,
         YRotation = yRotation
     };
 }
예제 #8
0
        public Beam(IList <ISpan> spans, ICollection <INode> nodes)
        {
            Spans = spans ?? throw new ArgumentNullException(nameof(spans));
            Nodes = nodes ?? throw new ArgumentNullException(nameof(nodes));

            GlobalStiffnessMatrix      = new GlobalStiffnessMatrix(this);
            NormalForceResult          = new NormalForceResult(this);
            ShearResult                = new ShearResult(this);
            BendingMomentResult        = new BendingMomentResult(this);
            HorizontalDeflectionResult = new HorizontalDeflectionResult(this);
            VerticalDeflectionResult   = new VerticalDeflectionResult(this);
            RotationResult             = new RotationResult(this);
        }
예제 #9
0
        private ContinousAngledLoad(ILoadWithPosition startPosition, ILoadWithPosition endPosition, double angle)
            : base(startPosition, endPosition)
        {
            Angle = angle;
            SetContinousLoads();

            NormalForceResult   = new NormalForceResult(_horizontalContinousLoad);
            ShearResult         = new ShearResult(_verticalContinousLoad);
            BendingMomentResult = new BendingMomentResult(_verticalContinousLoad);

            RotationResult             = new RotationResult(_verticalContinousLoad);
            HorizontalDeflectionResult = new HorizontalDeflectionResult(_horizontalContinousLoad);
            VerticalDeflectionResult   = new VerticalDeflectionResult(_verticalContinousLoad);
        }
예제 #10
0
        public void BendingMomentLoadResults_GetValueForRotationTest_Success()
        {
            var span = new Mock <ISpan>();

            span.Setup(s => s.Material.YoungModulus).Returns(2);
            span.Setup(s => s.Section.MomentOfInteria).Returns(4);

            var continousLoad = new Mock <IContinousLoad>();

            continousLoad.Setup(cl => cl.StartPosition.Value).Returns(5);

            var rotationResult = new RotationResult(continousLoad.Object);

            var result = rotationResult.GetValue(span.Object, distanceFromLeftSide: 4, currentLength:  1);

            Assert.That(result, Is.EqualTo(2.8125));
        }
예제 #11
0
        public void SpanExtendLoadResult_GetValueForRotationTest_Success()
        {
            var continousLoad = new Mock <IContinousLoad>();

            continousLoad.Setup(cl => cl.StartPosition.Value).Returns(0);
            continousLoad.Setup(cl => cl.EndPosition.Value).Returns(3);

            var span = new Mock <ISpan>();

            span.Setup(s => s.Section.SolidHeight).Returns(3);

            var rotationResult = new RotationResult(continousLoad.Object);

            var result = rotationResult.GetValue(span.Object, distanceFromLeftSide: 4, currentLength: 1);

            Assert.That(result, Is.EqualTo(-0.0003));
        }
예제 #12
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            _CenterOffsetResult = null;
            _RotationResult     = null;
            _StretchResult      = null;

            var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

            //Calculate
            CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
            RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());
            StretchAlgorithm sAlgo = new StretchAlgorithm();

            _CenterOffsetResult = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
            _RotationResult     = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);
            _StretchResult      = (StretchResult)sAlgo.Calculate(null, currentPanel, null);
            _WipeReason         = JudgeWipeHelper.JudgeWipeByPriorityStrategy(currentPanel, Boxes);
        }
예제 #13
0
        public void SetUpData()
        {
            var continousLoad = new Mock <IContinousLoad>();

            continousLoad.Setup(cl => cl.StartPosition.Value).Returns(1);
            continousLoad.Setup(cl => cl.StartPosition.Position).Returns(1);
            continousLoad.Setup(cl => cl.EndPosition.Value).Returns(3);
            continousLoad.Setup(cl => cl.EndPosition.Position).Returns(7);
            continousLoad.Setup(cl => cl.Length)
            .Returns(continousLoad.Object.EndPosition.Position - continousLoad.Object.StartPosition.Position);

            var span = new Mock <ISpan>();

            span.Setup(s => s.Material.YoungModulus).Returns(2);
            span.Setup(s => s.Section.MomentOfInteria).Returns(4);
            _span = span.Object;

            _rotationResult = new RotationResult(continousLoad.Object);
        }
예제 #14
0
        public override void Calculate(InspectedPanel currentPanel, object file)
        {
            try
            {
                var Boxes = GetCandidateBoxes(currentPanel, PrinterCommonSetting);

                //Calculate
                CenterOffsetCorrectionAlgorithm cocAlgo = new CenterOffsetCorrectionAlgorithm(PrinterCommonSetting.Clone());
                RotationCorrectionAlgorithm     rcAlgo  = new RotationCorrectionAlgorithm(PrinterCommonSetting.Clone());

                PadHAVAvg yamahaAlgo = new PadHAVAvg();

                _CenterOffsetResult = (CenterOffsetResult)cocAlgo.Calculate(Boxes, currentPanel, null);
                _RotationResult     = (RotationResult)rcAlgo.Calculate(Boxes, currentPanel, _CenterOffsetResult);

                _PadHAVAvgResult = (PadHAVAvgResult)yamahaAlgo.Calculate(Boxes, null, null);//YAMAHA需要額外的avg統計
            }
            catch (Exception e)
            {
                throw new CaculateException(e.Message);
            }
        }
 private UpDownTemperatureDifferenceLoad(ILoadWithPosition startPosition, ILoadWithPosition endPosition)
     : base(startPosition, endPosition)
 {
     RotationResult           = new RotationResult(this);
     VerticalDeflectionResult = new VerticalDeflectionResult(this);
 }