프로젝트

일반

사용자정보

개정판 809a7640

ID809a764087513663e43b5517fb3f2622449ce49a
상위 f1c9dbaa
하위 687d1bd6

gaqhf 이(가) 약 6년 전에 추가함

dev issue #000 : Edit LineNumber Run Modeling - 처음과 시작아이템이 심볼일경우 먼저 그리고 Run Item들 모델링 // Equipment 먼저 Modeling

Change-Id: I59ba51beba5334e9c4653f51cfc9ed3b81dd8bbe

차이점 보기:

DTI_PID/BaseModel/Model/SPPID/SPPIDSymbolInfo.cs
11 11
        public string MAPPINGNAME { get; set; }
12 12
        public double ORIGINAL_X { get; set; }
13 13
        public double ORIGINAL_Y { get; set; }
14
        public object RepresentationId { get; set; }
14
        public string RepresentationId { get; set; }
15 15
        public bool IsGroup { get; set; }
16 16
    }
17 17
}
DTI_PID/SPPIDConverter/AutoModeling.cs
21 21
{
22 22
    public class AutoModeling
23 23
    {
24
        Placement _placement = new Placement();
24
        Placement _placement;
25
        LMADataSource dataSource;
25 26

  
26 27
        SPPID_Document document;
27 28

  
28

  
29 29
        public AutoModeling(SPPID_Document document)
30 30
        {
31 31
            this.document = document;
32 32
        }
33 33

  
34

  
35

  
36 34
        public void Run()
37 35
        {
36
            _placement = new Placement();
37
            dataSource = _placement.PIDDataSource;
38

  
38 39
            //dynamic application = Interaction.GetObject("", "PIDAutomation.Application");
39 40
            //dynamic newDrawing = application.Drawings.Add(document.Unit, document.Template, document.DrawingNumber, document.DrawingName);
40 41
            //application.ActiveWindow.Fit();
......
42 43
            //application.ActiveWindow.Zoom = 60;
43 44
            //Thread.Sleep(100);
44 45

  
46
            foreach (Equipment equipment in document.Equipments)
47
            {
48
                SymbolModeling(equipment as Symbol, null, null);
49
            }
45 50

  
46 51
            foreach (LineNumber lineNumber in document.LINENUMBERS)
47 52
            {
48 53
                foreach (LineNumberRun run in lineNumber.RUNS)
49 54
                {
50
                    // Run 별로 Modeling
51
                    Symbol prevSymbol = null;
52
                    object prevItem = null;
53
                    // Symbol 먼저
54
                    foreach (var item in run.RUNITEMS)
55
                    {
56
                        if (item.GetType() == typeof(Symbol))
57
                        {
58
                            Symbol symbol = item as Symbol;
59
                            SymbolModeling(symbol, prevSymbol, prevItem);
60
                            prevSymbol = symbol;
61
                        }
62
                        prevItem = item;
63
                    }
55
                    SymbolModelingByRun(run);
56
                    LineModelingByRun(run);
57

  
58
                    //bool IsFirst = true;
59
                    //// Run 별로 Modeling
60
                    //Symbol prevSymbol = null;
61
                    //object prevItem = null;
62

  
63
                    
64

  
65
                    //// Symbol 먼저
66
                    //foreach (var item in run.RUNITEMS)
67
                    //{
68
                    //    if (item.GetType() == typeof(Symbol))
69
                    //    {
70
                    //        Symbol symbol = item as Symbol;
71
                    //        SymbolModeling(symbol, prevSymbol, prevItem, IsFirst);
72
                    //        prevSymbol = symbol;
73
                    //    }
74
                    //    IsFirst = false;
75
                    //    prevItem = item;
76
                    //}
77

  
78

  
79
                    //Line prevLine = null;
80
                    //prevSymbol = null;
81
                    //prevItem = null;
82
                    //List<Line> lines = new List<Line>();
83
                    //foreach (var item in run.RUNITEMS)
84
                    //{
85
                    //    // Line일 경우
86
                    //    if (item.GetType() == typeof(Line))
87
                    //    {
88
                    //        Line line = item as Line;
89
                    //        if (prevLine == null)
90
                    //            lines.Add(line);
91
                    //        else if (prevLine != null)
92
                    //        {
93
                    //            if (prevLine.SPPID.MAPPINGNAME == line.SPPID.MAPPINGNAME)
94
                    //                lines.Add(line);
95
                    //            else
96
                    //            {
97
                    //                LineModeling(lines);
98
                    //                lines.Clear();
99
                    //                lines.Add(line);
100
                    //            }
101
                    //        }
102

  
103
                    //        prevLine = line;
104
                    //    }
105
                    //    // Symbol 일 경우
106
                    //    else if (item.GetType() == typeof(Symbol))
107
                    //    {
108
                    //        if (lines.Count > 0)
109
                    //        {
110
                    //            LineModeling(lines);
111
                    //            lines.Clear();
112
                    //        }
113
                    //    }
114
                    //    prevItem = item;
115
                    //}
116

  
117
                    //if (lines.Count > 0)
118
                    //    LineModeling(lines);
119
                }
120
            }
64 121

  
65 122

  
66
                    Line prevLine = null;
67
                    prevSymbol = null;
68
                    prevItem = null;
69
                    List<Line> lines = new List<Line>();
70
                    foreach (var item in run.RUNITEMS)
71
                    {
72
                        // Line일 경우
73
                        if (item.GetType() == typeof(Line))
74
                        {
75
                            Line line = item as Line;
76
                            if (prevLine == null)
77
                                lines.Add(line);
78
                            else if (prevLine != null)
79
                            {
80
                                if (prevLine.SPPID.MAPPINGNAME == line.SPPID.MAPPINGNAME)
81
                                    lines.Add(line);
82
                                else
83
                                {
84
                                    LineModeling(lines);
85
                                    lines.Clear();
86
                                    lines.Add(line);
87
                                }
88
                            }
123
            ReleaseCOMObjects(dataSource);
124
            ReleaseCOMObjects(_placement);
125
            System.Windows.Forms.MessageBox.Show("end");
126
        }
89 127

  
90
                            prevLine = line;
91
                        }
92
                        // Symbol 일 경우
93
                        else if (item.GetType() == typeof(Symbol))
128
        private void LineModelingByRun(LineNumberRun run)
129
        {
130
            Line prevLine = null;
131
            List<Line> lines = new List<Line>();
132
            foreach (var item in run.RUNITEMS)
133
            {
134
                // Line일 경우
135
                if (item.GetType() == typeof(Line))
136
                {
137
                    Line line = item as Line;
138
                    if (prevLine == null)
139
                        lines.Add(line);
140
                    else if (prevLine != null)
141
                    {
142
                        if (prevLine.SPPID.MAPPINGNAME == line.SPPID.MAPPINGNAME)
143
                            lines.Add(line);
144
                        else
94 145
                        {
95
                            if (lines.Count > 0)
96
                            {
97
                                LineModeling(lines);
98
                                lines.Clear();
99
                            }
146
                            LineModeling(lines);
147
                            lines.Clear();
148
                            lines.Add(line);
100 149
                        }
101

  
102
                        prevItem = item;
103 150
                    }
104 151

  
152
                    prevLine = line;
153
                }
154
                // Symbol 일 경우
155
                else if (item.GetType() == typeof(Symbol))
156
                {
105 157
                    if (lines.Count > 0)
158
                    {
106 159
                        LineModeling(lines);
160
                        lines.Clear();
161
                    }
107 162
                }
108 163
            }
109 164

  
165
            if (lines.Count > 0)
166
                LineModeling(lines);
167
        }
110 168

  
111
            ReleaseCOMObjects(_placement);
112
            System.Windows.Forms.MessageBox.Show("end");
169
        private void SymbolModelingByRun(LineNumberRun run)
170
        {
171
            // 양끝 Symbol 검사 후 Line이 나올때까지만 Symbol Modeling
172
            if (run.RUNITEMS.Count > 0)
173
            {
174
                if (run.RUNITEMS[0].GetType() == typeof(Symbol))
175
                    SymbolModelingByRunStart(run.RUNITEMS[0] as Symbol, run);
176

  
177
                if (run.RUNITEMS[run.RUNITEMS.Count - 1].GetType() == typeof(Symbol))
178
                    SymbolModelingByRunEnd(run.RUNITEMS[run.RUNITEMS.Count - 1] as Symbol, run);
179
            }
180

  
181
            Symbol prevSymbol = null;
182
            Symbol targetSymbol = null;
183
            foreach (var item in run.RUNITEMS)
184
            {
185
                if (item.GetType() == typeof(Symbol))
186
                {
187
                    Symbol symbol = item as Symbol;
188
                    SymbolModeling(symbol, targetSymbol, prevSymbol);
189
                    prevSymbol = symbol;
190
                    targetSymbol = symbol;
191
                }
192
                else
193
                {
194
                    targetSymbol = null;
195
                }
196
            }
197
        }
198

  
199
        private void SymbolModelingByRunStart(Symbol symbol, LineNumberRun run)
200
        {
201
            foreach (var connector in symbol.CONNECTORS)
202
            {
203
                object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
204
                if (targetItem != null &&
205
                    (targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) &&
206
                    !IsSameLineNumber(symbol, targetItem))
207
                {
208
                    SymbolModeling(symbol, targetItem as Symbol, null);
209
                    for (int i = 1; i < run.RUNITEMS.Count; i++)
210
                    {
211
                        object item = run.RUNITEMS[i];
212
                        if (item.GetType() == typeof(Symbol))
213
                            SymbolModeling(item as Symbol, run.RUNITEMS[i - 1] as Symbol, null);
214
                        else
215
                            break;
216
                    }
217
                    break;
218
                }
219
            }
220

  
221

  
222
        }
223

  
224
        private void SymbolModelingByRunEnd(Symbol symbol, LineNumberRun run)
225
        {
226
            foreach (var connector in symbol.CONNECTORS)
227
            {
228
                object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
229
                if (targetItem != null &&
230
                    (targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) &&
231
                    !IsSameLineNumber(symbol, targetItem))
232
                {
233
                    SymbolModeling(symbol, targetItem as Symbol, null);
234
                    for (int i = run.RUNITEMS.Count - 2; i >= 0; i--)
235
                    {
236
                        object item = run.RUNITEMS[i];
237
                        if (item.GetType() == typeof(Symbol))
238
                            SymbolModeling(item as Symbol, run.RUNITEMS[i + 1] as Symbol, null);
239
                        else
240
                            break;
241
                    }
242
                    break;
243
                }
244
            }
113 245
        }
114 246

  
115 247

  
......
118 250

  
119 251
        }
120 252

  
121
        private void SymbolModeling(Symbol symbol, Symbol prevSymbol, object prevItem)
253
        private void SymbolModeling(Symbol symbol, Symbol prevSymbol, object prevItem, bool IsFirst)
122 254
        {
255
            if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
256
                return;
257

  
123 258
            LMSymbol _LMSymbol = null;
124
            LMADataSource dataSource = _placement.PIDDataSource;
125 259

  
126 260
            string mappingPath = symbol.SPPID.MAPPINGNAME;
127 261
            double x = symbol.SPPID.ORIGINAL_X;
......
130 264
            double angle = symbol.ANGLE;
131 265
            LMSymbol _TargetItem = null;
132 266

  
133
            if (prevItem != null && prevItem.GetType() == typeof(Symbol))
267
            if (IsFirst)
268
            {
269
                foreach (var connector in symbol.CONNECTORS)
270
                {
271
                    object item = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
272
                    if (item != null && 
273
                        (item.GetType() == typeof(Symbol) || item.GetType() == typeof(Equipment)) && 
274
                        !IsSameLineNumber(symbol, item))
275
                    {
276
                        _TargetItem = dataSource.GetSymbol(((Symbol)item).SPPID.RepresentationId);
277
                        break;
278
                    }
279
                }
280
            }
281
            else if (prevItem != null && prevItem.GetType() == typeof(Symbol))
134 282
                _TargetItem = dataSource.GetSymbol(((Symbol)prevItem).SPPID.RepresentationId);
135 283

  
136 284
            if (prevSymbol != null)
......
158 306
                symbol.SPPID.RepresentationId = _LMSymbol.AsLMRepresentation().Id;
159 307
            }
160 308

  
161

  
162 309
            if (_TargetItem != null)
163 310
                ReleaseCOMObjects(_TargetItem);
164
            ReleaseCOMObjects(dataSource);
311
            
165 312
            ReleaseCOMObjects(_LMSymbol);
166 313
        }
167 314

  
315
        private void SymbolModeling(Symbol symbol, Symbol targetSymbol, Symbol prevSymbol)
316
        {
317
            if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
318
                return;
319

  
320
            LMSymbol _LMSymbol = null;
321

  
322
            string mappingPath = symbol.SPPID.MAPPINGNAME;
323
            double x = symbol.SPPID.ORIGINAL_X;
324
            double y = symbol.SPPID.ORIGINAL_Y;
325
            int mirror = 0;
326
            double angle = symbol.ANGLE;
327

  
328
            if (targetSymbol != null && !string.IsNullOrEmpty(targetSymbol.SPPID.RepresentationId))
329
            {
330
                LMSymbol _TargetItem = dataSource.GetSymbol(targetSymbol.SPPID.RepresentationId);
331
                //SlopeType slopeType = SPPIDUtil.CalcSlope(x, y, targetSymbol.SPPID.ORIGINAL_X, targetSymbol.SPPID.ORIGINAL_Y);
332
                //double prevX = _TargetItem.get_XCoordinate();
333
                //double prevY = _TargetItem.get_YCoordinate();
334
                //if (slopeType == SlopeType.HORIZONTAL)
335
                //    y = prevY;
336
                //else if (slopeType == SlopeType.VERTICAL)
337
                //    x = prevX;
338

  
339
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle, TargetItem: _TargetItem);
340
                ReleaseCOMObjects(_TargetItem);
341
            }
342
            else if (prevSymbol != null)
343
            {
344
                LMSymbol _PrevSymbol = dataSource.GetSymbol(prevSymbol.SPPID.RepresentationId);
345
                SlopeType slopeType = SPPIDUtil.CalcSlope(x, y, prevSymbol.SPPID.ORIGINAL_X, prevSymbol.SPPID.ORIGINAL_Y);
346
                double prevX = _PrevSymbol.get_XCoordinate();
347
                double prevY = _PrevSymbol.get_YCoordinate();
348
                if (slopeType == SlopeType.HORIZONTAL)
349
                    y = prevY;
350
                else if (slopeType == SlopeType.VERTICAL)
351
                    x = prevX;
352
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle);
353
            }
