개정판 74752074
dev issue #000 : AutoModeling 소스 검사 및 주석 처리
Change-Id: Ibd3f87ba5127d4f8eaaccd649a3529275eeb461f
DTI_PID/SPPIDConverter/AutoModeling.cs | ||
---|---|---|
82 | 82 |
return EquipCount + SymbolCount + LineCount + NoteCount + TextCount + EndBreakCount; |
83 | 83 |
} |
84 | 84 |
|
85 |
/// <summary> |
|
86 |
/// 도면 단위당 실행되는 메서드 |
|
87 |
/// </summary> |
|
85 | 88 |
public void Run() |
86 | 89 |
{ |
87 | 90 |
try |
... | ... | |
312 | 315 |
} |
313 | 316 |
} |
314 | 317 |
|
318 |
/// <summary> |
|
319 |
/// 도면 생성 메서드 |
|
320 |
/// </summary> |
|
315 | 321 |
private void CreateDocument() |
316 | 322 |
{ |
317 | 323 |
newDrawing = application.Drawings.Add(document.Unit, document.Template, document.DrawingNumber, document.DrawingName); |
... | ... | |
321 | 327 |
Thread.Sleep(2000); |
322 | 328 |
} |
323 | 329 |
|
330 |
/// <summary> |
|
331 |
/// 도면 크기 구하는 메서드 |
|
332 |
/// </summary> |
|
333 |
/// <returns></returns> |
|
324 | 334 |
private bool DocumentCoordinateCorrection() |
325 | 335 |
{ |
326 | 336 |
double maxX = 0; |
... | ... | |
348 | 358 |
return false; |
349 | 359 |
} |
350 | 360 |
|
361 |
/// <summary> |
|
362 |
/// 라인을 Run 단위로 모델링하는 진입 메서드 |
|
363 |
/// </summary> |
|
364 |
/// <param name="run"></param> |
|
351 | 365 |
private void LineModelingByRun(LineRun run) |
352 | 366 |
{ |
353 | 367 |
Line prevLine = null; |
... | ... | |
394 | 408 |
LineModeling(lines); |
395 | 409 |
} |
396 | 410 |
|
411 |
/// <summary> |
|
412 |
/// 심볼을 Run 단위로 모델링하는 진입 메서드 |
|
413 |
/// </summary> |
|
414 |
/// <param name="run"></param> |
|
397 | 415 |
private void SymbolModelingByRun(LineRun run) |
398 | 416 |
{ |
399 | 417 |
// 양끝 Symbol 검사 후 Line이 나올때까지만 Symbol Modeling |
... | ... | |
424 | 442 |
} |
425 | 443 |
} |
426 | 444 |
|
445 |
/// <summary> |
|
446 |
/// Run에 있는 심볼을 모델링하는데 기준이 Run의 시작점 |
|
447 |
/// </summary> |
|
448 |
/// <param name="symbol"></param> |
|
449 |
/// <param name="run"></param> |
|
427 | 450 |
private void SymbolModelingByRunStart(Symbol symbol, LineRun run) |
428 | 451 |
{ |
429 | 452 |
foreach (var connector in symbol.CONNECTORS) |
... | ... | |
431 | 454 |
object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM); |
432 | 455 |
if (targetItem != null && |
433 | 456 |
(targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) && |
434 |
!IsSameLineNumber(symbol, targetItem))
|
|
457 |
!IsSameLineRun(symbol, targetItem))
|
|
435 | 458 |
{ |
436 | 459 |
SymbolModeling(symbol, targetItem as Symbol, null); |
437 | 460 |
for (int i = 1; i < run.RUNITEMS.Count; i++) |
... | ... | |
449 | 472 |
|
450 | 473 |
} |
451 | 474 |
|
475 |
/// <summary> |
|
476 |
/// Run에 있는 심볼을 모델링하는데 기준이 Run의 끝점 |
|
477 |
/// </summary> |
|
478 |
/// <param name="symbol"></param> |
|
479 |
/// <param name="run"></param> |
|
452 | 480 |
private void SymbolModelingByRunEnd(Symbol symbol, LineRun run) |
453 | 481 |
{ |
454 | 482 |
foreach (var connector in symbol.CONNECTORS) |
... | ... | |
456 | 484 |
object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM); |
457 | 485 |
if (targetItem != null && |
458 | 486 |
(targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) && |
459 |
!IsSameLineNumber(symbol, targetItem))
|
|
487 |
!IsSameLineRun(symbol, targetItem))
|
|
460 | 488 |
{ |
461 | 489 |
SymbolModeling(symbol, targetItem as Symbol, null); |
462 | 490 |
for (int i = run.RUNITEMS.Count - 2; i >= 0; i--) |
... | ... | |
472 | 500 |
} |
473 | 501 |
} |
474 | 502 |
|
503 |
/// <summary> |
|
504 |
/// 심볼을 실제로 Modeling 메서드 |
|
505 |
/// </summary> |
|
506 |
/// <param name="symbol"></param> |
|
507 |
/// <param name="targetSymbol"></param> |
|
508 |
/// <param name="prevSymbol"></param> |
|
475 | 509 |
private void SymbolModeling(Symbol symbol, Symbol targetSymbol, Symbol prevSymbol) |
476 | 510 |
{ |
477 | 511 |
// 임시 |
... | ... | |
550 | 584 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
551 | 585 |
} |
552 | 586 |
|
587 |
/// <summary> |
|
588 |
/// Equipment를 실제로 Modeling 메서드 |
|
589 |
/// </summary> |
|
590 |
/// <param name="equipment"></param> |
|
553 | 591 |
private void EquipmentModeling(Equipment equipment) |
554 | 592 |
{ |
555 | 593 |
if (!string.IsNullOrEmpty(equipment.SPPID.RepresentationId)) |
... | ... | |
616 | 654 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
617 | 655 |
} |
618 | 656 |
|
657 |
/// <summary> |
|
658 |
/// 심볼을 실제로 Modeling할때 ChildSymbol이 있다면 Modeling하는 메서드 |
|
659 |
/// </summary> |
|
660 |
/// <param name="childSymbol"></param> |
|
661 |
/// <param name="parentSymbol"></param> |
|
619 | 662 |
private void CreateChildSymbol(ChildSymbol childSymbol, LMSymbol parentSymbol) |
620 | 663 |
{ |
621 | 664 |
Ingr.RAD2D.Symbol2d symbol2d = radApp.ActiveDocument.ActiveSheet.DrawingObjects[parentSymbol.get_GraphicOID().ToString()]; |
... | ... | |
637 | 680 |
ReleaseCOMObjects(_LMSymbol); |
638 | 681 |
} |
639 | 682 |
|
640 |
private bool IsSameLineNumber(object item, object targetItem) |
|
683 |
/// <summary> |
|
684 |
/// item이 TargetItem과 같은 LineRun에 있는지 검사 |
|
685 |
/// </summary> |
|
686 |
/// <param name="item"></param> |
|
687 |
/// <param name="targetItem"></param> |
|
688 |
/// <returns></returns> |
|
689 |
private bool IsSameLineRun(object item, object targetItem) |
|
641 | 690 |
{ |
642 | 691 |
foreach (var lineNumber in document.LINENUMBERS) |
643 | 692 |
{ |
... | ... | |
665 | 714 |
return false; |
666 | 715 |
} |
667 | 716 |
|
717 |
/// <summary> |
|
718 |
/// Line을 실제로 모델링하는 메서드 |
|
719 |
/// </summary> |
|
720 |
/// <param name="lines"></param> |
|
668 | 721 |
private void LineModeling(List<Line> lines) |
669 | 722 |
{ |
670 | 723 |
_LMAItem _LMAItem = _placement.PIDCreateItem(lines[0].SPPID.MAPPINGNAME); |
... | ... | |
780 | 833 |
ReleaseCOMObjects(_LMAItem); |
781 | 834 |
} |
782 | 835 |
|
836 |
/// <summary> |
|
837 |
/// Symbol이 모델링된 SPPPID Symbol Object를 반환 - 연결된 Symbol이 ChildSymbol일 수도 있기때문에 메서드 개발 |
|
838 |
/// </summary> |
|
839 |
/// <param name="symbol"></param> |
|
840 |
/// <param name="line"></param> |
|
841 |
/// <returns></returns> |
|
783 | 842 |
private LMSymbol GetTargetSymbol(Symbol symbol, Line line) |
784 | 843 |
{ |
785 | 844 |
LMSymbol _LMSymbol = null; |
... | ... | |
814 | 873 |
return _LMSymbol; |
815 | 874 |
} |
816 | 875 |
|
876 |
/// <summary> |
|
877 |
/// Connector를 가지고 있는 ChildSymbol Object 반환 |
|
878 |
/// </summary> |
|
879 |
/// <param name="item"></param> |
|
880 |
/// <param name="connector"></param> |
|
881 |
/// <returns></returns> |
|
817 | 882 |
private ChildSymbol GetChildSymbolByConnector(ChildSymbol item, Connector connector) |
818 | 883 |
{ |
819 | 884 |
foreach (var childSymbol in item.ChildSymbols) |
... | ... | |
827 | 892 |
return null; |
828 | 893 |
} |
829 | 894 |
|
895 |
/// <summary> |
|
896 |
/// Branch 라인을 다시 모델링하는 진입 메서드 |
|
897 |
/// </summary> |
|
898 |
/// <param name="branch"></param> |
|
830 | 899 |
private void BranchLineModeling(Tuple<string, Line, Line> branch) |
831 | 900 |
{ |
832 | 901 |
List<Line> lines = SPPIDUtil.FindLinesByModelId(document, branch.Item1); |
... | ... | |
935 | 1004 |
ReleaseCOMObjects(item.Key); |
936 | 1005 |
} |
937 | 1006 |
|
1007 |
/// <summary> |
|
1008 |
/// Branch 라인을 다시 실제로 모델링하는 메서드 |
|
1009 |
/// </summary> |
|
1010 |
/// <param name="branch"></param> |
|
1011 |
/// <param name="_Connector"></param> |
|
1012 |
/// <param name="points"></param> |
|
1013 |
/// <param name="IsStart"></param> |
|
938 | 1014 |
private void BranchLineModelingByConnector(Tuple<string, Line, Line> branch, LMConnector _Connector, List<double[]> points, bool IsStart) |
939 | 1015 |
{ |
940 | 1016 |
List<Line> lines = SPPIDUtil.FindLinesByModelId(document, branch.Item1); |
... | ... | |
1080 | 1156 |
ReleaseCOMObjects(item.Key); |
1081 | 1157 |
} |
1082 | 1158 |
|
1159 |
/// <summary> |
|
1160 |
/// EndBreak 모델링 메서드 |
|
1161 |
/// </summary> |
|
1162 |
/// <param name="endBreak"></param> |
|
1083 | 1163 |
private void EndBreakModeling(EndBreak endBreak) |
1084 | 1164 |
{ |
1085 | 1165 |
object ownerObj = SPPIDUtil.FindObjectByUID(document, endBreak.OWNER); |
... | ... | |
1094 | 1174 |
|
1095 | 1175 |
if (targetLMConnector != null) |
1096 | 1176 |
{ |
1097 |
//double[] point = connectorVertices[targetLMConnector][connectorVertices[targetLMConnector].Count - 1]; |
|
1098 |
//Array array = new double[] { 0, point[0], point[1] }; |
|
1099 | 1177 |
Array array = new double[] { 0, endBreak.SPPID.ORIGINAL_X, endBreak.SPPID.ORIGINAL_Y }; |
1100 | 1178 |
_LmLabelPersist = _placement.PIDPlaceLabel(endBreak.SPPID.MAPPINGNAME, ref array, Rotation: 0, LabeledItem: targetLMConnector.AsLMRepresentation(), IsLeaderVisible: true); |
1101 | 1179 |
} |
... | ... | |
1192 | 1270 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1193 | 1271 |
} |
1194 | 1272 |
|
1273 |
/// <summary> |
|
1274 |
/// EndBreak 모델링이 실패시 다시 시도하는 메서드 |
|
1275 |
/// </summary> |
|
1276 |
/// <param name="endBreak"></param> |
|
1277 |
/// <param name="targetLMConnector"></param> |
|
1195 | 1278 |
private void RetryEndBreakModeling(EndBreak endBreak, LMConnector targetLMConnector) |
1196 | 1279 |
{ |
1197 | 1280 |
bool isZeroLength = Convert.ToBoolean(targetLMConnector.get_IsZeroLength()); |
... | ... | |
1285 | 1368 |
ReleaseCOMObjects(_LMAItem); |
1286 | 1369 |
} |
1287 | 1370 |
|
1371 |
/// <summary> |
|
1372 |
/// FromModelItem을 ToModelItem으로 PipeRunJoin하는 메서드 |
|
1373 |
/// </summary> |
|
1374 |
/// <param name="fromModelItemId"></param> |
|
1375 |
/// <param name="toModelItemId"></param> |
|
1288 | 1376 |
private void JoinPipeRun(string fromModelItemId, string toModelItemId) |
1289 | 1377 |
{ |
1290 | 1378 |
LMModelItem modelItem1 = dataSource.GetModelItem(toModelItemId); |
... | ... | |
1316 | 1404 |
} |
1317 | 1405 |
} |
1318 | 1406 |
|
1407 |
/// <summary> |
|
1408 |
/// PipeRun을 자동으로 Join하는 메서드 |
|
1409 |
/// </summary> |
|
1410 |
/// <param name="modelItemId"></param> |
|
1319 | 1411 |
private void AutoJoinPipeRun(string modelItemId) |
1320 | 1412 |
{ |
1321 | 1413 |
LMModelItem modelItem = dataSource.GetModelItem(modelItemId); |
... | ... | |
1345 | 1437 |
} |
1346 | 1438 |
} |
1347 | 1439 |
|
1440 |
/// <summary> |
|
1441 |
/// LineRun에 있는 Line들을 Join하는 진입 메서드 |
|
1442 |
/// </summary> |
|
1443 |
/// <param name="run"></param> |
|
1348 | 1444 |
private void JoinRunLine(LineRun run) |
1349 | 1445 |
{ |
1350 | 1446 |
string modelItemId = string.Empty; |
... | ... | |
1361 | 1457 |
} |
1362 | 1458 |
} |
1363 | 1459 |
|
1460 |
/// <summary> |
|
1461 |
/// PipeRun의 좌표를 가져오는 메서드 |
|
1462 |
/// </summary> |
|
1463 |
/// <param name="modelId"></param> |
|
1464 |
/// <returns></returns> |
|
1364 | 1465 |
private Dictionary<LMConnector, List<double[]>> GetPipeRunVertices(string modelId) |
1365 | 1466 |
{ |
1366 | 1467 |
Dictionary<LMConnector, List<double[]>> connectorVertices = new Dictionary<LMConnector, List<double[]>>(); |
... | ... | |
1396 | 1497 |
return connectorVertices; |
1397 | 1498 |
} |
1398 | 1499 |
|
1500 |
/// <summary> |
|
1501 |
/// 좌표로 PipeRun의 Connector중에 어느 Connector에 가까운지/붙을지 가져오는 메서드 - 두점으로 라인의 교차점을 기준으로 구함 |
|
1502 |
/// </summary> |
|
1503 |
/// <param name="connectorVertices"></param> |
|
1504 |
/// <param name="connX"></param> |
|
1505 |
/// <param name="connY"></param> |
|
1506 |
/// <param name="x2"></param> |
|
1507 |
/// <param name="y2"></param> |
|
1508 |
/// <returns></returns> |
|
1399 | 1509 |
private LMConnector FindTargetLMConnector(Dictionary<LMConnector, List<double[]>> connectorVertices, double connX, double connY, double x2, double y2) |
1400 | 1510 |
{ |
1401 | 1511 |
double length = double.MaxValue; |
... | ... | |
1469 | 1579 |
return targetConnector; |
1470 | 1580 |
} |
1471 | 1581 |
|
1582 |
/// <summary> |
|
1583 |
/// 좌표로 PipeRun의 Connector중에 어느 Connector에 가까운지/붙을지 가져오는 메서드 - 한점으로 제일 가까운 기준으로 구함(단순) |
|
1584 |
/// </summary> |
|
1585 |
/// <param name="connectorVertices"></param> |
|
1586 |
/// <param name="connX"></param> |
|
1587 |
/// <param name="connY"></param> |
|
1588 |
/// <returns></returns> |
|
1472 | 1589 |
private LMConnector FindTargetLMConnectorByPoint(Dictionary<LMConnector, List<double[]>> connectorVertices, double connX, double connY) |
1473 | 1590 |
{ |
1474 | 1591 |
double length = double.MaxValue; |
... | ... | |
1491 | 1608 |
return targetConnector; |
1492 | 1609 |
} |
1493 | 1610 |
|
1611 |
/// <summary> |
|
1612 |
/// 좌표로 PipeRun의 Connector중에 어느 Connector에 가까운지/붙을지 가져오는 메서드 - 조건에 안맞아서 못찾을시 제일 가까운 점으로 가져오는 방식 |
|
1613 |
/// </summary> |
|
1614 |
/// <param name="connectorVertices"></param> |
|
1615 |
/// <param name="connX"></param> |
|
1616 |
/// <param name="connY"></param> |
|
1617 |
/// <returns></returns> |
|
1494 | 1618 |
private LMConnector FindTargetLMConnectorForLabel(Dictionary<LMConnector, List<double[]>> connectorVertices, double connX, double connY) |
1495 | 1619 |
{ |
1496 | 1620 |
double length = double.MaxValue; |
... | ... | |
1550 | 1674 |
return targetConnector; |
1551 | 1675 |
} |
1552 | 1676 |
|
1677 |
/// <summary> |
|
1678 |
/// Line Number Symbol을 실제로 Modeling하는 메서드 |
|
1679 |
/// </summary> |
|
1680 |
/// <param name="lineNumber"></param> |
|
1553 | 1681 |
private void LineNumberModeling(LineNumber lineNumber) |
1554 | 1682 |
{ |
1555 | 1683 |
Line line = SPPIDUtil.FindObjectByUID(document, lineNumber.CONNLINE) as Line; |
... | ... | |
1581 | 1709 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1582 | 1710 |
} |
1583 | 1711 |
|
1712 |
/// <summary> |
|
1713 |
/// Line Number 기준으로 모든 Item에 Line Number의 Attribute Input |
|
1714 |
/// </summary> |
|
1715 |
/// <param name="lineNumber"></param> |
|
1584 | 1716 |
private void InputLineNumberAttribute(LineNumber lineNumber) |
1585 | 1717 |
{ |
1586 | 1718 |
foreach (LineRun run in lineNumber.RUNS) |
... | ... | |
1653 | 1785 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1654 | 1786 |
} |
1655 | 1787 |
|
1788 |
/// <summary> |
|
1789 |
/// Symbol Attribute 입력 메서드 |
|
1790 |
/// </summary> |
|
1791 |
/// <param name="symbol"></param> |
|
1656 | 1792 |
private void InputSymbolAttribute(Symbol symbol) |
1657 | 1793 |
{ |
1658 | 1794 |
try |
... | ... | |
1719 | 1855 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1720 | 1856 |
} |
1721 | 1857 |
|
1858 |
/// <summary> |
|
1859 |
/// Text Modeling - Association일 경우는 Text대신 해당 맵핑된 Symbol로 모델링 |
|
1860 |
/// </summary> |
|
1861 |
/// <param name="text"></param> |
|
1722 | 1862 |
private void TextModeling(Text text) |
1723 | 1863 |
{ |
1724 | 1864 |
LMSymbol _LMSymbol = null; |
... | ... | |
1806 | 1946 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1807 | 1947 |
} |
1808 | 1948 |
|
1949 |
/// <summary> |
|
1950 |
/// Note Modeling |
|
1951 |
/// </summary> |
|
1952 |
/// <param name="note"></param> |
|
1809 | 1953 |
private void NoteModeling(Note note) |
1810 | 1954 |
{ |
1811 | 1955 |
LMSymbol _LMSymbol = null; |
... | ... | |
1844 | 1988 |
SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount); |
1845 | 1989 |
} |
1846 | 1990 |
|
1991 |
/// <summary> |
|
1992 |
/// Label의 좌표를 구하는 메서드(ID2 기준의 좌표 -> SPPID 좌표) |
|
1993 |
/// </summary> |
|
1994 |
/// <param name="x"></param> |
|
1995 |
/// <param name="y"></param> |
|
1996 |
/// <param name="originX"></param> |
|
1997 |
/// <param name="originY"></param> |
|
1998 |
/// <param name="SPPIDLabelLocation"></param> |
|
1999 |
/// <param name="location"></param> |
|
1847 | 2000 |
private void CalcLabelLocation(ref double x, ref double y, double originX, double originY, SPPIDLabelLocationInfo SPPIDLabelLocation, Location location) |
1848 | 2001 |
{ |
1849 | 2002 |
if (location == Location.None) |
... | ... | |
1871 | 2024 |
} |
1872 | 2025 |
} |
1873 | 2026 |
|
2027 |
/// <summary> |
|
2028 |
/// ComObject를 Release |
|
2029 |
/// </summary> |
|
2030 |
/// <param name="objVars"></param> |
|
1874 | 2031 |
public void ReleaseCOMObjects(params object[] objVars) |
1875 | 2032 |
{ |
1876 | 2033 |
int intNewRefCount = 0; |
내보내기 Unified diff