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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ActiveX Server возвратил ошибку: неизвестное имя: EffectiveName

ActiveX Server возвратил ошибку: неизвестное имя: EffectiveName

Ответ
Поиск в этой теме
Непрочитано 17.01.2018, 11:36 #1
ActiveX Server возвратил ошибку: неизвестное имя: EffectiveName
Doctor_Che
 
Регистрация: 27.10.2015
Сообщений: 18

Здравствуйте.

Пытаюсь использовать код взятый здесь на форуме http://forum.dwg.ru/showpost.php?p=1099760&postcount=6
Наткнулся на странное поведение. Если в файле есть автокадовская таблица, то появляется ошибка "неизвестное имя: EffectiveName". Если таблицу удалить, то всё работает замечательно.
Подскажите почему так и как можно это исправить.
Windows 8 64x. AutoCAD 2015 SP2

Код:
[Выделить все]
 (defun AnonymousInstancesof ( block / def rec nme ref lst )
;; Returns list of the Anonymous names taken by a Dynamic Block (if any)  -  Lee Mac 2011  -  www.lee-mac.com
;; edit VVA 2013.10.16
;; Arguments:  block  - name of Dynamic Block.
;; http://www.cadtutor.net/forum/showthread.php?56447-Automatically-filling-out-the-Drawing-Property-from-Titleblock-Information&p=382978&viewfull=1#post382978
;; http://forum.dwg.ru/showthread.php?t=99353  
  (while (setq def (tblnext "BLOCK" (null def)))
    (if (= 1 (logand 1 (cdr (assoc 70 def))))
      (progn
        (setq rec
          (entget
            (cdr
              (assoc 330
                (entget
                  (tblobjname "BLOCK" (setq nme (cdr (assoc 2 def))))
                )
              )
            )
          )
        )
        (while (setq ref (assoc 331 rec))
          (if
            (and
              (cdr ref) ;;;Add VVA 2013-10-16
              (entget (cdr ref)) ;;;Add VVA 2013-10-16
              (eq block (vla-get-effectivename (vlax-ename->vla-object (cdr ref))))
              (not (member nme lst))
            )
            (setq lst (cons nme lst))
          )
          (setq rec (cdr (member (assoc 331 rec) rec)))
        )
      )
    )
  )
  (reverse lst)
)

(print (AnonymousInstancesof "blockname"))
Просмотров: 2080
 
Непрочитано 17.01.2018, 11:52
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,961


видимо, пытается таблицу как блок обработать.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.01.2018, 12:16
#3
Doctor_Che


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
видимо, пытается таблицу как блок обработать.
А можно как-то это обойти?
Doctor_Che вне форума  
 
Непрочитано 17.01.2018, 12:37
1 | #4
Кулик Алексей aka kpblc
Moderator

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


Можно. Таблицы - фактически блоки с именами *T<> (т.е. начинаются с символа звездочки и потом буквы T). Размеры - тоже блоки *D<>.
Ну или vla-get-effectivename обернуть в vl-catch-*
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.01.2018, 14:52
#5
Doctor_Che


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


По совету с другого форума помогла добавка такой проверки:
Код:
[Выделить все]
 (vlax-property-available-p (vlax-ename->vla-object (cdr ref)) 'effectivename)
Doctor_Che вне форума  
 
Непрочитано 17.01.2018, 19:58
#6
Кулик Алексей aka kpblc
Moderator

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


В качестве мини-бонуса
Код:
[Выделить все]
 (defun _kpblc-get-ent-name (ent /)
                           ;|
*    Получение свойства name указанного примитива
*    Параметры вызова:
  ent  указатель на обрабатываемый примитив
    допускаются значения
    ename
    vla-object
|;
  (cond ((= (type ent) 'str) ent)
        ((_kpblc-property-get ent 'effectivename))
        ((_kpblc-property-get ent 'name))
        ) ;_ end of cond
  ) ;_ end of defun

(defun _kpblc-property-get (obj property / res) ;|
*    Получение значения свойства объекта
|;
  (vl-catch-all-apply
    (function
      (lambda ()
        (if (and obj (vlax-property-available-p obj property))
          (setq res (vlax-get-property obj property))
          ) ;_ end of if
        ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
  res
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ActiveX Server возвратил ошибку: неизвестное имя: EffectiveName

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
ActiveX. Получаю свойства и методы vlax-dump-object, но где всё это? fasadel Программирование 11 13.01.2015 18:39
ActiveX Server возвратил ошибку: Ошибка при загрузке библиотеки. Что делать? Jonas Программирование 8 14.10.2014 05:45
Разбираюсь с технологией ActiveX, помогите понять что делаю не так Shraybicus Программирование 3 17.12.2010 20:28
Есть ли альтернатива _REFEDIT через ActiveX? {Smirnoff} Программирование 11 23.07.2004 13:30