Блок не вставляется в AutoCad
Обновлено: 21.11.2024
Эд Джоб любезно прислал мне по электронной почте несколько предложений для блога (спасибо, Эд ). После того, как мы немного поболтали, он также задал быстрый вопрос по программированию:
«Можете ли вы опубликовать пример переопределения блока? Я видел некоторые для вставки из файла, но я не видел ни одного для переопределения. Функция db.Insert() создает только новые записи таблицы блоков».
Вот простой код, демонстрирующий, как вставить файл DWG в текущий чертеж в виде блока с именем «ТЕСТ». Если блок с именем 'ТЕСТ' уже существует в вашем чертеже, он переопределяется:
CommandMethod ("ReplaceBlock")> _
Общедоступная подпрограмма ReplaceBlock()
Затемнить документ как документ = приложение .DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Затемнить blockName As String = "TEST"
Dim blkDb As Database = New Database (False, True)
System.IO. FileShare .Read, True , "" )
Использование Tx как Transaction = db.TransactionManager.StartTransaction()
Затемнить blockTable как BlockTable =
Tx.GetObject(db.BlockTableId, OpenMode.ForRead, False, True)
Dim btrId As ObjectId = db.Insert(blockName, blkDb, True )
Если btrId <> ObjectId .Null Тогда
Затемнить btr как BlockTableRecord =
OpenMode .ForRead, False, True)
Затемнить brefId как ObjectIdCollection =
btr.GetBlockReferenceIds(False, True)
Для каждого идентификатора как ObjectId в brefIds
Затемнить bref как BlockReference =
Tx.GetObject(id, OpenMode.ForWrite, False, True)
В качестве альтернативы, если вы хотите программно отредактировать содержимое блока (не вставляя его из другой базы данных), вы можете открыть BlockTableRecord для записи, удалить все текущие объекты, которые он содержит, и добавить новые. Вот быстрое редактирование вышеуказанной функции, чтобы переопределить блок, чтобы он содержал только одну строку:
CommandMethod ("ReplaceBlock")> _
Общедоступная подпрограмма ReplaceBlock()
Затемнить документ как документ = приложение .DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Затемнить blockName As String = "TEST"
Использование Tx как Transaction = db.TransactionManager.StartTransaction()
Затемнить blockTable как BlockTable =
Tx.GetObject(db.BlockTableId, OpenMode.ForRead, False, True)
Если (blockTable.Has(blockName)) тогда
Затемнить btr как BlockTableRecord =
OpenMode .ForWrite, False, True)
'Удалить все объекты в btr
Для каждого идентификатора как ObjectId в btr
Размер как сущность = id.GetObject( OpenMode .ForWrite)
'Добавить новые сущности в btr
Затемнить линию как новую линию ( New Point3d (50, 50, 0), New Point3d (100, 100, 0))
Затемнить brefId как ObjectIdCollection =
btr.GetBlockReferenceIds(False, True)
'Обновить blockrefs для отображения новой графики
Для каждого идентификатора как ObjectId в brefIds
Затемнить bref как BlockReference =
Tx.GetObject(id, OpenMode.ForWrite, False, True)
Обратите внимание, что в обоих фрагментах кода мы перебираем все ссылки BlockReference, связанные с редактируемой записью BlockTableRecord, и вызываем их метод RecordGraphicsModified. Это связано с тем, что BlockTableRecord не уведомляет автоматически свои BlockReferences при редактировании, поэтому мы должны явно указать BlockReferences регенерировать свою графику.
Надеюсь, это будет полезно, Эд.
Обновлено 7 мая 2012 г. с учетом комментария Нормана Юаня. Я предпочитаю вызывать RecordGraphicsModified для BlockReference, а не регенерировать весь рисунок, но это личный выбор.
Комментарии
Эд Джоб любезно прислал мне по электронной почте несколько предложений для блога (спасибо, Эд ). После того, как мы немного поболтали, он также задал быстрый вопрос по программированию:
«Можете ли вы опубликовать пример переопределения блока? Я видел некоторые для вставки из файла, но я не видел ни одного для переопределения. Функция db.Insert() создает только новые записи таблицы блоков».
Вот простой код, демонстрирующий, как вставить файл DWG в текущий чертеж в виде блока с именем «ТЕСТ». Если блок с именем 'ТЕСТ' уже существует в вашем чертеже, он переопределяется:
CommandMethod ("ReplaceBlock")> _
Общедоступная подпрограмма ReplaceBlock()
Затемнить документ как документ = приложение .DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Затемнить blockName As String = "TEST"
Dim blkDb As Database = New Database (False, True)
System.IO. FileShare .Read, True , "" )
Использование Tx как Transaction = db.TransactionManager.StartTransaction()
Затемнить blockTable как BlockTable =
Tx.GetObject(db.BlockTableId, OpenMode.ForRead, False, True)
Dim btrId As ObjectId = db.Insert(blockName, blkDb, True )
Если btrId <> ObjectId .Null Тогда
Затемнить btr как BlockTableRecord =
OpenMode .ForRead, False, True)
Затемнить brefId как ObjectIdCollection =
btr.GetBlockReferenceIds(False, True)
Для каждого идентификатора как ObjectId в brefIds
Затемнить bref как BlockReference =
Tx.GetObject(id, OpenMode.ForWrite, False, True)
В качестве альтернативы, если вы хотите программно отредактировать содержимое блока (не вставляя его из другой базы данных), вы можете открыть BlockTableRecord для записи, удалить все текущие объекты, которые он содержит, и добавить новые. Вот быстрое редактирование вышеуказанной функции, чтобы переопределить блок, чтобы он содержал только одну строку:
CommandMethod ("ReplaceBlock")> _
Общедоступная подпрограмма ReplaceBlock()
Затемнить документ как документ = приложение .DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Затемнить blockName As String = "TEST"
Использование Tx как Transaction = db.TransactionManager.StartTransaction()
Затемнить blockTable как BlockTable =
Tx.GetObject(db.BlockTableId, OpenMode.ForRead, False, True)
Если (blockTable.Has(blockName)) тогда
Затемнить btr как BlockTableRecord =
OpenMode .ForWrite, False, True)
'Удалить все объекты в btr
Для каждого идентификатора как ObjectId в btr
Размер как сущность = id.GetObject( OpenMode .ForWrite)
'Добавить новые сущности в btr
Затемнить линию как новую линию ( New Point3d (50, 50, 0), New Point3d (100, 100, 0))
Затемнить brefId как ObjectIdCollection =
btr.GetBlockReferenceIds(False, True)
'Обновить blockrefs для отображения новой графики
Для каждого идентификатора как ObjectId в brefIds
Затемнить bref как BlockReference =
Tx.GetObject(id, OpenMode.ForWrite, False, True)
Обратите внимание, что в обоих фрагментах кода мы перебираем все ссылки BlockReference, связанные с редактируемой записью BlockTableRecord, и вызываем их метод RecordGraphicsModified. Это связано с тем, что BlockTableRecord не уведомляет автоматически свои BlockReferences при редактировании, поэтому мы должны явно указать BlockReferences регенерировать свою графику.
Надеюсь, это будет полезно, Эд.
Обновлено 7 мая 2012 г. с учетом комментария Нормана Юаня. Я предпочитаю вызывать RecordGraphicsModified для BlockReference, а не регенерировать весь рисунок, но это личный выбор.
Автор:
При вставке блока вы создаете ссылку на блок и указываете его расположение, масштаб и поворот.
Ссылки на блоки масштабирования
Вы можете указать масштаб вхождения блока, используя различные значения X, Y и Z. Блок, который использует единицы чертежа, отличные от единиц, указанных для чертежа, автоматически масштабируется с коэффициентом, эквивалентным отношению между двумя единицами.
Методы вставки блоков
Блок может состоять из объектов, нарисованных на нескольких слоях с различными цветами, типами линий и свойствами толщины линий. Хотя блок всегда вставляется в текущий слой, ссылка на блок сохраняет информацию об исходном слое, цвете и свойствах типа линий объектов, содержащихся в блоке. Слой, на котором вы создаете объекты чертежа, и определенные настройки свойств влияют на то, сохраняют ли объекты во вставленном блоке свои исходные свойства или наследуют свойства текущего слоя, цвета, типа линий или веса линий.
При вставке блока вы создаете ссылку на блок и указываете его местоположение, масштаб и поворот. Доступны несколько методов вставки:
-
Ссылка на блок в текущем чертеже вставляется в тот же чертеж.
При создании блока его определение автоматически сохраняется в таблице блоков и доступно для ссылки. Вы указываете, остается ли исходная геометрия, преобразуется ли она в блок или удаляется из области рисования.
При вставке одного файла чертежа в другой чертеж информация из вставленного чертежа сохраняется как определение блока в таблице блоков целевого чертежа. Последующие ссылки на это определение блока могут отображать другие параметры положения, масштаба и поворота, как показано на следующем рисунке.
Внешние ссылки (внешние ссылки) во вставляемом чертеже могут отображаться неправильно, если внешняя ссылка не была ранее вставлена или присоединена к целевому чертежу.
Библиотека блоков – это чертеж, обычно содержащий определения блоков символов с похожими функциями, которые хранятся вместе для удобства доступа и управления. Вы можете вставить определения блоков из библиотеки блоков в текущий файл чертежа.
Вставка блоков из библиотек блоков
Используйте палитру содержимого для вставки блоков из текущего чертежа или из библиотеки. Перетащите или дважды щелкните блок, чтобы вставить его в текущий чертеж.
Вставка блоков путем перетаскивания из Finder
Вы можете перетащить файл .dwg из Finder на холст для рисования. Файл вставляется как блок. Используйте палитру свойств, чтобы изменить свойства блока или РАСЧЛЕНИТЬ по мере необходимости.
Быстрое видео
Полезный совет: работа с весами для этикеток растений
Проблема
Когда вы размещаете блок на чертеже, он появляется в неправильном масштабе.
Сталкиваетесь ли вы с этой проблемой с масштабированием блоков в чертеже, содержащем внешние ссылки? Если это так, выполните наши шаги, чтобы устранить неполадки и исправить масштаб и единицы измерения на чертеже с помощью внешних ссылок.
блок – это набор линий и других компонентов, из которых состоит объект на чертеже. Примеры объектов, состоящих из блока, включают в себя растение, этикетку, деталь и элемент ирригационного оборудования. При размещении одного из этих объектов вы можете иногда заметить, что их масштаб кажется неправильным. Например, растение, которое вы размещаете на своем рисунке, может казаться намного больше или меньше, чем аналогичные объекты, которые уже есть на вашем рисунке.
Вы можете предотвратить подобные проблемы, ВСЕГДА устанавливая единицы измерения и масштаб перед началом работы над чертежом. Для получения дополнительной информации см. нашу страницу «Установка масштаба». Для получения дополнительной информации о правильном использовании масштаба в AutoCAD мы приглашаем вас посмотреть наш веб-семинар «Работа с масштабом».
Если вы столкнулись с этой проблемой с блоком, в котором вы уверены, что ваш масштаб и единицы измерения установлены правильно, вы можете перейти к разделу «Долговременные исправления» ниже.
Вот пример. На изображении ниже показан блок, отображаемый в неправильном масштабе. Крошечное дерево в правой части рисунка должно быть того же размера, что и три больших дерева в левой части. По какой-то причине он оказался намного меньшего размера.
Решения
Блоки ирригационного оборудования приходят не в том масштабе?
Если символы ирригации отображаются на чертежах с неправильным масштабом, убедитесь, что вы используете правильный набор настроек и что ползунки масштаба в этом наборе настроек установлены правильно. Информацию и инструкции см. в нашей документации по масштабированию символов ирригации.
По-прежнему возникают проблемы с масштабом блоков вашего ирригационного оборудования после настройки масштабирования символов в вашем наборе настроек? Перейдите к шагам, перечисленным ниже.
Шаг 1. Удалите и очистите все блоки с неправильным масштабированием
Прежде всего вам нужно избавиться от блоков, которые отображаются в неправильном масштабе.
В большинстве случаев проблему решит только этот первый набор шагов. Несмотря на это, вам все равно придется удалить и очистить рисунок от ошибочных блоков, выполнив следующие действия:
1А. Выберите все блоки на чертеже с неправильным масштабом. Введите E (для стирания) в командной строке, затем нажмите Enter. Все выбранные блоки будут удалены.
1Б. Теперь, когда вы удалили ошибочные блоки, вам все равно нужно удалить их из чертежа с помощью команды AutoCAD Purge. Введите PRG в командную строку, затем нажмите Enter. Эта команда удалит из вашего чертежа все неиспользуемые элементы, включая ошибочные блоки, которые вы удалили.
1С. Поместите объект на свой рисунок. Если он по-прежнему отображается в неправильном масштабе, вам нужно попробовать несколько дополнительных исправлений.
1D. Прежде чем переходить к следующему потенциальному решению, обязательно удалите из чертежа все ошибочные блоки (например, только что размещенный тестовый блок), выполнив шаги, описанные выше.
Шаг 2. Проверьте и исправьте единицы и масштаб
Если удаление и очистка ошибочных блоков, как описано выше, не решили вашу проблему, пришло время убедиться, что ваши единицы измерения и масштаб установлены правильно. См. наши разделы документации по:
Шаг 3. Проверка аннотативного масштабирования
3А. Выберите блок с неправильным масштабированием.
3Б. Введите PROP в командной строке и нажмите Enter, чтобы открыть панель свойств.
Проверьте аннотативную запись. Вы должны увидеть Нет в этой строке.
Если в этой строке указано "Да", для вашего чертежа задан аннотативный масштаб, что может помешать правильному масштабированию таких объектов, как блоки.
Узнайте, почему мы не рекомендуем использовать Annotative Scale с нашим программным обеспечением.
Шаг 4. Исправьте единицы измерения DWG
Если ваши блоки по-прежнему получаются слишком большими или слишком маленькими после того, как вы исправили единицы измерения и масштаб, вы, вероятно, столкнулись с относительно редкой ошибкой AutoCAD, которая влияет на масштаб вашего чертежа.
Чтобы устранить эту проблему, следуйте нашим инструкциям по исправлению единиц DWG.
Шаг 5. Убедитесь, что вы используете последние блоки Land F/X
Возможно, вы используете устаревшие блоки Land F/X. Следуйте нашим инструкциям, чтобы получить последние блоки Land F/X.
Шаг 6. Устранение повреждений и долгосрочные исправления
Ошибка единиц DWG, описанная выше, должна возникать только в том случае, если ваш чертеж содержит прокси-объекты, и для отображения прокси в диалоговом окне «Параметры» на вкладке «Открытие и сохранение» задано значение «Обнаружение объекта и вызов команды», которое Autodesk подтверждено как ошибка. Хотя описанные выше шаги -DWGUNITS обеспечивают эффективное краткосрочное исправление для одного чертежа, мы рекомендуем выполнить несколько дополнительных шагов, чтобы предотвратить эту проблему в будущем.
Также попробуйте выполнить следующие действия, если ни одно из предыдущих решений не сработало. Сначала проверьте копию чертежа с помощью команды «Сохранить как».
Измените настройки обнаружения объектов
Откройте диалоговое окно "Параметры":
Управление лентой, кнопка "Параметры"
введите параметры в командной строке
щелкните правой кнопкой мыши в командной строке и выберите в меню "Параметры"
Раскрывающееся меню "Инструменты"
Когда откроется диалоговое окно "Параметры", выберите вкладку "Открыть и сохранить".
Упомянутая выше ошибка единиц измерения DWG возникает, когда для параметра «Загрузить объектные приложения ARX» в этом поле установлено значение «Обнаружение объекта и вызов команды».
Чтобы предотвратить подобные ошибки в будущем, мы рекомендуем следующие настройки в двух раскрывающихся меню под Object ARX Applications в этом диалоговом окне:
- В разделе "Загрузка приложения ObjectArx" выберите "Вызов команды".
- В разделе Прокси-изображения для пользовательских объектов выберите Не показывать прокси-графику.
Очистить чертежи и все внешние ссылки
Мы также рекомендуем выработать привычку очищать свои чертежи и все внешние ссылки, особенно те, которые вы получаете от коллег, консультантов и клиентов. Очистка ваших чертежей предотвратит повреждение чертежа и множество проблем с масштабированием, удалив прокси-объекты из ваших чертежей и файлов листов деталей.
Блоки деталей и прокси-объекты/повреждение чертежа
Особенно важно, чтобы на ваших подробных листах не было НОЛЬ прокси-объектов (проблемных элементов, которые могут привести к повреждению чертежа). Каждый подробный лист должен быть чистым файлом DWG с титульным листом. Вот почему так важно, чтобы вы выполнили наши шаги по очистке чертежа на всех ваших листах деталей. Очистка чертежей деталей таким образом значительно снизит вероятность повреждения и предотвратит отображение блоков в неправильном масштабе.
Кроме того, поскольку детали выделены из других чертежей и могут включать в себя внешние ссылки, ваши детали могут содержать все эти бесполезные прокси-объекты. Так что, если вы открываете подробный лист и он полон прокси-объектов, пришло время очистить его.
Вы можете столкнуться с блоками на чертеже, где либо точка вставки блока не соответствует вашим потребностям. Надеюсь, этот пост поможет вам сэкономить время при редактировании вашего блока, а также есть дополнительный бонус, я покажу вам, как добавить дополнительные точки вставки в ваш блок — да, у вас может быть несколько…
На рисунке ниже сценарий таков, что у меня есть несколько экземпляров блока, содержащего атрибуты, и точка вставки для этого блока расположена в странном месте.
Не разбивая блок и затем не создавая его заново, я предлагаю использовать «Редактор блоков»
Вы можете использовать команду BEDIT (или псевдоним команды BE) и выбрать блок из списка. Или проще:
- Просто выберите экземпляр блока, который вы хотите отредактировать
- Щелкните правой кнопкой мыши
- Выберите «Редактор блоков».
Как видите, опция «Редактор блоков» неактивна, что означает, что я не могу использовать редактор блоков. И, как показано ниже, когда я использую команду BEDIT, в командной строке сообщается, что «Редактор блоков отключен».
Все в порядке, существует системная переменная AutoCAD (setvar), которую устанавливают многие менеджеры САПР, запрещающие пользователям редактировать блоки.
Системная переменная AutoCAD называется BLOCKEDITLOCK (показана ниже) и имеет очень простую настройку включения и выключения
Как показано ниже, просто введите BLOCKEDITLOCK в командной строке и установите для него значение 0 (ноль), чтобы разрешить использование редактора блоков.
- Теперь вы можете выбрать свой блок, щелкнуть правой кнопкой мыши и выбрать «Редактор блоков».
Теперь ваш блок откроется в волшебном мире редактора блоков.
Обратите внимание, что цвет фона отличается (серый), что хорошо, так как вы помните, что находитесь в редакторе блоков, а не в области рисования (модели или бумаге).
Также обратите внимание, что текущая вкладка ленты представляет собой «контекстную вкладку» под названием «Редактор блоков», и инструменты на этой вкладке полезны для редактирования блоков, а также имеется палитра под названием «Палитра авторинга блоков»
Важно отметить, что когда вы хотите выйти из редактора блоков, вам нужно использовать крайнюю правую кнопку на вкладке с надписью «Закрыть редактор блоков».
Выделив все объекты в редакторе блоков, я теперь буду перемещать их с помощью команды MOVE, чтобы сориентировать нужную «основную» точку вставки на 0,0 (показано ниже)
Если перемещение точки вставки — это все, что вам нужно сделать с блоком, теперь вы можете использовать кнопку «Закрыть редактор блоков» и нажать «Сохранить изменения…», чтобы в блоке отразилась перемещенная точка вставки.
Чтобы добавить в блок еще одну (или несколько) точку вставки:
- Перейдите на вкладку "Параметры" палитры.
- Нажмите «Точка» в палитре.
- Нажмите, чтобы разместить новую точку
- Переместите курсор от точки, которую вы только что выбрали, и поместите «Параметр»
(Примечание: обычно, когда вы размещаете что-то на вкладке «Параметры», вам также нужно применить действие к этому «параметру»). .” Обычно именно так вы создаете динамический блок. Но размещение только этих дополнительных точек не требует применения каких-либо других «действий», чтобы сделать его «динамическим» для нашей цели)
- Нажмите «Закрыть редактор блоков».
- Нажмите «Сохранить изменения в (название вашего блока)».
Поскольку у нашего блока есть атрибуты, вы могли заметить, что атрибуты не перемещались. Это связано с тем, что при создании блока для параметра «Блокировать позицию» было установлено значение «Да» при создании атрибута.
Чтобы исправить это, используйте команду ATTSYNC, которую можно найти на вкладке «Вставка» на ленте > раскрывающийся список панели «Определение блока» > нажмите «Синхронизировать»
- Выберите блок, который необходимо «синхронизировать».
- Подтвердите, что хотите синхронизировать блокировку, выбрав "Да".
Теперь, когда блок готов к использованию, вы можете использовать эти дополнительные точки вставки с помощью команды INSERT (или псевдонима команды I )
Читайте также: