Как обновить блок в автокаде 2020

Обновлено: 06.07.2024

Всем привет.
Подскажите как можно обновить вхождение блока? Блок динамический с атрибутами.
Описание блока переопределяю из внешнего файла, с помощью WblockCloneObjects.

Что нужно обновить:
1.Геометрию вхождений анонимных блоков. Она не обновляется автоматически после переопределения блока (с помощью WblockCloneObjects).
2.Атрибуты всех вхождений блока (вхождения основного описания дин.блока и анонимных блоков).

Autocad 2008, NET2.

Хочу попробовать решить задачу с помощью BlockReference.ResetBlock().
ResetBlock это, я так думаю, аналогично команде сброса блока (_resetblock). Блок приводится в соответствие с описанием блока. При этом дин.параметры сбрасываются в начальное положение (заданное в описании блока). Атрибутов это функция не затрагивает.

Позже потестирую применимость ResetBlock.

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

Вообще не вариант.

Возможно это будет интересно.

Да, интересно. Попробовал. Есть несколько моментов:
1.Словил исключение в методе AttSync, на строке 234 и 279, ad.AdjustAlignment(db) - eInvalidContext. Причину не знаю. Закоментировал.
Выполнял MultipleAttSync с обновлением одного имени блока, в одном target файле.
2.Не обновляется геометрия вхождений блока. Это получается при таких условиях. В target файле есть вхождения блока. Отредактировать этот блок в редакторе блока и удалить часть геометрии. Вот, именно у этих вхождений блока, которые были вставлены до редактирования блока, не обновляется геометрия при выполнении MultipleAttSync.
upd 2 пункт, только для дин.блоков.

Да, интересно. Попробовал. Есть несколько моментов:

1.Словил исключение в методе AttSync, на строке 234 и 279, ad.AdjustAlignment(db) - eInvalidContext. Причину не знаю. Закоментировал.

Выполнял MultipleAttSync с обновлением одного имени блока, в одном target файле.

2.Не обновляется геометрия вхождений блока. Это получается при таких условиях. В target файле есть вхождения блока. Отредактировать этот блок в редакторе блока и удалить часть геометрии. Вот, именно у этих вхождений блока, которые были вставлены до редактирования блока, не обновляется геометрия при выполнении MultipleAttSync.

upd 2 пункт, только для дин.блоков.

Потестирую сегодня. Я переименовал MultipleAttSync и изменил его сигнатуру. Заодно набросаю графический интерфейс, чтобы удобней и тестить было. На всякий случай выложи файлы, на которых ошибка была.

Ок, скачаю сегодня. Давно тебя в Skype не видно. Я сюда не часто заглядываю - лучше через Skype общаться.

Буду почаще в скайп заходить.

Решил забить на случай из 2 пункта. Я из-за него делаю не обновление существующих вхождений, а их замену новыми.

Я написал графическое приложение. Скрин разместил на том же сайте внизу. Исходный код проекта думаю выложить завтра (хочу ещё потестировать + посмотреть упомянутые тобой баги).

2 Вильдар
Проблема с eInvalidContext решена. Обновил код. Смотри строки 34, 37 и 291 (Спасибо Александру Ривилису). Постараюсь разобраться с геометрией.

Спасибо, посмотрел. Не думал, что так можно делать.

Приветствую, Андрей.
Получается, что база полученная стандартным образом

по каким-то причинам не подходит. Т.е. приходится её делать рабочей:

Где тут собака порылась. А самое главное, как догадаться, что надо делать именно так.
Т.е хотелось бы подробнее знать, в чем состояла проблема, вызывавшая eInvalidContext.

А самое главное, как догадаться, что надо делать именно так.

Ну это интуиция и опыт.

2 Вильдар

Приветствую, Андрей.

Получается, что база полученная стандартным образом

по каким-то причинам не подходит. Т.е. приходится её делать рабочей:

Где тут собака порылась. А самое главное, как догадаться, что надо делать именно так.

Т.е хотелось бы подробнее знать, в чем состояла проблема, вызывавшая eInvalidContext .

Я правда не пойму, почему влияние оказывает рабочая база данных, когда в качестве параметра я указываю вполне конкретную, нужную базу данных.

2 Александр Ривилис
Ясно, постараюсь запомнить.

2 All
Кстати, Александр Ривилис предложил мне сегодня одно очень хорошее решение подобного рода проблем - написать специальный класс, берущий на себя контроль над тем, какая база данных рабочая.

Я решил добавить этот класс в свою библиотеку и сразу же воспользоваться им в методе AttSync. Только что опубликовал этот класс и новую версию метода AttSync на той же странице сайта.

To Александр:

