|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Регистрация: 11.10.2010
Сообщений: 980
|
Frigate, просто я предпочитаю сначала объявлять локальные функции, а потом уже основной код. Если код достаточно длинный и функций много, можно легко запутаться.
Ничего не нужно посылать. Выполняется отмена выполненных действий - и все.
__________________
(/= RegDate StartReadDate) |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
ESC не предназначена для отмены каких-то ранее выполненных действий! Для этого должна быть или специальная кнопка (опция), или надо, в стиле штатных команд, давать возможность использовать UNDO/REDO. Вот тут программист и должен позаботиться об расстановке меток для отката. Цитата:
Современные программы работают не последовательно, а "параллельно". Программа, в стиле AutoCAD, имеет всякие опции. Одной из опций может быть "действие по умолчанию", т.е. нажатие Enter (пустой ввод). Таким действием может быть и выход. Может быть и ESC, но не в момент ввода, а в момент ожидания чего-то. Т.е. само нажатие ESC не надо запрещать, а разрушение программы предотвращать надо. Примерно как для выключения компьютера надо закрывать Windows, а не выдергивать шнур из розетки. |
|||
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
так и я о том же - что *error* в таких ситуациях, как я описал, ничем особо не хуже, чем эти три новые функции. Едингственное, чем новые функции лучше (хорошо подумав) - в случае с vl-catch можно заранее понять, какие действия отменять, а в случае с *error* - нужно сначала проверять, стоит ли отменять энное действие. Напр., нужно проверить, имеется ли полилиния, которая создается в процессе выполнения программы. Если имеется - удаляем. В общем в этом есть определенное преимущество функций vl-catch. Может именно поэтом их так любят спецы ЛИСПа? ShaggyDoc, сказано более чекм убедительно. Думаю, одну из следующих программ попробую написать с применением vl-catch. Еще одна причина моего "недорастания" до этих новомодных функций - использовал функцию Алексея (КРЫС), переделал немного под себя, но vl-catch оставил. В нескольких местах накосячил с кодом. Но где - не смог понять, пока не убрал все vl-catch. Т.е. возможно vl-catch и можно использовать, но обязательно с возможностью вывода сообщения о том, какая ошибка произошла. Собственно, пример Вы дали на предыдущей странице. Буду разбираться Последний раз редактировалось Frigate, 12.01.2011 в 12:53. |
|||
|
||||
Регистрация: 10.12.2010
Сообщений: 5
|
Уважаемые!!!, добрый день.
Нужна помощь, запарился ужо... Задача.. Запускаю ABC.lsp , открывается вторая сессия acad, выполняется произвольная ф-я, сессия закрывается. 1. Как программно сделать активным окно второй сессии acad. 2. Как запустить мою функцию во второй сессии 3. Как из .lsp выделить все объекты на чертеже (vla-activate docdwg); до этой ф-ии все отлично работает, вторая сессия открыта (vla-sendcommand docdwg (defun cod (cd obj))...) ; эта ф-я не хочет выполнять мою ф-ю, просто игнорирует, что-то делаю не так.. Надеюсь на вашу помощь. Заранее благодарен |
|||
|
||||
Регистрация: 11.10.2010
Сообщений: 980
|
Iogan, lisp может выполняться только в активном документе, из которого он и был запущен. При смене фокуса (то есть смене активного документа) выполнения лиспа приостанавливается до возврата в исходный файл.
__________________
(/= RegDate StartReadDate) |
|||
|
||||
Регистрация: 10.12.2010
Сообщений: 5
|
Лиспер, спасибо за быстрый ответ
Собственно дело в следующем во второй сессии выполняются простейшии ф-ии (вставка текста "strcat", нарисовать что нибудь и т.д.) но вот выполнять мою ф-ю написанную ранее и прекрасно работающую (подсчет количества блоков и их автоматическую нумерацию) не желает. Я хочу следующее - из командного файла (первой сессии) выполнить операции над блоками в других файлах .dwg и получить конечный результат в основном документе. Вот такая закавыка... |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
при вводе точки тоже можно пользоваться безопасными фунциями - это фунции, возвращающие nil по ошибке (esc) Например: Код:
|
|||
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
gomer,
я диалоговые окна привел просто как пример - считаю, если возможно, надор пользователю обеспечить возможностьвыхода из программы при вводе данных не только "штатным вызходом проги", но и по ESC. Код где-то на caduser видел. У меня сейчас еще один вопрос стоит: как через объектную модель можно обновить поля в блоке? (если вообще это реально) см. тему http://forum.dwg.ru/showthread.php?p=604338#post604338 Просто Если делать обновление полей блока командными методами через sendcommand, то по завершении работы callback-функции исчезает выделение самого блока. А нужно, чтобы оно не исчезало. Вернуть выделение через setfirst тоже не удалось... Прошу помочИ 2 Алексей (КРЫС) и всем кажется я выявил глюк блоков в автокаде. Сейчас я понял, как они создаются :-) Это касается ЛЮБЫХ динамическийх блоков с атрибутами! Итак: имеем динблок с атрибутом. Заходим в свойства атрибута (_eattedit) и меняем степень растяжения текста. После этого пошевелим любое из динсвойств блока (видимость, выбор, линейное растяжение - у меня при любом варианте глюк возникает). Далее копируем блок и вставляе (Ctrl+C / Ctrl+V). Степень растяжения вернулась к исходной для блока. Затем копируем этот блок. Да, через _copy или кп все копируется без глюка. Причем ТО ЖЕ САМОЕ происходит с любыми свойствами блока, кроме динамических - те то хорошо копируются ))) Шрифт например может так же слететь, толщина... Вывод - копировать через _copy (НЕ через буфер). А лучше всего вставлять блок только программно, с уже внесенными изменениями в свойства атрибутов типа текстового стиля, толщины линий блока и тп Последний раз редактировалось Frigate, 14.01.2011 в 10:13. |
|||
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Cтолкнулся с проблемой - часть будущих пользователей работает в однодокументном режиме автокада (SDI равна "1"). А у меня обмен между документами сделан через "внедокументные переменные". Но эти переменные видны только в одном приложении автокада. Есть ли какая возможность обмениваться информацией между такими вот отдельно запущеннымы файлами автокада (каждый в своем приложении)?
|
|||
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Лиспер,
значит другого пути нет. Ладно, пока сделаю примечание в справке, в каком режиме надо работать с моими командами (вернее, всего лишь с двумя пока, которые отвечают за запись и чтение внедокументной переменной). А потом уже буду создавать временный файлик. |
|||
|
||||
Регистрация: 19.01.2011
Сообщений: 6
|
Где можно взять описание этих самых команд?
Пролистал несколько книг по лиспу (по оглавлениям прошелся) во всех подразумевается, что я эти команды уже знаю. _line _arc _circle я еще понял как делать, а вот на _spline застрял. И размеры как описывать не совсем понятно. (у меня сейчас 2007 AutoCAD стоит). |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
В.Свет, "Язык макрокоманд и создание кнопок". Есть в местном Download,
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.01.2011
Сообщений: 6
|
Читать начал но это не то что мне нужно.
Я лучше напишу, что сделать пытаюсь, а то похоже я вопрос не правильно задаю. Сделал я программку (в VB) я в нее закидываю координаты XY, а она создает .lsp файл в котором такой текст Цитата:
И еще вопрос. В одной из книг было написано, что при появлении в AutoCADе новых команд, старые сохраняют. И в той же книге была описана команда _dimradial. Вот только AutoCAD говорит, что такой команды не знает. Может у меня отключено что-то? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
1. Не обрабатываются привязки
2. Что в команде делает неинициализированная переменная _enter? Нажатие Enter эмулируется двойными кавычками. 3. Кто-то мешает использовать нормальную объектную модель? И методы типа AddLine, AddSpline?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
А разве кто-то заставляет использовать именно command? Если написано внешнее приложение, то можно сделать наподобие:
Код:
P.S. Код пишу без проверки и "насухую".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |