Как правильно обработать положение атрибутов в блоке?

Автор Тема: Как правильно обработать положение атрибутов в блоке?  (Прочитано 8523 раз)

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет.
Разрабатывал метод замены одного динамического блока с атрибутами на другой. Не вышло программно обработать положение атрибутов.

Разве что, при помощи:
Код - C# [Выбрать]
  1. doc.SendStringToExecute("_ATTSYNC\n" + "_N\n" + firstBlkName + "\n", true, false, false);
А так делать не хотелось бы.
Извините, вам запрещён просмотр содержимого спойлеров.

Хотелось бы отметить, что в данном случае вариант, как вот здесь, не подходит, потому что атрибуты создавать не нужно, они формируются при помощи DeepCloneObjects.
Может кто-то подскажет, как разобраться с данной проблемой? Заранее, спасибо.

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Я не понимаю в чем проблема. Нужно разместить правильно атрибуты или добавить/удалить атрибуты?
Нужно разместить правильно атрибуты.
Если запустить метод ReplaceAllBlocks в файле "Тест", далее выбрать блок слева (Имя "1") как заменяемый, далее выбрать блок справа (Имя "Раскладка прямых стержней") как заменяющий, то все заменится корректно (цель замены состояла в том, чтобы сохранились одинаковые параметры), кроме расположения атрибутов. Данное неудобство решается при помощи команды AutoCAD _attsync, а хотелось бы программно получать красивый блок.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
А зачем используется DeepCloneObjects? Я себе так представляю замену:
- считываем свойства исходного блока
- вставляем новый блок
- задаем ему свойства из исходного
- удаляем исходный блок
Здесь какой-то другой механизм?

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Дмитрий Загорулькин, по сути, механизм в точности такой же.
А зачем используется DeepCloneObjects?
Просто для того, чтобы создать новое вхождение блока.
Разницы никакой нет, как я понимаю (по крайней мере, применительно к атрибутам).

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
В детали не вникал, но думаю, что тогда, когда ты заменяешь атрибуты блока, тебе следует менять им и положение (отсчитывать от точки вставки блока). Возможно придётся менять и угол поворота, если возможен вариант с ненулевым углом поворота.
Видимо, да. Я просто думал, что данный вопрос решается вот в этой строке:
Код - C# [Выбрать]
  1. attRef.SetAttributeFromBlock(attDef, blk.BlockTransform);
Пока отбросил эту задачу, потому что заступорился конкретно. Возможно, еще найду время на выходных поэкспериментировать.

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Может быть и решалось бы, если атрибуты не двигались вручную. Кроме того в показанном тобой коде этой строки нет. И такая строка обычно используется при создании атрибута, а ты его не создаёшь - ты его копировал из другого блока.
Просто я тут уже перепробовал все, что можно. Сделал второй вариант кода - немного другую концепцию (просто подумал, что, возможно, проблема была в DeepCloneObjects).
Что-то более соответствующее тому, что предлагал Дмитрий Загорулькин.
- считываем свойства исходного блока
- вставляем новый блок
- задаем ему свойства из исходного
- удаляем исходный блок
И вот в пункте, где вставляем новый блок, я создаю атрибуты, как и должно быть. Так вот, там эта строчка есть. И даже, если сделать так, они разлетаются.
В общем, у меня выходит их собрать только при помощи SendStringToExecute.

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Подумай над тем, чтобы сначала добавлять атрибуты, а уже потом применять динамические свойства.
Конечно, я так и делал со старта. Ведь динамические свойства отвечают за перемещение атрибутов.
Кстати, насчет статьи http://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html.
Почему, если вставить динамический блок, просто, не изменяя его параметры, то данный метод его просто не найдет?? Нехорошо как-то получается!


То есть в методе обработан только поиск анонимных блоков и их вставок. А вот поиск просто вставок определения блока не обработан.

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Согласен. Статья переводная и я её не правил. Нужно пересмотреть и исправить.
Готов доработать, если проверите? :)

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Ну как хотите. :)
Извините, вам запрещён просмотр содержимого спойлеров.