Esempio n. 1
0
        //* BUTTON_CONVERT *//
        private void button_Convert_Click(object sender, EventArgs e)
        {
            IplImage tempImgBox;

            Took3D.SET_Z = Int32.Parse(textBox_SetZ.Text);
            if (isImgOpen == true)
            {
                switch (currentMode)
                {
                // <<DEFAULT>>
                case Mode.DEFAULT:
                    // 흰색 윤곽선 추가.
                    tempImgBox = new IplImage(imgBox.Width + 10, imgBox.Height + 10, BitDepth.U8, 1);
                    imgBox.CopyMakeBorder(tempImgBox, new CvPoint(5, 5), BorderType.Constant, CvScalar.ScalarAll(0xFF));

                    // 모델링
                    Took3D.START(tempImgBox);

                    if (radioButton_Polygon.Checked == true)
                    {
                        bool checkBottomMode = Took3D.bottomPolygon();
                        if (checkBottomMode == false)
                        {
                            radioButton_Background.Checked = true;
                        }

                        Took3D.binarySTL_Bottom();
                    }
                    else if (radioButton_Background.Checked == true)
                    {
                        Took3D.bottomBackground();
                        Took3D.binarySTL_BackBottom();
                    }
                    else
                    {
                        Took3D.binarySTL();
                    }
                    break;

                // <<STAMP>>
                case Mode.STAMP:
                    tempImgBox = mode_Stamp(imgBox);
                    Took3D.START(tempImgBox);
                    Took3D.stampModeling();
                    Took3D.binarySTL_BackBottom();

                    break;

                // <<DOT>>
                case Mode.DOT:
                    // 1. 크기조정
                    tempImgBox = Dot_Resize(imgBox);

                    // 2. 이미지 확대 ( 도트 원형 유지 )
                    IplImage dot_tmp = new IplImage(tempImgBox.Width * 10, tempImgBox.Height * 10, tempImgBox.Depth, tempImgBox.NChannels);
                    tempImgBox.Resize(dot_tmp, Interpolation.Cubic);
                    tempImgBox.Dispose();

                    // 3. 도트 이미지 생성
                    tempImgBox = mode_Dot(dot_tmp);
                    dot_tmp.Dispose();

                    // 4. 흰색윤곽추가
                    dot_tmp = new IplImage(tempImgBox.Width + 4, tempImgBox.Height + 4, tempImgBox.Depth, tempImgBox.NChannels);
                    tempImgBox.CopyMakeBorder(dot_tmp, new CvPoint(2, 2), BorderType.Constant, CvScalar.ScalarAll(0xFF));
                    tempImgBox = dot_tmp;

                    // 5. 이진화 시작
                    Took3D.START(tempImgBox);
                    Took3D.binarySTL();
                    break;


                // <<RING>>
                case Mode.RING:
                    tempImgBox = mode_Ring(imgBox);
                    Took3D.START(tempImgBox);
                    Took3D.binarySTL();
                    break;


                default:
                    break;
                }

                pictureBox.ImageIpl = Took3D.resultImage;

                //Console.WriteLine("minX : {0} minY : {1} maxX : {2} maxY : {3}", Took3D.minX, Took3D.minY, Took3D.maxX, Took3D.maxY);

                // 파일 저장 처리
                saveFileDialog1.Filter = "STL File(*.stl)|*.stl";
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    FileInfo file = new FileInfo(@"C:\TookTemp\output");
                    if (file.Exists)
                    {
                        File.Copy(@"C:\TookTemp\output", saveFileDialog1.FileName, true);
                        MessageBox.Show("완료");
                    }
                }
                //tempImgBox.Dispose();
            }
            else
            {
                MessageBox.Show("이미지를 선택해주세요!");
            }
        }