В ряде случаев требуется, чтобы WorkingDatabase указывал на базу, из которой берётся дополнительная информация (например, параметры текстового стиля, реакторы и т.д.). Где-то тут был (в разделе ObjectARX) пример копирования размера между разными чертежами. Так вот пока база-приёмник не была указана как WorkingDatabase, копирование не срабатывало

Так я и не понял, база-источник или база-приемник должна быть указана, как WorkingDatabase?

Имеет ли смысл всегда при работе с базами, не открытыми в редакторе, делать их рабочими (чтобы слишком долго не задумываться :))?

To Андрей:
Я бы назвал класс WorkingDatabaseSwitcher, по-моему так точнее отражается его смысл.

Так я и не понял, база-источник или база-приемник должна быть указана, как WorkingDatabase?

Та, откуда должна браться информация. Нашёл тот пример, о котором говорил.

Может стоит всегда при работе с базами, не открытыми в редакторе, делать их рабочими (чтобы слишком долго не задумываться smile:))

Сложный вопрос. Не уверен, что это всегда допустимо. А если открыты (не в редакторе) сразу несколько баз, какую из них делать рабочей?

Так та откуда должна браться информация, или та, в которую информация должна добавляться?

Та, откуда должна браться информация

Но у Андрея в методе AttSync рабочей делается та база, в которой меняется информация. Опять непонятка какая то.:(

Hwd,Пастух
Вы решили меня запутать. :D Главное, что без переключения базы текущей является та, из которой запущена команда. А вот это и не годится.

[quote=
Пастух]
Я бы назвал класс WorkingDatabaseSwitcher, по-моему так точнее отражается его смысл.

Согласен. Переименовал класс в WorkingDatabaseSwitcher.

To Александр
Правильно ли будет сказать, что:
1. В ряде случаев при работе с базой, не открытой в редакторе, из команды, выполняющейся в контексте документа, требуется делать эту базу текущей. Это может потребоваться как при чтении, так и при редактировании базы.
2. Точный перечень ситуаций, требующих переключения, определяется опытным путем.

Hwd,
Немного потестировал. Есть замечания:
1.Хорошо бы запоминать выбранные ранее пути отдельно для исходного файла и для целевых.
2.Для вхождений дин.блоков некоторые недостающие атрибуты слетают в точку вставки блока. Наверно это связано с выравниванием этих атрибутов. Хотя, для простых блоков такого не наблюдается.
Недостающие атрибуты, те которых нет в блоке в целевом файле.
Само определение блока, после обновления, верное. И при вставке новых боков, тоже все нормально.
3.Для многострочных атрибутов удаляется форматирование.
Например мне нужно сохранять межстрочный интервал, который задан в определении блока.
ЯТД, что нужно часть строки MText.Contents, касающуюся форматирования, у многострочного атрибута в описании блока, добавлять к значению атрибута вхождения блока и записывать в мтекст этого атрибута.

upd2
У атрибутов, позиция которых не фиксирована, лучше не менять положение и поворот. Не понятно, так у тебя и сделано, или нет. Почему то, для этих атрибутов, не устанавливается значение по умолчанию.

[S]5.У вхождений блока со скрытыми атрибутами, после обновления, эти атрибуты появляются. У вставленных блоков, после обновления, все нормально.[/S] Ошибся, это для моего рабочего блока с одинаковыми тагами.

upd3
А можно, вместо установки всех свойств атрибута из описания атрибута, выполнить SetAttributeFromBlock? А потом задать положение атрибута. Вроде так проще.

upd4 Атрибут может быть на заблокированном слое. Да и сами блоки. Надо учесть.
Пока больше не буду проверять, что-то загонятся начал (не уверен в адекватности замечаний :D).

Большие библиотеки, в состав которых входят блоки, должны обладать нормальной структуризацией и подвергаться оперативному управлению. Помимо этого, нужно присмотреться к используемым слоям. Они помогут получить оптимальный результат при их вставке в чертежный файл.

Принципы работы со слоями

Вставляя блок в чертежный файл, можно проследить за тем, как он автоматически относится в активный слой. После этого его можно оперативно перенести в нужный слой. Мы расскажем о том, как работать с слоями, вставляя блок с описанием результативности. При том, некоторые различия данных принципов работы практически незаметны.

Как расчленить блок

Мы уже рассказывали о том, как переопределить блок. Теперь нужно расчленить блок и использовать опцию «Расчленить (РАСЧ)»

Как ввести данную команду:

  • Выполнить команду: Редактировать>Расчленить.
  • Ввести в командной строке РАСЧ

Изменяя масштабы блока, объекты при том не меняют свой первоначальный вид и размер даже после разрушения.

Как отредактировать блок

Можно воспользоваться одним из представленных ниже способов для того, чтобы внести правки в блок, отказавшись при этом от его разрушения.

Редактор блоков

Способ ввода команды:

а) Двойной щелчок по любому вставленному в чертеж блоку

