Почему выбранный объект не выделяется

Автор Тема: Почему выбранный объект не выделяется  (Прочитано 11294 раз)

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Всем доброго дня!
Посадил на чертеж однострочный текст.
Выделил этот текст с помощью прямоугольника.
Записал координаты 2-х противоположных точек прямоугольника.
Реализовал то же самое в С#.
C# говорит, что выделен один элемент, но визуально он никак не помечен.
Почему?
Вот код:
Код - C# [Выбрать]
  1.         [CommandMethod("NCS_SET_HLINKS")]
  2.         public static void CmdSetLinks()
  3.         {
  4.             try
  5.             {
  6.                 // Get the current document and database, and start a transaction
  7.                 Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  8.                 // Get the current document editor
  9.                 Editor acDocEd = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  10.  
  11.                 PromptSelectionResult acSSPrompt;
  12.                 acSSPrompt = acDocEd.SelectCrossingWindow(new Point3d(1408, 3601, 0),
  13.                                                           new Point3d(4178, 4820, 0));
  14.  
  15.                 // If the prompt status is OK, objects were selected
  16.                 if (acSSPrompt.Status == PromptStatus.OK)
  17.                 {
  18.                     SelectionSet acSSet = acSSPrompt.Value;
  19.  
  20.                     Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Число выбранных объектов: " +
  21.                                                 acSSet.Count.ToString());
  22.                 }
  23.                 else
  24.                 {
  25.                     Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Число выбранных объектов: 0");
  26.                 }
  27.             }
  28.             catch (System.Exception e)
  29.             {
  30.                 Editor acDocEd = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  31.                 acDocEd .WriteMessage(String.Format("Ошибка загрузки надстройки NormaCS: {0}{1}" + Environment.NewLine, e.Message, e.StackTrace));
  32.             }
  33.         }
  34.  
« Последнее редактирование: 23-11-2020, 17:36:28 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Приветствую на форуме!
1. Прочитайте у меня в подписи правило форматирования кода на форуме и соблюдайте его.
2. Вы ошиблись разделом форума и я перенес тему в соответствующий раздел.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 812
  • Карма: 166
    • Мои плагины к Автокаду
Для задания списка выбранных используй Editor.SetImpliedSelection
А если надо просто подсветить,  то используй Entity.Highlight

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
C# говорит, что выделен один элемент, но визуально он никак не помечен.
1. Он и не должен быть помечен. Вы видимо не понимаете что делает используемый метод.
2. Если бы заданные координаты были вне области экрана, то вообще ничего бы не выбралось.
Что именно вы хотите в результате получить?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне нужно посадить гиперссылку на часть текста.
На часть текста??? Гиперссылку можно присвоить всему примитиву целиком. Или вы о чем-то другом?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Мне поставлена такая задача. Проанализировать все тексты документа. Выловить из всего массива текстов нужные куски и поставить на них гиперссылки. Похоже, что в автокаде это в принципе невозможно. Так?

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне поставлена такая задача. Проанализировать все тексты документа. Выловить из всего массива текстов нужные куски и поставить на них гиперссылки. Похоже, что в автокаде это в принципе невозможно. Так?
Можно присвоить гиперссылку всему текстовому примитиву (DBText и MText), а можно добавить поле (Field) с гиперссылкой внутри текста. Так что вам нужно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот пример гиперссылки внутри однострочного текста (поле):



Код этого поля:
%<\AcVar \href "https://adn-cis.org##https://adn-cis.org#1">%

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

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 812
  • Карма: 166
    • Мои плагины к Автокаду
