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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Чтение данных ACAD_PROXY_ENTITY

Чтение данных ACAD_PROXY_ENTITY

Ответ
Поиск в этой теме
Непрочитано 02.07.2019, 08:00 #1
Чтение данных ACAD_PROXY_ENTITY
kserg
 
Регистрация: 22.04.2004
Сообщений: 269

Здравствуйте.
Помогите пожалуйста извлечь (прочитать) с помощью LISP-а данные объектов типа ACAD_PROXY_ENTITY (при отсутствии объектной поддержки соответствующего приложения) на примере прилагаемого файла.
У самого - не получается.
Стоит задача создания набора подобных объектов в текущей вкладке. Понятно, что придется делать это через ssget, отфильтровав затем из набора нужное.
Требуется информация (любого объекта типа ACAD_PROXY_ENTITY) такого типа:
- Имя DXF: SPDSFORMAT
- Имя класса: mcsDbObjectFormat
- Имя приложения: SPDSGraphiCS
- Product: СПДС GraphiCS
Т.е. та, которую Autocad выдает с помощью команды СПИСОК (LIST).

Спасибо !!!!

Вложения
Тип файла: dwg
DWG 2004
spds format.dwg (86.2 Кб, 29 просмотров)


Последний раз редактировалось kserg, 02.07.2019 в 08:12.
Просмотров: 2852
 
Непрочитано 02.07.2019, 12:00
#2
Do$

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


Боюсь, что через LISP это нереально. Нужных данных нет ни в DXF, ни в ActiveX. Нужен либо ObjectARX, либо .NET. ARXDBG и MGDDBG видят эти данные. Как вариант: можно написать небольшую dll, которая будет добавлять LISP-функцию по извлечению этих данных из прокси-объекта.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 02.07.2019, 12:36
#3
Сергей812


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Нужных данных нет ни в DXF
глубоко не вникал, но группа 91 и группа 2 - до них из лиспа не достучаться?
Сергей812 вне форума  
 
Непрочитано 02.07.2019, 12:41
#4
Кулик Алексей aka kpblc
Moderator

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


По-моему, они становятся доступными при наличии ObjectEnabler'a:
Код:
[Выделить все]
 (entget ent '("*"))
'((-1 . <entity name: 8a2d4f0>)
  (0 . "ACAD_PROXY_ENTITY")
  (330 . <entity name: 8a2e140>)
  (5 . "DE4F")
  (100 . "AcDbEntity")
  (67 . 1)
  (410 . "ВЫПУСК")
  (8 . "КЖ_Выноски")
  (62 . 2)
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.07.2019, 13:32
#5
kserg


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


... Мдааааааааа, не хотелось бы задействовать команду СПИСОК (LIST)... для извлечения данных. Когда-то где-то читал о том, что можно сообщения команд выводить в текстовый файл (есть для этого какая-то сист.переменная), который и можно анализировать, но это, думается будет "не красиво"...
kserg вне форума  
 
Непрочитано 02.07.2019, 13:32
#6
Кулик Алексей aka kpblc
Moderator

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


logfilemode, logfilepath
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.07.2019, 13:33
#7
kserg


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


"написать dll"... НЕт, не смогём. Знакомы лишь в какой-то мере с LISP.

----- добавлено через ~1 мин. -----
> Кулик Алексей aka kpblc

Спасибо, помогли быстрее вспомнить...
kserg вне форума  
 
Непрочитано 02.07.2019, 15:05
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Как вариант прочитать лог файл после команды _LIST см QAFLAGS=2
Функции
Код:
[Выделить все]
(defun _read-log-file ( /  file fl str lst )
  (VL-LOAD-COM)
  (setq file (getvar "LOGFILENAME"))
  (setq fl (open file "r"))
  (while (setq str (READ-LINE fl))
    (setq str (strcase str))
    (cond
      ((VL-STRING-SEARCH "DXF:" str)
       (setq lst (cons (list "DXF" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      ((VL-STRING-SEARCH "КЛАССА:" str)
       (setq lst (cons (list "CLASS" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      ((VL-STRING-SEARCH "ПРИЛОЖЕНИЯ:" str)
       (setq lst (cons (list "PROGNAME" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      ((VL-STRING-SEARCH "PRODUCT:" str)
       (setq lst (cons (list "PRODUCT" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      ((VL-STRING-SEARCH "COMPANY:" str)
       (setq lst (cons (list "COMPANY" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      ((VL-STRING-SEARCH "COMPANY:" str)
       (setq lst (cons (list "COMPANY" (cadr(mapcar '(lambda(x)(VL-STRING-TRIM "\n " x))(str-str-lst str ":")))) lst))
       )
      (t nil)
      )
    )
  (close fl)
  (reverse lst)
  )
     ;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.caduser.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
    (defun str-str-lst (str pat / i)
      (cond ((= str "") nil)
            ((setq i (vl-string-search pat str))
             (cons (substr str 1 i)
                   (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
             ) ;_  cons
            )
            (t (list str))
      ) ;_  cond
    ) ;_  defun
Пример использования
Код:
[Выделить все]
;;; https://forum.dwg.ru/showthread.php?p=268819#post268819
;;;https://forum.dwg.ru/showthread.php?t=153443
(VL-LOAD-COM)
;;;(setq el (car(entsel "Выберите объект")))
(if (setq ss (ssget "_X" (list(cons 0 "ACAD_PROXY_ENTITY"))))
  (progn
     (command "_LOGFILEON")
     (setq qf (getvar "QAFLAGS"))
     (setvar "QAFLAGS" 2)
    (foreach el (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
      (command "_LIST" el "")
      )
    (command "_LOGFILEOFF")
    (setvar "QAFLAGS" qf)
    (setq lst (_read-log-file)) ;_В переменной LST - ассоциативный список
    )
  )
----- добавлено через ~1 мин. -----
Итог
Цитата:
Команда: !lst
(("DXF" "SPDSFORMAT") ("CLASS" "MCSDBOBJECTFORMAT") ("PROGNAME" "SPDSGRAPHICS") ("PRODUCT" "СПДС GRAPHICS") ("COMPANY" "СИСОФТ ДЕВЕЛОПМЕНТ"))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.07.2019 в 16:50.
VVA вне форума  
 
Автор темы   Непрочитано 02.07.2019, 16:12
#9
kserg


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


Спасибо.
kserg вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Чтение данных ACAD_PROXY_ENTITY

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Чтение данных и свойств из Excel Massaraksh LISP 2 15.02.2019 08:38
SCAD Office 21.1. Обсуждение. Клименко Ярослав SCAD 633 03.10.2015 14:10
Чтение расширенных данных в Delphi remlin Программирование 2 07.07.2008 17:52
чтение данных из файла Александер Программирование 6 08.09.2005 10:24