б) Нажать пиктограмму на панели

в) Выполнить команду Сервис>Редактор блоков

г) Ввести в командной строке БЛОКРЕД

Как только пользователь сможет активировать данное меню, на экране появится окно для редактирования определения блоков. В него будет включен полный перечень блоков, которые входят в выбранный файловый чертеж. Выбираем нужный нам вариант и кликаем на «Ок» принимая изменения. Таким образом пользователь откроет окно редактирования блоков. Подробнее о принципах его работы мы расскажем в следующем курсе обучения.

Как обновить блок

Мы рассказывали об особенностях изменения блока. Исходя из них, все копии также будут автоматически обновлены. Однако если вы вставили файл в чертежное поле и собирались использовать его как блок, а после приняли решение изменить данный материал, обновления в актуальных чертежах не будут производиться. Разработчики придумали, что для автоматического изменения файла понадобится пользоваться внешними ссылками. Чтобы обновить блок своими силами, понадобится попросту заново поставить тот же файл.

Вставляя файл, нужно заново указывать путь, который к нему приведет. К тому же, менять нужно конкретно определенный файл, а не располагающийся в нем блок.

Мы заканчиваем данный урок, рассказывающий об основных принципах управления блоками. Теперь мы готовы представить курс обучения по работе с динамическими блоками.


Автор:

Перестановка или обновление экземпляров вставленных блоков с сохранением существующих текстовых значений атрибутов.

  • Заменить блок: подстановка одного блока вместо другого. Если требуется сохранить масштаб, угол поворота, точки подключения, значения и расположение атрибутов заменяемого блока, выберите "Оставить".
  • Обновить: замена всех экземпляров данного блока обновленной версией этого же блока.


Точки подключения также сохраняются, даже если новый графический образ немного шире или уже, чем оригинал.

Замена блока (замена на блок с другим именем)

Заменить блок — по одному

Поочередная замена одного блока на другой.

Заменить блок — в рамках чертежа

Замена одного блока на другой во всем чертеже

Заменить блок — в рамках проекта

Один блок заменяется на другой в рамках проекта.

Указать новый блок в графическом меню

Указывает на необходимость выбора нового блока из графического меню.

Указать новый блок -"точную копию"

Указывает на необходимость выбора нового блока, являющегося точной копией исходного.

Найти новый блок в диалоговом окне выбора файла

Указывает на необходимость выбора нового блока в диалоговом окне выбора файла.

Сохранить старые местоположения атрибутов

Определяет, что местоположение атрибута берется из исходного блока.

Сохранить старый масштаб блока

Определяет, что масштаб блока берется из исходного блока.

Разрешить восстановление соединений линий проводов неопределенного типа

Задает использование не являющихся проводами линий для восстановления соединений в процессе замены на новый блок.

Автопереназн. ПО, если замена род. эл-та вызывает измен. семейства

Автоматическое переназначение позиционного обозначения в случае, если присвоенный компоненту код семейства изменяется по причине замены блока. В противном случае позиционное обозначение остается прежним, даже если оно не совпадает с кодом семейства нового компонента.

Обновление блока (путем изменения или замены другой версией того же блока).

Обновить блок

Заменяет все экземпляры данного блока на его обновленную версию.

Заменить библиотеку

Все экземпляры графического образа библиотеки заменяются обновленной версией того же образа

Соответствие атрибутов

Использовать те же имена атрибутов

Использование имен атрибутов исходного блока.

Использовать файл соответствия атрибутов

Позволяет связать значения некоторых атрибутов с другими именами атрибутов.

Файл соответствия

Определяет, как в AutoCAD Electrical toolset должны сопоставляться атрибуты. Файл должен иметь два столбца имен атрибутов. Первый столбец содержит текущее имя атрибута, а второй — новое имя атрибута. Файл соответствия может быть таблицей Excel, файлом с разделением запятыми (.CSV) или простым текстовым файлом, где текущее имя атрибута и новое имя атрибута разделяются пробелом.

Не знаете, как создать блок в Автокаде? Ознакомьтесь с данным материалом, в котором вы найдете пошаговую инструкцию, позволяющую всего лишь за несколько действий в AutoCAD создать блок.

Создание блоков в Автокаде (заготовка)

Как создать блок в AutoCAD

ПРИМЕЧАНИЕ:

Заготовку для блока можно создать путем обрисовки картинки, вставленной в программу в качестве подложки (читать подробнее, как в Автокад вставить рисунок). Такой подход на порядок уменьшит время создания блока.

Далее нужно создать непосредственно сам блок, который будет иметь одну базовую точку, уникальные свойства, а главное, все объекты из которых он состоит, сгруппируются в один именованный набор.

