프로젝트

일반

사용자정보

개정판 73152510

ID73152510d88e3ece7d8147141fa115a4441e2ad4
상위 b90890eb
하위 cbf215e5, 5870e14f, 2d09df82

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

dev issue #1231 : Symbol Modeling

Change-Id: Ic999efe8e79f42dd5d374fcc25affdb07c4cb802

차이점 보기:

DTI_PID/APIDConverter/APIDConverterExplorer.cs
32 32
                    AutoModeling autoModeling = new AutoModeling(item);
33 33
                    autoModeling.CreateDrawing();
34 34
                }
35

  
36
                MessageBox.Show("End Conversion", "APID Converter", MessageBoxButtons.OK, MessageBoxIcon.Information);
35 37
            }
36 38
        }
37 39
    }
DTI_PID/APIDConverter/AutoModeling.cs
126 126
        }
127 127
        private void SymbolModeling(Symbol symbol)
128 128
        {
129

  
129
            long handle = InsertSymbol(symbol.Aveva.Name, symbol.Aveva.X, symbol.Aveva.Y);
130
            if (handle != 0)
131
                symbol.Aveva.Handle = handle;
130 132
        }
131 133
        #endregion
132 134

  
......
226 228
            else
227 229
                return 0;
228 230
        }
229
        private void InsertSymbol(string insertSymbolName, double x, double y)
231
        private long InsertSymbol(string insertSymbolName, double x, double y)
230 232
        {
233
            long handle = 0;
231 234
            try
232 235
            {
236
                List<long> prevHandles = GetAllBlockHandlesByName(insertSymbolName);
237

  
233 238
                AVEVA.PID.Utilities.DrawingData drawingData = new AVEVA.PID.Utilities.DrawingData();
234 239
                drawingData.InsertSymbolName = insertSymbolName;
235 240
                Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
......
241 246
                commandParam.Add(null);
242 247

  
243 248
                editor.Command(commandParam.ToArray());
249

  
250
                List<long> newHandles = GetAllBlockHandlesByName(insertSymbolName);
251
                List<long> otherHandles = new List<long>();
252
                foreach (var item in newHandles)
253
                    if (!prevHandles.Contains(item))
254
                        otherHandles.Add(item);
255

  
256
                if (otherHandles.Count == 1)
257
                    return otherHandles[0];
258
                else
259
                    return 0;
244 260
            }
245 261
            catch (System.Exception ex)
246 262
            {
247 263

  
248 264
            }
265

  
266
            return handle;
249 267
        }
250 268
        #endregion
251 269

  
252
        #region
270
        #region Autocad Utils
271
        private List<long> GetAllBlockHandlesByName(string name)
272
        {
273
            List<long> handles = new List<long>();
274

  
275
            Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
276
            Database acCurDb = acDoc.Database;
277
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
278
            {
279
                BlockTable gd = (BlockTable)acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead);
280
                foreach (var entry in gd)
281
                {
282
                    BlockTableRecord blockTableRecord = acTrans.GetObject(entry, OpenMode.ForRead, true) as BlockTableRecord;
283
                    if (blockTableRecord != null)
284
                    {
285
                        IEnumerable<BlockReference> records = AcDbLinqExtensionMethods.GetBlockReferences(blockTableRecord);
286
                        foreach (var item in records)
287
                        {
288
                            if (item.Name == name)
289
                                handles.Add(item.Handle.Value);
290
                        }
291
                    }
292
                }
293
                    
294
                acTrans.Commit();
295
            }
296
            return handles;
297
        }
253 298
        private List<long> GetAllGroupHandles()
254 299
        {
255 300
            List<long> handles = new List<long>();
......
295 340

  
296 341
            return result;
297 342
        }
298

  
299

  
300

  
301 343
        #endregion
302 344

  
303
        #region
345
        #region Modeling Utils
304 346
        private void GetConnectedGroupLine(Model.Line line, List<Model.Line> group, bool isInsert)
