Как заставить LISP пропустить ошибку при считывании атрибута примитива?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как заставить LISP пропустить ошибку при считывании атрибута примитива?

Как заставить LISP пропустить ошибку при считывании атрибута примитива?

Ответ
Поиск в этой теме
Непрочитано 15.10.2012, 13:20 #1
Как заставить LISP пропустить ошибку при считывании атрибута примитива?
Xara
 
Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135

Все доброго времени суток!
Такая проблема - в полилинии может быть поле GLOBAL WIDTH, а может и не быть, и в случае, если ее нет (например, в случае, если по концам линии заданы две разные толщины), лисп выдает ошибку:
; error: Automation Error. Invalid input
Код такой:
Код:
[Выделить все]
 (while (> len$lineset 0)
	(setq ent$get (entget (ssname our$lineset (setq len$lineset (1- len$lineset))))
	      our$get (Vlax-EName->Vla-Object (cdr (assoc -1 ent$get))))
	(if (vlax-property-available-p our$get "Length")
	  (setq len$len (vla-get-Length our$get))
	  (setq len$len (vla-get-Arclength our$get))
	  )
	(if (vlax-property-available-p our$get "ConstantWidth")
	  (setq glob$w (vla-get-ConstantWidth our$get)))
	(setq all$items (append all$items (list len$len glob$w))
	      glob$w 0)
	)
Как вшить функцию vlax-get-property в vl-catch-all-apply - я не знаю, он либо не считывает ничего, либо ругается...

Помогите пожалуйста разобраться, как заставить лисп записывать значение 0, если поле GLOBAL WIDTH есть, но пустое?
__________________
Боишься - не делай. Делаешь - не бойся.
Просмотров: 1259
 
Непрочитано 15.10.2012, 13:32
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Например так
Код:
[Выделить все]
;;;Задать глобальную ширину полилинии 0
(_dwgru-ent-modify (car(entsel "\nSelect polyline: ")) 43 0)
Библиотечные функции смотри здесь DwgRuLispLib: Модификация ename-представлений примитивов и DwgRuLispLib: Преобразование указателя на примитив в ename
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.10.2012, 13:46
#3
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


А программно?
Суть в том, что лисп сам выплевывает ошибку, когда выходит из куска (vla-get-ConstantWidth our$get)
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 15.10.2012, 13:50
1 | #4
Кулик Алексей aka kpblc
Moderator

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


Куда уж программней-то... Ну ладно, лови:
Код:
[Выделить все]
 (if (not (vl-catch-all-error-p
           (vl-catch-all-apply
             (function
               (lambda ()
                 (vla-get-constantwidth our$get)
                 ) ;_ end of lambda
               ) ;_ end of function
             ) ;_ end of vl-catch-all-apply
           ) ;_ end of vl-catch-all-error-p
         ) ;_ end of not
          ; ....
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.10.2012, 15:45
#5
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Алексей, спасибо тебе большое! Теперь работает!
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как заставить LISP пропустить ошибку при считывании атрибута примитива?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Lisp. Как выбрать три последних не удаленных примитива на чертеже используя ent* Yura Agafonov LISP 17 27.06.2012 01:25
LISP. Как сохранить имя примитива при смене сеанса AutoCADa Main Urod LISP 3 14.01.2011 10:56
Lisp показывает ошибку Плохо сформированный список на входе BBLainer LISP 20 27.04.2010 18:40