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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла

Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла

Ответ
Поиск в этой теме
Непрочитано 02.05.2011, 17:29 #1
Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла
молодой человек
 
Регистрация: 14.11.2007
Сообщений: 159

Код:
[Выделить все]
 
;;;------------Копирование нужного элемента словаря из файла-библиотека в текущий чертёж-----------------------------------------------------------------------------------
;;; (сopy-dictionary "Библиотека.dwg" "AEC_STRUCTURALMEMBER_STYLES" "[14")
;;;(сopy-dictionary "Библиотека.dwg" "ACAD_MLEADERSTYLE" "Мой")- копирует стиль выноски из файла
;;; DwgName- имя файла библиотеки
;;; dictName- название словаря, из которого копируем стиль (NAMEDOBJDICT)-список всех стилей
;;; style- название копируемого стиля
;;;Если удачно- выводит Т, если нет такого стиля или нет такого файла - nil
(defun сopy-dictionary (DwgName dictName style / *acad* dicts dbxDoc Dwg_path indication res item )
  ;;;  Указатель в текущем документе на словари
  (setq *acad* (vlax-get-acad-object)
        dicts  (vla-get-Dictionaries (vla-get-ActiveDocument *acad*))
  )
(defun kpblc-odbx (/)

  (defun *error* (msg)
    (vlax-release-object svr)
    (setq svr nil)
    (princ msg)
    (princ)
  ) ;_ end of defun

      (defun _kpblc-acad-version ()
                             ;|
      *    Возвращает номер сборки AutoCAD'a. Для 2005 вернет 16.1, для 2006 - 16.2
      |;
        (atof (getvar "acadver"))
      ) ;_ end of defun
    (cond
      ((< (_kpblc-acad-version) 15.06)
       (alert
         "ObjectDBX method not applicable\nin this AutoCAD version"
         ) ;_ end of KPBLC-MSG-ALERT
       nil
       )
      ((= (fix (_kpblc-acad-version)) 15)
       (if (not (vl-registry-read
                  "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
                  ) ;_ end of vl-registry-read
                ) ;_ end of not
         (startapp "regsvr32.exe"
                   (strcat "/s \"" (findfile "axdb15.dll") "\"")
                   ) ;_ end of startapp
         ) ;_ end of if
       (vla-getinterfaceobject
         (vlax-get-acad-object)
         "ObjectDBX.AxDbDocument"
         ) ;_ end of vla-getinterfaceobject
       )
      (t
       (vla-getinterfaceobject
         (vlax-get-acad-object)
         (strcat "ObjectDBX.AxDbDocument."
                 (vl-princ-to-string
                   (fix (_kpblc-acad-version))
                   ) ;_ end of vl-princ-to-string
                 ) ;_ end of strcat
         ) ;_ end of vla-getinterfaceobject
       )
    ) ;_ end of cond
  )
  (setq svr (kpblc-odbx))
  (if (setq Dwg_path (findfile DwgName))
    (progn
      (vla-open svr Dwg_path)
        ;;;  Получаем указатель на искомый словарь в открываемом документе
      (setq indication       (vla-item (vla-get-dictionaries svr) dictName)
            indication_style (VL-CATCH-ALL-APPLY '(LAMBDA (a b) (vla-item (eval a) (eval b))) '(indication style))
            err              (vl-catch-all-error-p indication_style)
      )
      (if (/= err t)
	(progn
          (setq tmp (vlax-safearray-fill
	              (vlax-make-safearray
		        vlax-vbobject
		          (cons 0 (1- (length (list indication_style))))
	              )
	              (reverse (list indication_style))
	            )
          )
          (vla-CopyObjects
            svr
            tmp
            (vla-item dicts dictName)
          )
          (vlax-release-object svr)
          (setq svr nil)
	  t
	)
	(progn
	  (princ (strcat "\nВ базе не обнаружен профиль- " style"\n""Добавьте " style " в базу!\n" ))
	  nil
	)
      )
    )
    (progn
      (princ (strcat "\nФайл- " DwgName " не найден!"))
      nil
    )
  )  
);defun сopy-dictionary
Но потом почему-то я ничего не могу сделать со скопированном стилем. Такое впечатление, что что-то недокопировалось.
Может кто-то сталкивался с подобной проблемой? Может есть другой способ подгружать нужный стиль из файла?
Просмотров: 2258
 
Непрочитано 02.05.2011, 22:56
#2
Кулик Алексей aka kpblc
Moderator

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


Насколько я помню свои попытки решения подобных задач, копирования одного лишь стиля стены мало. Надо дополнительно еще копировать как минимум стили экранных представлений. А если учитывается вариант версий, то тут вообще - тушите свет, сливайте воду.
В результате я либо тупо вставлял как блок файл с описанием стиля, либо нормально настраивал палитры. Второй вариант оказался более предпочтительным.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Проблема после копирование стиля несущего элемента (ADT) из файла

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование из одного файла в другой - проблема!!! Андрей Рябков AutoCAD 1 15.11.2009 14:20
проблема экспорта файлов по IFC из ADT в лиру и ревит thygank Revit 1 03.08.2008 18:08