프로젝트

일반

사용자정보

개정판 d9794a6c

IDd9794a6cdd09dea15f3564c911c4032d28bb7468
상위 3b2d7bd8
하위 1a591b2e

gaqhf 이(가) 5년 이상 전에 추가함

dev issue #1163 : overlap symbol remodeling

Change-Id: I00cd01da3731196836242712e7cf970a7071f071

차이점 보기:

DTI_PID/SPPIDConverter/AutoModeling.cs
139 139
                            Log.Write(ex.StackTrace);
140 140
                        }
141 141
                    }
142
                        
143 142

  
144 143
                    // Equipment Modeling
145 144
                    SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetStep, "Equipments Modeling");
......
157 156
                            Log.Write(ex.StackTrace);
158 157
                        }
159 158
                    }
160
                   
161 159

  
162 160
                    // LineRun Symbol Modeling
163 161
                    SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetStep, "Symbols Modeling");
......
188 186
                            Log.Write(ex.Message);
189 187
                            Log.Write(ex.StackTrace);
190 188
                        }
191
                    
189

  
192 190

  
193 191
                    // LineRun Line Modeling
194 192
                    SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetStep, "Lines Modeling");
......
774 772
                foreach (var item in symbol.ChildSymbols)
775 773
                    CreateChildSymbol(item, _LMSymbol);
776 774

  
775
                symbol.SPPID.SPPID_X = _LMSymbol.get_XCoordinate();
776
                symbol.SPPID.SPPID_Y = _LMSymbol.get_YCoordinate();
777

  
778
                double[] range = null;
779
                GetSPPIDSymbolRange(symbol, ref range);
780
                symbol.SPPID.SPPID_Min_X = range[0];
781
                symbol.SPPID.SPPID_Min_Y = range[1];
782
                symbol.SPPID.SPPID_Max_X = range[2];
783
                symbol.SPPID.SPPID_Max_Y = range[3];
784

  
785
                foreach (var item in symbol.SPPID.CorrectionX_GroupSymbols)
786
                    item.SPPID.ORIGINAL_X = symbol.SPPID.SPPID_X;
787
                foreach (var item in symbol.SPPID.CorrectionY_GroupSymbols)
788
                    item.SPPID.ORIGINAL_Y = symbol.SPPID.SPPID_Y;
789

  
777 790
                ReleaseCOMObjects(_LMSymbol);
778 791
            }
779 792

  
780 793
            SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount);
781 794
        }
782 795

  
796
        private void RemoveSymbol(Symbol symbol)
797
        {
798
            if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
799
            {
800
                LMSymbol _LMSymbol = dataSource.GetSymbol(symbol.SPPID.RepresentationId);
801
                if (_LMSymbol != null)
802
                {
803
                    _placement.PIDRemovePlacement(_LMSymbol.AsLMRepresentation());
804
                    ReleaseCOMObjects(_LMSymbol);
805
                }
806
            }
807

  
808
            symbol.SPPID.RepresentationId = string.Empty;
809
            symbol.SPPID.ModelItemID = string.Empty;
810
            symbol.SPPID.SPPID_X = double.NaN;
811
            symbol.SPPID.SPPID_Y = double.NaN;
812
            symbol.SPPID.SPPID_Min_X = double.NaN;
813
            symbol.SPPID.SPPID_Min_Y = double.NaN;
814
            symbol.SPPID.SPPID_Max_X = double.NaN;
815
            symbol.SPPID.SPPID_Max_Y = double.NaN;
816
        }
817

  
818
        private void RemoveSymbol(List<Symbol> symbols)