Почему выбранный объект не выделяется
Это задача перебора всех текстов и вставки полей, и это уже не имеет никакого отношения к поставленной теме. Выделение рамкой и подсветка примитивов тут вообще не причем.

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Почему выбранный объект не выделяется
Это задача перебора всех текстов и вставки полей, и это уже не имеет никакого отношения к поставленной теме. Выделение рамкой и подсветка примитивов тут вообще не причем.
А можно не показывать гиперссылку. Просто удалить часть текста, добавить поле (c тем же текстом) и на него повесить гиперссылку. Это будет то, что нужно.

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
А можно не показывать гиперссылку. Просто удалить часть текста, добавить поле (c тем же текстом) и на него повесить гиперссылку. Это будет то, что нужно.
Я ошибся. Процетировал не тот текст.
А можно не показывать гиперссылку. Просто удалить часть текста, добавить поле (c тем же текстом) и на него повесить гиперссылку. Это будет то, что нужно.

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Сколько полей можно добавлять в текстовый примитив? Если несколько, то на каждое поле можно повесить гиперссылку. Так?

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

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Короче говоря - нарисуйте то что вам нужно получить средствами AutoCAD, а мы постараемся показать как это сделать программно.
Александр, добрый день!
Хочу воспользоваться вашим предложением.
Подскажите, пожалуйста, как вставить поле в текстовый примитив.
Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр, добрый день!
Хочу воспользоваться вашим предложением.
Подскажите, пожалуйста, как вставить поле в текстовый примитив.
Спасибо.
Это я показал выше: https://adn-cis.org/forum/index.php?topic=10156.msg46216#msg46216
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Вы написали, что покажете, как это сделать программно.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы написали, что покажете, как это сделать программно.
Укажите пример текста (например, "Мой сайт") и пример гиперссылки (например, "https://adn-cis.org")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Винт B.М5-6g*20.36.016 ГОСТ 1491-80.
Удалить текст ГОСТ 1491-80 и вставить в это место поле с тем же текстом и адресом www.mail.ru

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не слишком чисто и красиво, но сойдёт:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5.  
  6. #pragma warning disable 0618
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(AddHyperInDBText.MyCommands))]
  10.  
  11. namespace AddHyperInDBText
  12. {
  13.   public class MyCommands
  14.   {
  15.     [CommandMethod("HReplace")]
  16.     public void HReplace()
  17.     {
  18.       Document doc = Application.DocumentManager.MdiActiveDocument;
  19.       if (doc == null) return;
  20.       Editor ed = doc.Editor;
  21.       PromptEntityOptions opt = new PromptEntityOptions("\nВыберите однострочный текст: ");
  22.       opt.SetRejectMessage("Это не однострочный текст!");
  23.       opt.AddAllowedClass(typeof(DBText), false);
  24.       PromptEntityResult res = ed.GetEntity(opt);
  25.       if (res.Status == PromptStatus.OK)
  26.       {
  27.         using (DBText text = res.ObjectId.Open(OpenMode.ForWrite) as DBText)
  28.         {
  29.           string str = text.TextString;
  30.           if (str.Contains("ГОСТ 1491-80")) {
  31.             str = str.Replace("ГОСТ 1491-80", "%<\\AcVar \\href \"https://www.mail.ru##ГОСТ 1491-80#1\">%");
  32.             text.TextString = str;
  33.           }
  34.         }
  35.         ed.Command("_UPDATEFIELD", res.ObjectId, "");
  36.       }
  37.     }
  38.   }
  39. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Спасибо.
В какой сборке сидит Autodesk.AutoCAD.Runtime?
Транслятор ругается на ed.Command. Может потому, что не подключен Autodesk.AutoCAD.Runtime.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Спасибо.
В какой сборке сидит Autodesk.AutoCAD.Runtime?
Транслятор ругается на ed.Command. Может потому, что не подключен Autodesk.AutoCAD.Runtime.
Нужно подключить acmgd.dll, acdbmgd.dll, accoremgd.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Они все подключены.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Версия AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
2020

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
2020
Значит снова что-то не то сделал. Класс Editor с методом Command в пространстве имён  Autodesk.AutoCAD.EditorInput, которая из accoremgd.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 24-11-2020, 17:54:18

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Так без команд:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5.  
  6. #pragma warning disable 0618
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(AddHyperInDBText.MyCommands))]
  10.  
  11. namespace AddHyperInDBText
  12. {
  13.   public class MyCommands
  14.   {
  15.     [CommandMethod("HReplace")]
  16.     public void HReplace()
  17.     {
  18.       Document doc = Application.DocumentManager.MdiActiveDocument;
  19.       if (doc == null) return;
  20.       Editor ed = doc.Editor;
  21.       PromptEntityOptions opt = new PromptEntityOptions("\nВыберите однострочный текст: ");
  22.       opt.SetRejectMessage("Это не однострочный текст!");
  23.       opt.AddAllowedClass(typeof(DBText), false);
  24.       PromptEntityResult res = ed.GetEntity(opt);
  25.       if (res.Status == PromptStatus.OK)
  26.       {
  27.         using (DBText text = res.ObjectId.Open(OpenMode.ForWrite) as DBText)
  28.         {
  29.           string str = text.TextString;
  30.           if (str.Contains("ГОСТ 1491-80")) {
  31.             str = str.Replace("ГОСТ 1491-80", "%<\\AcVar \\href \"http://www.mail.ru##ГОСТ 1491-80#1\">%");
  32.             text.TextString = str;
  33.           }
  34.         }
  35.         doc.Database.EvaluateFields();
  36.       }
  37.     }
  38.   }
  39. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Разобрался. Проект достался мне по-наследству. Там все dll брались из версии 2013.
Взял dll из ObjectArx 2020, но теперь задача не собирается.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Создай новый проект.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Все получилось. Нужно было просто поменять версию Net Framework

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Работает. А можно как-то менять цвет поля?

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Работает. А можно как-то менять цвет поля?
Еще одно правило форума: "Один вопрос - одна тема".
Кроме того этот вопрос к AutoCAD API отношения не имеет.
https://forum.dwg.ru/showthread.php?t=61985 - тут о том, что цвет поменять нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Хорошо. Сейчас буду разбираться с кодом.
А где еще можно почитать о коде, кроме https://help.autodesk.com/view/OARX/2020/ENU/?guid=GUID-C3F3C736-40CF-44A0-9210-55F6A939B6F2 ?

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
В ObjectARX SDK есть документация и примеры. Ну и этот форум и сайт, если на русском.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Александр, вы предложили создать поля таким образом:
Код - C# [Выбрать]
  1. using (DBText text = res.ObjectId.Open(OpenMode.ForWrite) as DBText)
  2.         {
  3.           string str = text.TextString;
  4.           if (str.Contains("ГОСТ 1491-80")) {
  5.             str = str.Replace("ГОСТ 1491-80", "%<\\AcVar \\href \"https://www.mail.ru##ГОСТ 1491-80#1\">%");
  6.             text.TextString = str;
  7.           }
  8.         }
  9.         ed.Command("_UPDATEFIELD", res.ObjectId, "");
  10.  
А если однострочный текст уже содержит поля, как тогда быть?

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
У меня есть готовый документ. Я не должен ничего из него удалять. Мне нужно только поставить гиперссылки на фрагменты текста. Получается, что это нерешаемая задача для AutoCAD?

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Получается, что это нерешаемая задача для AutoCAD?
Пока я не получу ответа из ADN DevHelp - я ничего сказать не могу. Жди.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение