Miror и Blockreference

Автор Тема: Miror и Blockreference  (Прочитано 13573 раз)

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

Оффлайн Валерий Ивлев

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Miror и Blockreference
« Ответ #15 : 27-02-2024, 21:57:12 »
Доброго времени суток.
Мучаю Mirror для дин. блока уже три дня (нужно отражать несколько блоков за раз). Та же проблема с атрибутами. Хотя до этого благополучно было реализовано на VBA. Только наткнулся на пост, что подтвердило мои "опасения", что легче всего через COM/ActiveX модель AutoCAD. Завтра попробую реализовать. Спасибо!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Miror и Blockreference
« Ответ #16 : 29-02-2024, 21:42:43 »
М.б. mirrtext ?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Miror и Blockreference
« Ответ #17 : 29-02-2024, 21:52:39 »
М.б. mirrtext ?
На реализацию с помощью AutoCAD.NET API не влияет и влияет на реализацию при помощи COM/ActiveX (даже в .NET)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Валерий Ивлев

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Miror и Blockreference
« Ответ #18 : 01-03-2024, 14:20:07 »
Было два пути:
1 Использовать метод Transform.
2 Сделать через Com/ActiveX (как в старом добром VBA) - спасибо Александр Ривилис, за подсказку по реализации.
Т.к. в блоке куча атрибутов, то первый способ потребует использовать "бубен" чтобы нормально отразить каждый (переменная MIRRTEXT не влияет). Поэтому второй способ значительно проще (4 строчки кода):

Код - C# [Выбрать]
  1. // Переходим в COM/ActiveX
  2. dynamic acComObject = blockRef.AcadObject; // Преобразуем BlockReference в COM/ActiveX объект AutoCAD
  3. dynamic acComObjectMirr = acComObject.Mirror(wcsInsertionPoint.ToArray(), wcsInnerPoint.ToArray()); // Mirror of the COM/ActiveX object
  4.  
  5. IntPtr pointer = (IntPtr)acComObjectMirr.ObjectId; // Получаем указатель на COM/ActiveX объект
  6. acMirroredObjectId = new ObjectId(pointer); // ObjectId отраженного .NET объекта по указателю на COM/ActiveX объект
  7.  

Оффлайн Валерий Ивлев

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Miror и Blockreference
« Ответ #19 : 27-03-2024, 13:41:47 »
Доброго дня.
Нашел проблему с отражением, которую не могу никак решить:
Есть динамический блок внутри которого есть Размер.
Необходимо отразить блок, чтобы при этом направление размерного текста не переворачивалось "с заду на перед".
Могу это сделать используя динамический параметр отражения, но хотелось бы применить средства, описанные в этой ветке, не используя внутреннюю динамику в блоке (пытаюсь максимально "облегчить" блок). С текстом, атрибутами блока проблем нету, а вот с размерами))))

p.s. стандартная комманда Mirror также зеркалит размерный текст.
p.s.s. mirrtext  не влияет



Может у старейшин есть какие-либо мысли как это решить?

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Miror и Blockreference
« Ответ #20 : 27-03-2024, 14:16:22 »
есть какие-либо мысли как это решить
Возможно вопрос относится к другой теме, не программирования

Скорее всего нужно переделать опреации в динамическом блоке:
1. Размер не должен участвовать в операции отзеркаливания, только треугольник. Добавить смещение размера
2. Либо зеркалить размер без текста. Значение размера вывести атрибутом, который не зеркалиться а смещается.
3. Отзеркаливание заменить на видимость(левую и правую половинку можно скрывать.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Miror и Blockreference
« Ответ #21 : 31-03-2024, 17:51:02 »
Может у старейшин есть какие-либо мысли как это решить?
Фактически тебе придется создать новый блок (BlockTableRecord) на основе существующего, в котором будут правильно отзеркаленые размеры и тексты. Не думаю что это лучше и проще, чем использовать динамический параметр отражения.
« Последнее редактирование: 31-03-2024, 20:32:51 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Валерий Ивлев

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Miror и Blockreference
« Ответ #22 : 04-04-2024, 15:06:17 »
Большое спасибо за ответы!
По результату есть два приемлемых пути решения:
1 Использовать в блоке "Размер" (в этом случае изменения будут динамически отображаться) и динамиечские параметры отражения.
2 Отказаться от динамических параметров, а вместо размера использовать атрибут с полем внутри для отображения значения (в этом случае изменения увидим только после обновления поля в атрибуте).