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

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

Вставка листа из шаблона

Ответ
Поиск в этой теме
Непрочитано 15.09.2006, 11:10 #1
Вставка листа из шаблона
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,202

Намедни решил сделать кнопочку для вставки листа из шаблона, однако не получается как хочу:
Код:
[Выделить все]
(VL-CMDF "_.LAYOUT" "_T" "shablon.dwg")
не появляется окно диалога выбора листа, весь диалог через ком. строку. Как окошко можно вытянуть?
__________________
apel.fas
Просмотров: 4490
 
Непрочитано 15.09.2006, 11:29
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(VL-CMDF "_.LAYOUT" "_T" "~")
VVA вне форума  
 
Автор темы   Непрочитано 15.09.2006, 11:34
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


VVA
тильда стоит вместо имени файла, по идее будет диалог выбора файла, а мне нужен диалог выбора листа. Кстати если тильду поставить вместо листа, то добавятся все листы из шаблона, но все мне не нужны, нужен выбор.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 15.09.2006, 12:01
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Получилось через одно место.
Код:
[Выделить все]
(setvar "filedia" 0)
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "_.LAYOUT _T shablon.dwg\n")
Надо только отлавливать, чтобы вернуть filedia назад.
VVA вне форума  
 
Автор темы   Непрочитано 15.09.2006, 12:50
#5
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Гм..., засада , однако

Код:
[Выделить все]
(defun temp ( templ_path / )
  (setvar "FILEDIA" 0)
   (vla-sendcommand
    (APEL-ACTIVE_DOCUMENT)
    (strcat "_.LAYOUT _T " templ_path "\n")
  )
  (setvar "FILEDIA" 1)
)
вот так не работает
Код:
[Выделить все]
(temp "shablon.dwg")
то есть, если filedia заранее выставить в 0, то все нормально, а через функцию - облом
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 15.09.2006, 13:14
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Так я не зря написал

1. Получилось через одно место
2. Надо только отлавливать, чтобы вернуть filedia назад


Наверное реактор на завершение команды
VVA вне форума  
 
Непрочитано 15.09.2006, 13:22
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Удалось обмануть гада. Пришлось еще глубже залезть в одно место
Код:
[Выделить все]
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object))
 "_.LAYOUT '_.SETVAR FILEDIA 0 _T shablon.dwg\n'_.SETVAR FILEDIA 1\n")
[sm155]
VVA вне форума  
 
Непрочитано 15.09.2006, 13:30
#8
Кулик Алексей aka kpblc
Moderator

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


Извини, но на все сразу у меня шансов нуль (да вдобавок что-то ошибки рисуются, разбираться просто некогда). Спробуй добить такое:
Код:
[Выделить все]
(defun _kpblc-dir-path-and-splash (path)
  (strcat (vl-string-right-trim "\\" path) "\\")
  ) ;_ end of defun

;|=============================================================================
*    функция возвращает интерфейс IAxDbDocument (для работы с файлами DWG без
* их открытия). Если интерфейс не поддерживается, возвращает nil. Проверено
* на ACAD 2002, 2004, 2005, 2006
*    Автор - Fatty aka Олег jr. Моего только адаптация под общую систему и
* переименование
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-odbx)
=============================================================================|;
(defun _kpblc-odbx (/ dbx_doc)
  (cond
    ((< (_kpblc-acad-version) 15.06)
     (kpblc-msg-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
     (setq dbx_doc (vla-getinterfaceobject
		     (vlax-get-acad-object)
		     "ObjectDBX.AxDbDocument"
		     ) ;_ end of vla-getinterfaceobject
	   ) ;_ end of setq
     )
    (t
     (setq dbx_doc (vla-getinterfaceobject
		     (vlax-get-acad-object)
		     "ObjectDBX.AxDbDocument.16"
		     ) ;_ end of vla-getinterfaceobject
	   ) ;_ end of setq
     )
    ) ;_ end of cond
  ) ;_ end of defun

(defun test
       (/ obj filename layout_lst dcl_id dcl_file_name dcl_file_hadnle lay)
  (setq	obj	 (_kpblc-odbx)
	filename (strcat
		   (_kpblc-dir-path-and-splash
		     (vla-get-templatedwgpath
		       (vla-get-files (vla-get-preferences (vlax-get-acad-object)))
		       ) ;_ end of vla-get-TemplateDwgPath
		     ) ;_ end of _kpblc-dir-path-and-splash
		   "acadiso.dwt"
		   ) ;_ end of strcat
	) ;_ end of setq
  (vla-open obj filename)
  (vlax-for item (vla-get-layouts obj)
    (setq layout_lst (append layout_lst (list (vla-get-name item))))
    ) ;_ end of vlax-for
  (setq	obj nil
	layout_lst
	 (vl-sort (vl-remove-if
		    '(lambda (x) (member (strcase x) '("МОДЕЛЬ" "MODEL")))
		    layout_lst
		    ) ;_ end of vl-remove-if
		  '<
		  ) ;_ end of vl-sort
	dcl_file_name
	 (strcat (_kpblc-dir-path-and-splash
		   (vla-get-tempfilepath
		     (vla-get-files
		       (vla-get-preferences (vlax-get-acad-object))
		       ) ;_ end of vla-get-files
		     ) ;_ end of vla-get-TempFilePath
		   ) ;_ end of _kpblc-dir-path-and-splash
		 "temp.dcl"
		 ) ;_ end of strcat
	dcl_file_hadnle
	 (open dcl_file_name "w")
	) ;_ end of setq
  (foreach str '("temp : dialog 	{label=\"Выбор листа для вставки\";"
		 ":column{"
		 ":popup_list	{key=\"lst\";"
		 "is_enabled=true;"
		 "label=\"Имя листа\";"
		 "}"
		 "}"
		 "ok_button;"
		 "}"
		 )
    (write-line str dcl_file_hadnle)
    ) ;_ end of foreach
  (close dcl_file_hadnle)
)
А дальше простым dcl-файлом работай, получай имя листа и вставляй его.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.09.2006, 14:44
#9
luser


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


из файла шаблона вставляет конкретный лист "list"
(VL-CMDF "_.LAYOUT" "_T" "shablon.dwg" "list")
luser вне форума  
 
Непрочитано 15.09.2006, 15:11
#10
Кулик Алексей aka kpblc
Moderator

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


Я так понял, что имя листа заранее не определено, задается пользователем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2009, 12:58
#11
acyxou


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


Появилась необходимость создания небольшой прогруммулины для быстрой вставки настроенного листа (Layout) в текущий файл.

Прогу писал сам, поэтому буду рад любой критике. Error handler не делал, так как мозгов еще не хватает...

Прога работает при наличии файла Sheet (millimeters).dwt, расположенного в одной из папок путей поиска (Support File Search Path).

Хотелось бы добавить к приложению:
  1. Error Handler естественно
  2. возможность удалять пустые листы

Добавлено 27.10.09
Спасибо Евгений А. и Do$ за доведение программулины до ума В аттаче обновленная версия!
Вложения
Тип файла: rar ImportLayout.rar (71.5 Кб, 89 просмотров)
__________________
Users are not stupid, they are busy.

Последний раз редактировалось acyxou, 27.10.2009 в 11:15.
acyxou вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вставка листа из шаблона