Получить значение односточного текста

Автор Тема: Получить значение односточного текста  (Прочитано 7621 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Добрый день! Начинаю осваивать net, возникла простая задача выбрать однострочный текст на чертеже и получить его содержимое (TextString).
В силу нехватки знаний тривиальная задача превратилась в неразрешимую. Искал подобные примеры на форуме, но что-то похожее не нашел. Прошу помощи.
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5.  
  6. namespace MyAutoCADDll
  7. {
  8.     public class MyCommands
  9.     {
  10.  
  11.         // эта функция будет вызываться при выполнении в AutoCAD
  12.         [CommandMethod("Antony")]
  13.         public static void SelectObjectsOnscreen()
  14.         {
  15.             // Получение текущего документа и базы данных
  16.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  17.             Database acCurDb = acDoc.Database;
  18.  
  19.             // Старт транзакции
  20.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  21.             {
  22.                 PromptEntityOptions opt = new PromptEntityOptions("");
  23.                 opt.Message = "/nВыберите объект:";
  24.  
  25.                 // Запрос выбора объектов в области чертежа
  26.                 //PromptEntityResult acSSPrompt = acDoc.Editor.GetEntity(opt);
  27.                 PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection();
  28.  
  29.                 // Если статус запроса равен OK, объекты выбраны
  30.                 if (acSSPrompt.Status == PromptStatus.OK)
  31.                 {
  32.                     SelectionSet acSSet = acSSPrompt.Value;
  33.  
  34.                     // Перебор объектов в наборе
  35.                     foreach (SelectedObject acSSObj in acSSet)
  36.                     {
  37.                         // Проверка, нужно убедится в правильности полученного объекта
  38.                         if (acSSObj != null)
  39.                         {
  40.                             // Открытие объекта для чтения
  41.                             Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as Entity;
  42.                             //if (acEnt != null)
  43.                             //{
  44.                               DBText txt1 = new DBText();
  45.                            [color=red] txt1.TextString = acEnt.TextString;[/color]                            
  46.                             System.Windows.Forms.MessageBox.Show(txt1.TextString);
  47.                            // }
  48.                         }
  49.                     }
  50.  
  51.                     // Сохранение нового объекта в базе данных
  52.                     acTrans.Commit();
  53.                 }
  54.             }
  55.         }
  56.     }
  57. }

Отмечено как Решение Андрей Лаврентьев 29-08-2017, 13:48:50

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Приветствую на форуме! Сравни со своим кодом.
Код - C# [Выбрать]
  1. if (acSSObj != null)
  2. {
  3.     // Открытие объекта для чтения
  4.     Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as Entity;
  5.     if (acEnt != null)
  6.     {
  7.       DBText txt1 = acEnt as DBText;
  8.       if (txt1 != null)
  9.        System.Windows.Forms.MessageBox.Show(txt1.TextString);
  10.     }
  11. }

А можно еще проще:

Код - C# [Выбрать]
  1. if (acSSObj != null)
  2.     {
  3.         // Открытие объекта для чтения
  4.         DBText acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as DBText;
  5.         if (acEnt != null)
  6.         {
  7.            System.Windows.Forms.MessageBox.Show(acEnt.TextString);
  8.         }
  9.     }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Если не нужен новый DBText то просто
Код - C# [Выбрать]
  1.     DBText acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as DBText;
  2.     if (acEnt != null) System.Windows.Forms.MessageBox.Show(acEnt.TextString);
  3.    

А если все-таки зачем-то вам нужен новый DBText, то его как минимум надо сохранить. Его надо приписать к пространству модели и добавить в транзакцию. Я использую такой хелпер:
Код - C# [Выбрать]
  1.     /// <summary>
  2.     /// Сохранение объекта в пространстве модели или в текущее пространство
  3.     /// </summary>
  4.     public static ObjectId SaveEnt(this Entity en, Transaction tr, Database ToDatabase, bool toModel = true)
  5.     {
  6.       if (tr == null || en == null) return ObjectId.Null;
  7.       BlockTableRecord space;
  8.       if (toModel) space = tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(ToDatabase), OpenMode.ForWrite) as BlockTableRecord;
  9.       else space = tr.GetObject(ToDatabase.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  10.       ObjectId ret = space.AppendEntity(en);
  11.       tr.AddNewlyCreatedDBObject(en, true);
  12.       return ret;
  13.     }

p.s. сложно быть оперативней Александра Ривилиса :)
« Последнее редактирование: 29-08-2017, 13:16:04 от Александр Ривилис »

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
p.s. сложно быть оперативней Александра Ривилиса :)
Это точно.  :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Огромное спасибо всем! Будем изучать дальше.  :)

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Огромное спасибо всем! Будем изучать дальше.  :)
Всегда пожалуйста! Не забывай про кнопки Решение и [+] в качестве благодарности.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Огромное спасибо всем! Будем изучать дальше.  :)
Всегда пожалуйста! Не забывай про кнопки Решение и [+] в качестве благодарности.
к сожалению, как поставить плюсик я так и не нашел  :(

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
к сожалению, как поставить плюсик я так и не нашел  :(
Это просто:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
У меня в двух браузерах отсутствует возможность нажатия на плюс, либо минус.
IE

FF

 :(
Извиняюсь, что отнимаю время.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У меня в двух браузерах отсутствует возможность нажатия на плюс, либо минус.
Еще несколько сообщений и появится - это ограничение для новичков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Извиняюсь, что отнимаю время.
Это нормально. Считай что это "посвящение в форумчане". :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение