프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / APIDConverter / AutoModeling.cs @ 74a0c9d6

이력 | 보기 | 이력해설 | 다운로드 (5.94 KB)

1 74a0c9d6 gaqhf
using System;
2
using System.Collections.Generic;
3
using System.Configuration;
4
using System.Data;
5
using System.Data.Common;
6
using System.Data.SqlClient;
7
using System.IO;
8
9
using Autodesk.AutoCAD.ApplicationServices;
10
using Autodesk.AutoCAD.ApplicationServices.Core;
11
using Autodesk.AutoCAD.DatabaseServices;
12
using Autodesk.AutoCAD.EditorInput;
13
using Autodesk.AutoCAD.Geometry;
14
using Autodesk.AutoCAD.Interop;
15
using Autodesk.AutoCAD.Interop.Common;
16
using Autodesk.AutoCAD.Runtime;
17
using Autodesk.AutoCAD.Windows;
18
19
20
namespace AVEVA.PID.CustomizationUtility
21
{
22
    public class AutoModeling
23
    {
24
        Autodesk.Windows.RibbonCombo pipeStyleCombo = null;
25
        Autodesk.Windows.RibbonChecklistButton autoLabelCheckListButton = null;
26
27
        private void InitGUI()
28
        {
29
            Autodesk.Windows.RibbonItemCollection items = GUI.RibbonHelper.GetPanelItems("ID_PIPE_PANEL");
30
            object objPipeStyle = GUIUtils.FindItem(items, "PIPESTYLE");
31
            if (objPipeStyle != null)
32
                pipeStyleCombo = objPipeStyle as Autodesk.Windows.RibbonCombo;
33
            object objAutoLabel = GUIUtils.FindItem(items, "Auto Label");
34
            if (objAutoLabel != null)
35
                autoLabelCheckListButton = objAutoLabel as Autodesk.Windows.RibbonChecklistButton;
36
37
38
        }
39
        private void SetAutoLabelUnCehck()
40
        {
41
            if (autoLabelCheckListButton != null)
42
            {
43
                foreach (var item in autoLabelCheckListButton.Items)
44
                {
45
                    if (item.GetType() == typeof(Autodesk.Windows.RibbonButton))
46
                    {
47
                        Autodesk.Windows.RibbonButton ribbonButton = item as Autodesk.Windows.RibbonButton;
48
                        if (ribbonButton.IsChecked)
49
                            ribbonButton.IsChecked = false;
50
                    }
51
                }
52
            }
53
        }
54
55
        private void SetPipeStyle(string style)
56
        {
57
            if (pipeStyleCombo.Current != null)
58
            {
59
                Autodesk.Windows.RibbonButton button = pipeStyleCombo.Current as Autodesk.Windows.RibbonButton;
60
                if (button.AutomationName != style)
61
                {
62
                    foreach (var item in pipeStyleCombo.Items)
63
                    {
64
                        Autodesk.Windows.RibbonButton loop = item as Autodesk.Windows.RibbonButton;
65
                        if (loop.AutomationName == style)
66
                        {
67
                            pipeStyleCombo.Current = loop;
68
                            break;
69
                        }
70
                    }
71
                }
72
            }
73
        }
74
75
        private string ReadDrawingLastLine()
76
        {
77
            string sHandle = string.Empty;
78
            SqlConnection connection = null;
79
            try
80
            {
81
                connection = new SqlConnection();
82
                connection.ConnectionString = DB.DB.GetConnectionString();
83
                connection.Open();
84
85
                string strQry = string.Format("Select Handle from Pipe Where id = (SELECT MAX(id) FROM Pipe WHERE DrawingId = '{0}')", "Test");
86
                SqlCommand cmd = new SqlCommand();
87
                cmd.Connection = connection;
88
                cmd.CommandText = strQry;
89
                cmd.CommandType = CommandType.Text;
90
91
                SqlDataAdapter da = new SqlDataAdapter(cmd);
92
                System.Data.DataTable dt = new System.Data.DataTable();
93
                da.Fill(dt);
94
                if (dt.Rows.Count == 1)
95
                    sHandle = dt.Rows[0][0].ToString();
96
97
                dt.Dispose();
98
                da.Dispose();
99
            }
100
            catch (System.Exception)
101
            { }
102
            finally
103
            {
104
                if (connection != null)
105
                    connection.Close();
106
            }
107
108
            return sHandle;
109
        }
110
111
        #region Drawing Method
112
113
        private string DrawPipe(string style, List<string> coordinates)
114
        {
115
            SetPipeStyle(style);
116
117
            string prevHandle = ReadDrawingLastLine();
118
119
            Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
120
            Editor editor = acDoc.Editor;
121
            List<object> commandParam = new List<object>();
122
            //command name
123
            commandParam.Add("DRPIPE");
124
            //coordinate
125
            foreach (var item in coordinates)
126
                commandParam.Add(item);
127
            //enter
128
            commandParam.Add(null);
129
            //enter
130
            commandParam.Add(null);
131
132
            editor.Command(commandParam.ToArray());
133
134
            string newHandle = ReadDrawingLastLine();
135
            if (prevHandle == newHandle)
136
                return string.Empty;
137
138
            return newHandle;
139
        }
140
        private void DrawPipe(string style, List<string> coordinates, ObjectId objectId)
141
        {
142
            SetPipeStyle(style);
143
144
            Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
145
            Editor editor = acDoc.Editor;
146
            List<object> commandParam = new List<object>();
147
            //command name
148
            commandParam.Add("DRPIPE");
149
            //coordinate
150
            foreach (var item in coordinates)
151
                commandParam.Add(item);
152
            //enter
153
            commandParam.Add(null);
154
155
            //Input Object ID
156
            commandParam.Add(objectId);
157
158
            //enter
159
            commandParam.Add(null);
160
161
            editor.Command(commandParam.ToArray());
162
        }
163
164
        #endregion
165
166
        #region Test Source
167
168
        public void test()
169
        {
170
            InitGUI();
171
172
            DrawPipe("Main Pipe", new List<string>() { "2,100", "100,100" });
173
174
            DrawPipe("Main Pipe", new List<string>() { "2,200", "100,200" });
175
176
            DrawPipe("Sub Pipe", new List<string>() { "50,100", "50,200" });
177
        }
178
179
        public static void TEST()
180
        {
181
            AutoModeling auto = new AutoModeling();
182
            auto.test();
183
        }
184
        #endregion
185
    }
186
}
클립보드 이미지 추가 (최대 크기: 500 MB)