| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > C# .NET. Как получить путь из выбранной внешней ссылки?

C# .NET. Как получить путь из выбранной внешней ссылки?

Ответ
Поиск в этой теме
Непрочитано 18.02.2015, 17:29 #1
C# .NET. Как получить путь из выбранной внешней ссылки?
Sfinks7s1
 
VB, C++, C#, Java
 
Санкт-Петербург
Регистрация: 19.04.2013
Сообщений: 48

Пытаюсь получить таблицу блоков BlockTable из выбранной заранее внешней ссылки. Возвращает Exception caught: System.NullReferenceException.
Что я не правильно делаю?
Как перебрать все ссылки в чертеже и получить пути я знаю, но как возвратить путь только выбранной ссылки?

Код:
[Выделить все]
[CommandMethod("Test", CommandFlags.NoBlockEditor)]
        public static void Test()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor editor = doc.Editor;
            try
            {
                using (Transaction tr = doc.TransactionManager.StartTransaction())
                {
                    PromptSelectionResult acSSPrompt = doc.Editor.GetSelection();
                    if (acSSPrompt.Status == PromptStatus.OK)
                    {
                        SelectionSet acSSet = acSSPrompt.Value;
                        foreach (SelectedObject ObjId in acSSet)
                        {
                            BlockTable bt = tr.GetObject(ObjId.ObjectId, OpenMode.ForRead) as BlockTable;

                            foreach (ObjectId id in bt)
                            {
                                BlockTableRecord btr = tr.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
                                if (btr.IsFromExternalReference)
                                {
                                    editor.WriteMessage(btr.Name);
                                }
                            }
                        }
                    }
                    tr.Commit();
                }
            }
             catch (System.Exception ex)
            {
                editor.WriteMessage("\n Exception caught: " + ex);
            }
        }
Просмотров: 5065
 
Непрочитано 19.02.2015, 10:26
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Код:
[Выделить все]
 BlockTable bt = tr.GetObject(ObjId.ObjectId, OpenMode.ForRead) as BlockTable;
ObjId - это один из выбранных объектов. Поставьте точку останова и посмотрите что в ней - это явно не BlockTable. Чтобы узнать что это, можно сделать так:
Код:
[Выделить все]
DBObject obj = tr.GetObject(ObjId.ObjectId, OpenMode.ForRead);
И в отладке посмотреть, что это за объект.
Миниатюры
Нажмите на изображение для увеличения
Название: dwgru_1.png
Просмотров: 33
Размер:	13.1 Кб
ID:	144226  
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)

Последний раз редактировалось Do$, 19.02.2015 в 10:33.
Do$ вне форума  
 
Автор темы   Непрочитано 19.02.2015, 14:01
#3
Sfinks7s1

VB, C++, C#, Java
 
Регистрация: 19.04.2013
Санкт-Петербург
Сообщений: 48
Отправить сообщение для Sfinks7s1 с помощью Skype™


Реализовал так:

Код:
[Выделить все]
[CommandMethod("XREFEDIT", CommandFlags.NoBlockEditor)]
        public static void XRefEdit()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor editor = doc.Editor;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                try
                {
                    //выбираем объект в пространстве чертежа
                    PromptSelectionResult acSSPrompt = doc.Editor.GetSelection();
                    if (acSSPrompt.Status == PromptStatus.OK)
                    {
                        SelectionSet acSSet = acSSPrompt.Value;
                        //перебираем объекты в выбранной коллекции
                        foreach (SelectedObject selObj in acSSet)
                        {
                            BlockReference selBlk = tr.GetObject(selObj.ObjectId, OpenMode.ForWrite) as BlockReference;
                            BlockTableRecord btr = (BlockTableRecord)tr.GetObject(selBlk.BlockTableRecord, OpenMode.ForWrite);
                            if (btr.IsFromExternalReference)
                            {
                                  ...
                            }                                  
                        }
                    }
                    tr.Commit();
                }
                catch (System.Exception ex)
                {
                    editor.WriteMessage("\n Exception caught: " + ex.Message + "\n" + ex.StackTrace);
                    tr.Dispose();
                }
            }
        }
Sfinks7s1 вне форума  
 
Непрочитано 19.02.2015, 15:04
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Код:
Это совершенно лишнее, если использовать конструкцию USING.
Или подразумевалось tr.Abort()?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > C# .NET. Как получить путь из выбранной внешней ссылки?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Акад2006-пропадают внешние ссылки Роб Рой AutoCAD 22 18.01.2017 10:17
relative path - как работает? Angel_and AutoCAD 20 10.08.2016 14:43
Внедрение подрезанной внешней ссылки. shartal Программирование 1 19.09.2013 22:54
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
как получить путь к сетевому текстовому файлу Victorovich Программирование 3 30.06.2008 15:47