|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Autolisp: как получить последний ввод (команду, координаты точек)?
Регистрация: 22.07.2012
Сообщений: 14
|
||
Просмотров: 13558
|
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Да не препод, для себя нужно.
Когда черчу в автокаде, указываю точки на чертеже (вручную), так вот, команда, которая мне нужна (для редактирования), должна использовать эти точки, для чего их и надо получить средствами автолиспа (на автолиспе предполагается саму команду писать). Вручную можно получить координаты последних указанных точек через меню правой кнопки в процессе выполнения команды, например при черчении отрезка (пункт "Последний ввод"), по крайней мере так в 2012 автокаде. Последние команды тоже нужны, только для других целей (их можно получить вручную также после завершения команды). Но главное - координаты точек, нужен их список, причем элементы в списке (точки) должны быть в том порядке, в котором были указаны при черчении. Команда, которая мне нужна, будет выполняться как раз в процессе черчения, то есть в процессе выполнения другой команды, если при этом можно получить точки вручную, значит и программа может их как-то получить. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Ну, мне нужны именно те точки, которые я указывал при черчении.
Иногда понимаешь, что чертишь не то, уже после того как начертил. При этом ошибка может быть, например, только в настройках инструмента, а надо все отменять, перенастраивать и потом чертить заново. Вот повторное вычерчивание после перенастройки (указание тех же точек) хотелось бы автоматизировать. Как бы "применить", но с новыми настройками и без завершения команды черчения. Если для этого есть стандартные средства в автокаде, хотелось бы знать, какие именно. Последний раз редактировалось studentarh, 05.12.2012 в 08:03. |
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Его параметры.
Например, при создании окна в архитектурном автокаде или других подобных объектов через настройки инструмента (в командной строке или в меню свойств) можно изменить размеры будущего объекта и другие его свойства (для окна - высота подоконника, процент открывания и т. п.). Конечно, можно сначала вычертить "не то", потом это выделить и отредактировать по тем же свойствам, но это неудобно, а в некоторых случаях вообще не подходит (например, параметр смещения привязки по свойствам уже созданного объекта не изменить, а это важный параметр). Наверное можно воспроизводить макрос для "применения", но такой макрос должен быть сначала записан а потом запущен в нужный момент автоматически (иначе проще будет вычертить заново вручную, чем работать с макросами). Последний раз редактировалось studentarh, 05.12.2012 в 09:45. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Вообще-то получить список точек по указанию пользователя совсем не сложно:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Нет. Во всяком случае на lisp'е ты к ним доступа не получишь.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
john644, Какое отношение имеют расширенные данные примитива к имени последней введенной команды или последним введенным точкам?
Впрочем ТС (IMHO) совершенно не понимает ни что ему нужно, ни как можно работать в AutoCAD.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Надо получить точки, которые пользователь уже ввел, функция, предлагающая указать точки на экране не подходит.
Насчет расширенных данных примитива и нумерации примитивов не понял. Как именно через эти данные получить последние введенные точки? |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
|
|||
![]() |
|
||||
Цитата:
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 06.05.2009
Сообщений: 18
|
Цитата:
Вы сейчас написали, что хочу работать в Автокаде, НО АВТОКАД МЕНЯ НЕ УСТРАИВАЕТ( в Автокаде существует функция ssget в различных вариациях и другой нет) Цитата:
Поэтому чтобы не получать глупых ответов, не задавайте глупых вопросов. Объясните задачу полностью, тогда те незнания Автокада будут заметны, но некритичны. Цитата:
Последний раз редактировалось john644, 05.12.2012 в 15:43. |
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Нет, окно в данном случае - не блок.
Я не знаю, что такое "расширенные данные примитива", поэтому и написал, что не понял, то есть не понял, ни что это, ни, главное, как именно это поможет в решении моей задачи (ну я думал, что о решении как раз пишут). А задачу, как мне кажется, я полностью объяснил в своих первых сообщениях. Чтобы объяснять дальше, мне надо знать, что именно не понятно в том, что я уже писал. Последний раз редактировалось studentarh, 05.12.2012 в 15:41. |
|||
![]() |
|
||||
Еще раз (но уже последний) повторюсь: "в том виде, как задача поставлена средствами lisp она не имеет решения."
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Да, это я наконец понял (что решения нет на лиспе). Ну, значит, другими средствами надо попробовать решить. Я просто думал, что мне здесь помогут.
Насчет файла с чертежом: ну я ведь не про определенный чертеж писал, только старался приводить конкретные примеры, как в случае с окном. |
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Какой выбор точек? Если это про функцию (getpoints), так я же говорю, она предлагает указать точки на экране, а надо получить уже указанные при черчении.
Предполагается так: 1) черчу (при этом указываю точки) 2) замечаю, что начертил не то, отменяю (при этом подсчитывается количество отмен) 3) перенастраиваю инструмент 4) автоматически указываю те же точки, что в пункте 1), количество точек определяется по количеству отмен из пункта 2), а координаты точек должны сохраняться при черчении в пункте 1). Так вот, я думал, раз точки сохраняются автоматически в последнем вводе, их можно просто оттуда взять. Но раз нельзя, значит надо их при черчении сохранить, то есть программа должна это выполнять. Но если использовать (getpoints) еще при черчении, то вместо черчения я буду указывать точки для этой функции. И даже если функция будет передавать точки автокаду (чтобы в автокаде все-таки создавались объекты при указании точек), все равно не подходит, так как при выполнении такой функции у меня простой курсор на экране и отсутствует изображение будущего объекта (которое есть при обычном черчении) - получается черчение вслепую, что очень плохо. |
|||
![]() |
|
||||
Регистрация: 06.05.2009
Сообщений: 18
|
Я говорил о выборе точек( функция ssget), а не задании точек ( функция getpoint) Теперь выясняется, что Вы не чертите точки, Вы чертите различные примитивы ( линии, трехмерные фигуры и т.д.) Это соверiенно разные вещи. Выбор последнего введенного примитивы (enget (entlast)), а из него уже извлекаете точки.
|
|||
![]() |
|
||||
Допустим.
Цитата:
Чего-чего? Это как ты себе представляешь? Если это делаешь ты сам, то каким образом? Если это делает программа, то как она должна знать какую команду и с какими опциями запустить? Резюме: Незнание возможностей AutoCAD и средств программирования под него приводит к таким вот темам на форуме.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Извлечение точек из созданного примитива не всегда поможет, так как точки, указанные при его создании, могут не совпадать ни с одной точкой самого примитива. Если я что-то неправильно понял насчет этого, объясните пожалуйста подробнее.
- Этот вопрос (насчет перенастройки) уже был, я пытался объяснить подробно на примере с созданием окна в архитектурном автокаде. Автоматически указывает точки программа (запускаемая вручную когда нужно), при этом программа не должна запускать команду с опциями, так как команда эта (команда черчения) уже запущена в самом первом пункте (точнее перед первым пунктом, до начала самого черчения) и продолжает работать без завершения, а ее опции задаются (точнее меняются на те, которые нужны) как раз при "перенастройке инструмента" (вручную). То есть программа должна именно указать точки и все. Последний раз редактировалось studentarh, 05.12.2012 в 17:36. |
|||
![]() |
|
||||
Регистрация: 06.05.2009
Сообщений: 18
|
Это как? Что Вы имеете ввиду? Если имеете ввиду, что существует формула перевода от заданной точки к точки примитива, так что Вас смущает. Что человек сделал, то человек завсегда и разломать может (С)
|
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
При создании некоторых объектов их положение автоматически уточняется в соответствии с положением существующих объектов, расположенных рядом с указанной точкой (например, то же окно привязывается к стене автоматически, даже если указать не на саму стену, а рядом с ней). Чтобы учесть это автоматическое уточнение, надо получать данные не только самого примитива, но и всех соседних, а формула расчета точки указания будет очень сложной (мне так кажется).
Последний раз редактировалось studentarh, 05.12.2012 в 18:19. |
|||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Действительно, соседние объекты наверное не нужны и уточнение тоже, я как-то не подумал. Но все-таки при работе разных инструментов будут разные формулы расчета. То есть придется понять принцип построения каждого объекта отдельно, затем это описать в программе и еще включить в программу функцию определения того, какой объект в данном случае создан (чтобы она выбрала нужный способ построения в зависимости от объекта). Ну это тоже, мне кажется, довольно сложно, и, главное, есть вероятность, что не все будет учтено, и в программе будут ошибки, которые сложно найти и устранить.
|
|||
![]() |
|
||||
studentarh,
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 22.07.2012
Сообщений: 14
|
Да я говорил, что надо конкретно, в самом первом сообщении. Мне пояснили, что это невозможно (только почему-то не сразу). Затем предложили другой вариант, который сложный, так что польза от самой программы не стоит работы над ней. Понял, что лучше этим делом не заниматься. Все.
Последний раз редактировалось studentarh, 06.12.2012 в 08:44. |
|||
![]() |
|
||||
Регистрация: 06.05.2009
Сообщений: 18
|
Вы так особенно ничего и не сказали. Программирование конечно делается некоторое время. Но то что Вы хотите делается легко и при чем несколько вариантов. Для того чтобы решить Вашу задачу напишите программку для прилагаемого примера из набора линии 1 сделать 4 2 - это укоротить одну линию 3 красные перенести и 4 красные повернуть на угол 30 градусов Многие из здесь присутствующих сделают это за пару часов. Вам понадобиться несколько суток, но выбирать вариант Вам. А если хотите пришел на работу шелкнул пальцами и сказал Чертеж, то это на 3 круга ада а не на приличные форумыф.
|
|||
![]() |
|
||||
Регистрация: 06.05.2010
Сургут
Сообщений: 248
|
Попытался представить чего автор хочет, вот подумал что инструмент в его понимании это некий объект который формируется с помощью программы например Лисп становится статическим блоком и его надо отредактировать с помощью того же лиспа, а чтоб его отредактировать нужны прежние введенные данные, о которых говорил автор.
|
|||
![]() |
|
||||
Ведущий архитектор Регистрация: 17.01.2013
Москва
Сообщений: 31
|
Понимаю, что рискую быть названным некропостером, но всё-же не вижу смысла создавать целую новую тему и спрошу здесь:
Есть ли возможность через макросы или lisp ввести еще раз уже введенную в команде точку именно в процессе выполнения команды ? Объясняю, зачем мне это нужно: Есть команда Rotate, она запрашивает базовую точку, потом опции [Copy][Reference] и при выборе референс - начальный и желаемый угол. Угол я задаю графически между направлениями линий, причем в 90% случаев первая линия начинается как раз с той базовой точки, что я выбирал в начале команды. То есть хотелось бы добиться поведения команды rotate, как в Архикаде, если кто в курсе (выделяем объект, нажимаем кнопку/хоткей команды Rotate - она уже по-умолчанию идет с опцией Reference и запрашивает опорный и конечный угол, выделяем точку вокруг которой крутить, далее - "тык" откуда крутить и "тык" куда - Всё !) По-идее, экономия всего в один клик, но очень назойливый.. Макросы предпочтительнее, но скорее всего через них это невыполнимо.. Даже через лисп - с ходу не понимаю, как получить данные о координатах этой уже введенной точки (точка введена, но никакого примитива она не построила и координаты нужно получить, находясь еще в действующей команде rotate). Предполагаю, что задача может быть решена средствами .NET, но это для меня пока совсем незнакомая среда.. Последний раз редактировалось mechos, 12.08.2013 в 19:04. Причина: грамматика ) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Я бы так не сказал. Можно это забить на кнопку
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Ведущий архитектор Регистрация: 17.01.2013
Москва
Сообщений: 31
|
Ну для меня разница еще и в том, что при работе на нескольких разных компьютерах, не объединенных сетью, надо следить не только за переносом cui файлов, но еще и не забывать держать на всех компах все актуальные *.lsp файлы, поэтому предпочитаю чтобы lsp файлов было как можно меньше..
|
|||
![]() |
|
||||
строительство Регистрация: 16.01.2004
Петербург
Сообщений: 165
![]() |
Привет.
Цитата:
1.Создаем Vlr-SysVar-reactor 2.Пишем функцию отклика на изменение переменной Lastpoint 3.Записываем в словарь или объект координаты точки (далее по желанию - можно добавить дату и время указания , хендл примитива (если он создан) и т.д.) Основной вопрос - А зачем это надо ![]() |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Пожалуйста, подскажите. Не могу врубиться.
Хочу чертить ломанную линию: (vl-cmdf "_.line") (vl-cmdf pause) В этот момент ожидается щелчок мышью. Делаю щелчок. Как определить координаты точки щелчка? Это необходимо для того, чтобы проверить привязку к другим примитивам и принятия решения - чертить или нет |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
(getvar "lastpoit"), кажется
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как получить координаты рамки text? | mamuk | Программирование | 21 | 22.08.2010 13:26 |
Как получить экранные координаты курсора | +Alex+ | Программирование | 12 | 07.07.2010 17:38 |
Как получить координаты точек отображенных на четеже в виде таблици?? | nix-- | AutoCAD | 10 | 22.05.2009 13:41 |
Ввод третьей координаты | Mazai | Программирование | 12 | 30.08.2008 20:50 |
координаты вершин выбранной полилинии на VB? как получить | ssv22 | Программирование | 5 | 17.07.2008 00:01 |