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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Извлечение данных атрибута, в 2015

Извлечение данных атрибута, в 2015

Ответ
Поиск в этой теме
Непрочитано 11.09.2015, 13:31 #1
Извлечение данных атрибута, в 2015
1234
 
Регистрация: 01.04.2008
Сообщений: 12

Приветствую.
Пользуюсь для вставки оборудования лиспом. В блоки информация в атрибуты заносится автоматически при вставке.
В конце лиспа вставляется текст, в поле которого заносятся данные из атрибута соответствующие номеру блока (для
последующей возможной перенумерации).

Со сменой работы пришлось пересесть за Автокад 2015.
Под рукой нет 2009 (на котором работал ранее), но на нем лисп работал замечательно.

При выполнении лиспа все работает нормально, только выноска с полем вместо номера блока выдается в виде ####.

Лисп этот делал несколько лет назад, используя ресурс dwg.ru.
Данные с атрибута выдергиваются с помощью функции Петра Лоскутова, которую позаимствовал тут же на форуме.
Тут эта функция слегка испорчена моими пробами разобраться в проблеме самостоятельно. ))

Код:
[Выделить все]
 
(defun ooo ( / ent TS arr result)
  (setq TS "NU")
  (setq ent (vlax-ename->vla-object (car (entsel))))
  (if (and (= :vlax-true (vla-get-HasAttributes ent)) 
           (< 0 (vlax-safearray-get-u-bound (setq arr (vlax-variant-value (vla-GetAttributes ent))) 1)) 
      ) 
    (mapcar (function (lambda (a)
			(cond ((= (vla-get-TagString a) TS)
			       (setq result (vla-get-ObjectId a)))
			      )	
                      ) 
            ) 
            (vlax-safearray->list arr) 
    ) 
    (princ "\n Либо не блок, либо нет аттрибутов") 
  )
  (setq result result)
  )
Для более наглядного кидаю файл с блоком, в котором вручную отредактировано поле.
Думаю что проблема заключается в том, что ObjectId атрибута в переменной result не соответсвует реальной ObjectId

ObjectId атрибута при просмотре поля %<\AcObjProp Object(%<\_ObjId 8796076396592>%).TextString>% - 8796076396592

ObjectId атрибута после выполнения лиспа - 56.

Вложения
Тип файла: dwg
DWG 2013
Блок.dwg (35.1 Кб, 641 просмотров)

Просмотров: 3555
 
Непрочитано 11.09.2015, 14:38
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


какая разрядность автокада?
gomer вне форума  
 
Автор темы   Непрочитано 11.09.2015, 14:55
#3
1234


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


Что то рука дрогнула. Автокад 2014. Винда 64 разрядная.
1234 вне форума  
 
Непрочитано 11.09.2015, 15:04
#4
Кулик Алексей aka kpblc
Moderator

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


А 2009 наверняка был 32-битный.
Цитата:
Сообщение от 1234 Посмотреть сообщение
проблема заключается в том, что ObjectId атрибута в переменной result не соответсвует реальной ObjectId
Скорее всего.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.09.2015, 15:30
1 | #5
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Можно попробовать использовать эту функцию: http://forum.dwg.ru/showpost.php?p=566244&postcount=8 вместо Vla-Get-ObjectId
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 11.09.2015, 16:03
1 | #6
Кулик Алексей aka kpblc
Moderator

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


В AutoCAD2015x64 vla-get-objectid32 уже не существует: http://autolisp.ru/2014/09/16/objectid_x32x64_cad2015/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.09.2015, 07:14
#7
1234


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Можно попробовать использовать эту функцию: http://forum.dwg.ru/showpost.php?p=566244&postcount=8 вместо Vla-Get-ObjectId
Спасибо все заработало.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В AutoCAD2015x64 vla-get-objectid32 уже не существует: http://autolisp.ru/2014/09/16/objectid_x32x64_cad2015/
Функции vla-objectidtoobject32 и vla-objectidtoobject с какой версии были введены?

Пользуюсь книгой Полещука-Лоскутова, но их там не нашел
и где почитать о вновь введенных и отмененных функциях, тк несколько лет не занимался лиспами и вылетел из обоймы.

Последний раз редактировалось 1234, 14.09.2015 в 07:32.
1234 вне форума  
 
Непрочитано 14.09.2015, 09:07
#8
Кулик Алексей aka kpblc
Moderator

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


Так это... acadinfo массу вещей показывает. Да и vlax-dump-object может многое рассказать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Извлечение данных атрибута, в 2015

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
SCAD Office 21.1. Обсуждение. Клименко Ярослав SCAD 633 03.10.2015 14:10
Как удалить сразу все ссылки на извлечение данных? mann AutoCAD 2 08.06.2013 15:03
Извлечение данных в AutuCADе и обратно, как? VENfas Программирование 6 27.09.2011 11:31
извлечение данных в AutoCAD 2008 versus1984 AutoCAD 10 27.03.2009 09:33