Как получить границы объекта (COM/ActiveX)

Автор Тема: Как получить границы объекта (COM/ActiveX)  (Прочитано 10178 раз)

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

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

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Добавлял данное условие...ничего не происходит.
И не должно. Во-первых, "AcDbPolyline". Во-вторых, в AutoCAD есть несколько классов полилиний: AcDbPolyline, AcDb2dPolyline, AcDb3dPolyline
Александр, подскажите такой момент.
Прохожу по текстовым полям.  Координаты текстового пытаюсь найти при помощи

Код - C# [Выбрать]
  1.  en.GetBoundingBox MaximizeBox, MinimizeBox;
. MaximizeBox, MinimizeBox Должны быть трехмерными массивами?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - C# [Выбрать]

     en.GetBoundingBox MaximizeBox, MinimizeBox;

. MaximizeBox, MinimizeBox Должны быть трехмерными массивами?
Обрати внимание, что твоя запись не имеет ничего общего с C#. Так можно написать только в VBA.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Должно быть как-то так:
Код - C# [Выбрать]
  1. object MinimizeBox, MaximizeBox;
  2. (en as AcadEntity).GetBoundingBox(out MinimizeBox, out MaximizeBox);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Код - C# [Выбрать]

     en.GetBoundingBox MaximizeBox, MinimizeBox;

. MaximizeBox, MinimizeBox Должны быть трехмерными массивами?
Обрати внимание, что твоя запись не имеет ничего общего с C#. Так можно написать только в VBA.
Да. Так и есть.

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Должно быть как-то так:
Код - C# [Выбрать]
  1. object MinimizeBox, MaximizeBox;
  2. (en as AcadEntity).GetBoundingBox(out MinimizeBox, out MaximizeBox);
Спасибо.
Александр, попытался вывести в консоль MinimizeBox  и MaximizeBox   
Код - C# [Выбрать]
  1. координаты MinimizeBox  System.Double[]
  2. координаты MaximizeBox   System.Double[]
В виде массива получаем данные? А как их отобразить для последующего присвоения?
Пытался
Код - C# [Выбрать]
  1. MinimizeBox[0]
, но это объект и не понимаю как получиться данные ? Или это считается как объект типа точки?

Отмечено как Решение marsh_one 25-01-2022, 14:28:05

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - C# [Выбрать]
  1. double xMin = (MinimizeBox as double[])[0];
  2. double yMin = (MinimizeBox as double[])[1];
  3. double zMin = (MinimizeBox as double[])[2];
ну и так далее
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Спасибо огромное!
А вот такой момент, если не затруднит,  можете прокомментировать:
Код - C# [Выбрать]
  1. (en as AcadEntity)
И почему этим переменным
Код - C# [Выбрать]
  1. object MinimizeBox, MaximizeBox;
присвоили тип
Код - C# [Выбрать]
  1. object

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот такой момент, если не затруднит,  можете прокомментировать:
Код - C# [Выбрать]

    (en as AcadEntity)
Приведение к типу AcadEntity
И почему этим переменным
Код - C# [Выбрать]

    object MinimizeBox, MaximizeBox;

присвоили тип
Код - C# [Выбрать]

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

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Хм...я думал значения сразу можно присвоить переменной типа
Код - C# [Выбрать]
  1. double
.
Ничего не нашёл по
Код - C# [Выбрать]
  1. GetBoundingBox
касательно C# и решил по аналогии с Vba. Только в vba эти значения типа
Код - C# [Выбрать]
  1. Variant
.
А почему объект
Код - C# [Выбрать]
  1. en
к которому применяем свойство
Код - C# [Выбрать]
  1. GetBoundingBox
приводим к типу
Код - C# [Выбрать]
  1. AcadEntity
?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Хм...я думал значения сразу можно присвоить переменной типа
Код - C# [Выбрать]

    double
Ну как минимум не double, а double [], так как это массив.
Ничего не нашёл по
Код - C# [Выбрать]

    GetBoundingBox

касательно C#
Плохо искал. Вот пример: https://forums.autodesk.com/t5/net/how-to-use-getboundingbox/m-p/5911961#M46675
А почему объект
Код - C# [Выбрать]

    en

к которому применяем свойство
Код - C# [Выбрать]

    GetBoundingBox

приводим к типу
Код - C# [Выбрать]

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

Оффлайн marsh_oneАвтор темы

  • ADN OPEN
  • Сообщений: 44
  • Карма: 0
Код - C# [Выбрать]
  1. AcadEntity
это примитив автокада? Любой получается? Полилиния, круг, сплайн и т.д. , а что вы подразумеваете под его наследниками?
На основании полученных координат создаю функцию по созданию текста.
В таком виде нормально или ещё что-то учесть посоветуете? Может что-то лучше не так делать...
Код - C# [Выбрать]
  1.         static public void CrText(dynamic app, dynamic acDoc, dynamic modelSpace, double xMax, double Ymax,  double Zmax)
  2.         {
  3.             AcadText newText = default(AcadText);
  4.                         double[] insertPoint = new double[]
  5.                                              {  xMax,
  6.                                                 Ymax,
  7.                                                 Zmax
  8.                                              };
  9.             string NWText = "sk;dfsdfns;akf;jsanfnsa;kjfg;sadnfgkndsafg";
  10.            double Hei_Text = 100;
  11.           //  newText = CallFunc((object)app, () => acDoc.ModelSpace.AddText(NWText, Hei_Text, insertPoint));
  12.             newText =acDoc.ModelSpace.AddText(NWText, insertPoint, Hei_Text);
  13.             newText.color = ACAD_COLOR.acWhite;
  14.         }

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
это примитив автокада? Любой получается? Полилиния, круг, сплайн и т.д. , а что вы подразумеваете под его наследниками?
Да. AcadEntity - это абстрактный класс обобщенного примитива. Полилиния, круг, и т.д. - это уже примитивы классов, унаследованных от AcadEntity (у них есть общие свойства - слой, цвет, вес линии, видимость и т.д. и т.п)
« Последнее редактирование: 27-01-2022, 21:16:46 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение