﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swcommands;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;


namespace Simple3dpart1
{
    public partial class Form1 : Form
    {

        double height, D_int, D_ext;
        public Form1()
        {
            InitializeComponent();
        }

        SldWorks SwApp; //Object App SW
        IModelDoc2 swModel;

      

        //Build button
        private void button1_Click(object sender, EventArgs e)
        {
            
            {
                
                //Kill Process
                Process[] processes = Process.GetProcessesByName("SLDWORKS");

                foreach (Process process in processes)
                {
                    process.CloseMainWindow();
                    process.Kill();
                }


                
                object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("SldWorks.Application"));

                SwApp = (SldWorks)processSW; 
                SwApp.Visible = true;


                SwApp.NewPart(); //Створити нову деталь
                swModel = SwApp.IActiveDoc2; //Створити 3D документ

                //Вибрати вид спереду
                swModel.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, false, 0, null, 0);
                //Створити ескіз на обраній площині
                swModel.SketchManager.InsertSketch(true);
                
                swModel.ClearSelection2(true);
                //створити ескіз прямокутника для отримання циліндра
                swModel.SketchManager.CreateLine(0, 0, 0, D_ext/2/1000, 0, 0); //Line_1
                swModel.SketchManager.CreateLine(D_ext / 2 / 1000, 0, 0, D_ext / 2 / 1000, height/1000, 0);  //Line_2
                swModel.SketchManager.CreateLine(D_ext / 2 / 1000, height / 1000, 0, 0, height / 1000, 0); //Line_3
                swModel.SketchManager.CreateLine(0, height / 1000, 0, 0, 0, 0); //Line_4

                swModel.ClearSelection2(true);
                // створити вісь обертання
                swModel.SketchManager.CreateCenterLine(0, height / 1000, 0, 0, 0, 0); //Axis_Line
                swModel.SketchManager.InsertSketch(true);

                // побудувати циліндр обертанням
                swModel.FeatureManager.FeatureRevolve2(true, true, false, false, false, false, 0, 0, 6.2831853071796, 
                    0, false, false, 0.01, 0.01, 0, 0, 0, true, true, true);

                // створити допоміжну площину Plane1 паралельну площині "Спереди" ("Top Plane")
                swModel.Extension.SelectByID2("Top Plane", "PLANE", 0, 0, 0, false, 0, null, 0);
                swModel.FeatureManager.InsertRefPlane(8, height / 1000, 0, 0, 0, 0);

                //Створити ескіз кола ("Sketch2") на допоміжній площині
                swModel.Extension.SelectByID2("Plane1", "PLANE", 0, 0, 0, false, 0, null, 0);
                swModel.SketchManager.CreateCircleByRadius(0, 0, height / 1000, D_int / 2 / 1000);
                swModel.SketchManager.InsertSketch(true);

                // побудувати отвір в циліндрі на повну його висоту
                swModel.Extension.SelectByID2("Sketch2", "SKETCH", 0, 0, height / 1000, false, 0, null, 0);
                swModel.FeatureManager.FeatureCut3(true, false, false, 0, 0, height / 1000, height / 1000, false, false, false, 
                    false, 0, 0, false, false, false, false, false, true, true, true, true, false, 0, 0, false);
                swModel.ClearSelection2(true);
                swModel.ViewZoomtofit();
                
                // зберігти файл 3D-моделі. Вказати необхідний шлях
                // swModel.SaveAs("c:\\cs\\Cylinder.sldprt");
                
                Application.Exit();
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            height = double.Parse(textBox1.Text);
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            D_ext = double.Parse(textBox2.Text);
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            D_int = double.Parse(textBox3.Text);
        }
    }
}

