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

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

Печать из модели по выбору объекта

Ответ
Поиск в этой теме
Непрочитано 21.10.2009, 12:41
Печать из модели по выбору объекта
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,827

Просьба не отсылать в поиск, ибо прошерстил, но не то.
Что хотелось бы, выбираешь объект, а программа сама определяет габариты границы объекта и отправляет на печать все что попадает в габариты.
Настройку предлагаю производить либо при первичной загрузке программы, либо предварительно настроить стиль печати.

ps см. в приложении что и как.

исходник.dwg

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 73751
 
Непрочитано 06.11.2009, 22:50
#61
Do$

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


Цитата:
Сообщение от Колька Посмотреть сообщение
Это я понял, только ведь если много чертежей в моделе то придётся помучаться выбирая объекты, а здесь просто всё выделяем и чепятаем
Все равно надо сперва твои точки расставить по чертежу Кстати, точками не очень наглядно - не видно, что попало в границы печати, а что нет. Думаю, что лучше динамический блок делать в виде рамки.

Цитата:
Сообщение от Колька Посмотреть сообщение
Кто нибудь знает как вытащить имена принтеров в лиспе?
Код:
[Выделить все]
(vlax-safearray->list
  (vlax-variant-value
    (vla-GetPlotDeviceNames
      (vla-get-ActiveLayout
	(vla-get-ActiveDocument (vlax-get-acad-object))
      ) ;_ end of vla-get-ActiveLayout
    ) ;_ end of vla-GetPlotDeviceNames
  ) ;_ end of vlax-variant-value
) ;_ end of vlax-safearray->list
Do$ вне форума  
 
Непрочитано 09.11.2009, 00:31
#62
Колька


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Все равно надо сперва твои точки расставить по чертежу Кстати, точками не очень наглядно - не видно, что попало в границы печати, а что нет. Думаю, что лучше динамический блок делать в виде рамки.
Я это делал чисто для себя и колег, был трабл с распечаткой чертежей, а они все в стандартных рамках. Точки был самый оптимальный для использования в коллективе вариант, и незаметно и полезно
Спасибо за код, завтра на работе попробую!
Колька вне форума  
 
Непрочитано 10.11.2009, 13:05
#63
Колька


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


Do$ спасибо, очень помог. Дописал код так что бы можно было в диалоговом окне выбирать из существующих принтеров и выбирать формат бумаги. Если кому надо могу выложить.
Колька вне форума  
 
Непрочитано 10.11.2009, 13:52
#64
Do$

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


Мне будет интересно взглянуть, если в ней задаются настройки печати без командных методов.
Do$ вне форума  
 
Непрочитано 10.11.2009, 14:11
#65
Колька


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


Сначала нужно окошко создать.
Это файл PrintW.dcl :
Код:
[Выделить все]
//Диалоговое окно
 PrintW : dialog {label = "Окно выбора" ; 
  :list_box{label = "Список";
    key="lb_Subjects";
    multiple_select = false;
    fixed_width_font=true;
    width=32;
    height=20;
  }//конец list_box
    :row{
      fixed_width=true;
      alignment = right; 
    ok_cancel;
    }    //конец row
   }  //конецPrintW
его поместить туда куда прописан путь поиска (например C:\Program Files\AutoCAD 2009\support) или прописать путь к папке с этим файлом.