819
        {
820
            foreach (var symbol in symbols)
821
            {
822
                if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
823
                {
824
                    LMSymbol _LMSymbol = dataSource.GetSymbol(symbol.SPPID.RepresentationId);
825
                    if (_LMSymbol != null)
826
                    {
827
                        _placement.PIDRemovePlacement(_LMSymbol.AsLMRepresentation());
828
                        ReleaseCOMObjects(_LMSymbol);
829
                    }
830
                }
831

  
832
                symbol.SPPID.RepresentationId = string.Empty;
833
                symbol.SPPID.ModelItemID = string.Empty;
834
                symbol.SPPID.SPPID_X = double.NaN;
835
                symbol.SPPID.SPPID_Y = double.NaN;
836
                symbol.SPPID.SPPID_Min_X = double.NaN;
837
                symbol.SPPID.SPPID_Min_Y = double.NaN;
838
                symbol.SPPID.SPPID_Max_X = double.NaN;
839
                symbol.SPPID.SPPID_Max_Y = double.NaN;
840
            }
841
        }
842

  
783 843
        /// <summary>
784 844
        /// ID2의 Symbol Width와 Height를 비교해서 상대적인 SPPID Connector좌표를 가져온다.
785 845
        /// </summary>
......
869 929
            ReleaseCOMObjects(_TargetItem);
870 930
        }
871 931

  
932
        private void GetSPPIDSymbolRange(Symbol symbol, ref double[] range)
933
        {
934
            LMSymbol _TargetItem = dataSource.GetSymbol(symbol.SPPID.RepresentationId);
935
            Ingr.RAD2D.Symbol2d symbol2d = radApp.ActiveDocument.ActiveSheet.DrawingObjects[_TargetItem.get_GraphicOID().ToString()];
936
            double x1 = 0;
937
            double y1 = 0;
938
            double x2 = 0;
939
            double y2 = 0;
940
            symbol2d.Range(out x1, out y1, out x2, out y2);
941
            range = new double[] { x1, y1, x2, y2 };
942

  
943
            foreach (var childSymbol in symbol.ChildSymbols)
944
                GetSPPIDChildSymbolRange(childSymbol, ref range);
945

  
946
            ReleaseCOMObjects(_TargetItem);
947
        }
948

  
949
        private void GetSPPIDSymbolRange(List<Symbol> symbols, ref double[] range)
950
        {
951
            double[] tempRange = new double[] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue };
952
            foreach (var symbol in symbols)
953
            {
954
                LMSymbol _TargetItem = dataSource.GetSymbol(symbol.SPPID.RepresentationId);
955
                Ingr.RAD2D.Symbol2d symbol2d = radApp.ActiveDocument.ActiveSheet.DrawingObjects[_TargetItem.get_GraphicOID().ToString()];
956
                double x1 = 0;
957
                double y1 = 0;
958
                double x2 = 0;
959
                double y2 = 0;
960
                symbol2d.Range(out x1, out y1, out x2, out y2);
961

  
962
                tempRange[0] = Math.Min(tempRange[0], x1);
963
                tempRange[1] = Math.Min(tempRange[1], y1);
964
                tempRange[2] = Math.Max(tempRange[2], x2);
965
                tempRange[3] = Math.Max(tempRange[3], y2);
966

  
967
                foreach (var childSymbol in symbol.ChildSymbols)
968
                    GetSPPIDChildSymbolRange(childSymbol, ref range);
969

  
970
                ReleaseCOMObjects(_TargetItem);
971
            }
972

  
973
            range = tempRange;
974
        }
975

  
872 976
        /// <summary>
873 977
        /// Child Modeling 된 Symbol의 Range를 구한다.
874 978
        /// </summary>
......
904 1008
            ReleaseCOMObjects(_ChildSymbol);
905 1009
        }
906 1010

  
1011
        private void GetSPPIDChildSymbolRange(ChildSymbol childSymbol, ref double[] range)
