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: )
0.02 МБ
СКАЧАТЬ
Комментарии
Авторизоваться
Пожелание, обязательное к реализации: При работе с -BlockReplace текст "Выберите заменяемый блок" и "Выберите заменяющий блок" он пишет только в командной строке, а в Dynamic Input "Select object:". Так вот в Dynamic Input должен быть текст по-русски "Выберите заменяемый блок" и "Выберите заменяющий блок".
Посмотрел я VBA код, считаю с одно сторона то, что программа поддерживает и 2006 и 2007, то есть, нет отдельных программ для 2006 и 2007 - это очень хорошо. Но вот в самом коде происходит дублирование, что, IHMO , должно быть оптимизировано.
Ещё раз спасибо, за реализацию программ, и надеюсь на дальнейшее её улучшение, в частности то, что написал выше.
Если можно реализовать, то нужно сделать так, чтобы фразы (текст, например, Выберите заменяемый блок:) задавались один раз в программе.
Ещё пожелание, хотелось бы что было: Включить опциональную возможность удаления заменяющего блока. То есть передомной два блока, нажимаю на -BlockReplace, выбираю заменяемый блок, выбираю заменяющий блок, он блок заменяется, а заменяющий блок удаляется. Остаётся один блок. Это нужно для работы с Flatshot, когда у меня лежал блок, потом конструкция поменялась, появился новый блок (заменяющий). Теперь передомной 2 блока. С помощью -BlockReplace, на место старого блока ставлю новый, и теперь передомной 2 новых блока, один (тот который я выбирал как заменяющий) я удаляю, так пусть он сразу автоматически удаляется. Вариант выбора удалять или нет, IHMO, должен быть в контекстном меню с фразой "Удалять заменяющий блок?" Y / N.
При работе с -BlockReplace, если после кнопки (команды) нажать ESC, то команда продолжает ожидать выбора заменяемого блока, и реагирует на правую кнопку мыши. ESC, должен отменять полностью -BlockReplace, на любом этапе.
По поводу программы, и конкретно диалогового окна:
1. Считаю нужным кнопку ОК исправить на "Заменить";
2. Кнопку Выбрать - удалить из окна вообще;
3. CheckBox'ы расположить вертикально - в столбик;
4. Сделать обработку двойного клика (взамен кнопки Выбрать);
5. Сделать окно программы резиновым, чтобы можно было изменять его размеры.
По поводу остального.
1. Ни к чему (к примеру, в окне Печать кнопка тоже называется ОК, а не Печать)
2. Пусть будет до кучи (позволяет работать без мышки)
3. С учетом п.2 такое расположение является оптимальным
4. (?)Обработка двойного клика была изначально (см. описание)
5. Сделать окно резиновым не так-то просто.
Что касается кнопки Выбрать и CheckBox'ов - можете внести изменения по месту, я не возражаю :-)
>1. Ни к чему (к примеру, в окне Печать кнопка тоже называется ОК, а не Печать)
Не стоит копировать ошибки, к тому же, в Вашем примере вместо ОК должно быть Печатать.
>2. Пусть будет до кучи (позволяет работать без мышки).
В данном случае эта кнопка еще больше не нужна. При работе без мыши последовательность действия должна быть такая: Открылось диалоговое окно, с помощью стрелок сразу должна быть возможность передвигаться по списку блоков, при нажатии Enter выбирается первый блок, далее в списке с помощью стрелок выбираем второй блок, далее курсор попадает на ОК (Заменить). Если пользователь не хочет нажимать ОК (Заменить), у него есть возможность с помощью Tab переместить фокус на Отмена, далее с помощью Tab, на строку (TextBox) для выбора 1 блока, далее с Tab второго блока, далее по галочкам и потом на ОК (Заменить). Если после первого цикла (пришли на ОК), пользователь хочет поменять выбранные блоки, то нажимает Tab (попадает на Отмена), Tab (попадает на TextBox1) и нажав Enter попадает в список блоков. Также он может пропустить TextBox1 и нажав Tab попасть на TextBox2.
Кнопку Выбрать - в топку.
>3. С учетом п.2 такое расположение является оптимальным
С учетом моего ответа на п.2 остаюсь при своём мнении
4. (?)Обработка двойного клика была изначально (см. описание)
> Это я извиняюсь, но вот не задача как с помощью двойного клика выбрать первый блок?
Ответ: Ставим курсор в нужный TextBox а затем двойной клик по требуемый блоку, и в эту строку попадает выбранный блок.
5. Сделать окно резиновым не так-то просто.
Так я и не говорил что просто, но то что сделать сложно, не значит что это не нужно.
6. Нет горизонтальной полосы прокрутки, для случая длинных имён блоков, но когда все имена видны полностью, горизонтальной полосы прокрутки видно быть не должно.
>Что касается кнопки Выбрать и CheckBox'ов - можете внести изменения по месту, я не возражаю
Здесь дело не в этом, при обсуждении я исхожу из того, что программа должна "работать из коробки", то есть сразу после её установки без необходимости дополнительной доработки.