1
|
using System;
|
2
|
using System.Collections.Generic;
|
3
|
using System.ComponentModel;
|
4
|
using System.Drawing;
|
5
|
using System.Data;
|
6
|
using System.Linq;
|
7
|
using System.Text;
|
8
|
using System.Threading.Tasks;
|
9
|
using System.Windows.Forms;
|
10
|
using System.Threading;
|
11
|
using System.IO;
|
12
|
using Microsoft.VisualBasic;
|
13
|
using Ingr.RAD2D;
|
14
|
using Converter.BaseModel;
|
15
|
using Converter.SPPID.Properties;
|
16
|
using Converter.SPPID.DB;
|
17
|
using Converter.SPPID.Util;
|
18
|
using Converter.SPPID.Form;
|
19
|
using Converter.SPPID.Model;
|
20
|
using Plaice;
|
21
|
using Llama;
|
22
|
using DevExpress.XtraSplashScreen;
|
23
|
using Newtonsoft.Json;
|
24
|
using System.Runtime.InteropServices;
|
25
|
using System.Reflection;
|
26
|
using Converter.SPPID.OPC;
|
27
|
|
28
|
namespace Converter.SPPID.Wrapper
|
29
|
{
|
30
|
public partial class ConverterDocking : UserControl
|
31
|
{
|
32
|
Ingr.RAD2D.Application application;
|
33
|
public ConverterDocking()
|
34
|
{
|
35
|
InitializeComponent();
|
36
|
|
37
|
dynamic dApplication = Interaction.GetObject("", "PIDAutomation.Application");
|
38
|
WrapperApplication wApp = new WrapperApplication(dApplication.Application);
|
39
|
application = wApp.RADApplication;
|
40
|
|
41
|
ReleaseCOMObjects(dApplication);
|
42
|
dApplication = null;
|
43
|
try
|
44
|
{
|
45
|
textEditDrawingX.EditValue = Settings.Default.DrawingX;
|
46
|
textEditDrawingY.EditValue = Settings.Default.DrawingY;
|
47
|
|
48
|
Project_Info _ProjectInfo = Project_Info.GetInstance();
|
49
|
_ProjectInfo.DefaultPath = Settings.Default.LatestProjectPath;
|
50
|
}
|
51
|
catch (Exception ex)
|
52
|
{
|
53
|
StringBuilder sb = new StringBuilder();
|
54
|
sb.AppendLine(ex.Message);
|
55
|
sb.AppendLine(ex.StackTrace);
|
56
|
MessageBox.Show(sb.ToString());
|
57
|
}
|
58
|
}
|
59
|
|
60
|
/// <summary>
|
61
|
/// 선택한 도면들을 읽어서 SPPID로 변환한다.
|
62
|
/// </summary>
|
63
|
/// <param name="sender"></param>
|
64
|
/// <param name="e"></param>
|
65
|
private void btnConverter_Click(object sender, EventArgs e)
|
66
|
{
|
67
|
ConverterForm converterForm = new ConverterForm();
|
68
|
if (converterForm.ShowDialog() == DialogResult.OK)
|
69
|
{
|
70
|
//Ingr.RAD2D.Document doc = application.Documents.Add();
|
71
|
|
72
|
try
|
73
|
{
|
74
|
CloseOPCForm.Run();
|
75
|
|
76
|
for (int i = 0; i < converterForm.Documents.Count; i++)
|
77
|
{
|
78
|
SPPID_Document document = converterForm.Documents[i];
|
79
|
if (document.SetSPPIDMapping() && document.Enable)
|
80
|
{
|
81
|
using (AutoModeling modeling = new AutoModeling(document, converterForm.checkEditCloseDocument.Checked))
|
82
|
{
|
83
|
modeling.DocumentLabelText = string.Format("Drawing Name : {0} ({1}/{2})", document.DrawingName, i + 1, converterForm.Documents.Count);
|
84
|
modeling.Run();
|
85
|
}
|
86
|
}
|
87
|
}
|
88
|
}
|
89
|
catch (Exception ex)
|
90
|
{
|
91
|
MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
|
92
|
}
|
93
|
finally
|
94
|
{
|
95
|
CloseOPCForm.Stop();
|
96
|
|
97
|
//doc.SaveOnClose = false;
|
98
|
//doc.Close(false);
|
99
|
|
100
|
//dynamic dApplication = Interaction.GetObject("", "PIDAutomation.Application");
|
101
|
//dApplication.Drawings[1].CloseDrawing(false);
|
102
|
//ReleaseCOMObjects(dApplication);
|
103
|
//dApplication = null;
|
104
|
}
|
105
|
|
106
|
MessageBox.Show(Msg.EndConvert, Msg.Information, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
107
|
}
|
108
|
}
|
109
|
|
110
|
private void btnLinkOPC_Click(object sender, EventArgs e)
|
111
|
{
|
112
|
DataTable tOPCInfo = Project_DB.SelectOPCInfo();
|
113
|
DataTable tOPCRelations = Project_DB.SelectOPCRelations();
|
114
|
DataTable tDrawingInfo = Project_DB.SelectDrawingInfo();
|
115
|
dynamic dApplication = Interaction.GetObject("", "PIDAutomation.Application");
|
116
|
|
117
|
foreach (DataRow row in tOPCInfo.Rows)
|
118
|
{
|
119
|
if (!Convert.ToBoolean(row["PAIRED"]))
|
120
|
{
|
121
|
string drawingUID = row["ID2_DRAWING_UID"].ToString();
|
122
|
string OPCUID = row["ID2_OPC_UID"].ToString();
|
123
|
DataRow[] rows = tOPCRelations.Select(string.Format("(From_Drawings_UID = '{0}' AND From_OPC_UID = '{1}') OR (To_Drawings_UID = '{0}' AND To_OPC_UID = '{1}')", drawingUID, OPCUID));
|
124
|
|
125
|
if (rows.Length == 2)
|
126
|
{
|
127
|
string fromDrawingsUID1 = rows[0]["From_Drawings_UID"].ToString();
|
128
|
string fromDrawingsUID2 = rows[1]["From_Drawings_UID"].ToString();
|
129
|
string fromOPCUID1 = rows[0]["From_OPC_UID"].ToString();
|
130
|
string fromOPCUID2 = rows[1]["From_OPC_UID"].ToString();
|
131
|
string toDrawingsUID1 = rows[0]["To_Drawings_UID"].ToString();
|
132
|
string toDrawingsUID2 = rows[1]["To_Drawings_UID"].ToString();
|
133
|
string toOPCUID1 = rows[0]["To_OPC_UID"].ToString();
|
134
|
string toOPCUID2 = rows[1]["To_OPC_UID"].ToString();
|
135
|
|
136
|
DataRow[] fromDrawing = tDrawingInfo.Select(string.Format("ID2_DRAWING_UID = '{0}'", fromDrawingsUID1));
|
137
|
DataRow[] toDrawing = tDrawingInfo.Select(string.Format("ID2_DRAWING_UID = '{0}'", toDrawingsUID1));
|
138
|
DataRow[] fromOPCInfoRows = tOPCInfo.Select(string.Format("ID2_OPC_UID = '{0}'", fromOPCUID1));
|
139
|
DataRow[] toOPCInfoRows = tOPCInfo.Select(string.Format("ID2_OPC_UID = '{0}'", toOPCUID1));
|
140
|
|
141
|
if (fromOPCUID1 == toOPCUID2 && fromOPCUID2 == toOPCUID1 && fromDrawing.Length == 1 && toDrawing.Length == 1 && fromOPCInfoRows.Length == 1 && toOPCInfoRows.Length == 1)
|
142
|
{
|
143
|
DataRow fromOPCInfoRow = fromOPCInfoRows[0];
|
144
|
DataRow toOPCInfoRow = toOPCInfoRows[0];
|
145
|
string fromOPCModelId = fromOPCInfoRow["SPPID_OPC_MODELITEM_ID"].ToString();
|
146
|
string toOPCModelId = toOPCInfoRow["SPPID_OPC_MODELITEM_ID"].ToString();
|
147
|
string toDrawingName = toDrawing[0]["DRAWINGNAME"].ToString();
|
148
|
List<string[]> toOPCAttributes = JsonConvert.DeserializeObject<List<string[]>>(toOPCInfoRow["ATTRIBUTES"].ToString());
|
149
|
AutoModeling_OPC opc = new AutoModeling_OPC(dApplication, application, fromOPCModelId, toOPCModelId, toDrawingName, toOPCAttributes);
|
150
|
if (opc.Run())
|
151
|
{
|
152
|
fromOPCInfoRow["PAIRED"] = true;
|
153
|
toOPCInfoRow["PAIRED"] = true;
|
154
|
|
155
|
Project_DB.InsertOPCInfo(fromOPCInfoRow["ID2_OPC_UID"].ToString(), fromOPCInfoRow["SPPID_OPC_MODELITEM_ID"].ToString(), fromOPCInfoRow["ID2_DRAWING_UID"].ToString(), true);
|
156
|
Project_DB.InsertOPCInfo(toOPCInfoRow["ID2_OPC_UID"].ToString(), toOPCInfoRow["SPPID_OPC_MODELITEM_ID"].ToString(), toOPCInfoRow["ID2_DRAWING_UID"].ToString(), true);
|
157
|
}
|
158
|
}
|
159
|
}
|
160
|
}
|
161
|
}
|
162
|
|
163
|
tOPCInfo.Dispose();
|
164
|
tOPCRelations.Dispose();
|
165
|
tDrawingInfo.Dispose();
|
166
|
ReleaseCOMObjects(dApplication);
|
167
|
dApplication = null;
|
168
|
|
169
|
MessageBox.Show(Msg.EndConvert, Msg.Information, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
170
|
}
|
171
|
|
172
|
public void ReleaseCOMObjects(params object[] objVars)
|
173
|
{
|
174
|
int intNewRefCount = 0;
|
175
|
foreach (object obj in objVars)
|
176
|
{
|
177
|
if (!Information.IsNothing(obj) && System.Runtime.InteropServices.Marshal.IsComObject(obj))
|
178
|
intNewRefCount = intNewRefCount + System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
|
179
|
}
|
180
|
}
|
181
|
|
182
|
private void btnGetDrawingSize_Click(object sender, EventArgs e)
|
183
|
{
|
184
|
dynamic application = Interaction.GetObject("", "PIDAutomation.Application");
|
185
|
WrapperApplication wApp = new WrapperApplication(application.Application);
|
186
|
Ingr.RAD2D.Application radApp = wApp.RADApplication;
|
187
|
|
188
|
if (radApp.ActiveSelectSet.Count > 0)
|
189
|
{
|
190
|
DependencyObject line2D = radApp.ActiveSelectSet[0] as DependencyObject;
|
191
|
if (line2D != null)
|
192
|
{
|
193
|
double minX = 0;
|
194
|
double minY = 0;
|
195
|
double maxX = 0;
|
196
|
double maxY = 0;
|
197
|
line2D.Range(out minX, out minY, out maxX, out maxY);
|
198
|
|
199
|
Settings.Default.DrawingX = maxX - minX;
|
200
|
Settings.Default.DrawingY = maxY - minY;
|
201
|
Settings.Default.Save();
|
202
|
|
203
|
textEditDrawingX.EditValue = Settings.Default.DrawingX;
|
204
|
textEditDrawingY.EditValue = Settings.Default.DrawingY;
|
205
|
}
|
206
|
else
|
207
|
MessageBox.Show(Msg.SelectLine, Msg.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
208
|
}
|
209
|
else
|
210
|
MessageBox.Show(Msg.SelectLine, Msg.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
211
|
}
|
212
|
|
213
|
#region TEST
|
214
|
private void simpleButton1_Click(object sender, EventArgs e)
|
215
|
{
|
216
|
//foreach (RADObject item in application.ActiveDocument.ActiveSheet.DrawingObjects)
|
217
|
//{
|
218
|
// DependencyObject dependencyObject = item as DependencyObject;
|
219
|
// if (dependencyObject != null)
|
220
|
// {
|
221
|
// foreach (var attributes in dependencyObject.AttributeSets)
|
222
|
// {
|
223
|
// foreach (var attribute in attributes)
|
224
|
// {
|
225
|
// if (!DBNull.Value.Equals(attribute.GetValue()) && attribute.GetValue() != null && attribute.GetValue().ToString() == "40E2CDE9781940089C37258D37FA3BCD")
|
226
|
// {
|
227
|
// application.ActiveSelectSet.Add(item);
|
228
|
// }
|
229
|
// }
|
230
|
// }
|
231
|
// }
|
232
|
//}
|
233
|
|
234
|
Placement placement = new Placement();
|
235
|
LMADataSource dataSource = placement.PIDDataSource;
|
236
|
|
237
|
LMModelItem modelItem = dataSource.GetModelItem("16C45380E2EB4818A6A9BFE11F0228DE");
|
238
|
LMPipeRun pipeRun = dataSource.GetPipeRun("16C45380E2EB4818A6A9BFE11F0228DE");
|
239
|
LMSymbol symbol = dataSource.GetSymbol("F454BD9CC87C4C3AAE8282F2AB10B7E0");
|
240
|
string symbolPath = string.Empty;
|
241
|
if (modelItem != null)
|
242
|
{
|
243
|
foreach (LMRepresentation rep in modelItem.Representations)
|
244
|
{
|
245
|
if (!DBNull.Value.Equals(rep.get_FileName()) && !string.IsNullOrEmpty(rep.get_FileName()))
|
246
|
{
|
247
|
symbolPath = rep.get_FileName();
|
248
|
string newFileName = @"\Piping\Routing\Process Lines\Secondary Piping.sym";
|
249
|
if (symbolPath != newFileName)
|
250
|
{
|
251
|
|
252
|
//symbol.set_FileName(newFileName);
|
253
|
placement.PIDReplaceSymbol(newFileName, ref symbol);
|
254
|
symbol.Commit();
|
255
|
//rep.set_FileName(newFileName);
|
256
|
//rep.Commit();
|
257
|
|
258
|
}
|
259
|
break;
|
260
|
}
|
261
|
}
|
262
|
}
|
263
|
|
264
|
return;
|
265
|
Thread outThread = new Thread(func2 =>
|
266
|
{
|
267
|
for (int i = 100; i < 120; i++)
|
268
|
{
|
269
|
Thread thread = new Thread(func =>
|
270
|
{
|
271
|
dynamic application = Interaction.GetObject("", "PIDAutomation.Application");
|
272
|
//WrapperApplication wApp = new WrapperApplication(application.Application);
|
273
|
//Ingr.RAD2D.Application radApp = wApp.RADApplication;
|
274
|
dynamic drawing = application.Drawings.Add("Unit1", "D-Size.pid", i.ToString(), i.ToString());//application.Drawings.OpenDrawing("123");
|
275
|
|
276
|
Thread.Sleep(5000);
|
277
|
|
278
|
drawing.CloseDrawing(true);
|
279
|
|
280
|
//application.Quit();
|
281
|
ReleaseCOMObjects(application);
|
282
|
application = null;
|
283
|
ReleaseCOMObjects(drawing);
|
284
|
drawing = null;
|
285
|
Thread.Sleep(5000);
|
286
|
});
|
287
|
thread.Start();
|
288
|
thread.Join();
|
289
|
}
|
290
|
});
|
291
|
outThread.Start();
|
292
|
|
293
|
|
294
|
|
295
|
|
296
|
|
297
|
//radApp.Documents.Add(@"\\server70\DEVDOF1Site\GS\PLANT\PLANT1\Unit1\11111.pid");
|
298
|
|
299
|
//radApp.ActiveDocument.Close(true);
|
300
|
//drawing.CloseDrawing(true);
|
301
|
|
302
|
//ReleaseCOMObjects(application);
|
303
|
//ReleaseCOMObjects(drawing);
|
304
|
//application = null;
|
305
|
//wApp = null;
|
306
|
//radApp = null;
|
307
|
//drawing = null;
|
308
|
}
|
309
|
|
310
|
private void AutoJoinPipeRun()
|
311
|
{
|
312
|
dynamic application = Interaction.GetObject("", "PIDAutomation.Application");
|
313
|
WrapperApplication wApp = new WrapperApplication(application.Application);
|
314
|
Ingr.RAD2D.Application radApp = wApp.RADApplication;
|
315
|
|
316
|
string modelItemId = null;
|
317
|
List<double[]> vertices = new List<double[]>();
|
318
|
if (radApp.ActiveSelectSet.Count == 0)
|
319
|
{
|
320
|
return;
|
321
|
}
|
322
|
dynamic OID = radApp.ActiveSelectSet[0].Key();
|
323
|
DependencyObject drawingObject = radApp.ActiveDocument.ActiveSheet.DrawingObjects[OID];
|
324
|
foreach (var attributes in drawingObject.AttributeSets)
|
325
|
{
|
326
|
foreach (var attribute in attributes)
|
327
|
{
|
328
|
if (attribute.Name == "ModelID")
|
329
|
modelItemId = attribute.GetValue().ToString();
|
330
|
}
|
331
|
}
|
332
|
radApp.ActiveSelectSet.RemoveAll();
|
333
|
|
334
|
}
|
335
|
#endregion
|
336
|
|
337
|
|
338
|
[DllImport("user32.dll")]
|
339
|
public static extern int FindWindow(string lpClassName, string lpWindowName);
|
340
|
|
341
|
[DllImport("user32.dll", SetLastError = true)]
|
342
|
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int processId);
|
343
|
|
344
|
private void ConverterDocking_Load(object sender, EventArgs e)
|
345
|
{
|
346
|
#if DEBUG
|
347
|
this.layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
|
348
|
#else
|
349
|
this.layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
|
350
|
#endif
|
351
|
|
352
|
}
|
353
|
}
|
354
|
}
|