Далее лисп:
Код:
[Выделить все]
(defun C:NPr ( / i nabor text x y p1 p2 obj l_pr l_paper printer paper lay)
	(vl-load-com)
	(setq l_pr (vlax-safearray->list (vlax-variant-value (vla-GetPlotDeviceNames (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))))))  
	(setq printer (dialog_n l_pr))  
	(vla-put-ConfigName  (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))  printer)
	(setq l_paper 
		(mapcar	'(lambda (a) (vla-GetLocaleMediaName lay a))
			(vlax-safearray->list
			  (vlax-variant-value
			    (vla-GetCanonicalMediaNames
	 		     (setq lay	(vla-get-ActiveLayout
					  (vla-get-ActiveDocument (vlax-get-acad-object))
					) ;_ end of vla-get-ActiveLayout
			      ) ;_ end of setq
			    ) ;_ end of vla-GetCanonicalMediaNames
			  ) ;_ end of vlax-variant-value
			) ;_ end of vlax-safearray->list
		) ;_ end of mapcar	
	)   
  	(setq paper (dialog_n l_paper))
  	(command "_ucs" "_world")
	(setq nabor (ssget '((0 . "INSERT"))))
	(setq i (- (sslength nabor) 1))	
	(while (>= i 0)
		(setq text (vlax-get-property (vlax-ename->vla-object (ssname nabor i)) 'EffectiveName))
		(if (/= text "Ramka_dlya_pechati") (ssdel (ssname nabor i) nabor) )
		(setq i (- i 1))
	)	
	(setq i 0)	
	(while (< i (sslength nabor))		
		(setq obj (vlax-ename->vla-object (ssname nabor i)))		
		(setq p1 (vlax-safearray->list (vlax-variant-value (vlax-get-property obj 'InsertionPoint))))		
		(setq x (vlax-variant-value (vlax-get-property (car (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties obj)))) 'value)))
		(setq y (vlax-variant-value (vlax-get-property (car (cdr (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties obj))))) 'value)))
		(setq p2 (py y (px x p1) ) )		
		(if (> x y) (setq text "_Landscape") (setq text "_Portrait"))
		(command "_plot" "_y" "" printer paper "_Millimeters" text "_No" "_Window" p1 p2  "_Fit" "_center" "_Yes" "monochrome.ctb" "_Yes" "_As" "_N" "_N" "_Y") 
		(setq i (+ i 1))	
	)	
)
	(defun px (x pt) (cons (+ x (nth 0 pt)) (cons (nth 1 pt) (cons (nth 2 pt) (cdddr pt)))))
	(defun py (y pt) (cons (nth 0 pt) (cons (+ y (nth 1 pt)) (cons (nth 2 pt) (cdddr pt)))))
( defun NPrinters ( / ) 
	(print (vlax-safearray->list (vlax-variant-value (vla-GetPlotDeviceNames (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object)))))))
)

(defun dialog_n (li / rec_List act )
   (vl-load-com)
  (defun rem_Data( / ind_list cnt item)
    (setq rec_List(list))
    (setq ind_list(get_tile "lb_Subjects"))
    (setq cnt 1)
    (while (setq item (read ind_list))
      (setq rec_List(append rec_List (list (nth item vlb_Subjects))))
      (while (and (/= " " (substr ind_list cnt 1)); пропуск пустых записей
        (/= "" (substr ind_list cnt 1)); пропуск нулевых записей
     ); end while 2
    (setq cnt (+ cnt 1))
    ); end while 1
     (setq ind_list (substr ind_list cnt));формирование списка
   );end while 1
  );end rem_Data
 (setq vlb_Subjects li)

(setq dcl_id (load_dialog "PrintW.dcl"))
(if (not (new_dialog "PrintW" dcl_id))(exit)); end if
  (start_list "lb_Subjects")
  (mapcar 'add_list vlb_Subjects)
  (end_list)
(action_tile "cancel" "(setq act nil)(done_dialog)")
(action_tile "accept" "(setq act T)(rem_Data)(done_dialog)")
(start_dialog)      ;Показать Диалоговое окно
(unload_dialog dcl_id)  ;Закрыть Диалоговое окно
(if (= act nil)
    (princ "\n \n ...ЗАДАНИЕ ОТМЕНЕНО. \n ")
)  ; конец if
(if (= act T)
   (progn 
      (if (= rec_List nil)
      (princ "\n ...Вы не выбрали принтер ")
      (car rec_List)     
    ); end if 
   ); end progn
); end if
)
Функцию dialog_n честно стащил с какого-то инет учебника

Последний раз редактировалось Колька, 12.11.2009 в 15:11. Причина: исправлен для др языков
Колька вне форума  
 
Непрочитано 12.11.2009, 11:33
#66
JokerrSergh


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


Колька, в 2007 русском автокаде не работает твоя програмка.
пишет:
Команда: npr
; ошибка: завершить / выйти прервать
JokerrSergh вне форума  
 
Непрочитано 12.11.2009, 11:36
#67
Колька


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


ща проверю
Колька вне форума  
 
Непрочитано 12.11.2009, 11:41
#68
Кулик Алексей aka kpblc
Moderator

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


А чего там проверять? Я уже говорил, что в официальных локализация этот код работать не будет. И причину указывал, насколько я помню...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2009, 11:43
#69
Колька


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


да нет, всё проще, файл PrintW.pcl не подцепился. JokerrSergh вы проверяли путь к этому файлу?
Колька вне форума  
 
Непрочитано 12.11.2009, 11:44
#70
JokerrSergh


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


может я чего не так делаю?
сначала запихал файл PrintW.pcl в C:\Program Files\AutoCAD 2007\Support
и прописал в автокаде (путь доступа к вспомогательным файлам) путь к папке с этим файлом. Подгрузил в автокаде лисп NPr.lsp
Для пробы взял динамический блок - лист формата А3 (горизонтальный).
Вставил твой блок с точками "Print_block" и поставил точки по углам этого листа А3. Ввел в ком. строке NPr и ничего не произошло
JokerrSergh вне форума  
 
Непрочитано 12.11.2009, 11:45
#71
Колька


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


а в файле PrintW.pcl правельный код?
Колька вне форума  
 
Непрочитано 12.11.2009, 11:48
#72
JokerrSergh


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


код тупо скопировал из поста 65...
Сейчас скопировал код из файла на своем компе
//Диалоговое окно
PrintW : dialog {label = "Окно выбора" ;
:list_box{label = "Список";
key="lb_Subjects";
multiple_select = false;
fixed_width_font=true;
width=32;
height=20;
}//конец list_box
:row{
fixed_width=true;
alignment = right;
ok_cancel;
} //конец row
} //конецPrintW
Может я путь не там прописал? Где в автокаде его надо прописывать?
JokerrSergh вне форума  
 
Непрочитано 12.11.2009, 11:50
#73
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Цитата:
Сообщение от Колька Посмотреть сообщение
а в файле PrintW.pcl правельный код?
в файле PrintW.pcl не правильное расширение. Правильно - PrintW.dcl
Nike вне форума  
 
Непрочитано 12.11.2009, 11:52
#74
Колька


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


На вложенной картинке показанно, там у меня лежит файл PrintW.dcl


тьфу блин! Nike пасибо тебе друг!

и кстати я подправил сам лисп добавил в него нижние слеши. JokerrSergh скопируй код ещё раз
Миниатюры
Нажмите на изображение для увеличения
Название: 111.jpg
Просмотров: 103
Размер:	80.5 Кб
ID:	28715  
Колька вне форума  
 
Непрочитано 12.11.2009, 11:56
#75
JokerrSergh


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


Цитата:
Сообщение от Nike Посмотреть сообщение
в файле PrintW.pcl не правильное расширение. Правильно - PrintW.dcl
Расширение исправил. Путь к файлу проверил.
Запускаю прогу, пишет:

Команда: npr
Неизвестная команда "UCS". Для вызова справки нажмите F1.
Неизвестная команда "WORLD". Для вызова справки нажмите F1.

Выберите объекты: найдено: 1

Выберите объекты:
Неизвестная команда "PLOT". Для вызова справки нажмите F1.
Неизвестная команда "Y". Для вызова справки нажмите F1.
Неизвестная команда "NPR". Для вызова справки нажмите F1.
Неизвестная команда "XEROX WORKCENTRE PRO 133 PCL 6". Для вызова справки
нажмите F1.
Неизвестная команда "A3". Для вызова справки нажмите F1.
Неизвестная команда "MILLIMETERS". Для вызова справки нажмите F1.
Неизвестная команда "LANDSCAPE". Для вызова справки нажмите F1.
Неизвестная команда "NO". Для вызова справки нажмите F1.
Неизвестная команда "WINDOW". Для вызова справки нажмите F1.
Неизвестная команда "FIT". Для вызова справки нажмите F1.
Неизвестная команда "CENTER". Для вызова справки нажмите F1.
Неизвестная команда "YES". Для вызова справки нажмите F1.
Неизвестная команда "MONOCHROME.CTB". Для вызова справки нажмите F1.
Неизвестная команда "YES". Для вызова справки нажмите F1.
Неизвестная команда "AS DISPLAYED". Для вызова справки нажмите F1.
Неизвестная команда "N". Для вызова справки нажмите F1.
Неизвестная команда "N". Для вызова справки нажмите F1.
Неизвестная команда "Y". Для вызова справки нажмите F1.
JokerrSergh вне форума  
 
Непрочитано 12.11.2009, 11:57
#76
Колька


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


вот как раз из-за нижних слешев, щас всё исправленно
Колька вне форума  
 
Непрочитано 12.11.2009, 12:00
#77
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Цитата:
Сообщение от JokerrSergh Посмотреть сообщение
Расширение исправил. Путь к файлу проверил.
Запускаю прогу, пишет:

Команда: npr
Неизвестная команда "UCS". Для вызова справки нажмите F1.
Неизвестная команда "WORLD". Для вызова справки нажмите F1.
Крыс же предупреждал:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А чего там проверять? Я уже говорил, что в официальных локализация этот код работать не будет.
Nike вне форума  
 
Непрочитано 12.11.2009, 12:03
#78
JokerrSergh


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


Выбрал принтер, затем формат листа...
Колька, а что выбирать нужно на запрос ВЫБЕРИТЕ ОБЪЕКТЫ?
JokerrSergh вне форума  
 
Непрочитано 12.11.2009, 12:05
#79
Колька


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


нужно выбрать все листы которые хочешь распечатать(там предварительно должны стоять точки). только подожди, я щас на локализованной версии её домучаю, должно получится
Колька вне форума  
 
Непрочитано 12.11.2009, 12:06
#80
JokerrSergh


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


жду
А если у меня один лист А3 горизонтальный и я его обрамил этими точками. Выделять нужно все объекты, которые попадают в рамку листа?
И сразу второй вопрос:
На каждый лист нужно каждый раз точки ставить, или можно все листы одним блоком точки обрамить?
JokerrSergh вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Печать из модели по выбору объекта

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про печать из модели нескольких листов gizmo_zx Программирование 2 28.09.2010 12:33
Автоматическая печать из пространства модели Дмитрий_В AutoCAD 9 19.04.2006 16:52
Печать из модели Eugenius AutoCAD 11 03.11.2004 18:26
Печать 3-х мерной модели Лариса AutoCAD 5 09.06.2004 19:57