Контекстное редактирование блока в автокаде
Перейти к содержимому

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

  • автор:

Контекстное редактирование каркасов и импостов блока витража

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

  1. Выберите блок витража, в котором требуется отредактировать каркасы или импосты в режиме контекстного редактирования.
  2. Укажите режим редактирования блока витражей.

Если требуется редактировать. то …
данный экземпляр блока витража, щелкните вкладку «Блок витража» панель «Редактирование» раскрывающийся список «Правила проектирования» Применить к объекту .
стиль блока витража, щелкните вкладку «Блок витража» панель «Редактирование» раскрывающийся список «Правила проектирования» «Правила проектирования из стиля» . Если данная опция недоступна, это значит, что правила проектирования для данного блока витражей уже построены на основе стиля.

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

Если требуется… то…
редактировать каркас выбранной сетки, выберите определение каркаса и нажмите «ОК.
указать положение каркаса в выбранной сетке, для опции «Расположение каркаса» выберите «Сверху», «Снизу», «Слева» или «Справа» и нажмите «ОК».
создать новое определение каркаса и назначить его выбранной сетке, нажмите .
Если требуется… то…
редактировать импост выбранной сетки, выберите определение импоста и нажмите «ОК.
создать новое определение импоста и назначить его выбранной сетке, нажмите и заполните таблицу «Правила проектирования».

8.3.3. Контекстное редактирование вхождений блоков и DWG-ссылок

Изучаемая версия системы AutoCAD предлагает еще один инструмент работы с блоками и DWG-ссылками — редактирование внешних ссылок и определений блоков через их вхождения в текущий чертеж (команда ССЫЛРЕД (REFEDIT )). Эта команда является морально устаревшей в связи с появлением редактора динамических блоков, поэтому рассмотрим ее коротко. Ее существование оправдывает ограничение, существующее у динамических блоков, — использовать в основном двумерные объекты (все вспомогательные ручки и символы операций располагаются в плоскости Z =0). Что касается редактирования внешней ссылки по месту, то вместо этого действия вполне можно применять команду ССОТКРЫТЬ (XOPEN), которая открывает файл внешней ссылки для редактирования в окне другого документа. Операция контекстного (по месту) редактирования затрагивает сложные связи внутри чертежа (для блоков) и связи с другими чертежами (для внешних ссылок), поэтому объем подобного редактирования не должен быть велик. Операция редактирования применима к массивам блоков, созданным командой МВСТАВИТЬ (MINSERT), но выполняется над первым объектом из массива, а затем автоматически распространяется на остальные. Команде ССЫЛРЕД (REFEDIT) соответствуют кнопка панели инструментов Ссыл- ред (Refedit) (рис. 8.50) и одноименной панели ленты, а также пункт падающего меню Сервис | Внешняя ссылка или блок для контекстного редактирования | Редактирование вхождений (Tools | Xref and Block In-place Editing | Edit Reference In-Place).

Рис. 8.50. Панель инструментов Ссылред

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

Помогите пожалуйста, не работает контекстное редактировани блока по нормальному (иногда работает, но редактирует не больше двух линий и то если они горизонтально расположены). Может кто сталкивался с таким глюком?
работаю в 2009 автокаде под СПДС 4, в 2008 автокаде все работало замечательно

Последний раз редактировалось Lel’ka, 16.12.2010 в 13:44 .
Просмотров: 14336
Регистрация: 24.05.2009
Сообщений: 3,030
Сообщение от Lel’ka

Помогите пожалуйста, не работает контекстное редактировани блока по нормальному (иногда работает, но редактирует не больше двух линий и то если они горизонтально расположены). Может кто сталкивался с таким глюком?
работаю в 2009 автокаде под СПДС 4, в 2008 автокаде все работало замечательно

Можно узнать для общего развития, что такое «контекстное редактировани блока»?
Может быть и блок какой-нибудь сюда приложить.

АлексЮстасу
Посмотреть профиль
Посетить домашнюю страницу АлексЮстасу
Найти ещё сообщения от АлексЮстасу

Регистрация: 25.09.2006
калининград
Сообщений: 46

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

Регистрация: 05.09.2003
Сообщений: 10,288

Имеется в виду что иногда данная строка в меня пригашена? Это старый глюк. Бери команду из выпадающего меню Edit или комстроку _Refedit. A что не весь блок редактируется, так впервые слышу
Термин Контекстное редактирование вряд-ли удачен В оригиналe Edit Block in place, что вполне отражает суть команды

Регистрация: 29.10.2004
Сообщений: 16,333
а блок в блоке может быть, проксиобъект в блоке может сидеть.
Регистрация: 24.05.2009
Сообщений: 3,030
Сообщение от Vova

Термин Контекстное редактирование вряд-ли удачен В оригиналe Edit Block in place, что вполне отражает суть команды

А какой перевод удачен? «Расправа с блоком на месте»?
Какой смысл, отличие этого режима?

АлексЮстасу
Посмотреть профиль
Посетить домашнюю страницу АлексЮстасу
Найти ещё сообщения от АлексЮстасу

Регистрация: 05.09.2003
Сообщений: 10,288

Не совсем понял вопрос. Я-бы перевел «Редатирование блока на месте» То есть не в отрыве от окружающей блок обстановки, в отличие от команды _Bedit

идущий по граблям

Регистрация: 26.05.2005
Сообщений: 5,092
Сообщение от Vova
То есть не в отрыве от окружающей блок обстановки
Т. е. в контексте, говоря коротко. Другой вопрос, как это перевели на самом деле)))
Регистрация: 24.05.2009
Сообщений: 3,030
Сообщение от kp+
Т. е. в контексте, говоря коротко. Другой вопрос, как это перевели на самом деле)))

А такой режим редактирования блока дает какие-то преимущества?
То, что сразу видны изменения — как это будет смотреться в реальном файле?
Дин. блоки, похоже, в нем не поредактируешь?

АлексЮстасу
Посмотреть профиль
Посетить домашнюю страницу АлексЮстасу
Найти ещё сообщения от АлексЮстасу

Регистрация: 05.09.2003
Сообщений: 10,288
Сообщение от АлексЮстасу
такой режим редактирования блока дает какие-то преимущества?

На месте? Безусловно. Блок ведь не в безвоздушном пространстве. Он с чем-то соприкасается, вокруг него много всякой всячины. Если блок (или хреф) это подоснова, ну или что-то большое, не помещающееся на экран целиком, и в нем надо изменить одно локальное место и при этом видеть другие объекты, то замена этого редактора на Bedit вызовет проблемы. В Bedit блок выводится целиком во весь экран, и ищи-свищи потом нужное место.

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

Добрый день!!
При контекстном редактировании блока элементы, не входящие в состав блока, становятся тусклыми, но выбор их все равно возможен.

Подскажите пожалуйста как при контекстном редактировании блока определить входит ли выбранный элемент в состав блока.

Имя редактируемого блока можно получить из переменной — REFEDITNAME

void Select() < ads_name selection_set; acedSSGet(_T("_"), NULL, NULL, NULL, selection_set); CString block_ref_name; struct resbuf rb; acedGetVar(_T("REFEDITNAME"), &rb); block_ref_name=rb.resval.rstring; AcDbObjectIdArray block_ref_object_ids; if (!block_ref_name.IsEmpty()) < AcDbObjectId block_ref_id=0; block_ref_id=GetBlockRef(block_ref_name, block_ref_object_ids); long sel_count; acedSSLength(selection_set, &sel_count); for (int n=0; n> > //Получение id блока и списка id элементов входящих в блок AcDbObjectId GetBlockRef(CString BlocRefName, AcDbObjectIdArray& BlockRefObjectIds) < AcDbBlockTable *p_block_table; AcDbBlockTableRecord *p_block_table_record; AcDbBlockTableIterator* p_block_table_iter; AcDbObjectId obj_id; Acad::ErrorStatus err_state; obj_id=0; acdbHostApplicationServices()->workingDatabase()->getSymbolTable(p_block_table, AcDb::kForRead); err_state=p_block_table->newIterator(p_block_table_iter); for (p_block_table_iter->start(); !p_block_table_iter->done(); p_block_table_iter->step()) < err_state=p_block_table_iter->getRecord(p_block_table_record, AcDb::kForRead); const TCHAR* name; p_block_table_record->getName(name); if (BlocRefName.CompareNoCase(name)!=0) < p_block_table_record->close(); continue; > obj_id=p_block_table_record->objectId(); GetBlockEnts(p_block_table_record, BlockRefObjectIds); p_block_table_record->close(); > delete p_block_table_iter; p_block_table->close(); return obj_id; > // Получение списка id элементов входящих в блок void GetBlockEnts(AcDbBlockTableRecord* BlockTableRecord, AcDbObjectIdArray& BlockRefObjectIds) < Acad::ErrorStatus err_state; AcDbObjectId obj_id; AcDbBlockTableRecordIterator* iter; BlockRefObjectIds.removeAll(); err_state = BlockTableRecord->newIterator(iter, true); if (err_state != Acad::eOk) < return; >for (; !iter->done(); iter->step(true, true)) < err_state = iter->getEntityId(obj_id); if (err_state == Acad::eOk) BlockRefObjectIds.append(obj_id); > delete iter; >

Я смотрел по форуму — есть похожие темы — получение id блока, списка id элементов, входящих в блок.
Но тему контекстном редактировании блока, к сожалению, не нашел

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

#2 Ответ от nico 14 июня 2012г. 17:44:04

Re: Контекстное редактирование блока

что-то мне подсказывает, что это всё не поможет.
в справка акада написано, что объекты, кроме тех, из которых состоит блок примораживаются и их нельзя редактировать. как оказалось, нельзя их редактировать ТОЛЬКО командами акада, а так запросто 🙂
думаю копать нужно в сторону транзакций. т.к. только там вообще упоминается понятия рабочего набора (или как-то так).
AcApLongTransactionManager::currentLongTransactionFor — это для получения активной транзакции
AcDbLongTransaction::workSetHas — а это чтоб узнать, это объект рабочего набора транзакции или нет.
ну и собственно выбор ВСЕГО по идее остается, ток потом иды этих объектов нада подсосывать в workSetHas чтоб узнать подходит или нет

ну и второй вариант, например, попытаться переносить объекты по очереди на какой-то вектор акадовской командой MOVE. если переносится, то вернуть на место и добавить объект к выборке. ну а если не переноситься, то это не наш объект. повторюсь, ТОЛЬКО командой акада а не transformBy, т.к. трансформ отрабатывает для всех объектов, даже для «заблокированных».

PS: первый метод не тестировал, но исходя из справки так и надо поступить. второй проще для понимания, но больше строк кода. да и уж сильно обходной маневр в нем :):):)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *