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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops)

DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops)

Ответ
Поиск в этой теме
Непрочитано 27.12.2007, 16:48 #1
DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops)
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,990

Функции читают и возвращают свойства файла, установленные командой _dwgprops.

_dwgru-dwgprops-get-all-prop
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-get-all-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001.  Владимир Азарко   (VVA)
;;; ************************************************************************
(defun _dwgru-dwgprops-get-all-prop (Doc / si ret nc key value)
;;; Возвращает свойства файла, установленные командой _dwgprops
;;; Возвращается ассоциативный список, где ключом служит:
;;;      - для свойств, созданных пользователем (закладка ПРОЧИЕ)
;;;          ИМЯ СВОЙСТВА
;;;     - для стандартных свойств (закладка ДОКУМЕНТ)
;;;             Поле                  Ключ  
;;;             НАЗВАНИЕ           - *TITLE*
;;;             АВТОР              - *AUTHOR*
;;;             ТЕМА               - *SUBJECT*
;;;             КЛЮЧЕВЫЕ СЛОВА     - *KEYWORDS*
;;;             ЗАМЕТКИ            - *COMMENTS*
;;;             БАЗА ГИПЕРССЫЛКИ   - *HYPERLINK*
;;; Doc - указатель на обрабатываемый документ, nil - текущий

  ;|
;;; Пример
(_dwgru-dwgprops-get-all-prop nil) ;;;(("*AUTHOR*" "VVA") ("*COMMENTS*" "Заметка") ("*HYPERLINK*" "База")
                               ;;;("*KEYWORDS*" "Ключ") ("*TITLE*" "Назван") ("*SUBJECT*" "Тема") ("UNIQKEY" "Key"))
|;
  (and
    (or	Doc
	(setq Doc (vla-get-activeDocument (vlax-get-acad-object)))
    )
    (setq si (vla-get-SummaryInfo Doc))
    (setq ret (list
		(list "*AUTHOR*" (vla-get-author si))
		(list "*COMMENTS*" (vla-get-comments si))
		(list "*HYPERLINK*" (vla-get-HyperlinkBase si))
		(list "*KEYWORDS*" (vla-get-keywords si))
		(list "*TITLE*" (vla-get-Title si))
		(list "*SUBJECT*" (vla-get-Subject si))
	      )
    )
    (setq nc (vla-numcustominfo si))
    (while (> nc 0)
      (vla-GetCustomByIndex si (- nc 1) 'key 'value)
      (setq ret (append ret (list (list key value))))
      (setq nc (1- nc))
    )
    (vlax-release-object si)
  )
  ret
)
_dwgru-dwgprops-get-custom-prop
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-get-custom-prop
;;; *
;;; * 27/12/2007 Версия 0001.  Владимир Азарко   (VVA)
;;; ************************************************************************
 
(defun _dwgru-dwgprops-get-custom-prop (key Doc / app counter counter2 counter3 doc dwgprops k v)
;;; Возвращает значение свойства, созданного пользователем (команда _dwgprops)
;;; Возвращается ассоциативный список, где ключом служит:
;;;      - для свойств, созданных пользователем (закладка ПРОЧИЕ)
;;;    key - строка ИМЯ СВОЙСТВА (закладка ПРОЧИЕ)
;;;        - для стандартных свойств (закладка ДОКУМЕНТ)
;;;              Поле                  Ключ  
;;;             НАЗВАНИЕ           - *TITLE*
;;;             АВТОР              - *AUTHOR*
;;;             ТЕМА               - *SUBJECT*
;;;             КЛЮЧЕВЫЕ СЛОВА     - *KEYWORDS*
;;;             ЗАМЕТКИ            - *COMMENTS*
;;;             БАЗА ГИПЕРССЫЛКИ   - *HYPERLINK*
;;;
;;; Использует функцию библиотеки
;;;                 _dwgru-dwgprops-get-all-prop
;;;                 _dwgru-assoc  (_dwgru-assoc-multi)
 
;;; Doc - указатель на обрабатываемый документ, nil - текущий
 
 (cadr(_dwgru-assoc key (_dwgru-dwgprops-get-all-prop Doc)))
)
_dwgru-dwgprops-set-custom-prop
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-set-custom-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001.  Владимир Азарко   (VVA)
;;; ************************************************************************
(defun _dwgru-dwgprops-set-custom-prop (key value Doc / si)
;;;Создает в свойствах рисунка (команда _dwgprops закладка ПРОЧИЕ)
;;; Свойство с ключом key и значение value
;;; Если свойства не было, оно создается, иначе изменяется
;;;    key - строка ИМЯ СВОЙСТВА (закладка ПРОЧИЕ)
;;;    value - строка (string) - значение свойства  
;;; Использует функцию библиотеки
;;;                 _dwgru-dwgprops-get-custom-prop
;;; Doc - указатель на обрабатываемый документ, nil - текущий
;;; Возвращает - nil
  ;|
;;;Пример
(_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil)
|;
  (or Doc
      (setq Doc (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  (setq si (vla-Get-SummaryInfo Doc))
  (if (_dwgru-dwgprops-get-custom-prop key Doc)
    (progn
      (setq key (car (_dwgru-assoc key (_dwgru-dwgprops-get-all-prop Doc))))
      (vla-SetCustomByKey si key value)
    )
    (vla-AddCustomInfo si key value)
  )
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 10.10.2013 в 09:38. Причина: Вариант Maxwell #9
Просмотров: 24743
 
Непрочитано 27.12.2007, 16:56
#2
Кулик Алексей aka kpblc
Moderator

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


В качестве предложения (код рисовать уже некогда, может быть, завтра получится): внести дополнительный параметр указателя на обрабатываемый документ (nil -> обрабатывать текущий).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.12.2007, 17:29
#3
VVA

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


Согласен. Исправил в #1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.07.2008, 21:07
#4
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


VVA, а где можно взять функцию _dwgru-assoc?

Добавлено:
Она используется в _dwgru-dwgprops-get-custom-prop

Последний раз редактировалось Makswell, 22.07.2008 в 21:47.
Makswell вне форума  
 
Автор темы   Непрочитано 22.07.2008, 22:51
#5
VVA

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


Алексей где-то здесь выкладывал сборку DWGruLispLib. Сразу не нашел. Опубликую ф-ции здесь (пока)
Код:
[Выделить все]
(defun _dwgru-assoc-multi (key lst)
  (if (= (type key) 'str)
    (setq key (strcase key))
    ) ;_ end of if
  (vl-remove-if-not
    (function
      (lambda (a / b)
        (and (setq b (car a))
             (or (and (= (type b) 'str) (= (strcase b) key)) (equal b key))
             ) ;_ end of and
        ) ;_ end of lambda
      ) ;_ end of function
    lst
    ) ;_ end of vl-remove-if-not
  ) ;_ end of defun
(defun _dwgru-assoc (key lst)
  (car (_dwgru-assoc-multi key lst))
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.07.2008, 23:44
#6
Кулик Алексей aka kpblc
Moderator

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


Авторство Alaspher'a. Было в теме по преобразованию значения в список.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.07.2008, 11:48
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Ага, спасибо.
Makswell вне форума  
 
Непрочитано 23.07.2008, 14:09
#8
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


VVA, ещё вопрос. Зачем приводить имена свойств к верхнему регистру?

1. Имена свойств могут быть использованы в текстовых полях, а они (в смысле формулы для полей), как показала практика, чувствительны к регистру.

2. Вот пример (пустой файл с пустыми свойствами):
Из примера в тексте функции:
Цитата:
_$ (_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil)
nil
Поверяем:
Цитата:
$ (_dwgru-dwgprops-get-custom-prop "dwgru" nil)
"dwgru-dwgprops-set-custom-prop"
Пробуем изменить свойство "dwgru":
Цитата:
_$ (_dwgru-dwgprops-set-custom-prop "dwgru" "New_value" nil)
nil
Поверяем:
Цитата:
_$ (_dwgru-dwgprops-get-custom-prop "dwgru" nil)
"New_value"
Пробуем изменить свойство "dwgru", но записав его в верхнем регистре "DWGRU":
Цитата:
_$ (_dwgru-dwgprops-set-custom-prop "DWGRU" "New_value_1" nil)
; ошибка: Ошибка Automation. Ключ не найден
Вот так. А ведь аргументами _dwgru-dwgprops-set-custom-prop очень часто будут строки, взятые из списка, возвращаемого _dwgru-dwgprops-get-all-prop. А они всегда в верхнем регистре. Так что здесь надо что-то менять.

И вообще, нужна ли эта смена региста?
Makswell вне форума  
 
Непрочитано 23.07.2008, 15:57
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Вот мой вариант (красным отмечены изменения):

_dwgru-dwgprops-get-all-prop

Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-get-all-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001.  Владимир Азарко   (VVA)
;;; ************************************************************************
(defun _dwgru-dwgprops-get-all-prop (Doc / si ret nc key value)
;;; Возвращает свойства файла, установленные командой _dwgprops
;;; Возвращается ассоциативный список, где ключом служит:
;;;      - для свойств, созданных пользователем (закладка ПРОЧИЕ)
;;;          ИМЯ СВОЙСТВА
;;;     - для стандартных свойств (закладка ДОКУМЕНТ)
;;;             Поле                  Ключ  
;;;             НАЗВАНИЕ           - *TITLE*
;;;             АВТОР              - *AUTHOR*
;;;             ТЕМА               - *SUBJECT*
;;;             КЛЮЧЕВЫЕ СЛОВА     - *KEYWORDS*
;;;             ЗАМЕТКИ            - *COMMENTS*
;;;             БАЗА ГИПЕРССЫЛКИ   - *HYPERLINK*
;;; Doc - указатель на обрабатываемый документ, nil - текущий

  ;|
;;; Пример
(_dwgru-dwgprops-get-all-prop nil) ;;;(("*AUTHOR*" "VVA") ("*COMMENTS*" "Заметка") ("*HYPERLINK*" "База")
                               ;;;("*KEYWORDS*" "Ключ") ("*TITLE*" "Назван") ("*SUBJECT*" "Тема") ("UNIQKEY" "Key"))
|;
  (and
    (or	Doc
	(setq Doc (vla-get-activeDocument (vlax-get-acad-object)))
    )
    (setq si (vla-get-SummaryInfo Doc))
    (setq ret (list
		(list "*AUTHOR*" (vla-get-author si))
		(list "*COMMENTS*" (vla-get-comments si))
		(list "*HYPERLINK*" (vla-get-HyperlinkBase si))
		(list "*KEYWORDS*" (vla-get-keywords si))
		(list "*TITLE*" (vla-get-Title si))
		(list "*SUBJECT*" (vla-get-Subject si))
	      )
    )
    (setq nc (vla-numcustominfo si))
    (while (> nc 0)
      (vla-GetCustomByIndex si (- nc 1) 'key 'value)
      (setq ret (append ret (list (list key value))))
      (setq nc (1- nc))
    )
    (vlax-release-object si)
  )
  ret
)
_dwgru-dwgprops-set-custom-prop

Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-set-custom-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001.  Владимир Азарко   (VVA)
;;; ************************************************************************
(defun _dwgru-dwgprops-set-custom-prop (key value Doc / si)
;;;Создает в свойствах рисунка (команда _dwgprops закладка ПРОЧИЕ)
;;; Свойство с ключом key и значение value
;;; Если свойства не было, оно создается, иначе изменяется
;;;    key - строка ИМЯ СВОЙСТВА (закладка ПРОЧИЕ)
;;;    value - строка (string) - значение свойства  
;;; Использует функцию библиотеки
;;;                 _dwgru-dwgprops-get-custom-prop
;;; Doc - указатель на обрабатываемый документ, nil - текущий
;;; Возвращает - nil
  ;|
;;;Пример
(_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil)
|;
  (or Doc
      (setq Doc (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  (setq si (vla-Get-SummaryInfo Doc))
  (if (_dwgru-dwgprops-get-custom-prop key Doc)
    (progn
      (setq key (car (_dwgru-assoc key (_dwgru-dwgprops-get-all-prop Doc))))
      (vla-SetCustomByKey si key value)
    )
    (vla-AddCustomInfo si key value)
  )
)
Так будет работать независимо от регистра.

Последний раз редактировалось Makswell, 24.07.2008 в 08:30.
Makswell вне форума  
 
Автор темы   Непрочитано 23.07.2008, 16:52
#10
VVA

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


Может ты и прав. Что-то к вечеру голова уже не варит. Навскидку сразу и не скажу зачем приводил к верхнему регистру.
PS Тогда уж по оформи код по правилам. Я имею ввиду это
Цитата:
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007 DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-set-custom-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001. Владимир Азарко (VVA)
;;; ************************************************************************

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.07.2008 в 17:22.
VVA вне форума  
 
Непрочитано 24.07.2008, 08:36
#11
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


ок.
Добавил комментарии в кодах в посте №9.

ЗЫ Кстати, а есть уже где-нибудь официально озвученные правила оформления и изменения библиотечных функций?
Нашел, например, вот это:
http://dwg.ru/f/showpost.php?p=195747&postcount=6
Но дальше дисскуссия не пошла...
Makswell вне форума  
 
Автор темы   Непрочитано 14.12.2009, 13:14
1 | 1 #12
VVA

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


Пример отсюда
PropSAVE - Сохраняет свойства чертежа в глобальной переменной в одном рисунке
PropRestore - Восстанавливает свойства чертежа из глобальной переменной в другом
Код:
[Выделить все]
(defun C:PropSAVE()
  (vl-load-com)
  (setq DWGPROP (_dwgru-dwgprops-get-all-prop nil))
  (VL-PROPAGATE 'DWGPROP)
  (terpri)(princ DWGPROP)
  (princ)
  )
(defun C:PropRestore ( / doc si )
    (vl-load-com)
   (or Doc
    (setq Doc (vla-get-activeDocument (vlax-get-acad-object)))
    )
(setq si (vla-get-SummaryInfo Doc))
(foreach item DWGPROP
  (cond ((= (car item) "*AUTHOR*")
         (vla-put-author si (vl-princ-to-string(cadr item)))
         )
        ((= (car item) "*COMMENTS*")
         (vla-put-comments si (vl-princ-to-string(cadr item)))
         )
        ((= (car item) "*HYPERLINK*")
         (vla-put-HyperlinkBase si (vl-princ-to-string(cadr item)))
         )
        ((= (car item) "*KEYWORDS*")
         (vla-put-Keywords si (vl-princ-to-string(cadr item)))
         )
        ((= (car item) "*TITLE*")
         (vla-put-title si (vl-princ-to-string(cadr item)))
         )
        ((= (car item) "*SUBJECT*")
         (vla-put-Subject si (vl-princ-to-string(cadr item)))
         )
        (t
         (_dwgru-dwgprops-set-custom-prop
           (vl-princ-to-string(car item))
           (vl-princ-to-string(cadr item))
           nil)
         )
        )
  )
 (princ "\nRestore properties:\n")
 (princ DWGPROP)
 (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 10.10.2013 в 09:47. Причина: Добавил печать значений свойств
VVA вне форума  
 
Непрочитано 03.10.2013, 08:06
#13
Никита Ремизов


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


Подскажите пожалуйста как собрать все эти функции воедино, чтобы можно было создавать редактировать/свойство чертежа? Может быть где-то есть пример готового лиспа?
Никита Ремизов вне форума  
 
Автор темы   Непрочитано 05.10.2013, 21:34
1 | #14
VVA

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


Цитата:
Сообщение от Никита Ремизов Посмотреть сообщение
чтобы можно было создавать редактировать/свойство чертежа?
Собирать ничего не нужно
Цитата:
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007 DWGru Programmers Group
;;; *
;;; * _dwgru-dwgprops-set-custom-prop
;;; *
;;; * 23/07/2008 Версия 0002. Makswell
;;; * 27/12/2007 Версия 0001. Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-dwgprops-set-custom-prop (key value Doc / si)
;;;Создает в свойствах рисунка (команда _dwgprops закладка ПРОЧИЕ)
;;; Свойство с ключом key и значение value
;;; Если свойства не было, оно создается, иначе изменяется
Цитата:
Сообщение от Никита Ремизов Посмотреть сообщение
Может быть где-то есть пример готового лиспа?
Код:
[Выделить все]
;;;Пример
(_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil)
Цитата:
Сообщение от Makswell Посмотреть сообщение
2. Вот пример (пустой файл с пустыми свойствами):
Из примера в тексте функции:
Цитата:
_$ (_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil)
nil
Поверяем:
Цитата:
$ (_dwgru-dwgprops-get-custom-prop "dwgru" nil)
"dwgru-dwgprops-set-custom-prop"
Пробуем изменить свойство "dwgru":
Цитата:
_$ (_dwgru-dwgprops-set-custom-prop "dwgru" "New_value" nil)
nil
Поверяем:
Цитата:
_$ (_dwgru-dwgprops-get-custom-prop "dwgru" nil)
"New_value"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 10.10.2013, 09:51
#15
VVA

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


Обновил коды в #1 и #12. Добавил печать значений кода
пробуй снова

Цитата:
И может заодно подскажете на примере, как в любом документе создать custom property, а если оно уже существует, то отредактировать его значение. Я был бы очень признателен
Создаем свойство с именем Remizov и значением "Никита Ремизов"
Код:
[Выделить все]
(_dwgru-dwgprops-set-custom-prop "Remizov" "Никита Ремизов" nil)
Меняем значение свойства Remizov на "Владимир Азарко"
Код:
[Выделить все]
(_dwgru-dwgprops-set-custom-prop "Remizov" "Владимир Азарко" nil)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.12.2013, 10:04
1 | 1 #16
Никита Ремизов


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


Не подскажите как скопировать все свойства из вкладки прочие из одного файла в другой или несколько других? Раньше где-то попадалось решение, сейчас не могу разыскать
Никита Ремизов вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DwgRuLispLib: Функции работы со строками VVA Библиотека функций 8 31.05.2012 14:19