354
            else
355
            {
356
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle);
357
            }
358

  
359

  
360
            if (_LMSymbol != null)
361
            {
362
                _LMSymbol.Commit();
363
                symbol.SPPID.RepresentationId = _LMSymbol.AsLMRepresentation().Id;
364
            }
365

  
366
            ReleaseCOMObjects(_LMSymbol);
367
        }
368

  
369
        private bool IsSameLineNumber(object item, object targetItem)
370
        {
371
            foreach (var lineNumber in document.LINENUMBERS)
372
            {
373
                foreach (var run in lineNumber.RUNS)
374
                {
375
                    foreach (var runItem in run.RUNITEMS)
376
                    {
377
                        if (runItem == item)
378
                        {
379
                            foreach (var findItem in run.RUNITEMS)
380
                            {
381
                                if (findItem == targetItem)
382
                                {
383
                                    return true;
384
                                }
385
                            }
386

  
387
                            return false;
388

  
389
                        }
390
                    }
391
                }
392
            }
393

  
394
            return false;
395
        }
396

  
168 397
        private void LineModeling(List<Line> lines)
169 398
        {
170 399
            object DrwingID = "0";
171
            LMADataSource dataSource = _placement.PIDDataSource;
172 400
            _LMAItem _LMAItem = _placement.PIDCreateItem(lines[0].SPPID.MAPPINGNAME, ref DrwingID);
173 401
            PlaceRunInputs placeRunInputs = new PlaceRunInputs();
174 402
            LMSymbol _LMSymbol1 = null;
......
178 406
                Line line = lines[i];
179 407
                if (i == 0 || i + 1 != lines.Count)
180 408
                {
409
                    // 시작점에 연결된 Symbol 찾기
181 410
                    object connItem = SPPIDUtil.FindObjectByUID(document, line.CONNECTORS[0].CONNECTEDITEM);
182 411
                    if (connItem != null && connItem.GetType() == typeof(Symbol))
183 412
                    {
......
193 422

  
194 423
                if (i + 1 == lines.Count)
195 424
                {
425
                    // 끝점에 연결된 Symbol 찾기
196 426
                    object connItem = SPPIDUtil.FindObjectByUID(document, line.CONNECTORS[1].CONNECTEDITEM);
197 427
                    if (connItem != null && connItem.GetType() == typeof(Symbol))
198 428
                    {
......
220 450
                    }
221 451
                }
222 452
            }
223
            
224 453

  
225 454
            LMConnector _lMConnector = _placement.PIDPlaceRun(_LMAItem, placeRunInputs);
226 455
            if (_lMConnector != null)
......
236 465
            if (_LMSymbol2 != null)
237 466
                ReleaseCOMObjects(_LMSymbol2);
238 467

  
239
            ReleaseCOMObjects(dataSource);
240 468
            ReleaseCOMObjects(_lMConnector);
241 469
            ReleaseCOMObjects(placeRunInputs);
242 470
            ReleaseCOMObjects(_LMAItem);
DTI_PID/SPPIDConverter/ConverterForm.cs
428 428
        private void btnRun_Click(object sender, EventArgs e)
429 429
        {
430 430
#if DEBUG
431
            //SPPID_Document document = new SPPID_Document(@"Z:\HanKyouHo\temp\Isocynates\Temp\11111.xml");
431 432
            SPPID_Document document = new SPPID_Document(@"Z:\HanKyouHo\temp\Isocynates\Temp\zIsocynates-325_Page75.xml");
432 433
            document.SymbolMappings = symbolMappings;
433 434
            document.LineMappings = lineMappings;
DTI_PID/SPPIDConverter/Model/SPPID_Document.cs
63 63
                item.SPPID.END_X = x;
64 64
                item.SPPID.END_Y = y;
65 65
            }
66

  
67
            foreach (var item in Equipments)
68
            {
69
                if (item.SPPID == null)
70
                    item.SPPID = new SPPIDSymbolInfo();
71
                double x = double.NaN;
72
                double y = double.NaN;
73
                SPPIDUtil.ConvertPointBystring(item.ORIGINALPOINT, ref x, ref y);
74
                SPPIDUtil.ConvertSPPIDPoint(ref x, ref y, SIZE_WIDTH, SIZE_HEIGHT, testX, testY);
75
                item.SPPID.ORIGINAL_X = x;
76
                item.SPPID.ORIGINAL_Y = y;
77
            }
66 78
        }
67 79
        
68 80
        public bool SetSPPIDMapping()
......
83 95
                    return false;
84 96
            }
85 97

  
98
            foreach (var item in Equipments)
99
            {
100
                SymbolMapping mapping = SymbolMappings.Find(x => x.UID == item.DBUID);
101
                item.SPPID.MAPPINGNAME = mapping != null ? mapping.SPPIDSYMBOLNAME : null;
102
                if (string.IsNullOrEmpty(item.SPPID.MAPPINGNAME))
103
                    return false;
104
            }
105

  
86 106
            return true;
87 107
        }
88 108

  
DTI_PID/SPPIDConverter/Util/SPPIDUtil.cs
177 177
                    return item;
178 178
            }
179 179

  
180
            foreach (Equipment item in document.Equipments)
181
            {
182
                if (item.UID == UID)
183
                    return item;
184
            }
185

  
180 186
            return null;
181 187
        }
182 188
        #endregion

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)