Опять про _INSERT и диалоговое окно выбора опций - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Опять про _INSERT и диалоговое окно выбора опций

Опять про _INSERT и диалоговое окно выбора опций

Ответ
Поиск в этой теме
Непрочитано 18.01.2011, 10:54
Опять про _INSERT и диалоговое окно выбора опций
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

Вопрос о применении _INSERT поднимался столько раз, что даже неудобно начинать опять, но и пересмотреть все сообщения тоже нереально))
Поэтому напомните, плиз, почему ввод с командной строки
_-insert и (vl-cmdf "_-insert") даёт одинаковые результаты, а
_insert и (vl-cmdf "_insert") разные:в 1-м случае выдается диалоговое окно, во 2-м ввод имени блока и параметров предлагается с ком. строки ?
AutoCAD 2009.
Просмотров: 14340
 
Непрочитано 19.01.2011, 22:01
#21
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
не могу придумать ситуацию, в которой пользователь не знает масштабы по X и Y
При использовании программы пользователю не надо знать про масштабы. Это программа должна масштабировать в зависимости от того, что это за блок - условное обозначение или "реальный" объект.

Исключением, пожалуй являются случаи "визуального" масштабирования специальных "украшательских" блоков, каких-нибудь деревьев на фасадах. Так и там масштаб знать не надо, надо просто растянуть изображение мышкой.
ShaggyDoc вне форума  
 
Непрочитано 19.01.2011, 23:36
#22
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Как раз по поводу визуального украшения - когда вставляешь блок командными методами - на курсоре "висит" его изображние - сделать нечто подобное в лиспе можно либо, через API express tools (но они не факт что установлнны), либо через grread + куча обработки, отслеживаний и пр. - то есть гемор для "красоты" получается приличный (хотя можно 1 раз с силами собратся и написать).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 19.01.2011, 23:40
#23
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Надо же, я тоже про расстановку деревьев на лужайке подумал))))

Так это и есть тот самый случай - пользователь ДО указания точки вставки не знает, какие будут коэффициенты.
swkx вне форума  
 
Непрочитано 20.01.2011, 06:36
#24
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Как раз по поводу визуального украшения - когда вставляешь блок командными методами - на курсоре "висит" его изображние - сделать нечто подобное в лиспе можно либо, через API express tools (но они не факт что установлнны), либо через grread + куча обработки, отслеживаний и пр. - то есть гемор для "красоты" получается приличный (хотя можно 1 раз с силами собратся и написать).
Многократная (однократная - очень просто) вставка блока, "висящего" на курсоре - очень нужная задача. Причем блока, отмасштабированного и повернутого. Блок должен быть виден именно до указания точки вставки, чтобы пользователь мог видеть, как он вписывается в обстановку. Обычно это разные условные обозначения, например деревья для топографии или отметки на плане.

Должно учитываться, что блок может иметь атрибуты самых разных видов. И то, что разные Автокады имеют особенности, связанные с INSUNIT и с аннотативностью.

Должен быть цикличный запрос: Точка вставки <Выход>:
с завершение работы пустым вводом. ESC при этом блокируется.

Такую универсальную функцию мы с Alaspher-ом делали лет 10 в разных вариантах. Приходилось применять разные хитрые методы и бороться с "особенностями" каждой новой версии AutoCAD. Подробно история описана в "САПР на базе AutoCAD....". Да и на форуме где-то долго обсуждали.

Но все найденные решения оказались непригодными для работы в 3D - а там тоже так блоки надо вставлять, например высотных отметок. Да ещё в нужной ПСК и плоскости.

В результате пришлось сделать прерывание цикла вставки по ESC, а функция стала очень простой. Запрос:

Точка вставки или ESC для выхода:

Иначе никакой возможности нет.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 08:08
#25
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В результате пришлось сделать прерывание цикла вставки по ESC, а функция стала очень простой. Запрос:

Точка вставки или ESC для выхода:
т.е. используется (vl-cmdf "_insert" ... ) в разных вариантах как самый универсальный метод ?
swkx вне форума  
 
Непрочитано 20.01.2011, 09:59
#26
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
т.е. используется (vl-cmdf "_insert" ... ) в разных вариантах как самый универсальный метод ?
Да. Когда надо визуально вставлять блок, никакие объектные методы не помогут. Только команда, причем не через command, а через vl-cmdf.

Кроме того, команда всегда работает в текущей ПСК, что значительно упрощает дело.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 11:59
#27
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Многократная (однократная - очень просто) вставка блока, "висящего" на курсоре - очень нужная задача. Причем блока, отмасштабированного и повернутого. Блок должен быть виден именно до указания точки вставки, чтобы пользователь мог видеть, как он вписывается в обстановку.
А чем такая конструкция не подходит ?:

(while
(vl-cmdf "_insert" blockname pause 1 1 pause) ; в данном случае с запросом угла поворота
)

По ESC цикл прервется.
Дешево и сердито
swkx вне форума  
 
