hytos / DTI_PID / APIDConverter / AutoModeling.cs @ c6df982b
이력 | 보기 | 이력해설 | 다운로드 (47.8 KB)
1 | 74a0c9d6 | gaqhf | using System; |
---|---|---|---|
2 | using System.Collections.Generic; |
||
3 | 016701e5 | gaqhf | using System.Collections; |
4 | 74a0c9d6 | gaqhf | using System.Configuration; |
5 | using System.Data; |
||
6 | using System.Data.Common; |
||
7 | using System.Data.SqlClient; |
||
8 | using System.IO; |
||
9 | 5c05308b | gaqhf | using System.Runtime.CompilerServices; |
10 | using Microsoft.VisualBasic.CompilerServices; |
||
11 | c8b025e0 | gaqhf | using System.Runtime.InteropServices; |
12 | using System.Threading; |
||
13 | 74a0c9d6 | gaqhf | |
14 | using Autodesk.AutoCAD.ApplicationServices; |
||
15 | using Autodesk.AutoCAD.ApplicationServices.Core; |
||
16 | using Autodesk.AutoCAD.DatabaseServices; |
||
17 | using Autodesk.AutoCAD.EditorInput; |
||
18 | using Autodesk.AutoCAD.Geometry; |
||
19 | using Autodesk.AutoCAD.Interop; |
||
20 | using Autodesk.AutoCAD.Interop.Common; |
||
21 | using Autodesk.AutoCAD.Runtime; |
||
22 | using Autodesk.AutoCAD.Windows; |
||
23 | |||
24 | 1c5bd296 | gaqhf | using AVEVA.PID.Components; |
25 | using AVEVA.PID.GUI; |
||
26 | using AVEVA.PID.Common; |
||
27 | using AVEVA.PID.DWGSelector; |
||
28 | 495bb8f5 | gaqhf | using AVEVA.PID.Utilities; |
29 | 1c5bd296 | gaqhf | |
30 | 14540282 | gaqhf | using AVEVA.PID.CustomizationUtility.DB; |
31 | using AVEVA.PID.CustomizationUtility.Model; |
||
32 | using AVEVA.PID.CustomizationUtility.Properties; |
||
33 | 74a0c9d6 | gaqhf | |
34 | aba318eb | gaqhf | using DevExpress.XtraSplashScreen; |
35 | |||
36 | 74a0c9d6 | gaqhf | namespace AVEVA.PID.CustomizationUtility |
37 | { |
||
38 | public class AutoModeling |
||
39 | { |
||
40 | c8b025e0 | gaqhf | [DllImport("user32")] |
41 | public static extern int FindWindow(string lpClassName, string lpWindowName); |
||
42 | |||
43 | 1c5bd296 | gaqhf | public static AutoModeling Running { get; set; } |
44 | 14540282 | gaqhf | Model.Document document; |
45 | dfb760ef | gaqhf | AvevaInfo avevaInfo; |
46 | 495bb8f5 | gaqhf | |
47 | a19bd6e2 | gaqhf | private void SetConvertRule() |
48 | { |
||
49 | #region OPC Setting |
||
50 | document.OPCs.Sort(SortOPC); |
||
51 | int SortOPC(OPC a, OPC b) |
||
52 | { |
||
53 | if (a.FlowType == FlowType.In) |
||
54 | return 1; |
||
55 | else |
||
56 | return 0; |
||
57 | } |
||
58 | #endregion |
||
59 | } |
||
60 | |||
61 | dfb760ef | gaqhf | public AutoModeling(Model.Document document) |
62 | 74a0c9d6 | gaqhf | { |
63 | 14540282 | gaqhf | this.document = document; |
64 | dfb760ef | gaqhf | avevaInfo = AvevaInfo.GetInstance(); |
65 | 74a0c9d6 | gaqhf | } |
66 | |||
67 | 1c5bd296 | gaqhf | public void CreateDrawing() |
68 | 46756c13 | gaqhf | { |
69 | 1c5bd296 | gaqhf | string outPath = Project_DB.GetDirectiveValue("DRGPTH"); |
70 | string tempPath = Path.GetTempPath(); |
||
71 | string selectedFullPath = Path.Combine(tempPath, document.AvevaTemplateName + ".DWT"); |
||
72 | |||
73 | DWTSelector.strDrawingNumber = document.AvevaDrawingNumber; |
||
74 | DWTSelector.strSheetNumber = document.AvevaSheetNumber; |
||
75 | DWTSelector.strCadFileName = document.AvevaDrawingNumber + document.AvevaSheetNumber; |
||
76 | DWTSelector.strCadFilePath = outPath; |
||
77 | |||
78 | try |
||
79 | 46756c13 | gaqhf | { |
80 | 1c5bd296 | gaqhf | string text = ReadWriteDrawingData.ReadTemplateData(document.AvevaTemplateName, document.AvevaTemplateID, selectedFullPath, false); |
81 | Autodesk.AutoCAD.Interop.AcadApplication acadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication; |
||
82 | Autodesk.AutoCAD.Interop.AcadDocument acadDocument = acadApplication.Documents.Add(text); |
||
83 | |||
84 | Commands.addLatestPidvesrionToDictionary(); |
||
85 | AVVPropCmd.ActivateAcad(); |
||
86 | |||
87 | if (acadDocument != null) |
||
88 | { |
||
89 | Running = this; |
||
90 | acadApplication.ActiveDocument = acadDocument; |
||
91 | acadDocument.SendCommand("QSAVE "); |
||
92 | acadDocument.SendCommand("APPIDRun "); |
||
93 | 9dab7146 | gaqhf | acadDocument.SendCommand("QSAVE "); |
94 | 1c5bd296 | gaqhf | Running = null; |
95 | } |
||
96 | 46756c13 | gaqhf | } |
97 | 1c5bd296 | gaqhf | catch (System.Exception ex) |
98 | { |
||
99 | |||
100 | } |
||
101 | |||
102 | GC.Collect(); |
||
103 | } |
||
104 | public void Run() |
||
105 | { |
||
106 | 016701e5 | gaqhf | try |
107 | { |
||
108 | aba318eb | gaqhf | SplashScreenManager.ShowForm(typeof(APIDSplashScreen), true, true); |
109 | dfb760ef | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllStepCount, 8); |
110 | aba318eb | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetDocumentName, document.AvevaDrawingNumber + document.AvevaSheetNumber); |
111 | 932933ed | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetParent, Autodesk.AutoCAD.ApplicationServices.Application.MainWindow.Handle); |
112 | |||
113 | a19bd6e2 | gaqhf | SetConvertRule(); |
114 | aba318eb | gaqhf | |
115 | 20dd244c | gaqhf | Zoom(0, 0, 10, 10); |
116 | 016701e5 | gaqhf | RunLineModeling(); |
117 | 20dd244c | gaqhf | |
118 | ZoomAll(); |
||
119 | a19bd6e2 | gaqhf | RunOPCModeling(); |
120 | 016701e5 | gaqhf | RunSymbolModeling(); |
121 | 475071f2 | gaqhf | RunTextModeling(); |
122 | 6503fec8 | gaqhf | RunNoteModeling(); |
123 | c6df982b | gaqhf | |
124 | Zoom(0, 0, 10, 10); |
||
125 | dfb760ef | gaqhf | RunInputLineAttribute(); |
126 | RunInputLineNumberAttribute(); |
||
127 | RunInputSymbolAttribute(); |
||
128 | c6df982b | gaqhf | ZoomAll(); |
129 | 016701e5 | gaqhf | } |
130 | catch (System.Exception ex) |
||
131 | { |
||
132 | System.Windows.Forms.MessageBox.Show(ex.Message + @"\n" + ex.StackTrace); |
||
133 | } |
||
134 | aba318eb | gaqhf | finally |
135 | { |
||
136 | 932933ed | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.ClearParent, null); |
137 | aba318eb | gaqhf | SplashScreenManager.CloseForm(false); |
138 | } |
||
139 | 46756c13 | gaqhf | } |
140 | |||
141 | 20dd244c | gaqhf | private void Zoom(double minX, double minY, double maxX, double maxY) |
142 | { |
||
143 | Autodesk.AutoCAD.Interop.AcadApplication acadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication; |
||
144 | double[] lower = new double[3] { minX, minY, 0 }; |
||
145 | double[] upper = new double[3] { maxX, maxY, 0 }; |
||
146 | acadApplication.ZoomWindow(lower, upper); |
||
147 | acadApplication.ActiveDocument.Activate(); |
||
148 | } |
||
149 | private void ZoomAll() |
||
150 | { |
||
151 | Autodesk.AutoCAD.Interop.AcadApplication acadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication; |
||
152 | acadApplication.ZoomAll(); |
||
153 | acadApplication.ActiveDocument.Activate(); |
||
154 | } |
||
155 | |||
156 | 9dab7146 | gaqhf | #region Run Method |
157 | private void RunLineModeling() |
||
158 | 74a0c9d6 | gaqhf | { |
159 | aba318eb | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.LINES.Count); |
160 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Line Modeling"); |
||
161 | 9dab7146 | gaqhf | foreach (var item in document.LINES) |
162 | 74a0c9d6 | gaqhf | { |
163 | 53344e2c | gaqhf | if (item.Aveva.Handle == 0) |
164 | LineModeling(item); |
||
165 | aba318eb | gaqhf | |
166 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
167 | 74a0c9d6 | gaqhf | } |
168 | 9dab7146 | gaqhf | } |
169 | a19bd6e2 | gaqhf | private void RunOPCModeling() |
170 | { |
||
171 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.OPCs.Count); |
||
172 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "OPC Modeling"); |
||
173 | foreach (var item in document.OPCs) |
||
174 | { |
||
175 | if (item.Aveva.Handle == 0) |
||
176 | SymbolModeling(item); |
||
177 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
178 | } |
||
179 | } |
||
180 | 016701e5 | gaqhf | private void RunSymbolModeling() |
181 | { |
||
182 | aba318eb | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.SYMBOLS.Count); |
183 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Symbol Modeling"); |
||
184 | b90890eb | gaqhf | foreach (var item in document.SYMBOLS) |
185 | { |
||
186 | if (item.Aveva.Handle == 0) |
||
187 | SymbolModeling(item); |
||
188 | aba318eb | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
189 | b90890eb | gaqhf | } |
190 | 016701e5 | gaqhf | } |
191 | 475071f2 | gaqhf | private void RunTextModeling() |
192 | { |
||
193 | 0a8db7fe | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.Texts.Count); |
194 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Text Modeling"); |
||
195 | foreach (var item in document.Texts) |
||
196 | { |
||
197 | 6503fec8 | gaqhf | TextModeling(item); |
198 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
199 | } |
||
200 | } |
||
201 | private void RunNoteModeling() |
||
202 | { |
||
203 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.Notes.Count); |
||
204 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Note Modeling"); |
||
205 | 7a8645c9 | gaqhf | foreach (var item in document.Notes) |
206 | 6503fec8 | gaqhf | { |
207 | 7a8645c9 | gaqhf | NoteModeling(item); |
208 | 0a8db7fe | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
209 | } |
||
210 | 475071f2 | gaqhf | } |
211 | 5c05308b | gaqhf | private void RunInputLineAttribute() |
212 | { |
||
213 | dfb760ef | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.LINES.Count); |
214 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Input Line Attribute"); |
||
215 | foreach (var item in document.LINES) |
||
216 | { |
||
217 | SetLineAttribute(item); |
||
218 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
219 | } |
||
220 | 5c05308b | gaqhf | } |
221 | private void RunInputSymbolAttribute() |
||
222 | { |
||
223 | dfb760ef | gaqhf | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.SYMBOLS.Count); |
224 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Input Symbol Attribute"); |
||
225 | foreach (var item in document.SYMBOLS) |
||
226 | { |
||
227 | SetSymbolAttribute(item); |
||
228 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
229 | } |
||
230 | } |
||
231 | private void RunInputLineNumberAttribute() |
||
232 | { |
||
233 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetAllProgress, document.LINENUMBERS.Count); |
||
234 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.SetStep, "Input LineNumber Attribute"); |
||
235 | foreach (var item in document.LINENUMBERS) |
||
236 | { |
||
237 | SetLineNumberAttribute(item); |
||
238 | SplashScreenManager.Default.SendCommand(APIDSplashScreen.SplashScreenCommand.UpProgress, null); |
||
239 | } |
||
240 | 5c05308b | gaqhf | } |
241 | 9dab7146 | gaqhf | #endregion |
242 | 74a0c9d6 | gaqhf | |
243 | 9dab7146 | gaqhf | #region Modeling Method |
244 | private void LineModeling(Model.Line line) |
||
245 | { |
||
246 | 53344e2c | gaqhf | List<Model.Line> groupLine = new List<Model.Line>(); |
247 | 9dab7146 | gaqhf | List<string> points = new List<string>(); |
248 | 016701e5 | gaqhf | GetConnectedGroupLine(line, groupLine, false); |
249 | 20dd244c | gaqhf | CoordinateCorrection(groupLine); |
250 | 53344e2c | gaqhf | GetGroupLinePoints(groupLine, points); |
251 | 9dab7146 | gaqhf | |
252 | 932933ed | gaqhf | LineNumber lineNumber = null; |
253 | if (line.Aveva.Type == Model.Type.Pipe) |
||
254 | { |
||
255 | foreach (var item in groupLine) |
||
256 | { |
||
257 | lineNumber = document.LINENUMBERS.Find(x => x.CONNLINE == item.UID); |
||
258 | if (lineNumber != null) |
||
259 | { |
||
260 | GUIUtils.SetAutoLabelCheck(true); |
||
261 | c94252bf | gaqhf | AvevaThread.Run(ThreadType.LineNumberModeling, null); |
262 | 932933ed | gaqhf | break; |
263 | } |
||
264 | } |
||
265 | } |
||
266 | |||
267 | 53344e2c | gaqhf | long handle = 0; |
268 | 9dab7146 | gaqhf | if (line.Aveva.Type == Model.Type.Pipe) |
269 | 932933ed | gaqhf | handle = DrawPipe(line.Aveva.Name, points, lineNumber); |
270 | 9dab7146 | gaqhf | else if (line.Aveva.Type == Model.Type.Signal) |
271 | 53344e2c | gaqhf | handle = DrawSignal(line.Aveva.Name, points); |
272 | |||
273 | 932933ed | gaqhf | if (lineNumber != null) |
274 | c8b025e0 | gaqhf | { |
275 | 932933ed | gaqhf | GUIUtils.SetAutoLabelCheck(false); |
276 | c94252bf | gaqhf | AvevaThread.Stop(ThreadType.LineNumberModeling); |
277 | c8b025e0 | gaqhf | } |
278 | 932933ed | gaqhf | |
279 | 53344e2c | gaqhf | foreach (var item in groupLine) |
280 | item.Aveva.Handle = handle; |
||
281 | 74a0c9d6 | gaqhf | } |
282 | b90890eb | gaqhf | private void SymbolModeling(Symbol symbol) |
283 | { |
||
284 | dfb760ef | gaqhf | DataRow[] allRows = avevaInfo.AvevaSymbolTable.Select(string.Format("Symbol_Name = '{0}'", symbol.Aveva.Name)); |
285 | 495bb8f5 | gaqhf | if (allRows.Length == 1) |
286 | 2d09df82 | gaqhf | { |
287 | 495bb8f5 | gaqhf | DataRow symbolRow = allRows[0]; |
288 | bool bAngle = CheckAngle(symbolRow); |
||
289 | bool bBalloon = CheckBalloon(symbol); |
||
290 | |||
291 | 20dd244c | gaqhf | long handle = DrawSymbol(symbol, symbolRow, bAngle, bBalloon); |
292 | 495bb8f5 | gaqhf | if (handle != 0) |
293 | 2d09df82 | gaqhf | { |
294 | 495bb8f5 | gaqhf | symbol.Aveva.Handle = handle; |
295 | |||
296 | if (!bAngle) |
||
297 | { |
||
298 | d03dde83 | gaqhf | ObjectId objectId = APIDUtils.GetObjectIdByHandle(handle); |
299 | 495bb8f5 | gaqhf | if (objectId != ObjectId.Null) |
300 | SetBlockReferenceRotation(objectId, symbol.ANGLE); |
||
301 | } |
||
302 | 2d09df82 | gaqhf | } |
303 | } |
||
304 | b90890eb | gaqhf | } |
305 | 6503fec8 | gaqhf | private void TextModeling(Text text) |
306 | { |
||
307 | 20dd244c | gaqhf | if (text.TextAngle == TextAngle.None || text.ASSOCIATION) |
308 | 6503fec8 | gaqhf | return; |
309 | |||
310 | if (text.Aveva.LabelType == LabelType.SingleText) |
||
311 | a03f7b94 | gaqhf | DrawText(text.Aveva.X, text.Aveva.Y, text.Aveva.Height, text.VALUE, text.Aveva.Angle); |
312 | 6503fec8 | gaqhf | else if (text.Aveva.LabelType == LabelType.MultiText) |
313 | 7a8645c9 | gaqhf | { |
314 | string[] valueArray = text.VALUE.Split(new string[] { "\n" }, StringSplitOptions.None); |
||
315 | List<string> values = new List<string>(); |
||
316 | for (int i = 0; i < valueArray.Length; i++) |
||
317 | values.Insert(0, valueArray[i]); |
||
318 | |||
319 | for (int i = 0; i < values.Count; i++) |
||
320 | { |
||
321 | double x = text.Aveva.X; |
||
322 | double y = text.Aveva.Y; |
||
323 | int heightIndex = i; |
||
324 | |||
325 | if (text.TextAngle == TextAngle.Degree0 || text.TextAngle == TextAngle.Degree180) |
||
326 | y = y + text.Aveva.Height * i; |
||
327 | else if (text.TextAngle == TextAngle.Degree90 || text.TextAngle == TextAngle.Degree270) |
||
328 | x = x + text.Aveva.Height * i; |
||
329 | |||
330 | a03f7b94 | gaqhf | DrawText(x, y, text.Aveva.Height, values[i], text.Aveva.Angle); |
331 | 7a8645c9 | gaqhf | } |
332 | } |
||
333 | |||
334 | 6503fec8 | gaqhf | |
335 | } |
||
336 | private void NoteModeling(Model.Note note) |
||
337 | { |
||
338 | if (note.TextAngle == TextAngle.None) |
||
339 | return; |
||
340 | |||
341 | if (note.Aveva.LabelType == LabelType.SingleNote) |
||
342 | a03f7b94 | gaqhf | DrawText(note.Aveva.X, note.Aveva.Y, note.Aveva.Height, note.VALUE, note.Aveva.Angle); |
343 | 6503fec8 | gaqhf | else if (note.Aveva.LabelType == LabelType.MultiNote) |
344 | 7a8645c9 | gaqhf | { |
345 | string[] valueArray = note.VALUE.Split(new string[] { "\n" }, StringSplitOptions.None); |
||
346 | List<string> values = new List<string>(); |
||
347 | for (int i = 0; i < valueArray.Length; i++) |
||
348 | values.Insert(0, valueArray[i]); |
||
349 | |||
350 | for (int i = 0; i < values.Count; i++) |
||
351 | { |
||
352 | double x = note.Aveva.X; |
||
353 | double y = note.Aveva.Y; |
||
354 | int heightIndex = i; |
||
355 | |||
356 | if (note.TextAngle == TextAngle.Degree0 || note.TextAngle == TextAngle.Degree180) |
||
357 | y = y + note.Aveva.Height * i; |
||
358 | else if (note.TextAngle == TextAngle.Degree90 || note.TextAngle == TextAngle.Degree270) |
||
359 | x = x + note.Aveva.Height * i; |
||
360 | 6503fec8 | gaqhf | |
361 | a03f7b94 | gaqhf | DrawText(x, y, note.Aveva.Height, values[i], note.Aveva.Angle); |
362 | 7a8645c9 | gaqhf | } |
363 | } |
||
364 | 6503fec8 | gaqhf | } |
365 | 5c05308b | gaqhf | private void SetLineAttribute(Model.Line line) |
366 | { |
||
367 | |||
368 | } |
||
369 | dfb760ef | gaqhf | private void SetLineNumberAttribute(Model.LineNumber lineNumber) |
370 | { |
||
371 | c8b025e0 | gaqhf | Model.Line line = APIDUtils.FindObjectByUID(document, lineNumber.CONNLINE) as Model.Line; |
372 | c94252bf | gaqhf | if (line != null && line.Aveva.Handle != 0) |
373 | c8b025e0 | gaqhf | { |
374 | c94252bf | gaqhf | List<Tuple<string, string>> datas = new List<Tuple<string, string>>(); |
375 | c8b025e0 | gaqhf | foreach (Model.Attribute attribute in lineNumber.ATTRIBUTES) |
376 | { |
||
377 | AttributeInfo info = avevaInfo.AttributeInfo.Find(x => x.UID == attribute.UID); |
||
378 | c94252bf | gaqhf | if (info != null && !string.IsNullOrEmpty(info.APID_ATTRIBUTE)) |
379 | faba1fc7 | gaqhf | datas.Add(new Tuple<string, string>(info.APID_ATTRIBUTE, attribute.VALUE)); |
380 | c94252bf | gaqhf | } |
381 | if (datas.Count > 0) |
||
382 | { |
||
383 | c6df982b | gaqhf | double x = Math.Round((line.Aveva.Start_X + line.Aveva.End_X) / 2), y = Math.Round((line.Aveva.Start_Y + line.Aveva.End_Y) / 2); |
384 | c94252bf | gaqhf | ObjectId objectId = GetFirstPolyLineObjectId(line.Aveva.Handle); |
385 | if (!objectId.IsNull) |
||
386 | c6df982b | gaqhf | SetAttributeByAvevaForm(objectId.Handle.Value, datas, x, y); |
387 | c8b025e0 | gaqhf | } |
388 | } |
||
389 | dfb760ef | gaqhf | } |
390 | 5c05308b | gaqhf | private void SetSymbolAttribute(Model.Symbol symbol) |
391 | { |
||
392 | c8b025e0 | gaqhf | if (symbol.Aveva.Handle != 0) |
393 | 4328cb06 | gaqhf | { |
394 | c94252bf | gaqhf | List<Tuple<string, string>> datas = new List<Tuple<string, string>>(); |
395 | c8b025e0 | gaqhf | foreach (var attribute in symbol.ATTRIBUTES) |
396 | 4328cb06 | gaqhf | { |
397 | c8b025e0 | gaqhf | AttributeInfo info = avevaInfo.AttributeInfo.Find(x => x.UID == attribute.UID); |
398 | c94252bf | gaqhf | if (info != null && !string.IsNullOrEmpty(info.APID_ATTRIBUTE)) |
399 | faba1fc7 | gaqhf | datas.Add(new Tuple<string, string>(info.APID_ATTRIBUTE, attribute.VALUE)); |
400 | c94252bf | gaqhf | } |
401 | if (datas.Count > 0) |
||
402 | { |
||
403 | c6df982b | gaqhf | double x = symbol.Aveva.X, y = symbol.Aveva.Y; |
404 | d03dde83 | gaqhf | ObjectId objectId = APIDUtils.GetObjectIdByHandle(symbol.Aveva.Handle); |
405 | c94252bf | gaqhf | if (!objectId.IsNull) |
406 | c6df982b | gaqhf | SetAttributeByAvevaForm(objectId.Handle.Value, datas, x, y); |
407 | 4328cb06 | gaqhf | } |
408 | } |
||
409 | 5c05308b | gaqhf | } |
410 | c6df982b | gaqhf | private void ConvertBranchPipe(Model.Line branchLine, Model.Line mainLine) |
411 | { |
||
412 | |||
413 | } |
||
414 | 9dab7146 | gaqhf | #endregion |
415 | 74a0c9d6 | gaqhf | |
416 | #region Drawing Method |
||
417 | 932933ed | gaqhf | private long DrawPipe(string style, List<string> coordinates, LineNumber lineNumber = null) |
418 | 74a0c9d6 | gaqhf | { |
419 | 9dab7146 | gaqhf | List<long> prevHandles = GetAllGroupHandles(); |
420 | 74a0c9d6 | gaqhf | |
421 | 9dab7146 | gaqhf | GUIUtils.SetPipeStyle(style); |
422 | 14540282 | gaqhf | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
423 | 74a0c9d6 | gaqhf | Editor editor = acDoc.Editor; |
424 | List<object> commandParam = new List<object>(); |
||
425 | //command name |
||
426 | commandParam.Add("DRPIPE"); |
||
427 | //coordinate |
||
428 | foreach (var item in coordinates) |
||
429 | commandParam.Add(item); |
||
430 | 932933ed | gaqhf | |
431 | //enter Parent(null) |
||
432 | 74a0c9d6 | gaqhf | commandParam.Add(null); |
433 | |||
434 | 932933ed | gaqhf | if (lineNumber != null) |
435 | { |
||
436 | Point3d point = new Point3d(lineNumber.Aveva.X, lineNumber.Aveva.Y, 0); |
||
437 | commandParam.Add(point); |
||
438 | 475071f2 | gaqhf | commandParam.Add(lineNumber.Aveva.Angle); |
439 | 932933ed | gaqhf | |
440 | commandParam.Add(null); |
||
441 | } |
||
442 | else |
||
443 | commandParam.Add(null); |
||
444 | |||
445 | 74a0c9d6 | gaqhf | editor.Command(commandParam.ToArray()); |
446 | |||
447 | 9dab7146 | gaqhf | List<long> newHandles = GetAllGroupHandles(); |
448 | List<long> otherHandles = new List<long>(); |
||
449 | foreach (var item in newHandles) |
||
450 | if (!prevHandles.Contains(item)) |
||
451 | otherHandles.Add(item); |
||
452 | 74a0c9d6 | gaqhf | |
453 | 9dab7146 | gaqhf | if (otherHandles.Count == 1) |
454 | return otherHandles[0]; |
||
455 | else |
||
456 | return 0; |
||
457 | 74a0c9d6 | gaqhf | } |
458 | 9dab7146 | gaqhf | private long DrawPipe(string style, List<string> coordinates, ObjectId objectId) |
459 | 74a0c9d6 | gaqhf | { |
460 | 9dab7146 | gaqhf | List<long> prevHandles = GetAllGroupHandles(); |
461 | 14540282 | gaqhf | GUIUtils.SetPipeStyle(style); |
462 | 74a0c9d6 | gaqhf | |
463 | 14540282 | gaqhf | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
464 | 74a0c9d6 | gaqhf | Editor editor = acDoc.Editor; |
465 | List<object> commandParam = new List<object>(); |
||
466 | //command name |
||
467 | commandParam.Add("DRPIPE"); |
||
468 | //coordinate |
||
469 | foreach (var item in coordinates) |
||
470 | commandParam.Add(item); |
||
471 | //enter |
||
472 | commandParam.Add(null); |
||
473 | |||
474 | //Input Object ID |
||
475 | commandParam.Add(objectId); |
||
476 | |||
477 | //enter |
||
478 | commandParam.Add(null); |
||
479 | |||
480 | editor.Command(commandParam.ToArray()); |
||
481 | 9dab7146 | gaqhf | |
482 | List<long> newHandles = GetAllGroupHandles(); |
||
483 | List<long> otherHandles = new List<long>(); |
||
484 | foreach (var item in newHandles) |
||
485 | if (!prevHandles.Contains(item)) |
||
486 | otherHandles.Add(item); |
||
487 | |||
488 | if (otherHandles.Count == 1) |
||
489 | return otherHandles[0]; |
||
490 | else |
||
491 | return 0; |
||
492 | } |
||
493 | private long DrawSignal(string style, List<string> coordinates) |
||
494 | { |
||
495 | List<long> prevHandles = GetAllGroupHandles(); |
||
496 | |||
497 | GUIUtils.SetPipeStyle(style); |
||
498 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
499 | Editor editor = acDoc.Editor; |
||
500 | List<object> commandParam = new List<object>(); |
||
501 | //command name |
||
502 | commandParam.Add("VPESIGNAL"); |
||
503 | //coordinate |
||
504 | foreach (var item in coordinates) |
||
505 | commandParam.Add(item); |
||
506 | //enter |
||
507 | commandParam.Add(null); |
||
508 | |||
509 | editor.Command(commandParam.ToArray()); |
||
510 | |||
511 | List<long> newHandles = GetAllGroupHandles(); |
||
512 | List<long> otherHandles = new List<long>(); |
||
513 | foreach (var item in newHandles) |
||
514 | if (!prevHandles.Contains(item)) |
||
515 | otherHandles.Add(item); |
||
516 | |||
517 | if (otherHandles.Count == 1) |
||
518 | return otherHandles[0]; |
||
519 | else |
||
520 | return 0; |
||
521 | 74a0c9d6 | gaqhf | } |
522 | 20dd244c | gaqhf | private long DrawSymbol(Symbol symbol, DataRow symbolRow, bool needAngle, bool needBalloon) |
523 | 6b3cb476 | gaqhf | { |
524 | 73152510 | gaqhf | long handle = 0; |
525 | 6b3cb476 | gaqhf | try |
526 | { |
||
527 | 495bb8f5 | gaqhf | string insertSymbolName = symbol.Aveva.Name; |
528 | double x = symbol.Aveva.X; |
||
529 | double y = symbol.Aveva.Y; |
||
530 | |||
531 | c6df982b | gaqhf | if (symbol.GetType() != typeof(OPC)) |
532 | Zoom(x - 50, y - 50, x + 50, y + 50); |
||
533 | |||
534 | 73152510 | gaqhf | List<long> prevHandles = GetAllBlockHandlesByName(insertSymbolName); |
535 | |||
536 | 6b3cb476 | gaqhf | AVEVA.PID.Utilities.DrawingData drawingData = new AVEVA.PID.Utilities.DrawingData(); |
537 | drawingData.InsertSymbolName = insertSymbolName; |
||
538 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
539 | Editor editor = acDoc.Editor; |
||
540 | List<object> commandParam = new List<object>(); |
||
541 | commandParam.Add("INSSYM"); |
||
542 | 495bb8f5 | gaqhf | |
543 | // Insert Point |
||
544 | 6b3cb476 | gaqhf | Point3d point = new Point3d(x, y, 0); |
545 | commandParam.Add(point); |
||
546 | 495bb8f5 | gaqhf | |
547 | // Check Insert Point |
||
548 | if (needAngle) |
||
549 | 20dd244c | gaqhf | { |
550 | double degree = RadianToDegree(symbol.ANGLE); |
||
551 | commandParam.Add(degree); |
||
552 | } |
||
553 | |||
554 | 495bb8f5 | gaqhf | |
555 | // Check Balloon |
||
556 | if (needBalloon) |
||
557 | { |
||
558 | point = new Point3d(x + 20, y + 20, 0); |
||
559 | commandParam.Add(point); |
||
560 | |||
561 | // Check LeaderLine |
||
562 | if (GraphicalUtility.IsLeaderReqOnSymbolBalloons()) |
||
563 | commandParam.Add(x + "," + y); |
||
564 | } |
||
565 | |||
566 | for (int i = 0; i < 8; i++) |
||
567 | commandParam.Add(null); |
||
568 | 6b3cb476 | gaqhf | |
569 | editor.Command(commandParam.ToArray()); |
||
570 | 73152510 | gaqhf | |
571 | List<long> newHandles = GetAllBlockHandlesByName(insertSymbolName); |
||
572 | List<long> otherHandles = new List<long>(); |
||
573 | foreach (var item in newHandles) |
||
574 | if (!prevHandles.Contains(item)) |
||
575 | otherHandles.Add(item); |
||
576 | |||
577 | if (otherHandles.Count == 1) |
||
578 | return otherHandles[0]; |
||
579 | else |
||
580 | return 0; |
||
581 | 6b3cb476 | gaqhf | } |
582 | catch (System.Exception ex) |
||
583 | { |
||
584 | 74a0c9d6 | gaqhf | |
585 | 6b3cb476 | gaqhf | } |
586 | 73152510 | gaqhf | |
587 | return handle; |
||
588 | 6b3cb476 | gaqhf | } |
589 | a03f7b94 | gaqhf | private void DrawText(double x, double y, double height, string text, double rotation) |
590 | 6503fec8 | gaqhf | { |
591 | // Get the current document and database |
||
592 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
593 | Database acCurDb = acDoc.Database; |
||
594 | |||
595 | // Start a transaction |
||
596 | using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) |
||
597 | { |
||
598 | // Open the Block table for read |
||
599 | BlockTable acBlkTbl; |
||
600 | acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, |
||
601 | OpenMode.ForRead) as BlockTable; |
||
602 | |||
603 | // Open the Block table record Model space for write |
||
604 | BlockTableRecord acBlkTblRec; |
||
605 | acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], |
||
606 | OpenMode.ForWrite) as BlockTableRecord; |
||
607 | |||
608 | // Create a single-line text object |
||
609 | using (DBText acText = new DBText()) |
||
610 | { |
||
611 | acText.Position = new Point3d(x, y, 0); |
||
612 | acText.Height = height; |
||
613 | acText.TextString = text; |
||
614 | a03f7b94 | gaqhf | acText.Rotation = rotation; |
615 | 6503fec8 | gaqhf | |
616 | acBlkTblRec.AppendEntity(acText); |
||
617 | acTrans.AddNewlyCreatedDBObject(acText, true); |
||
618 | } |
||
619 | |||
620 | // Save the changes and dispose of the transaction |
||
621 | acTrans.Commit(); |
||
622 | } |
||
623 | } |
||
624 | 74a0c9d6 | gaqhf | #endregion |
625 | |||
626 | 73152510 | gaqhf | #region Autocad Utils |
627 | private List<long> GetAllBlockHandlesByName(string name) |
||
628 | { |
||
629 | List<long> handles = new List<long>(); |
||
630 | |||
631 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
632 | Database acCurDb = acDoc.Database; |
||
633 | using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) |
||
634 | { |
||
635 | BlockTable gd = (BlockTable)acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead); |
||
636 | foreach (var entry in gd) |
||
637 | { |
||
638 | BlockTableRecord blockTableRecord = acTrans.GetObject(entry, OpenMode.ForRead, true) as BlockTableRecord; |
||
639 | if (blockTableRecord != null) |
||
640 | { |
||
641 | IEnumerable<BlockReference> records = AcDbLinqExtensionMethods.GetBlockReferences(blockTableRecord); |
||
642 | foreach (var item in records) |
||
643 | { |
||
644 | if (item.Name == name) |
||
645 | handles.Add(item.Handle.Value); |
||
646 | } |
||
647 | } |
||
648 | } |
||
649 | |||
650 | acTrans.Commit(); |
||
651 | } |
||
652 | return handles; |
||
653 | } |
||
654 | 9dab7146 | gaqhf | private List<long> GetAllGroupHandles() |
655 | { |
||
656 | List<long> handles = new List<long>(); |
||
657 | |||
658 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
659 | Database acCurDb = acDoc.Database; |
||
660 | using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) |
||
661 | { |
||
662 | DBDictionary gd = (DBDictionary)acTrans.GetObject(acCurDb.GroupDictionaryId, OpenMode.ForRead); |
||
663 | foreach (var entry in gd) |
||
664 | handles.Add(entry.Value.Handle.Value); |
||
665 | acTrans.Commit(); |
||
666 | } |
||
667 | return handles; |
||
668 | } |
||
669 | c94252bf | gaqhf | private ObjectId GetFirstPolyLineObjectId(long groupHandle) |
670 | 9dab7146 | gaqhf | { |
671 | ObjectId result = ObjectId.Null; |
||
672 | |||
673 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
674 | Database acCurDb = acDoc.Database; |
||
675 | using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) |
||
676 | { |
||
677 | DBDictionary gd = (DBDictionary)acTrans.GetObject(acCurDb.GroupDictionaryId, OpenMode.ForRead); |
||
678 | foreach (var entry in gd) |
||
679 | { |
||
680 | if (entry.Value.Handle.Value == groupHandle) |
||
681 | { |
||
682 | Autodesk.AutoCAD.DatabaseServices.Group group = acTrans.GetObject(entry.Value, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Group; |
||
683 | foreach (var item in group.GetAllEntityIds()) |
||
684 | { |
||
685 | if (acTrans.GetObject(item, OpenMode.ForRead).GetType() == typeof(Autodesk.AutoCAD.DatabaseServices.Polyline)) |
||
686 | { |
||
687 | result = item; |
||
688 | break; |
||
689 | } |
||
690 | } |
||
691 | break; |
||
692 | } |
||
693 | } |
||
694 | acTrans.Commit(); |
||
695 | } |
||
696 | |||
697 | return result; |
||
698 | } |
||
699 | 2d09df82 | gaqhf | private void SetBlockReferenceRotation(ObjectId objectId, double rotation) |
700 | { |
||
701 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
702 | Database acCurDb = acDoc.Database; |
||
703 | Editor acDocEd = acDoc.Editor; |
||
704 | |||
705 | using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) |
||
706 | { |
||
707 | DBObject objDB = acTrans.GetObject(objectId, OpenMode.ForWrite); |
||
708 | if (objDB != null) |
||
709 | { |
||
710 | if (objDB.GetType() == typeof(BlockReference)) |
||
711 | { |
||
712 | BlockReference block = objDB as BlockReference; |
||
713 | block.Rotation = rotation; |
||
714 | } |
||
715 | } |
||
716 | acTrans.Commit(); |
||
717 | } |
||
718 | } |
||
719 | c8b025e0 | gaqhf | #endregion |
720 | |||
721 | #region For Aveva |
||
722 | c6df982b | gaqhf | double labelX, labelY; |
723 | private void SetAttributeByAvevaForm(long handle, List<Tuple<string, string>> datas, double x, double y) |
||
724 | c8b025e0 | gaqhf | { |
725 | c6df982b | gaqhf | labelX = x; |
726 | labelY = y; |
||
727 | AddPromptingForPointForAvevaPropertiesForm(); |
||
728 | try |
||
729 | { |
||
730 | Entity entity = APIDUtils.GetEntityByHandle(handle); |
||
731 | ComponentPropertiesHelper componentPropertiesHelper = new ComponentPropertiesHelper(); |
||
732 | AvevaThread.Run(ThreadType.AddProperty, datas); |
||
733 | componentPropertiesHelper.DisplayComponentProperties(entity); |
||
734 | AvevaThread.Stop(ThreadType.AddProperty); |
||
735 | } |
||
736 | catch (System.Exception ex) |
||
737 | { |
||
738 | c8b025e0 | gaqhf | |
739 | c6df982b | gaqhf | } |
740 | finally |
||
741 | { |
||
742 | RemovePromptingForPointForAvevaPropertiesForm(); |
||
743 | } |
||
744 | } |
||
745 | private void AddPromptingForPointForAvevaPropertiesForm() |
||
746 | { |
||
747 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
748 | Editor editor = acDoc.Editor; |
||
749 | editor.PromptingForPoint += Editor_PromptingForPointForAvevaPropertiesForm; |
||
750 | editor.PromptingForAngle += Editor_PromptingForAngleForAvevaPropertiesForm; |
||
751 | } |
||
752 | private void RemovePromptingForPointForAvevaPropertiesForm() |
||
753 | { |
||
754 | Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; |
||
755 | Editor editor = acDoc.Editor; |
||
756 | editor.PromptingForPoint -= Editor_PromptingForPointForAvevaPropertiesForm; |
||
757 | editor.PromptingForAngle -= Editor_PromptingForAngleForAvevaPropertiesForm; |
||
758 | } |
||
759 | private void Editor_PromptingForPointForAvevaPropertiesForm(object sender, PromptPointOptionsEventArgs e) |
||
760 | { |
||
761 | Autodesk.AutoCAD.Interop.AcadApplication acadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication; |
||
762 | acadApplication.ActiveDocument.SendCommand(string.Format(" {0},{1} ", labelX, labelY)); |
||
763 | } |
||
764 | private void Editor_PromptingForAngleForAvevaPropertiesForm(object sender, PromptAngleOptionsEventArgs e) |
||
765 | { |
||
766 | Autodesk.AutoCAD.Interop.AcadApplication acadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication; |
||
767 | acadApplication.ActiveDocument.SendCommand(" 0 "); |
||
768 | c8b025e0 | gaqhf | } |
769 | 016701e5 | gaqhf | #endregion |
770 | |||
771 | 73152510 | gaqhf | #region Modeling Utils |
772 | 016701e5 | gaqhf | private void GetConnectedGroupLine(Model.Line line, List<Model.Line> group, bool isInsert) |
773 | 53344e2c | gaqhf | { |
774 | if (!group.Contains(line)) |
||
775 | { |
||
776 | 016701e5 | gaqhf | if (isInsert) |
777 | 53344e2c | gaqhf | group.Insert(0, line); |
778 | else |
||
779 | group.Add(line); |
||
780 | |||
781 | 016701e5 | gaqhf | if (line.CONNECTORS[0].ConnectedObject != null && !IsExistEndBreak(line, line.CONNECTORS[0].ConnectedObject)) |
782 | { |
||
783 | object connObj = line.CONNECTORS[0].ConnectedObject; |
||
784 | if (connObj.GetType() == typeof(Model.Line) && |
||
785 | APIDUtils.IsConnectedLine(connObj as Model.Line, line)) |
||
786 | GetConnectedGroupLine(connObj as Model.Line, group, true); |
||
787 | else if (connObj.GetType() == typeof(Model.Symbol)) |
||
788 | { |
||
789 | Model.Line connLine = FindOtherLineByRun(line, connObj as Symbol); |
||
790 | if (connLine != null) |
||
791 | GetConnectedGroupLine(connLine as Model.Line, group, true); |
||
792 | } |
||
793 | } |
||
794 | if (line.CONNECTORS[1].ConnectedObject != null && !IsExistEndBreak(line, line.CONNECTORS[1].ConnectedObject)) |
||
795 | { |
||
796 | object connObj = line.CONNECTORS[1].ConnectedObject; |
||
797 | if (connObj.GetType() == typeof(Model.Line) && |
||
798 | APIDUtils.IsConnectedLine(connObj as Model.Line, line)) |
||
799 | GetConnectedGroupLine(connObj as Model.Line, group, false); |
||
800 | else if (connObj.GetType() == typeof(Model.Symbol)) |
||
801 | { |
||
802 | Model.Line connLine = FindOtherLineByRun(line, connObj as Symbol); |
||
803 | if (connLine != null) |
||
804 | GetConnectedGroupLine(connLine as Model.Line, group, false); |
||
805 | } |
||
806 | } |
||
807 | 53344e2c | gaqhf | } |
808 | } |
||
809 | private void GetGroupLinePoints(List<Model.Line> groupLine, List<string> points) |
||
810 | { |
||
811 | for (int i = 0; i < groupLine.Count; i++) |
||
812 | { |
||
813 | Model.Line line = groupLine[i]; |
||
814 | 016701e5 | gaqhf | if (i == 0) |
815 | f7e09e14 | gaqhf | { |
816 | object connObj = line.CONNECTORS[0].ConnectedObject; |
||
817 | ff4941b2 | gaqhf | if (connObj != null) |
818 | f7e09e14 | gaqhf | { |
819 | ff4941b2 | gaqhf | string point = GetPointByConnectedItem(connObj, line, true); |
820 | if (string.IsNullOrEmpty(point)) |
||
821 | f7e09e14 | gaqhf | points.Add(line.Aveva.Start_X + "," + line.Aveva.Start_Y); |
822 | ff4941b2 | gaqhf | else |
823 | points.Add(point); |
||
824 | f7e09e14 | gaqhf | } |
825 | else |
||
826 | points.Add(line.Aveva.Start_X + "," + line.Aveva.Start_Y); |
||
827 | } |
||
828 | 016701e5 | gaqhf | else |
829 | { |
||
830 | Model.Line prevLine = groupLine[i - 1]; |
||
831 | if (line.SlopeType == SlopeType.HORIZONTAL && |
||
832 | prevLine.SlopeType == SlopeType.VERTICAL) |
||
833 | points.Add(prevLine.Aveva.End_X + "," + line.Aveva.Start_Y); |
||
834 | else if (line.SlopeType == SlopeType.VERTICAL && |
||
835 | prevLine.SlopeType == SlopeType.HORIZONTAL) |
||
836 | points.Add(line.Aveva.Start_X + "," + prevLine.Aveva.End_Y); |
||
837 | c6df982b | gaqhf | else if (line.SlopeType == SlopeType.Slope || |
838 | prevLine.SlopeType == SlopeType.Slope) |
||
839 | 016701e5 | gaqhf | points.Add(line.Aveva.Start_X + "," + line.Aveva.Start_Y); |
840 | } |
||
841 | |||
842 | 53344e2c | gaqhf | if (i == groupLine.Count - 1) |
843 | f7e09e14 | gaqhf | { |
844 | object connObj = line.CONNECTORS[1].ConnectedObject; |
||
845 | 20dd244c | gaqhf | if (connObj != null) |
846 | f7e09e14 | gaqhf | { |
847 | ff4941b2 | gaqhf | string point = GetPointByConnectedItem(connObj, line, false); |
848 | if (string.IsNullOrEmpty(point)) |
||
849 | f7e09e14 | gaqhf | points.Add(line.Aveva.End_X + "," + line.Aveva.End_Y); |
850 | ff4941b2 | gaqhf | else |
851 | points.Add(point); |
||
852 | f7e09e14 | gaqhf | } |
853 | else |
||
854 | points.Add(line.Aveva.End_X + "," + line.Aveva.End_Y); |
||
855 | } |
||
856 | 53344e2c | gaqhf | } |
857 | } |
||
858 | 20dd244c | gaqhf | private void CoordinateCorrection(List<Model.Line> groupLine) |
859 | { |
||
860 | for (int i = 0; i < groupLine.Count; i++) |
||
861 | { |
||
862 | Model.Line line = groupLine[i]; |
||
863 | Model.Line line2 = null; |
||
864 | if (i + 1 < groupLine.Count) |
||
865 | line2 = groupLine[i + 1]; |
||
866 | |||
867 | if (line2 != null) |
||
868 | { |
||
869 | if (APIDUtils.IsConnectedLine(line, line2)) |
||
870 | { |
||
871 | #region ConnLine corrdinate |
||
872 | if (line.SlopeType == SlopeType.HORIZONTAL && line2.SlopeType == SlopeType.VERTICAL) |
||
873 | { |
||
874 | line2.Aveva.Start_X = line.Aveva.End_X; |
||
875 | line2.Aveva.End_X = line.Aveva.End_X; |
||
876 | } |
||
877 | else if (line.SlopeType == SlopeType.VERTICAL && line2.SlopeType == SlopeType.HORIZONTAL) |
||
878 | { |
||
879 | line2.Aveva.Start_Y = line.Aveva.End_Y; |
||
880 | line2.Aveva.End_Y = line.Aveva.End_Y; |
||
881 | } |
||
882 | else if (line.SlopeType == SlopeType.HORIZONTAL && line2.SlopeType == SlopeType.HORIZONTAL) |
||
883 | { |
||
884 | line2.Aveva.Start_Y = line.Aveva.End_Y; |
||
885 | line2.Aveva.End_Y = line.Aveva.End_Y; |
||
886 | } |
||
887 | else if (line.SlopeType == SlopeType.VERTICAL && line2.SlopeType == SlopeType.VERTICAL) |
||
888 | { |
||
889 | line2.Aveva.Start_X = line.Aveva.End_X; |
||
890 | line2.Aveva.End_X = line.Aveva.End_X; |
||
891 | } |
||
892 | #endregion |
||
893 | } |
||
894 | else |
||
895 | { |
||
896 | SlopeType slopeType = APIDUtils.CalcSlope(line.Aveva.End_X, line.Aveva.End_Y, line2.Aveva.Start_X, line2.Aveva.Start_Y); |
||
897 | #region corrdinate |
||
898 | if (slopeType == SlopeType.HORIZONTAL && line.SlopeType == SlopeType.HORIZONTAL && line2.SlopeType == SlopeType.HORIZONTAL) |
||
899 | { |
||
900 | line2.Aveva.Start_Y = line.Aveva.End_Y; |
||
901 | line2.Aveva.End_Y = line.Aveva.End_Y; |
||
902 | } |
||
903 | else if (slopeType == SlopeType.VERTICAL && line.SlopeType == SlopeType.VERTICAL && line2.SlopeType == SlopeType.VERTICAL) |
||
904 | { |
||
905 | line2.Aveva.Start_X = line.Aveva.End_X; |
||
906 | line2.Aveva.End_X = line.Aveva.End_X; |
||
907 | } |
||
908 | #endregion |
||
909 | |||
910 | } |
||
911 | } |
||
912 | |||
913 | if (line.SlopeType == SlopeType.HORIZONTAL || line.SlopeType == SlopeType.VERTICAL) |
||
914 | { |
||
915 | foreach (var connector in line.CONNECTORS.FindAll(loop => loop.ConnectedObject != null)) |
||
916 | { |
||
917 | double lineX = 0; |
||
918 | double lineY = 0; |
||
919 | int index = line.CONNECTORS.IndexOf(connector); |
||
920 | if (index == 0) |
||
921 | { |
||
922 | lineX = line.Aveva.End_X; |
||
923 | lineY = line.Aveva.End_Y; |
||
924 | } |
||
925 | else |
||
926 | { |
||
927 | lineX = line.Aveva.Start_X; |
||
928 | lineY = line.Aveva.Start_Y; |
||
929 | } |
||
930 | System.Type type = connector.ConnectedObject.GetType(); |
||
931 | if (type == typeof(Model.Symbol)) |
||
932 | { |
||
933 | Symbol item = connector.ConnectedObject as Symbol; |
||
934 | SlopeType slopeType = APIDUtils.CalcSlope(item.Aveva.X, item.Aveva.Y, lineX, lineY); |
||
935 | if (slopeType == line.SlopeType) |
||
936 | { |
||
937 | if (line.SlopeType == SlopeType.HORIZONTAL) |
||
938 | item.Aveva.Y = line.Aveva.End_Y; |
||
939 | else if (line.SlopeType == SlopeType.VERTICAL) |
||
940 | item.Aveva.X = line.Aveva.End_X; |
||
941 | } |
||
942 | } |
||
943 | else if (type == typeof(OPC)) |
||
944 | { |
||
945 | OPC item = connector.ConnectedObject as OPC; |
||
946 | SlopeType slopeType = APIDUtils.CalcSlope(item.Aveva.X, item.Aveva.Y, lineX, lineY); |
||
947 | if (slopeType == line.SlopeType) |
||
948 | { |
||
949 | if (line.SlopeType == SlopeType.HORIZONTAL) |
||
950 | item.Aveva.Y = line.Aveva.End_Y; |
||
951 | else if (line.SlopeType == SlopeType.VERTICAL) |
||
952 | item.Aveva.X = line.Aveva.End_X; |
||
953 | } |
||
954 | } |
||
955 | } |
||
956 | } |
||
957 | } |
||
958 | } |
||
959 | ff4941b2 | gaqhf | private string GetPointByConnectedItem(object connObj, Model.Line line, bool isStart) |
960 | { |
||
961 | string result = string.Empty; |
||
962 | double x; |
||
963 | double y; |
||
964 | if (isStart) |
||
965 | { |
||
966 | x = line.Aveva.Start_X; |
||
967 | y = line.Aveva.Start_Y; |
||
968 | } |
||
969 | else |
||
970 | { |
||
971 | x = line.Aveva.End_X; |
||
972 | y = line.Aveva.End_Y; |
||
973 | } |
||
974 | |||
975 | if (connObj.GetType() == typeof(Symbol)) |
||
976 | { |
||
977 | Symbol connSymbol = connObj as Symbol; |
||
978 | Connector connector = connSymbol.CONNECTORS.Find(loop => loop.ConnectedObject == line); |
||
979 | |||
980 | SlopeType slopeType = APIDUtils.CalcSlope(connSymbol.X, connSymbol.Y, connector.X, connector.Y); |
||
981 | if (slopeType == SlopeType.HORIZONTAL) |
||
982 | result = connSymbol.Aveva.X + "," + y; |
||
983 | else if (slopeType == SlopeType.VERTICAL) |
||
984 | result = x + "," + connSymbol.Aveva.Y; |
||
985 | else |
||
986 | result = x + "," + y; |
||
987 | } |
||
988 | else if (connObj.GetType() == typeof(OPC)) |
||
989 | { |
||
990 | OPC connOPC = connObj as OPC; |
||
991 | Connector connector = connOPC.CONNECTORS.Find(loop => loop.ConnectedObject == line); |
||
992 | |||
993 | double locX = 0, locY = 0, sizeWidth = 0, sizeHeight = 0, aX = 0, aY = 0; |
||
994 | APIDUtils.ConvertPointBystring(connOPC.LOCATION, ref locX, ref locY); |
||
995 | APIDUtils.ConvertPointBystring(connOPC.SIZE, ref sizeWidth, ref sizeHeight); |
||
996 | locX = locX + sizeWidth / 2; |
||
997 | locY = locY + sizeHeight / 2; |
||
998 | aX = locX; |
||
999 | aY = locY; |
||
1000 | document.ConvertAvevaPoint(ref aX, ref aY); |
||
1001 | |||
1002 | SlopeType slopeType = APIDUtils.CalcSlope(locX, locY, connector.X, connector.Y); |
||
1003 | if (slopeType == SlopeType.HORIZONTAL) |
||
1004 | result = aX + "," + y; |
||
1005 | else if (slopeType == SlopeType.VERTICAL) |
||
1006 | result = x + "," + aY; |
||
1007 | else |
||
1008 | result = x + "," + y; |
||
1009 | } |
||
1010 | |||
1011 | return result; |
||
1012 | } |
||
1013 | 016701e5 | gaqhf | private bool IsExistEndBreak(object item1, object item2) |
1014 | { |
||
1015 | bool result = false; |
||
1016 | if (item1 != null && item2 != null) |
||
1017 | { |
||
1018 | EndBreak endBreak = document.EndBreaks.Find(x => |
||
1019 | (APIDUtils.FindObjectByUID(document, x.OWNER) == item1 && |
||
1020 | APIDUtils.FindObjectByUID(document, x.PROPERTIES.Find(y => y.ATTRIBUTE == "Connected Item").VALUE) == item2) || |
||
1021 | (APIDUtils.FindObjectByUID(document, x.OWNER) == item2 && |
||
1022 | APIDUtils.FindObjectByUID(document, x.PROPERTIES.Find(y => y.ATTRIBUTE == "Connected Item").VALUE) == item1)); |
||
1023 | |||
1024 | if (endBreak != null) |
||
1025 | result = true; |
||
1026 | } |
||
1027 | |||
1028 | return result; |
||
1029 | } |
||
1030 | private LineRun FindLineRun(Model.Line line) |
||
1031 | { |
||
1032 | List<LineRun> allLineRun = new List<LineRun>(); |
||
1033 | foreach (var item in document.LINENUMBERS) |
||
1034 | allLineRun.AddRange(item.RUNS); |
||
1035 | foreach (var item in document.TRIMLINES) |
||
1036 | allLineRun.AddRange(item.RUNS); |
||
1037 | |||
1038 | return allLineRun.Find(x => x.RUNITEMS.Contains(line)); |
||
1039 | } |
||
1040 | private Model.Line FindOtherLineByRun(Model.Line line, Symbol symbol) |
||
1041 | { |
||
1042 | Model.Line result = null; |
||
1043 | LineRun run = FindLineRun(line); |
||
1044 | Connector connector = symbol.CONNECTORS.Find(x => |
||
1045 | x.ConnectedObject != null && |
||
1046 | x.ConnectedObject != line && |
||
1047 | run.RUNITEMS.Contains(x.ConnectedObject) && |
||
1048 | x.ConnectedObject.GetType() == typeof(Model.Line)); |
||
1049 | |||
1050 | if (connector != null) |
||
1051 | result = connector.ConnectedObject as Model.Line; |
||
1052 | 2d09df82 | gaqhf | |
1053 | 016701e5 | gaqhf | return result; |
1054 | } |
||
1055 | 495bb8f5 | gaqhf | private bool CheckAngle(DataRow symbolRow) |
1056 | { |
||
1057 | return int.Parse(symbolRow["Insert_Points"].ToString()).Equals(2); |
||
1058 | } |
||
1059 | private bool CheckBalloon(Symbol symbol) |
||
1060 | { |
||
1061 | bool result = false; |
||
1062 | |||
1063 | string text = string.Empty; |
||
1064 | Hashtable symbolDefinitions = GraphicsUtility.GetSymbolDefinitions(symbol.Aveva.Name); |
||
1065 | if (symbolDefinitions.Count != 0) |
||
1066 | { |
||
1067 | text = symbolDefinitions[SymbolDefinition.symAflowType].ToString().ToUpper(); |
||
1068 | |||
1069 | if (text.Equals("VLP")) |
||
1070 | text = "VPO"; |
||
1071 | else if (text.Equals("IVP")) |
||
1072 | text = "IPO"; |
||
1073 | |||
1074 | if (SymbolCategory.astrLabelBalloonBlockNames.Contains(text)) |
||
1075 | result = true;//dumbDwgUpgrade.addLabelBalloon(symbolForInsertion, objectId); |
||
1076 | } |
||
1077 | |||
1078 | return result; |
||
1079 | } |
||
1080 | 20dd244c | gaqhf | private double RadianToDegree(double angle) |
1081 | { |
||
1082 | return angle * (180.0 / Math.PI); |
||
1083 | } |
||
1084 | 53344e2c | gaqhf | #endregion |
1085 | 9dab7146 | gaqhf | |
1086 | 74a0c9d6 | gaqhf | #region Test Source |
1087 | public void test() |
||
1088 | { |
||
1089 | 495bb8f5 | gaqhf | |
1090 | 74a0c9d6 | gaqhf | } |
1091 | c8b025e0 | gaqhf | public static void TESTStatic(long handle) |
1092 | 74a0c9d6 | gaqhf | { |
1093 | d03dde83 | gaqhf | |
1094 | 74a0c9d6 | gaqhf | } |
1095 | #endregion |
||
1096 | } |
||
1097 | 73152510 | gaqhf | |
1098 | |||
1099 | public static class AcDbLinqExtensionMethods |
||
1100 | { |
||
1101 | /// <summary> |
||
1102 | /// Get all references to the given BlockTableRecord, including |
||
1103 | /// references to anonymous dynamic BlockTableRecords. |
||
1104 | /// </summary> |
||
1105 | |||
1106 | public static IEnumerable<BlockReference> GetBlockReferences( |
||
1107 | this BlockTableRecord btr, |
||
1108 | OpenMode mode = OpenMode.ForRead, |
||
1109 | bool directOnly = true) |
||
1110 | { |
||
1111 | if (btr == null) |
||
1112 | throw new ArgumentNullException("btr"); |
||
1113 | var tr = btr.Database.TransactionManager.TopTransaction; |
||
1114 | if (tr == null) |
||
1115 | throw new InvalidOperationException("No transaction"); |
||
1116 | var ids = btr.GetBlockReferenceIds(directOnly, true); |
||
1117 | int cnt = ids.Count; |
||
1118 | for (int i = 0; i < cnt; i++) |
||
1119 | { |
||
1120 | yield return (BlockReference) |
||
1121 | tr.GetObject(ids[i], mode, false, false); |
||
1122 | } |
||
1123 | if (btr.IsDynamicBlock) |
||
1124 | { |
||
1125 | BlockTableRecord btr2 = null; |
||
1126 | var blockIds = btr.GetAnonymousBlockIds(); |
||
1127 | cnt = blockIds.Count; |
||
1128 | for (int i = 0; i < cnt; i++) |
||
1129 | { |
||
1130 | btr2 = (BlockTableRecord)tr.GetObject(blockIds[i], |
||
1131 | OpenMode.ForRead, false, false); |
||
1132 | ids = btr2.GetBlockReferenceIds(directOnly, true); |
||
1133 | int cnt2 = ids.Count; |
||
1134 | for (int j = 0; j < cnt2; j++) |
||
1135 | { |
||
1136 | yield return (BlockReference) |
||
1137 | tr.GetObject(ids[j], mode, false, false); |
||
1138 | } |
||
1139 | } |
||
1140 | } |
||
1141 | } |
||
1142 | } |
||
1143 | 74a0c9d6 | gaqhf | } |