|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VBA, "повесить блок на курсор"
AutoCAD
Москва
Регистрация: 26.07.2007
Сообщений: 1,064
|
||
Просмотров: 8160
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
http://dwg.ru/f/showthread.php?t=11905 - там есть лисповые решения. Это тот случай, когда от командных методов отказаться невозможно.
Я понимаю, что "задели" невозможности VBA в теме "VBA - зло" ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Дима_, а если вспомнить BricsCAD и Ко? Там ET нет и не будет
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А жаль! В чем же интересно у самих автодесков это (прорисовка тела у курсора) написанно? Вопрос у кого голый автокад без ET - там при перемещении тела оно у курсора наблюдаеться?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Цитата:
Можно только с использованием лисп выражения и функции SendCommand: Код:
|
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Попробоввал на 2008 LT без експрессов. Вставил блок, причем с атрибутом. До указания точки вставки, при перемещении мышки по экрану, блок перемещается (перерисовывается), с задержкой в отрисовке текста.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
В LT вообще Express Tools существовать не могут (официально)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
fixo, мне кажется Вы недописали, после:
Код:
Насчет DoEvents, поясните. В справке непонятно написано. Во время паузы в: Код:
Вернее не выполняется, а может выполняться еще одна команда. Хотя нет. Во время "pause", запрвшивается точка вставки. Тогда вообще непонятно. Вы извените за глупые вопросы, ладно. Ё, я кажется понял. Вставка блока через команду, это оно самое и есть. Т.е. блок (с помощью Автокада) вешается на курсор? Футы, так просто. А как насчет реализации после указания точки вставки блока. Нужно управлять его размещением, в зависимости от расположения курсора относительно точки вставки. Последний раз редактировалось Vildar, 30.07.2008 в 19:34. |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Опять же на VBA это не сделать
Но можно тупо вставлять блок куда-нибудь скажем в точку 0,0,0 а затем по аналогии использовать команду "Move" через SendCommand Так на языке и вертится: через ж.. Насчет DoEvents в данном контексте она не выполняет никакой роли можешь убрать А в принципе эта функция передает управление Windows, для обработки других событий. И после обработки Windows'ом всех событий из очереди и передачи всех нажатий клавиш из очереди функции SendKeys возвращает управление обратно в VBA Фактически здесь она работает как Sleep ~'J'~ |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
А что значит - "~'J'~"? Где-то (на caduser кажись) уже встречал!
Не совсем понял про "через жо...": Но можно тупо вставлять блок куда-нибудь скажем в точку 0,0,0 а затем по аналогии использовать команду "Move" через SendCommand Если есть возможность, посмотрите как вставляется, например, высотная отметка в СПДС. На мой взгляд, только move не обойтись. Ну ладно, для меня пока это не критично (проблема остро не стоит). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
я бы использовал не _.move, а либо _.change (для варианта 2Д), либо _.-insert (для варианта 3Д)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Код:
Далее. Эта строка будет отображаться в командной строке AutoCAD. Кому этот мусор нужен? А почему стоит "1"? Разве блок только в единичном масштабе вставляется? Масштаб должен быть рассчитан в зависимости от назначения блока, а блок перед вставкой должен быть смасштабирован. Что толку, если на курсоре будет болтаться какая-то козявка или наоборот, громадина? А поворот обязательно 0? А если надо еще и разворачивать (или визуально или с заданием угла любым стандартным методом), что другой проект делать? А если атрибуты в блоке будут? Че тогда? А откуда вообще имя блока будет браться? Спрашивать, как показано в #7? Или зашивать в dvb? А если блоков сотни? Что, на каждый блок проект? А как в меню записать? А если определения блока нет в DWG? Exit Sub и всё? и т.д. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Это просто "чайнику" показали, как использовать командные методы при вставке блока.
По замечаниям от ShaggyDoc. Мои предположения. Остальные условия тоже можно туда прописать. - Имя блока берем с кнопки (через сис.переменную Userr1), проверяем его наличие. Кнопка, потому что блоков оформления не много, я делаю именно их. - Масштаб, у меня он в сис.переменной CELTSCALE (и формочка в немодальном режиме для изменения масштаба). - Дальше черт его знает. Пока у меня на кнопке макрокоманда, из книжки В.Свет, по простому варианту: ^C^C_-insert;Os;\$M=$(Getvar,CELTSCALE);;; Значение атрибута - ручками ![]() И повернут/подвинут/отзеркалят если надо тоже ручками ))) Серьезно. Надо решать поставленные задачи. Это я себе говорю, че-то обленился. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Такой переменной нет. Прочти ссылку, которую я давал - там ShaggyDoc все по полочкам разложил
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Где же "нажал и чертеж готов", упоминавшейся в ветке про "зло"? А вот примерно как делается на LISP. 1. Имеется библиотека функций, которая всегда в памяти. Все функции доступны как друг другу, так и любым программам. Функции имеют аргументы. Вызов любой функции можно и в программе сделать и в другой функции и в макросе меню или кнопки прописать. 2. Применительно к вставке блоков имеем записи макросов наподобие: Код:
И простой инженер (да просто "тетка"), зная, что это за аргументы, может просто скопировать вызов и вставить в другой пункт меню. Вот это будет вставка той же отметки, но без запроса поворота: Код:
Код:
Заодно уж и диалог выбора покажу (см. рисунок). Там не отметки (что их смотреть). Там что угодно может быть. Это несмотря на то, что считают, что диалоги в VBA хороши, рядом только OA с жалкой троечкой. Вывод этого диалога делается тоже функцией: Код:
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
insunits немного не то
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
ShaggyDoc, может хватит тыкать "в грязь лицом". Я не претендую на звание "программиста", "продвинутого инженера". Могу публично во всем раскаяться (хотя я никогда и не претендовал). Я инженер 3 категории, сегодня только под этим подписался в ОК, можете поздравлять
![]() По сути. Передо мной стоит задача "соскочить" с СПДС (подробнее см. "Замена ходовых инструментов СПДС на свои собственные"). Ограничений по используемым инструментам нет (Lisp, VBA, макрокоманды, короче все). Результат может быть от 0 до 100%. Я близок к 0% (относительно СПДС, но работать можно и ручками на худой конец). Конечная цель видна, СПДС, а шаги к реализации нет. За что хвататься не пойму, вот поэтому я здесь и ищу помощи. ruCAD заменяет СПДС? |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Делать подобная система должна собственно всё, что предусмотрено стандартами СПДС. А это все оформление - форматки, таблицы, различные условные обозначения, тексты, размеры и прочее. Не столь всё и сложно. Что плохо в программе СПДС? Только на мой личный субъективный взгляд - достаточно простые задачи реализованы сложным путем - созданием собственных объектов с использованием ObjectARX. Вот отсюда все и проблемы, которые неоднократно поднимались на этом форуме. По отдельности все задачи неоднократно решены. Если есть цель сделать "в комплексе", то читайте книгу "САПР на базе AutoCAD - как это делается". Там как раз описано "пошагово". В том числе с разбором инструментов, да и процентов 90 кода, необходимого, чтобы заменить (пусть без каких-то "фишек") СПДС-График, приведено. Вот написанием этой книги мы и оказали конкретную помощь. Самый лучший инструмент для решения подобных задач как раз LISP. Цитата:
ruCAD - комплексная система для строительной, сантехнических (всех) систем, топографии, генплана, любого оборудования. Оформительская (СПДС-ная) часть там, конечно есть. Но основное - разработка разных разделов проекта по единой методологии. "Большой Красной Кнопки" там тоже нет. Обещания, что за полчаса можно выполнить работу целого отдела (как у других) - тоже нет. Имеется нормальная "механизация" выполнения множества рутинных операций. Картинка в моем предыдущем посте - иллюстрация, того как примерно выглядит интерфейс для пользователя. Это только махонькая менюшечка по 3d-моделированию КИП. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Я к тому написал свой пост, что знание про insunits небесполезно. Но оно не решит текущей задачи (а вот незнание - запросто погубит)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Кажись нашел
Код:
PS: Нагрянул гл.специалист, он в отпуске сейчас, сказал что не видит смысла пытаться заменить СПДС, и что он от него не откажется. Вроде и полегчало, но теперь не будет стимула к дальнейшему изучению (смешно) чего-либо, а жаль. Что делать? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Изучать СПДС. Хочешь задачку?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Для "простого инженера", оказалось, нереально.
Цитата:
Цитата:
Цитата:
IMHO. А самая лучшая книжка "AutoLisp и VisualLisp в среде AUtoCAD". Есть, и ни что (сомневаюсь, может ничто ![]() Про ruCAD слышал, но не "пробовал". Зазырить бы ![]() Offtop: Но VBA не брошу, Потому что он хороший. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
поздно не будет
![]() Попробуй проставить 3-4 десятка выносок и собрать количество узловых по типу "Обознач1" - 10 шт, "Обознач2 - 20 шт" и т.п. По ходу дела (усложнения сразу, потом забуду или лениво будет ![]() --- Задача 2: запросить у пользователя точку "начала" выноски; радиус круга (крайне желательно с отрисовкой его - если будешь делать на VBA, то используй временные примитивы); потом точка перелома. Проанализировать введенные координаты. Нарисовать выноску, назначить ей соответствующую "стрелку", установить габариты. Должно работать в любом пространстве (что модели, что листа); в любой системе координат. --- Добавлено: задача 2 для гимнастики. Тяжелой гимнастики.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Послал меня, на неделю минимум
![]() Узловой выноски я еще не делал пока. Это будет доп. задача (bonus ![]() Сразу загвоздка возникает с ней. Это же не готовый блок вставляется (ведь кружок, а в СПДС он еще и в овальчик превращается, может быть разного диаметра), а рисуется по параметрам, так, с атрибутом. Буду пробовать. Со спецификацией проблем, в оригинале, пока не вижу. Про ссылки, еще и 3-х кратные, посмотрю, не сталкивался. Задача 2. О, а это и есть "bonus", только с "фишками". Наполовину облегчил задачу, разжевал пошагово, спс ![]() Начну пожалуй. Спасибо за заботу и внимание ![]() Блин, выноска - _qleader, с пользовательской стрелко (кружком). Последний раз редактировалось Vildar, 31.07.2008 в 17:56. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хитрый блок | Vova | Динамические блоки | 166 | 20.03.2017 15:13 |
Пароль к VBA | karp_b | Программирование | 24 | 29.08.2013 12:43 |
Как удалить существующий блок? | dextron3 | Динамические блоки | 21 | 24.12.2012 10:19 |
Помогите доделать программу добавления объектов в блок | МишаVBA | Программирование | 1 | 20.05.2006 01:04 |