|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Опять про _INSERT и диалоговое окно выбора опций
Регистрация: 22.01.2010
Сообщений: 311
|
||
Просмотров: 14455
|
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Код:
__________________
cadtools |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Если "пересмотреть все сообщения тоже нереально", то почему бы не заглянуть в справку, где говорится об опциях командной строки? Это самый правильный путь.
"_-insert" и "_insert" - разные варианты вызова команды. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
2 TararykovDG
Ну да, тоже верно...Можно наверное даже в выпадающем списке установить по умолчанию нужное имя блока. Хотя всё равно странно, популярнее вставки блока разве что запуск самого Автокада и такое неоднозначное поведение... 2 ShaggyDoc, "_-insert" и "_insert" ведут себя по-разному, как и положено, с этим всё ясно, а вот (vl-cmdf "_insert") и (vl-cmdf "_-insert") ведут себя одинаково, вот в чем вопрос ! ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Код:
p.p.s - можно и через dxf (тогда vl-load-com не нужен) - там сам блок ихмо покрасивей всавляется, но если с аттрибутами - то "возьня" начинается.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 18.01.2011 в 14:31. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Команда предназначена для вызова штатного диалога. Функция, вызывающая команду INSERT в любых вариантах не вызовет диалоговое окно, так как в нем нет смысла (оно ничего не возвратит). Команды предназначены для обычных пользователей, а функции - для программирования. Программирование вставки блоков связано с передачей аргументов (имени блока, масштаба, поворота) и вызов здесь штатного диалога не нужен. Если нужен какой-то диалог, он пишется самостоятельно. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
ShaggyDoc,
обстоятельный ответ, не поспоришь)) Но замечу, что хоть и создать собственный диалог для вставки блока не представляет особого труда, при всём многообразии вариантов применения блоков наверняка может оказаться и такой, при котором самым оптимальным будет программный вызов штатного диалога. Вопрос можно считать исчерпанным ![]() |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В каких-то других случаях, с другими командами, наподобие PLOT, смысл может быть. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
ShaggyDoc,
я, когда писал "забыли", в основном себя имел в виду ![]() Вопрос чисто теоретический: ты допускаешь вариант, что в LISP-программе выполняются какие-то действия, построения, вычисления и т.д. и т.п. и в самом конце пользователю предоставляется возможность осуществить вставку блока ? Как он этой возможностью воспользуется, уже никого не интересует, в т.ч. и программу, которая ему эту возможность предоставила... |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Штатный диалог здесь не нужен, хотя могут быть и свои диалоги. Штатным может быть диалог редактирования атрибутов блока (если нужно), причем желательно предварительно заполненных. Вот уметь управлять вызовом этого диалога надо уметь, там тоже есть тонкости. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Я с этим на 99% согласен. Сходу тоже не могу придумать ситуацию, в которой пользователь не знает масштабы по X и Y (а может даже и базовую точку!), пока не увидит висящий на курсоре блок, но просто уверен, что такие задачи встречаются.
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Исключением, пожалуй являются случаи "визуального" масштабирования специальных "украшательских" блоков, каких-нибудь деревьев на фасадах. Так и там масштаб знать не надо, надо просто растянуть изображение мышкой. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Как раз по поводу визуального украшения - когда вставляешь блок командными методами - на курсоре "висит" его изображние - сделать нечто подобное в лиспе можно либо, через API express tools (но они не факт что установлнны), либо через grread + куча обработки, отслеживаний и пр. - то есть гемор для "красоты" получается приличный (хотя можно 1 раз с силами собратся и написать).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Должно учитываться, что блок может иметь атрибуты самых разных видов. И то, что разные Автокады имеют особенности, связанные с INSUNIT и с аннотативностью. Должен быть цикличный запрос: Точка вставки <Выход>: с завершение работы пустым вводом. ESC при этом блокируется. Такую универсальную функцию мы с Alaspher-ом делали лет 10 в разных вариантах. Приходилось применять разные хитрые методы и бороться с "особенностями" каждой новой версии AutoCAD. Подробно история описана в "САПР на базе AutoCAD....". Да и на форуме где-то долго обсуждали. Но все найденные решения оказались непригодными для работы в 3D - а там тоже так блоки надо вставлять, например высотных отметок. Да ещё в нужной ПСК и плоскости. В результате пришлось сделать прерывание цикла вставки по ESC, а функция стала очень простой. Запрос: Точка вставки или ESC для выхода: Иначе никакой возможности нет. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Кроме того, команда всегда работает в текущей ПСК, что значительно упрощает дело. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Цитата:
(while (vl-cmdf "_insert" blockname pause 1 1 pause) ; в данном случае с запросом угла поворота ) По ESC цикл прервется. Дешево и сердито ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Цитата:
Код:
Какие условия не выполнены ? Последний раз редактировалось swkx, 20.01.2011 в 14:06. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Если бы всего лишь в цикл завернуть, разве бы бились столько... Сделай реальную программу для реального блока. Хотя бы какой-нибудь значок наподобие отметки вставлять. Да чтобы масштабировалось автоматически и правильно. В модели, в листе. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Как-то так:
Код:
В таком варианте выдается стандартное приглашение: «Точка вставки или [Базовая точка/Масштаб/X/Y/Z/ПОворот]:» Можно и его заменить на своё, но кто его вообще читает после миллиона использований ![]() После вставки блока вывалится окно для заполнения атрибутов. Что ещё нужно проектировщику для полного счастья ? |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
А теперь где-то вне программы установи (setvar "ATTREQ" 1) и погоняй. И делай всё не так, "как надо", а как может сделать пользователь. Например, не укажи точку. И блок возьми из другого файла, в котором были не такие, как в этом INSUNITS. И задавай поворот не 45, а в виде аргумента. Если задан - то поворот не запрашивается, а если NIL - запрашивается угол поворота, разумеется с понятным приглашением. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Начальные углы и пр. тоже естественно иметь возможность задать.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
ShaggyDoc,
Разумеется, приведённый код подразумевает только "правильное" поведение пользователя. Рассматривалась же принципиальная возможность с помощью (vl-cmdf "_insert" ...) добиться нужного результата. Кстати, в вышеупомянутой книге в качестве одного из способов предлагается использовать вставку блока в невидимую зону экрана и затем манипуляции с _CHANGE. Я так и не понял, в чем преимущество этого метода ? Или он как раз и позволяет отследить все телодвижения пользователя ? Или этот метод был актуален только в ранних версиях Автокада и сейчас про него можно забыть ? Просвети, плиз. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
swkx, _.change работает только в плоскости, без вариантов. А вот _.insert позволяет вставить блок в любую точку, в том числе и лежащую на Z<>0.
Мне ShaggyDoc весьма доходчиво все в свое время объяснил ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Она использовалась, поскольку мне для моих задач практически никогда не требовалась вставка блока с Z<>0. А так-то по идее надо использовать именно _.-insert...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Раньше vl-cmdf не было, приходилось извращаться. С CHANGE нет никакого преимущества, это была вынужденная мера. Не было так же замечательного семейства vl-catch Цитата:
Цитата:
PS. Кстати, блоки и с отрицательными масштабами и с неравными могут быть. Последний раз редактировалось ShaggyDoc, 20.01.2011 в 22:16. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Цитирую:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Во-первых, тут не все "товарищи". Всякие тута ходют. Во-вторых, команду надо использовать при интерактивной вставке блоков. Если блоки вставляются программно, без запроса пользовательского ввода, лучше использовать объектный метод vla-insertblock. Разумеется, правильно его используя, т.е. передавая координаты в МСК, а угол поворота в радианах. Объектный метод работает намного быстрее, а программно часто вставляются сразу много блоков - какая-нибудь "штриховка" блоками или разбивка трассы. Обертка из vl-catch никогда не повредит, но надо избегать её вложенности. Достигается это тем, что она используется в низкоуровневых функциях (вставки блока, любого get-ввода), но очень ограниченно - на уровне программы. Если критичные места защищены, то в программе особо и защищать нечего. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Цитата:
Ну, это ты зря ![]() Последний раз редактировалось swkx, 21.01.2011 в 08:45. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
![]() Я лично предпочитаю - "коллеги" для подобных форумов. Но это шутка была. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Код:
p.s. - сейчас исправил небольшую ошибку (добавил еще 1 trans для правильной привязки видов).
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 21.01.2011 в 12:41. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Дима_,
Вполне красиво, но для меня сложно и непонятно ![]() Раз тема не закрылась, решил выложить простой пример, который и побудил её создать: Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Когда я впервые увидел лиспы Крыса - у меня сложилось примерно такое-же впечатление - а сейчас ничего - читаю.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 21.01.2011 в 12:52. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Дима_, а если вставка блока производится в листе? И вот еще - попробуй (скажу честно, твой код я не разобрал - знаний мало) сначала повесить блок на курсор, а потом уже запрашивать углы поворота, масштабы и т.п.
И вот еще. Насколько я понял, ты постоянно вставляешь блок - удаляешь блок. Это по меньшей мере опасно: каждое вхождение блока получает уникальный хэндл, количество которых, конечно, велико, но не бесконечно.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
2. (повесить блок на курсор...) - непонял какие углы - блок всегда на курсоре - щелкаешь правой кнопкой мыши - он маштабируются, еще раз - крутится, далее - по кругу. 3. Ну можно и таскать - тут рекурсия более 20 тыс не даст нарисовать - вылетит по переполнению стека (по моим прикидкам это около 30 минут с учетом что каждую секунду user как автомат калашникова делает десять "дерганий") - "Не выдоишь за день - устанет рука (с)".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Дима_, а где это видно, что для масштабирования надо выполнить правый клик? И потом, масштабирование как-то странно производится (ИМХО): непонятно от какой точки отсчиыватется коэффициент; нет (пока нет) возможности ввести точное значение коэффициента. Я не могу снять и предоставить видео, но сам попробуй протестировать свою функцию.
Вопрос не в переполнении стека, кстати, а в переполнении счетчика хэндлов. Как только AutoCAD пересекает эту границу, поведение файла становится труднопредсказуемым: может создать блок, но не даст его вставить. Или полилнию не отрисует (причем часть сделает, а часть откажется напрочь). Не, лекарство, конечно есть - _.wblock, но поди объясни это всем и каждому...
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
P.S. в данном виде можно таскать 1 объект - без проблем, программа демонстрационная (принципиальной возможности сделать - надобавлять, можно чего угодно). Цитата:
p.p.s. я не спорю что лучше сделать меню, ввод данных и пр. - просто не нужна мне она пока (да видимо не только мне) - а время попросту тратить не хочется - вся суть вышесделанного - есть прекрасный способ вставки методом _insert, но его не поменять и т.к. он командный - не везде применим - я лишь показываю что аналогичный вполне реально создать+добавить в "интерактивную" часть свой функционал.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 21.01.2011 в 15:11. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
|
|||
![]() |
|
||||
инженер Регистрация: 03.08.2007
Сообщений: 1,418
|
Прошу помощи у знатоков! Вопрос в принципе по теме.
Раньше пользовался макросом, потом захотелось, чтобы команду можно было быстро повторить по пробелу или Enter'ом, составил код: Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Код:
|
|||
![]() |
|
||||
инженер Регистрация: 03.08.2007
Сообщений: 1,418
|
Нет, мне нужно просто найти, выбрать и вставить файл в текущий чертеж, причем не блоком. ESC - если решил сделать иначе. Внедрение библиотеки это уже последствия. Подскажите, как это сделать желательно одной командой, не затрагивая определений блоков.
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Опять про перепуск арматуры | AlfF1 | Железобетонные конструкции | 52 | 14.11.2017 08:55 |
Опять про сбор нагрузок (сильно не бить, поиск юзал) | Gevo | Конструкции зданий и сооружений | 39 | 21.04.2009 23:19 |
И опять про лицензирование | Aragorn | Разное | 39 | 27.02.2009 15:31 |
Опять про системные переменные | DEL | AutoCAD | 4 | 03.11.2006 11:12 |