1012
        {
1013
            LMSymbol _ChildSymbol = dataSource.GetSymbol(childSymbol.SPPID.RepresentationId);
1014
            Ingr.RAD2D.Symbol2d symbol2d = radApp.ActiveDocument.ActiveSheet.DrawingObjects[_ChildSymbol.get_GraphicOID().ToString()];
1015
            double x1 = 0;
1016
            double y1 = 0;
1017
            double x2 = 0;
1018
            double y2 = 0;
1019
            symbol2d.Range(out x1, out y1, out x2, out y2);
1020
            range[0] = Math.Min(range[0], x1);
1021
            range[1] = Math.Min(range[1], y1);
1022
            range[2] = Math.Max(range[2], x2);
1023
            range[3] = Math.Max(range[3], y2);
1024

  
1025
            foreach (var loopChildSymbol in childSymbol.ChildSymbols)
1026
                GetSPPIDChildSymbolRange(loopChildSymbol, ref range);
1027

  
1028
            ReleaseCOMObjects(_ChildSymbol);
1029
        }
1030

  
907 1031
        /// <summary>
908 1032
        /// Label Symbol Modeling
909 1033
        /// </summary>
......
1098 1222
        private void SymbolModelingByPriority(Symbol symbol)
1099 1223
        {
1100 1224
            // Angle, Center, 우선순위 모델링
1101
            SymbolModeling(symbol, null);
1102
            List<Symbol> group = new List<Symbol>() { symbol };
1103
            SPPIDUtil.FindConnectedSymbolGroup(document, symbol, group);
1104
            List<Symbol> endModeling = new List<Symbol>() { symbol };
1225
            if (string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
1226
            {
1227
                SymbolModeling(symbol, null);
1228
                List<Symbol> group = new List<Symbol>() { symbol };
1229
                SPPIDUtil.FindConnectedSymbolGroup(document, symbol, group);
1230
                List<Symbol> endModeling = new List<Symbol>() { symbol };
1231

  
1232
                while (endModeling.Count != group.Count)
1233
                {
1234
                    foreach (var item in group)
1235
                    {
1236
                        if (!endModeling.Contains(item))
1237
                        {
1238
                            bool result = false;
1239
                            foreach (var connector in item.CONNECTORS)
1240
                            {
1241
                                Symbol connSymbol = group.Find(x => x.UID == connector.CONNECTEDITEM);
1242
                                if (connSymbol == item)
1243
                                    throw new Exception("");
1105 1244

  
1106
            while (endModeling.Count != group.Count)
1245
                                if (connSymbol != null && endModeling.Contains(connSymbol))
1246
                                {
1247
                                    SymbolModeling(item, connSymbol);
1248
                                    endModeling.Add(item);
1249
                                    result = true;
1250
                                    break;
1251
                                }
1252
                            }
1253

  
1254
                            if (result)
1255
                                break;
1256
                        }
1257
                    }
1258
                }
1259

  
1260
                SymbolModelingBySymbol(symbol);
1261
            }
1262
        }
1263

  
1264
        /// <summary>
1265
        /// 첫 진입점
1266
        /// </summary>
1267
        /// <param name="symbol"></param>
1268
        private void SymbolModelingBySymbol(Symbol symbol)
1269
        {
1270
            List<object> endObjects = new List<object>();
1271
            endObjects.Add(symbol);
1272
            foreach (var connector in symbol.CONNECTORS)
1107 1273
            {
1108
                foreach (var item in group)
1274
                object connItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
1275
                if (connItem != null && connItem.GetType() != typeof(Equipment))
1109 1276
                {
1110
                    if (!endModeling.Contains(item))
1277
                    endObjects.Add(connItem);
1278
                    if (connItem.GetType() == typeof(Symbol))
1111 1279
                    {
1112
                        bool result = false;
1113
                        foreach (var connector in item.CONNECTORS)
1280
                        Symbol connSymbol = connItem as Symbol;
1281
                        if (string.IsNullOrEmpty(connSymbol.SPPID.RepresentationId))
1114 1282
                        {
1115
                            Symbol connSymbol = group.Find(x => x.UID == connector.CONNECTEDITEM);
1116
                            if (connSymbol == item)
1117
                                throw new Exception("");
1283
                            SymbolModeling(connSymbol, symbol);
1284
                        }
1285
                        SymbolModelingByNeerPrioritySymbolLoop(connSymbol, endObjects);
1286
                    }
1287
                    else if (connItem.GetType() == typeof(Line))
1288
                    {
1289
                        Line connLine = connItem as Line;
1290
                        SymbolModelingByNeerPriorityLineLoop(connLine, endObjects, symbol);
1291
                    }
1292
                }
1293
            }
1294
        }
1118 1295

  
1119
                            if (connSymbol != null && endModeling.Contains(connSymbol))
1296
        private void SymbolModelingByNeerPrioritySymbolLoop(Symbol symbol, List<object> endObjects)
1297
        {
1298
            foreach (var connector in symbol.CONNECTORS)
1299
            {
1300
                object connItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
1301
                if (connItem != null && connItem.GetType() != typeof(Equipment))
1302
                {
1303
                    if (!endObjects.Contains(connItem))
1304
                    {
1305
                        endObjects.Add(connItem);
1306
                        if (connItem.GetType() == typeof(Symbol))
1307
                        {
1308
                            Symbol connSymbol = connItem as Symbol;
1309
                            if (string.IsNullOrEmpty(connSymbol.SPPID.RepresentationId))
1120 1310
                            {
1121
                                SymbolModeling(item, connSymbol);
1122
                                endModeling.Add(item);
1123
                                result = true;
1124
                                break;
1311
                                SymbolModeling(connSymbol, symbol);
1125 1312
                            }
1313
                            SymbolModelingByNeerPrioritySymbolLoop(connSymbol, endObjects);
1126 1314
                        }
1315
                        else if (connItem.GetType() == typeof(Line))
1316
                        {
1317
                            Line connLine = connItem as Line;
1318
                            SymbolModelingByNeerPriorityLineLoop(connLine, endObjects, symbol);
1319
                        }
1320
                    }
1321
                }
1322
            }
1323
        }
1127 1324

  
1128
                        if (result)
1129
                            break;
1325
        private void SymbolModelingByNeerPriorityLineLoop(Line line, List<object> endObjects, Symbol prevSymbol)
1326
        {
1327
            foreach (var connector in line.CONNECTORS)
1328
            {
1329
                object connItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
1330
                if (connItem != null && connItem.GetType() != typeof(Equipment))
1331
                {
1332
                    if (!endObjects.Contains(connItem))
1333
                    {
1334
                        endObjects.Add(connItem);
1335
                        if (connItem.GetType() == typeof(Symbol))
1336
                        {
1337
                            Symbol connSymbol = connItem as Symbol;
1338
                            if (string.IsNullOrEmpty(connSymbol.SPPID.RepresentationId))
1339
                            {
1340
                                List<Symbol> group = new List<Symbol>();
1341
                                SPPIDUtil.FindConnectedSymbolGroup(document, connSymbol, group);
1342
                                if (group.Count == 3)
1343
                                {
1344
                                    Symbol symbol = SPPIDUtil.FindCenterAtThreeSymbols(document, group);
1345
                                    SymbolModeling(symbol, null);
1346
                                    foreach (var _temp in group)
1347
                                        if (_temp != symbol && string.IsNullOrEmpty(_temp.SPPID.RepresentationId))
1348
                                            SymbolModeling(_temp, symbol);
1349

  
1350
                                    // Range 겹치는지 확인해야함
1351
                                    double[] prevRange = null;
1352
                                    GetSPPIDSymbolRange(prevSymbol, ref prevRange);
1353
                                    double[] groupRange = null;
1354
                                    GetSPPIDSymbolRange(group, ref groupRange);
1355

  
1356
                                    double distanceX = 0;
1357
                                    double distanceY = 0;
1358
                                    if (SPPIDUtil.IsOverlap(prevRange, groupRange, ref distanceX, ref distanceY))
1359
                                    {
1360
                                        RemoveSymbol(group);
1361
                                        foreach (var _temp in group)
1362
                                            SPPIDUtil.CalcNewCoordinateForSymbol(_temp, prevSymbol, distanceX, distanceY);
1363

  
1364
                                        SymbolModeling(symbol, null);
1365
                                        foreach (var _temp in group)
1366
                                            if (_temp != symbol && string.IsNullOrEmpty(_temp.SPPID.RepresentationId))
1367
                                                SymbolModeling(_temp, symbol);
1368
                                    }
1369
                                }
1370
                                else
1371
                                {
1372
                                    SymbolModeling(connSymbol, null);
1373
                                    // Range 겹치는지 확인해야함
1374
                                    double[] prevRange = null;
1375
                                    GetSPPIDSymbolRange(prevSymbol, ref prevRange);
1376
                                    double[] connRange = null;
1377
                                    GetSPPIDSymbolRange(connSymbol, ref connRange);
1378

  
1379
                                    double distanceX = 0;
1380
                                    double distanceY = 0;
1381

  
1382
                                    if (SPPIDUtil.IsOverlap(prevRange, connRange, ref distanceX, ref distanceY))
1383
                                    {
1384
                                        RemoveSymbol(connSymbol);
1385
                                        SPPIDUtil.CalcNewCoordinateForSymbol(connSymbol, prevSymbol, distanceX, distanceY);
1386

  
1387
                                        SymbolModeling(connSymbol, null);
1388
                                    }
1389
                                }
1390
                            }
1391
                            SymbolModelingByNeerPrioritySymbolLoop(connSymbol, endObjects);
1392
                        }
1393
                        else if (connItem.GetType() == typeof(Line))
1394
                        {
1395
                            Line connLine = connItem as Line;
1396
                            if (!SPPIDUtil.IsBranchLine(connLine, line))
1397
                                SymbolModelingByNeerPriorityLineLoop(connLine, endObjects, prevSymbol);
1398
                        }
1130 1399
                    }
1131 1400
                }
1132 1401
            }
1133 1402
        }
1134 1403

  
1404

  
1405

  
1135 1406
        /// <summary>
1136 1407
        /// 심볼을 실제로 Modeling할때 ChildSymbol이 있다면 Modeling하는 메서드
1137 1408
        /// </summary>
......
3282 3553
            SplashScreenManager.Default.SendCommand(SPPIDSplashScreen.SplashScreenCommand.SetProgress, ++CurrentCount);
3283 3554
        }
3284 3555

  
3556
        /// <summary>
3557
        /// Note Symbol Modeling
3558
        /// </summary>
3559
        /// <param name="symbol"></param>
3285 3560
        private void NoteSymbolModeling(Symbol symbol)
3286 3561
        {
3287 3562
            if (symbol.TYPE == "Notes")
......
3351 3626
            List<Symbol> symbols = new List<Symbol>();
3352 3627

  
3353 3628
            // Angle Valve 부터
3354
            foreach (var symbol in document.SYMBOLS.FindAll(x => x.CONNECTORS.Count == 2))
3629
            foreach (var symbol in document.SYMBOLS.FindAll(x => x.CONNECTORS.FindAll(y => y.Index == 0).Count == 2))
3355 3630
            {
3356 3631
                if (!symbols.Contains(symbol))
3357 3632
                {
......
3364 3639

  
3365 3640
                    SlopeType slopeType1 = SlopeType.None;
3366 3641
                    SlopeType slopeType2 = SlopeType.None;
3367
                    foreach (Connector connector in symbol.CONNECTORS)
3642
                    foreach (Connector connector in symbol.CONNECTORS.FindAll(x => x.Index == 0))
3368 3643
                    {
3369 3644
                        double connectorX = 0;
3370 3645
                        double connectorY = 0;
......
3381 3656
                }
3382 3657
            }
3383 3658

  
3659
            List<string> endSymbolUIDs = new List<string>();
3384 3660
            // 3개의 Symbol이 뭉쳐 있을 때
3385 3661
            foreach (var item in document.SYMBOLS)
3386 3662
            {
3387
                List<Symbol> group = new List<Symbol>();
3388
                SPPIDUtil.FindConnectedSymbolGroup(document, item, group);
3389
                if (group.Count == 3)
3663
                if (!endSymbolUIDs.Contains(item.UID))
3390 3664
                {
3391
                    Symbol symbol = SPPIDUtil.FindCenterAtThreeSymbols(document, group);
3392
                    if (!symbols.Contains(symbol))
3393
                        symbols.Add(symbol);
3665
                    List<Symbol> group = new List<Symbol>();
3666
                    SPPIDUtil.FindConnectedSymbolGroup(document, item, group);
3667
                    if (group.Count == 3)
3668
                    {
3669
                        Symbol symbol = SPPIDUtil.FindCenterAtThreeSymbols(document, group);
3670
                        if (!symbols.Contains(symbol))
3671
                            symbols.Add(symbol);
3672
                        foreach (var groupItem in group)
3673
                            if (!endSymbolUIDs.Contains(groupItem.UID))
3674
                                endSymbolUIDs.Add(groupItem.UID);
3675
                    }
3394 3676
                }
3395 3677
            }
3396 3678

  
......
3401 3683
                    symbols.Add(symbol);
3402 3684
            }
3403 3685

  
3686
            // 2개이상의 Symbol이 뭉쳐 있을 때
3687
            endSymbolUIDs.Clear();
3688
            foreach (var item in document.SYMBOLS)
3689
            {
3690
                if (!endSymbolUIDs.Contains(item.UID))
3691
                {
3692
                    List<Symbol> group = new List<Symbol>();
3693
                    SPPIDUtil.FindConnectedSymbolGroup(document, item, group);
3694
                    if (group.Count != 3 && group.Count > 1)
3695
                    {
3696
                        if (!symbols.Contains(group[0]))
3697
                            symbols.Add(group[0]);
3698
                        foreach (var groupItem in group)
3699
                            if (!endSymbolUIDs.Contains(groupItem.UID))
3700
                                endSymbolUIDs.Add(groupItem.UID);
3701
                    }
3702
                }
3703
            }
3704

  
3404 3705

  
3405 3706
            return symbols;
3406 3707
        }
DTI_PID/SPPIDConverter/BaseModel/SPPID/SPPIDSymbolInfo.cs
16 16
        public string GraphicOID { get; set; }
17 17
        public bool IsCorrectionX { get; set; }
18 18
        public bool IsCorrectionY { get; set; }
19

  
20
        public List<Symbol> CorrectionX_GroupSymbols { get; set; }
21
        public List<Symbol> CorrectionY_GroupSymbols { get; set; }
22

  
23
        public double SPPID_X { get; set; }
24
        public double SPPID_Y { get; set; }
25

  
26
        public double SPPID_Min_X { get; set; }
27
        public double SPPID_Min_Y { get; set; }
28
        public double SPPID_Max_X { get; set; }
29
        public double SPPID_Max_Y { get; set; }
19 30
    }
20 31
}
DTI_PID/SPPIDConverter/SPPIDModel/GridSetting.cs
18 18
        public GridUnit Unit { get; set; }
19 19
        public int MinSymbolGridCellCount { get; set; }
20 20
        public int DrainValveCellCount { get; set; }
21
        public double Length { get; set; }
21 22

  
22 23
        public static GridSetting GetInstance()
23 24
        {
24 25
            if (setting == null)
25 26
                setting = new GridSetting();
26 27

  
28
            if (setting.Unit == GridUnit.Inch)
29
            {
30
                setting.Length = setting.Density * 0.0254;
31
            }
32

  
27 33
            return setting;
28 34
        }
29 35

  
DTI_PID/SPPIDConverter/SPPIDModel/SPPID_Document.cs
248 248
                    {
249 249
                        item.SPPID.IsCorrectionX = true;
250 250
                        item.SPPID.ORIGINAL_X = value;
251
                        item.SPPID.CorrectionX_GroupSymbols = groupSymbols;
251 252
                    }
252 253
                }
253 254

  
......
273 274
                    {
274 275
                        item.SPPID.IsCorrectionY = true;
275 276
                        item.SPPID.ORIGINAL_Y = value;
277
                        item.SPPID.CorrectionY_GroupSymbols = groupSymbols;
276 278
                    }
277 279
                }
278 280
            }
DTI_PID/SPPIDConverter/Util/SPPIDUtil.cs
162 162
            {
163 163
                if (_GridSetting.Unit == GridUnit.Inch)
164 164
                {
165
                    double length = _GridSetting.Density * 0.0254;
166 165
                    double temp = value;
167
                    value = Math.Round(value / length) * length;
166
                    value = Math.Round(value / _GridSetting.Length) * _GridSetting.Length;
168 167
                }
169 168
            }
170 169
        }
......
178 177
            else
179 178
            {
180 179
                double angle = Math.Atan(Math.Abs(y2 - y1) / Math.Abs(x2 - x1)) * 180 / Math.PI;
181
                if (angle <= 10)
180
                if (angle <= 15)
182 181
                    return SlopeType.HORIZONTAL;
183
                else if (angle >= 80)
182
                else if (angle >= 75)
184 183
                    return SlopeType.VERTICAL;
185 184
                else
186 185
                    return SlopeType.Slope;
......
455 454

  
456 455
            return findChild;
457 456
        }
457

  
458
        public static bool IsBranchLine(Line line1, Line line2)
459
        {
460
            bool result = true;
461

  
462
            Connector conn1 = line1.CONNECTORS.Find(x => x.CONNECTEDITEM == line2.UID);
463
            Connector conn2 = line2.CONNECTORS.Find(x => x.CONNECTEDITEM == line1.UID);
464

  
465
            if (conn1 != null && conn2 != null)
466
                result = false;
467

  
468
            return result;
469
        }
470

  
471
        public static bool IsOverlap(double[] range1, double[] range2, ref double x, ref double y)
472
        {
473
            bool result = false;
474

  
475
            if (range1[0] <= range2[2] && range1[2] >= range2[0])
476
            {
477
                result = true;
478
                x = Math.Min(Math.Abs(range1[0] - range2[2]), Math.Abs(range1[2] - range2[0]));
479
            }
480

  
481
            if (range1[1] <= range2[3] && range1[3] >= range2[1])
482
            {
483
                result = true;
484
                y = Math.Min(Math.Abs(range1[1] - range2[3]), Math.Abs(range1[3] - range2[1]));
485
            }
486

  
487
            return result;
488
        }
489

  
490
        public static void CalcNewCoordinateForSymbol(Symbol symbol, Symbol prevSymbol, double distanceX, double distanceY)
491
        {
492
            SlopeType slopeType = SPPIDUtil.CalcSlope(prevSymbol.SPPID.ORIGINAL_X, prevSymbol.SPPID.ORIGINAL_Y, symbol.SPPID.ORIGINAL_X, symbol.SPPID.ORIGINAL_Y);
493
            GridSetting _GridSetting = GridSetting.GetInstance();
494
            if (slopeType == SlopeType.HORIZONTAL)
495
            {
496
                double length = (Math.Ceiling(distanceX / _GridSetting.Length) + 1) * _GridSetting.Length;
497
                if (prevSymbol.SPPID.ORIGINAL_X < symbol.SPPID.ORIGINAL_X)
498
                    symbol.SPPID.ORIGINAL_X = symbol.SPPID.ORIGINAL_X + length;
499
                else
500
                    symbol.SPPID.ORIGINAL_X = symbol.SPPID.ORIGINAL_X - length;
501
            }
502
            else if (slopeType == SlopeType.VERTICAL)
503
            {
504
                double length = (Math.Ceiling(distanceY / _GridSetting.Length) + 1) * _GridSetting.Length;
505
                if (prevSymbol.SPPID.ORIGINAL_Y < symbol.SPPID.ORIGINAL_Y)
506
                    symbol.SPPID.ORIGINAL_Y = symbol.SPPID.ORIGINAL_Y + length;
507
                else
508
                    symbol.SPPID.ORIGINAL_Y = symbol.SPPID.ORIGINAL_Y - length;
509
            }
510
        }
458 511
    }
459 512
}

내보내기 Unified diff

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