Непрочитано 20.01.2011, 12:35
#28
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
А чем такая конструкция не подходит ?:
Попробуй выполнить все указанные мной ранее условия. Да еще, чтобы прерывался цикл, а не вся программа. Разумеется, цикл while будет. Но не все так дешево...
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 13:41
#29
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Попробуй выполнить все указанные мной ранее условия. Да еще, чтобы прерывался цикл, а не вся программа.
Вот, извольте
Код:
[Выделить все]
(defun test-insblock-multi ()
	(while
		(vl-cmdf "_insert" "blok1" pause 1 1 pause)
	)
	(while
		(vl-cmdf "_insert" "blok2" pause 1 1 0 "")
	)

	(alert "Два раза тыкнули ESC и работаем дальше")
)
ESC срабатывает только внутри своего цикла и не прерывает работу программы, нужный блок висит на курсоре до вставки.
Какие условия не выполнены ?

Последний раз редактировалось swkx, 20.01.2011 в 14:06.
swkx вне форума  
 
Непрочитано 20.01.2011, 14:44
#30
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Вот, извольте
Условия не выполнены. Блок не отмасштабирован предварительно, не повернут (возможно), нет приглашения для вставки. Где атрибуты? И тренируйся на конкретных блоках, непременно с атрибутами разных типов.

Если бы всего лишь в цикл завернуть, разве бы бились столько... Сделай реальную программу для реального блока. Хотя бы какой-нибудь значок наподобие отметки вставлять. Да чтобы масштабировалось автоматически и правильно. В модели, в листе.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 15:49
#31
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Как-то так:
Код:
[Выделить все]
(defun test-insblock-multi ()
	(setq psx 2 psy 3)
	(setvar "ATTDIA" 1)
	(while
		(vl-cmdf "_insert" "blok1"
				 "_pxscale" psx "_pyscale" psy "_protate" 45
				 pause psx psy pause)
	)
)
Блок предварительно отмасштабирован и повернут.
В таком варианте выдается стандартное приглашение:
«Точка вставки или [Базовая точка/Масштаб/X/Y/Z/ПОворот]:»
Можно и его заменить на своё, но кто его вообще читает после миллиона использований

После вставки блока вывалится окно для заполнения атрибутов.

Что ещё нужно проектировщику для полного счастья ?
swkx вне форума  
 
Непрочитано 20.01.2011, 17:51
#32
ShaggyDoc

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 - запрашивается угол поворота, разумеется с понятным приглашением.
ShaggyDoc вне форума  
 
Непрочитано 20.01.2011, 17:52
#33
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Должен быть цикличный запрос: Точка вставки <Выход>:
с завершение работы пустым вводом. ESC при этом блокируется.

Такую универсальную функцию мы с Alaspher-ом делали лет 10 в разных вариантах. Приходилось применять разные хитрые методы и бороться с "особенностями" каждой новой версии AutoCAD. Подробно история описана в "САПР на базе AutoCAD....". Да и на форуме где-то долго обсуждали.

Но все найденные решения оказались непригодными для работы в 3D - а там тоже так блоки надо вставлять, например высотных отметок. Да ещё в нужной ПСК и плоскости.

В результате пришлось сделать прерывание цикла вставки по ESC, а функция стала очень простой. Запрос:

Точка вставки или ESC для выхода:

Иначе никакой возможности нет.
Ну зачем так категорично - что мешает через grread прорисовывать блок (хоть двухмерный, хоть трехмерный) - по левой кнопке его вставлять (и возращать соответственно ename/vla вставки), а по правой менять (через меню иль еще как) различные параметры (масштаб, угол поворота и пр). По ESC вернуть соответствующий символ (типа nil или 'esc) - для возможности обработки из вне.
Начальные углы и пр. тоже естественно иметь возможность задать.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 20.01.2011, 18:38
#34
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


ShaggyDoc,

Разумеется, приведённый код подразумевает только "правильное" поведение пользователя. Рассматривалась же принципиальная возможность с помощью (vl-cmdf "_insert" ...) добиться нужного результата.

Кстати, в вышеупомянутой книге в качестве одного из способов предлагается использовать вставку блока в невидимую зону экрана и затем манипуляции с _CHANGE.
Я так и не понял, в чем преимущество этого метода ?
Или он как раз и позволяет отследить все телодвижения пользователя ?
Или этот метод был актуален только в ранних версиях Автокада и сейчас про него можно забыть ?

Просвети, плиз.
swkx вне форума  
 
Непрочитано 20.01.2011, 20:08
#35
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


http://forum.dwg.ru/showthread.php?t=11905
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 20:44
#36
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Всё равно не дошло

Алексей,
поскольку ты в своей функции тоже используешь связку vla-insertblock + _change, ответь, плиз, одним предложением - чем она лучше _INSERT ???
swkx вне форума  
 
Непрочитано 20.01.2011, 21:23
#37
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


swkx, _.change работает только в плоскости, без вариантов. А вот _.insert позволяет вставить блок в любую точку, в том числе и лежащую на Z<>0.
Мне ShaggyDoc весьма доходчиво все в свое время объяснил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 21:34
#38
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Так почему же она всё-таки используется ?!

Потихоньку начинаю чувствовать себя немножко дебилом
Прямо заговор какой-то...
swkx вне форума  
 
Непрочитано 20.01.2011, 21:44
#39
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Она использовалась, поскольку мне для моих задач практически никогда не требовалась вставка блока с Z<>0. А так-то по идее надо использовать именно _.-insert...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.01.2011, 21:52
#40
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Если ShaggyDoc тоже выскажется и ответит то же самое, то я буду считать, что день прожил не зря
swkx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Опять про _INSERT и диалоговое окно выбора опций



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про перепуск арматуры 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