VetCAD

Замена одного блока другим для AutoCAD 2006/2007

    0 оценок

den001

размещено: 12 Февраля 2007
обновлено: 21 Февраля 2007
Программка на VBA взамен экспрессовской команды blockreplace для AutoCAD 2006/2007. Заменяет во всем чертеже один блок на другой. Блоки могут быть динамическими и содержать атрибуты. Такие свойства, как слой, цвет, вес и тип линий, масштаб, OCS, сохраняются. Выбрать нужный блок можно из списка клавишей Enter или двойным кликом, а также указать на экране. Есть возможность сохранения значений атрибутов заменяемого блока, а также удаление его из чертежа после замены.

13.02.07
Добавил команду -BlockReplace, без вызова диалогового окна (процедура BlockReplaceSimple). Предлагает сначала выбрать заменяемый блок, потом заменяющий. Атрибуты сохраняются, блок из чертежа не удаляется.
Также снял по умолчанию флажок "Удалить из чертежа".

P.S. Если все же есть необходимость использовать также и экспрессовские команды blockreplace и -blockreplace, нужно в прилагаемом lisp-файле заменить c:BlockReplace и c:-BlockReplace на любые понравившиеся имена (не трогая c: )
Замена одного блока другим для AutoCAD 2006/20071

Комментарии

Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Комментарии 11-20 из 39
Чигинский Дмитрий Сергеевич , 15 февраля 2007 в 23:08
#11
Спасибо, всё работает.

Пожелание, обязательное к реализации: При работе с -BlockReplace текст "Выберите заменяемый блок" и "Выберите заменяющий блок" он пишет только в командной строке, а в Dynamic Input "Select object:". Так вот в Dynamic Input должен быть текст по-русски "Выберите заменяемый блок" и "Выберите заменяющий блок".

Посмотрел я VBA код, считаю с одно сторона то, что программа поддерживает и 2006 и 2007, то есть, нет отдельных программ для 2006 и 2007 - это очень хорошо. Но вот в самом коде происходит дублирование, что, IHMO , должно быть оптимизировано.

Ещё раз спасибо, за реализацию программ, и надеюсь на дальнейшее её улучшение, в частности то, что написал выше.
Dr. Dron. , 16 февраля 2007 в 09:14
#12
Сделал. А насчет дублирования - это единственный путь. Как уже говорилось, в AutoCAD 2006 и 2007 по-разному объявлены вхождения блоков, в части динамических свойств, что, в свою очередь, говорит о некоторой "сырости" 2006-го. Так что все процедуры и функции, в которых есть обращение к блокам (с поддержкой динамических) приходится дублировать.
Чигинский Дмитрий Сергеевич , 17 февраля 2007 в 02:16
#13
Вот, теперь более понятно, только двоеточия в конце нет NameSelectBlock2007("Выберите заменяемый блок"), но это просто исправить.

Если можно реализовать, то нужно сделать так, чтобы фразы (текст, например, Выберите заменяемый блок:) задавались один раз в программе.

Ещё пожелание, хотелось бы что было: Включить опциональную возможность удаления заменяющего блока. То есть передомной два блока, нажимаю на -BlockReplace, выбираю заменяемый блок, выбираю заменяющий блок, он блок заменяется, а заменяющий блок удаляется. Остаётся один блок. Это нужно для работы с Flatshot, когда у меня лежал блок, потом конструкция поменялась, появился новый блок (заменяющий). Теперь передомной 2 блока. С помощью -BlockReplace, на место старого блока ставлю новый, и теперь передомной 2 новых блока, один (тот который я выбирал как заменяющий) я удаляю, так пусть он сразу автоматически удаляется. Вариант выбора удалять или нет, IHMO, должен быть в контекстном меню с фразой "Удалять заменяющий блок?" Y / N.

При работе с -BlockReplace, если после кнопки (команды) нажать ESC, то команда продолжает ожидать выбора заменяемого блока, и реагирует на правую кнопку мыши. ESC, должен отменять полностью -BlockReplace, на любом этапе.
Dr. Dron. , 18 февраля 2007 в 14:43
#14
Отмену по Esc поправил, просто одну константу забыл добавить. А насчет прочего не обещаю. С Flatshot'ом я не сталкивался, поэтому не совсем понял проблему. Полсе работы команды -BlockReplace в чертеже остается только заменяющий блок, заменяемый - только в базе данных чертежа, откуда его можно удалить командой _purge (при использовании BlockReplace это можно сделать сразу). Что за два блока у Вас, я не понял. Переделывать программу мне, честно скажу, не хочется, свои функции она выполняет нормально.
Dr. Dron. , 18 февраля 2007 в 18:28
#15
Прочитал повнимательнее, разобрался, что требуется :) Но тем не менее, у программы несколько иные функции, добавлять эту опцию не считаю нужным.
Чигинский Дмитрий Сергеевич , 19 февраля 2007 в 00:50
#16
А каким образом реализовать данную функциональность. Ведь программа "знает" заменяющий блок, остаётся его только удалить. Что нужно добавить, наверняка это одна или пара строк. Подскажите.
Dr. Dron. , 19 февраля 2007 в 20:22
#17
Есть предложение - продолжить обсуждение этой темы в привате, ибо дискуссия уже удаляется от основного объекта.
, 20 февраля 2007 в 04:27
#18
Только увидел, в название и описании программы - 2006, но ведь 2007 тоже поддерживается.

По поводу программы, и конкретно диалогового окна:
1. Считаю нужным кнопку ОК исправить на "Заменить";
2. Кнопку Выбрать - удалить из окна вообще;
3. CheckBox'ы расположить вертикально - в столбик;
4. Сделать обработку двойного клика (взамен кнопки Выбрать);
5. Сделать окно программы резиновым, чтобы можно было изменять его размеры.
Dr. Dron. , 20 февраля 2007 в 06:34
#19
Насчет поддержки 2007 дописал (надеюсь, что и в 2008 уже таких сюрпризов не будет). Еще добавил регенерацию модели после замены блока (иначе обновления во вложенных блоках не видны).
По поводу остального.
1. Ни к чему (к примеру, в окне Печать кнопка тоже называется ОК, а не Печать)
2. Пусть будет до кучи (позволяет работать без мышки)
3. С учетом п.2 такое расположение является оптимальным
4. (?)Обработка двойного клика была изначально (см. описание)
5. Сделать окно резиновым не так-то просто.

Что касается кнопки Выбрать и CheckBox'ов - можете внести изменения по месту, я не возражаю :-)
, 20 февраля 2007 в 20:45
#20
Ещё в заголовке 2006/07.
>1. Ни к чему (к примеру, в окне Печать кнопка тоже называется ОК, а не Печать)
Не стоит копировать ошибки, к тому же, в Вашем примере вместо ОК должно быть Печатать.

>2. Пусть будет до кучи (позволяет работать без мышки).
В данном случае эта кнопка еще больше не нужна. При работе без мыши последовательность действия должна быть такая: Открылось диалоговое окно, с помощью стрелок сразу должна быть возможность передвигаться по списку блоков, при нажатии Enter выбирается первый блок, далее в списке с помощью стрелок выбираем второй блок, далее курсор попадает на ОК (Заменить). Если пользователь не хочет нажимать ОК (Заменить), у него есть возможность с помощью Tab переместить фокус на Отмена, далее с помощью Tab, на строку (TextBox) для выбора 1 блока, далее с Tab второго блока, далее по галочкам и потом на ОК (Заменить). Если после первого цикла (пришли на ОК), пользователь хочет поменять выбранные блоки, то нажимает Tab (попадает на Отмена), Tab (попадает на TextBox1) и нажав Enter попадает в список блоков. Также он может пропустить TextBox1 и нажав Tab попасть на TextBox2.
Кнопку Выбрать - в топку.

>3. С учетом п.2 такое расположение является оптимальным
С учетом моего ответа на п.2 остаюсь при своём мнении

4. (?)Обработка двойного клика была изначально (см. описание)
> Это я извиняюсь, но вот не задача как с помощью двойного клика выбрать первый блок?
Ответ: Ставим курсор в нужный TextBox а затем двойной клик по требуемый блоку, и в эту строку попадает выбранный блок.

5. Сделать окно резиновым не так-то просто.
Так я и не говорил что просто, но то что сделать сложно, не значит что это не нужно.

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

>Что касается кнопки Выбрать и CheckBox'ов - можете внести изменения по месту, я не возражаю
Здесь дело не в этом, при обсуждении я исхожу из того, что программа должна "работать из коробки", то есть сразу после её установки без необходимости дополнительной доработки.
zip

0.02 МБ

СКАЧАТЬ