305 347
        {
306 348
            if (!group.Contains(line))
......
413 455
            //DrawSignal("SONIC", new List<string>() { "2,100", "100,100" });
414 456

  
415 457
            DrawPipe("Main Pipe", new List<string>() { "2,100", "100,100" });
416

  
458
            InsertSymbol("BAVA", 50, 100);
417 459
            //DrawPipe("Main Pipe", new List<string>() { "2,200", "100,200" });
418 460

  
419 461
            //DrawPipe("Sub Pipe", new List<string>() { "50,100", "50,200" });
420 462
        }
463

  
464

  
421 465
        public static void TESTStatic()
422 466
        {
423 467
            AutoModeling auto = new AutoModeling(null);
......
425 469
        }
426 470
        #endregion
427 471
    }
472

  
473

  
474
    public static class AcDbLinqExtensionMethods
475
    {
476
        /// <summary>
477
        /// Get all references to the given BlockTableRecord, including 
478
        /// references to anonymous dynamic BlockTableRecords.
479
        /// </summary>
480

  
481
        public static IEnumerable<BlockReference> GetBlockReferences(
482
           this BlockTableRecord btr,
483
           OpenMode mode = OpenMode.ForRead,
484
           bool directOnly = true)
485
        {
486
            if (btr == null)
487
                throw new ArgumentNullException("btr");
488
            var tr = btr.Database.TransactionManager.TopTransaction;
489
            if (tr == null)
490
                throw new InvalidOperationException("No transaction");
491
            var ids = btr.GetBlockReferenceIds(directOnly, true);
492
            int cnt = ids.Count;
493
            for (int i = 0; i < cnt; i++)
494
            {
495
                yield return (BlockReference)
496
                   tr.GetObject(ids[i], mode, false, false);
497
            }
498
            if (btr.IsDynamicBlock)
499
            {
500
                BlockTableRecord btr2 = null;
501
                var blockIds = btr.GetAnonymousBlockIds();
502
                cnt = blockIds.Count;
503
                for (int i = 0; i < cnt; i++)
504
                {
505
                    btr2 = (BlockTableRecord)tr.GetObject(blockIds[i],
506
                       OpenMode.ForRead, false, false);
507
                    ids = btr2.GetBlockReferenceIds(directOnly, true);
508
                    int cnt2 = ids.Count;
509
                    for (int j = 0; j < cnt2; j++)
510
                    {
511
                        yield return (BlockReference)
512
                           tr.GetObject(ids[j], mode, false, false);
513
                    }
514
                }
515
            }
516
        }
517
    }
428 518
}
DTI_PID/APIDConverter/Model/PlantItem/Document.cs
563 563
                if (rows.Length == 1 && !DBNull.Value.Equals(rows[0]["APID_SYMBOL"]) && !string.IsNullOrEmpty((string)rows[0]["APID_SYMBOL"]))
564 564
                {
565 565
                    item.Aveva = new AvevaSymbolInfo();
566
                    item.Aveva.Name = (string)rows[0]["APID_SYMBOL"];
567 566
                    item.Aveva.X = item.X;
568 567
                    item.Aveva.Y = SIZE_HEIGHT - item.Y;
568
                    item.Aveva.FullName = (string)rows[0]["APID_SYMBOL"];
569
                    string[] split = item.Aveva.FullName.Split(new char[] { '\\' });
570
                    item.Aveva.Name = split[split.Length - 1];
569 571
                }
570 572
                else
571 573
                    result = false;
DTI_PID/APIDConverter/Model/PlantItem/Other/AvevaSymbolInfo.cs
10 10
    {
11 11
        public long Handle { get; set; }
12 12
        public string Name { get; set; }
13
        public string FullName { get; set; }
13 14
        public double X { get; set; }
14 15
        public double Y { get; set; }
15 16
    }

내보내기 Unified diff

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