Как получить ссылки на поля

Автор Тема: Как получить ссылки на поля  (Прочитано 7410 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Добрый день!
Как в однострочном тексте получить ссылки на все поля, входящие в него?
Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить ссылки на поля
« Ответ #1 : 30-11-2020, 16:35:39 »
DBObject.GetField()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Как получить ссылки на поля
« Ответ #2 : 30-11-2020, 16:44:40 »
А если однострочный текст содержит несколько полей, как получить их все?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Как получить ссылки на поля
« Ответ #3 : 30-11-2020, 16:46:21 »
Да, но GetField() возвращает только 1 объект. Я из-за этого ищу в тексте код полей:  %<..>%

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить ссылки на поля
« Ответ #4 : 30-11-2020, 16:53:11 »
Да, но GetField() возвращает только 1 объект. Я из-за этого ищу в тексте код полей:  %<..>%
А что для полученного поля через GetField() у тебя возвращает Field.GetChildrenIds?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Как получить ссылки на поля
« Ответ #5 : 30-11-2020, 16:56:12 »
А что для полученного поля через GetField() у тебя возвращает Field.GetChildrenIds?
О, как хитро! Я не пробовал :) С парсингом текста как-то очевидней

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Как получить ссылки на поля
« Ответ #6 : 01-12-2020, 15:56:33 »
Да, но GetField() возвращает только 1 объект. Я из-за этого ищу в тексте код полей:  %<..>%
А что для полученного поля через GetField() у тебя возвращает Field.GetChildrenIds?
А как получить поле, зная его ObjectId?
Я написал такой код:
Код - C# [Выбрать]
  1.        
  2.         public static Field GetFieldInText(ObjectId acObjId)
  3.         {
  4.             Field field = null;
  5.             try
  6.             {
  7.                 // Get the current document and database, and start a transaction
  8.                 Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.
  9.                     MdiActiveDocument;
  10.                 Database acCurDb = acDoc.Database;
  11.  
  12.                 // Get the current document editor
  13.                 Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.
  14.                     MdiActiveDocument.Editor;
  15.  
  16.                 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  17.                 {
  18.                     // Open the Block table record for read
  19.                     BlockTable acBlkTbl;
  20.                     acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  21.                                                  OpenMode.ForRead) as BlockTable;
  22.  
  23.                     // Open the Block table record Model space for read
  24.                     BlockTableRecord acBlkTblRec;
  25.                     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  26.                                                     OpenMode.ForRead) as BlockTableRecord;
  27.  
  28.                     using (DBText text = acTrans.GetObject(acObjId, OpenMode.ForWrite) as DBText)
  29.                     {
  30.                         string str = text.TextString;
  31.                         if (text.HasFields)
  32.                         {
  33.                             ObjectId FieldId = text.GetField();
  34.                             field = acTrans.GetObject(FieldId, OpenMode.ForRead) as Field;
  35.                             if (field != null && field.HyperLink != null)
  36.                             {
  37.                                 string hyperLink = field.HyperLink.Description;
  38.                             }
  39.                         }
  40.                     }
  41.                 }
  42.                 return field;
  43.             }
  44.             catch (System.Exception e)
  45.             {
  46.                 Editor acDocEd = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  47.                 acDocEd.WriteMessage(String.Format("Ошибка. {0}{1}" + Environment.NewLine, e.Message, e.StackTrace));
  48.                 return field;
  49.             }
  50.         }
  51.  
Вызвал этот метод для однострочного текста, внутри которого есть поле с гиперссылкой.
Условие (field != null && field.HyperLink != null) не выполняется (field.HyperLink == null)
Где я не прав?

Отмечено как Решение Борис_С 01-12-2020, 17:46:34

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить ссылки на поля
« Ответ #7 : 01-12-2020, 17:04:35 »
Вызвал этот метод для однострочного текста, внутри которого есть поле с гиперссылкой.
Условие (field != null && field.HyperLink != null) не выполняется (field.HyperLink == null)
Где я не прав?
Чему равно Field.Value? И что даёт Field.GetChildrenIds? Поле может быть вложенным, так что тебе нужно рекурсивно пройтись по всем полям этого DBText.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Как получить ссылки на поля
« Ответ #8 : 01-12-2020, 17:47:19 »
Саша, спасибо. Все получилось.