Разные длины выноски в разных экземплярах блока

Автор Тема: Разные длины выноски в разных экземплярах блока  (Прочитано 22140 раз)

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А вариант использования стандартного автокадовского объекта "мультивыноска" рассматривали? Не подходит?
Из своей практики: приходилось разгребать такие чертежи с кучей блоков. Получается, что смысла в них никакого - чертеж "весит" больше, чем тот же самый, но со взорванными такими блоками. Взрывал, пуржил. В результате, чертеж мог "полегчать" на 5-10 Мб.

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Скажу честно: понятия не имею, как этим пользоваться.
В принципе, сам блок как таковой мне нужен по двум причинам:
- возможность добавлять атрибуты;
- возможность группировать несколько примитивов в единое целое, чтобы при необходимости, скажем, удалить целиком весь объект или перетащить его в другое место.
Мне нужно сделать выноску с двумя линиями текста: над линией выноски и под ней. При этом сам текст я оформляю в виде атрибутов (мне потом нужно работать с блоками, используя эти данные).
Можно ли, используя мультивыноску, для разных экземпляров статического блока задать разные длины этой мультивыноски?
После поисков я наткнулся на динамические блоки, которые позволяют это сделать - но динамические блоки я не могу создавать с помощью .NET API...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Из своей практики: приходилось разгребать такие чертежи с кучей блоков. Получается, что смысла в них никакого - чертеж "весит" больше, чем тот же самый, но со взорванными такими блоками.
Это если есть описание блока, но нет самой вставки блока (особенно актуально с динамическими блоками). Тогда же, когда "одно описание блока - одна вставка блока" конечно тоже будет лишний объём, но он не настолько значителен.

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

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

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

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
А откуда загружать само определение динамического блока? Вместе с dll'кой еще и файл с этим блоком поставлять? Не очень удобно, ИМХО... Запихнуть как ресурс в саму dll'ку? Что-то сложно звучит.

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Может быть, скажу глупость, но: кто мешает создать блок, состоящий из MTEXT (возможно, с атрибутами) и использовать этот блок в качестве аннотации к MLEADER / QLEADER ?
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вместе с dll'кой еще и файл с этим блоком поставлять? Не очень удобно, ИМХО...
Это самый стандартный способ. Вообще-то поставлять один dll-файл - это моветон. Нужен нормальный инсталлятор, который распихивает всё по каталогам и регистрирует эту "dll'ку" для автозагрузки...
Запихнуть как ресурс в саму dll'ку? Что-то сложно звучит.
Всё это намного проще, чем плодить тысячи блоков. Главное убедиться, что можно обойтись одним динамическим блоком...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
2 Алексей Кулик: К сожалению, я с ходу не смог осознать Ваше предложение.
Я в блоках-то пока путаюсь, а как можно блок использовать в качестве аннотации - сие для меня вообще есть темный лес...(
...
2 Александр Ривилис:
Цитировать
Нужен нормальный инсталлятор, который распихивает всё по каталогам и регистрирует эту "dll'ку" для автозагрузки...
УУУУУУУУУУУУУУУ :(
Пойду тогда курить динамические блоки. Где-то, помнится, находил я примеры вставки этих блоков из файла.
Вообще говоря, жаль. Как раз более-менее с анонимными блоками начало получаться...
А обойтись таки можно, да. Объекты достаточно примитивные.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Пойду тогда курить динамические блоки. Где-то, помнится, находил я примеры вставки этих блоков из файла.
Наверное здесь: Динамически блоки с операцией Растянуть (Stretch)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Спасибо, буду переделывать.

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Alex, если использовать COM-модель, то получается примерно такая последовательность:
1. Создается блок (возможно, анонимный)
2. Внутри блока создается многострочный текст (возможно, с принудительным форматированием)
3. Добавляются атрибуты и их значения
4. Создается выноска (мульти- или обычная - дело шестнадцатое). При создании выноски в качестве аннотации указывается использовать блок.

Конечно, тут не все так радужно, как хотелось бы:
- требуется учитывать базовую точку вставки блока;
- требуется учитывать вариант немировой системы координат;
- требуется учитывать, что для различных вариантов выравнивания выноски придется использовать различные варианты выравнивания блока и его состава (т.е. по идее - использовать тот самый динамический блок).

P.S. У меня подобные задачи ни разу не вставали, поэтому половина рецептов, которые я выдаю, надо проверять и перепроверять :(
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Я, наверное, все же попробую уйти в динамические блоки. Как верно мне заметили, установщик-то все равно потребуется.)
Вариант с выноской надо, конечно, попробовать - но я не уверен, что в данном случае блок и выноска будут единым объектом. А мне хотелось бы как раз поиметь возможность разом/махом все удалять/перемещать.
Но в любом случае, спасибо за совет!

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Ну, тут можно просто попробовать работу выноски и аннотации (достаточно даже созданной руками).
Все, что сказано - личное мнение.

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
конечно тоже будет лишний объём, но он не настолько значителен
Это была топографическая съемка протяженного участка дороги в одном файле. Каждый топознак - анонимный блок. Скорее всего это был продукт экспорта из "вертикалки" автокада или какого-то другого специализированного ПО.  Количество таких блоков там было несколько сотен тысяч.
Если блоков немного, то, наверное, ничего страшного. Но я бы так делать не стал - не нравится мне это очень, потому что работать потом с этими блоками обычному пользователю будет очень неудобно. Хотя, если не планируется ручная доводка чертежа после программы, то может это и не страшно... В общем, предупрежден - вооружен, а какой путь выбрать - думайте сами по обстоятельствам.
Вот вариант с внешней библиотекой блоков мне нравится, я такой подход уже использовал. Хороший метод вставки описания блока из библиотеки я находил на сайте Андрея Бушмана: https://sites.google.com/site/bushmansnetlaboratory/sendbox/stati/blockdefinitionsimport

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Вообще-то поставлять один dll-файл - это моветон. Нужен нормальный инсталлятор, который распихивает всё по каталогам и регистрирует эту "dll'ку" для автозагрузки...
Инсталлятор - это конечно хорошо, однако для того, чтобы  "распихать всё по каталогам" инсталлятор не обязателен - это автоматом может сделать и сама dll-ка, при условии, что прав юзера хватит на работу с подлежащими модификации каталогами.

Решение о том, стоит ли добавлять плагин в автозагрузку, должен принимать пользователь, но никак не программист (второй вариант - это как раз тот самый "моветон" и есть). Крайне желательно, чтобы пользователь имел возможность включать\отключать автозагрузку плагина по своему усмотрению. При этом не следует забывать, что порой администраторы блокируют запуск regedit.exe для рядовых юзеров, а пользоваться reg.exe умеют далеко не все, точнее - почти никто не умеет (как показывает практика).

В свете оного, реализация плагина (если программист пишет код действительно для пользователя, а не "для себя") должна предоставлять этому пользователю удобную возможность включать\отключать свою автозагрузку без необходимости лезть в реестр и править его вручную. Сие легко реализуется при желании, но практика показывает, что это почти никогда не реализовывается программистами.

Более того, плагины некоторых программистов каждый раз принудительно, вопреки желанию юзера, прописывают себя в автозагрузку при очередной своей загрузке в AutoCAD, тем самым ставя себя выше юзера. Вот это воистину МОВЕТОН... Аминь.