Как сделать блок в Автокаде за 5 шагов?!

Чтобы создать так называемое определение блока необходимо:

Как создать блок в AutoCAD 2

ШАГ 1.

В открывшемся диалоговом окне «Определение блока» нужно:

ШАГ 2.

ШАГ 3.

Задать базовую точку. В качестве базовой точки блока рекомендуется указывать какую-либо характерную точку на самом объекте. Во-первых, вам будет удобнее потом вставлять блок, а во-вторых, именно в базовой точке появляется «ручка», т.е. при выделении блока объектные привязки будут срабатывать относительно ее.

Как создать блок в AutoCAD 3

ШАГ 4.

Выбрать объекты, которые должны войти в блок. Ниже есть группа переключателей, которые определяют, что делать с выделенным набором объектов после их объединения в блок:

Как создать блок в AutoCAD 4

ШАГ 5.

После выполненных настроек необходимо нажать «Ок». В результате исходные объекты преобразуются в блок и будут выглядеть следующим образом:

Как создать блок в AutoCAD 5

Как вставить блок в Автокаде?

После того как блок создан, возникает справедливый вопрос: каким образом можно вставить блок на чертеж?

Для вставки блока необходимо:

  1. Перейти на вкладку «Вставка» → панель «Блок» → команда «Вставить».

Как создать блок в AutoCAD 6

  1. В появившемся диалоговом окне вставки блоков нужно указать следующее:

Как создать блок в AutoCAD 7

Как видите, создание блоков в AutoCAD задача несложная!

Как удалить блок в AutoCAD

Работа с блоками в AutoCAD дает определенные преимущества (читать статью «Особенности использования блоков в Автокаде»). Однако, после создания чертежа очень часто остаются «лишние» блоки, которые не используются в проекте. А это, в свою очередь, существенно влияет на размер файла. Поэтому в данной статье рассмотрим, как удалять ненужные блоки, чтобы не возникало путаницы, а сам файл весил меньше.

Как удалить блок в AutoCAD

Вхождение блока на чертеже (т.е. ссылка) удаляется стандартным способом: можно выделить блок и нажать Delete или же применить команду СТЕРЕТЬ. Но вот при таком действии само определение блока остается в файле, и соответственно, в списке блоков.

К сожалению, Редактор блоков Автокад в этом не поможет.

Избавление от ненужных блоков

Для того чтобы избавиться от ненужных блоков в AutoCAD следует использовать команду «ОЧИСТИТЬ». Для корректного выполнения этой команды убедитесь, чтобы в графическом пространстве не было вхождений блоков.

Итак, удаление блоков в AutoCAD происходит в несколько этапов : сначала нужно предварительно удалить блоки с чертежа, затем зайти в меню-приложения (буква «А» в левом верхнем углу), выбрать «Утилиты» → «Очистить». Альтернативный вариант – воспользоваться командной строкой.

Как удалить блок в AutoCAD 2

ПРИМЕЧАНИЕ:

Для тех, кто хочет максимально эффективно использовать программу я подготовил видео-урок «Создание макросов AutoCAD на примере команды ОЧИСТИТЬ». Советую ознакомиться с ним! После него, удаление блока в Автокаде будет выполняться одной кнопкой.

В диалоговом окне «Очистка чертежа» отображается дерево всех именованных объектов, которые можно удалить.

Как удалить блок в AutoCAD 3

Чтобы очистить весь чертеж от неиспользуемых блоков, выберите раздел «БЛОКИ».

Подключая опцию «Удаление вложенных элементов» можно включить вложенные блоки в список для удаления.

Если требуется удалить только лишь некоторые объекты, тогда дважды щелкните ЛКМ по элементу «БЛОКИ». Раскроется список блоков, в котором следует выбрать элементы для удаления.

Как удалить блок в AutoCAD 4

Возможна ситуация, когда некоторые блоки могут отсутствовать в списке. В таком случае поставьте галочку напротив «Посмотреть элементы, которые нельзя удалить».

Как удалить блок в AutoCAD 5

При удалении блоков из списка свое действие следует подтверждать. Эту опцию можно подавить, выключив запрос «Удаление элементов с подтверждением»

Как удалить блок в AutoCAD 6

Нажмите «Удалить». Появится обновленный список имеющихся определений блоков в чертеже при выполнении команды «Вставка»

Как удалить блок в AutoCAD 7

Теперь вы знаете, как в Автокаде убрать блок не просто с чертежа, а из самого файла. Хочу напомнить, что скачать блоки Автокад можно на этом сайте. Создавайте свою коллекцию, чтобы сделать работу в программе гибкой, удобной и быстрой!

Читайте также: