|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
[quote="Кулик Алексей aka kpblc"]
Цитата:
|
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Даже еще четче, моя мне нравится, а ADT - нет. Совсем я стал нескромный.. |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
[quote="Кулик Алексей aka kpblc"]
Цитата:
И все работает правильно. Только отмена несколько раз вхолостую выполняется.. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Поскольку проблема проявляется одинаково во всех, то и корни надо рубить в одном месте, а не в сотне. Я не предлагаю прислать мне файлы лиспов - работы слишком много, попросту не смогу посмотреть.
С другой стороны, программистов, которые намного сильнее меня, неимоверное количество. Если ты выложишь файлец сюда, я думаю, его достаточно быстро расковыряют и скажут, что и где неверно и как надо выкручиваться. Хотя кто его знает, как карта ляжет... Допустим, у тебя задача "нарисовать стену, с привязкой 180, общая ширина 330, материал бетон, точки начала и окончания задаются пользователем". Если идти по моему варианту, код будет примерно таков: Код:
Код:
Если понадобится отрисовывать по точкам предопределенным, или по трассе, делаешь отдельную функцию, с передачей либо точек, либо указателя на примитив трассы. От обработчика ошибок зачастую можно безболезненно достаточно отказаться, не прибегая к дополнительным ухищрениям. P.S. Можешь еще за компанию анализировать значение системной переменной ERRNO - только поможет ли оно, я не знаю. P.P.S. Чтобы функции не затирали друг друга, надо им давать осмысленные и достаточно уникальные имена. Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Не все осилил - извини. Главное в том, что в вызов обработчика ошибок (функцию *error*) в AutoCAD 2006 и 2007 (в 2008-ом не проверял) внесли ошибку, из-за которой обработка *error*, содержащие функции (comand ...) не выполняется или выполняется с ошибками. И ничего средствами lisp с этим не поделаешь. Это признанный разработчиками баг.
|
||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Хоть перестану лбом стену пробивать! Не удержусь от добрых теплых слов (здесь не приведенных, из-за нехватки места) в адрес разработчиов, они с одной стороны создали проблему, которую без command в *error* особо не решишь, а с другой - сделали невозможным использование command в error. И это в нескольких подряд версиях... Чтож, Автокад пока еще хорош тем. что позволяет решать одну и ту же проблему по разному. Поищем обходы.. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
"План здания без диалога не построить!" "У Полещука vl-catch-all-apply невнятно описана.. Но она типа не защитит от прерывания обработчик ошибок, а подменит его.." "...менять все программы - это неприемлемая трудоемкость и неприемлемое время" "...все работает правильно. Только..." "...моя мне нравится, а ADT - нет." Для решения всех проблем с ошибками, а также с отменами необходимо пользоваться современными функциями vl-catch-all-apply, vl-catch-all-error-p, vl-catch-all-error-message. И тогда до *error* дело вообще не дойдет, с ошибками или без них реализована она в Автокаде. Вот как реализована в ruCAD универсальная защита: Код:
Код:
Код:
Оберните места в коде, где пользователь может сделать попытку прерывания (особенно при вводе), правильно расставьте vla-startundomark и vla-endundomark. Не забывайте про существование ERRNO. Выносите из "программ" в библиотечные функции типовые действия, чтобы не менять "пару-тройку мегобайт программ". Но можно и "в обход". Дело хозяйское. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
К уже сказанному добавлю только то, что с появлением vl-cmdf о command надо забыть. Приличная часть проблем при этом просто исчезнет. Если код писался без использования некорректных приёмов, то можно сделать глобальную замену "command" -> "vl-cmdf" во всех исходниках (предварительно, конечно заархивировав их текущее состояние).
|
|||
![]() |
|
||||
Цитата:
PS. у меня маленький вопрос, в своих кодах я смог убрать вообще все "command" и "vl-cmdf" кроме одной ситуации, когда необходимо создать "SPATIAL_FILTER"... Другими словами, для создания в файле, первого контура подрезки блоков, мне приходится запускать команду "_.xclip", меня это напрягает, но разобраться я так и не смог. Если можете, помогите с алгоритмом. Еще раз поясню задачу, есть файл, в котором ни одного раза не использовалась команда "_.xclip", т.е. в файле нет словаря "SPATIAL" в словарях фильтров или вообще нет самого словаря "ACAD_FILTER". Создавать их возможно, только через entmakex, но я не смог понять всю последовательность и взаимосвязи, всех этих словарей. Вероятно, еще необходимо загрузить в автокад, какие то arx программы, но здесь я опять уперся в стену. ![]() |
||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Мы не используем *error* для анализа ошибок пользователя. У нас есть блок анализа ввода, который минимизирует возможность прерывания программы из-за ошибки, так что бессмысленно анализировать случаи, когда этот фильтр прорвался именно из-за неправильного ввода. Но остается ситуация, когда в ходе работы, выполнив несколько действий человек спохватился и отменяет команду. Начнется с того, что команда прервется. И потребуется действие Undo End если не использовать VLA эквивалент, с которым тоже не все ясно именно с точки зрения прерывания незакрытых отменных скобок. Чтож, я не спорю, м.б. для вас это хорошо и решает проблему, для нас, возможно, тоже хорошо.. Но по затратам не подходит, извините. Заметьте, я, - во первых, пытаюсь вас понять, - во вторых, аргументирую свое отношение к вашим доводам, - в третьих, не утверждаю, что вы ошибаетесь или заблуждаетесь, - в четвертых не абсолютизирую свой опыт |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
[quote="ShaggyDoc"]
Цитата:
Мы ехали по дороге, впереди длинная пробка и мы высматриваем объезд. Вы едете по другой дороге и, как бы оцениваете наши поиски объезда с точки зрения вашего маршрута. Вам так дальше. Правильно. Но и нам переместиться на вашу дорогу - ох как неблизко. И совсем бессмысленное дело - обсуждать чья дорога лучше и правильнее. Раз вы едете по своей - вы в ней уверены. И наоборот.. |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Пару - тройку, а лучше все, перечислите пожалуйста. Заранее благодарен. |
|||
![]() |
|
|||||
[quote="480725"]
Цитата:
Вот тебе пример вызова моей старенькой программки, по отрисовке часиков и еще одного лиспика, чтоб защитить выполняемую программу от остановки. Попробуй прервать выполнение программы, т.е. остановить показ часиков, раньше, чем пройдет 120 сек... Код:
|
|||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Т.к. другого пути нет. Часики попробую, но это опять решение, которое надо вписывать в каждую программу? Если идти таким путем, то проблем изначально нет. Кроме трудоемкости, в т.ч. проверок. Которая сейчас этот путь перечеркивает. |
|||
![]() |
|
||||
Цитата:
При условии, что вы не собираетесь править свои программы, ваша проблема не имеет решения на вашем уровне! PS. Под другим уровнем, я имел в виду, исправление ошибок в автокаде и адаптация автокада к вашим программам... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Можно подумать, я зря попросил в самом начале код показать. Еще раз повторяю - разговор беспредметный без пациента.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
|
|||
![]() |