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

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

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

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

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

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

исходник.dwg

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 73524
 
Непрочитано 21.10.2009, 13:02
#2
KennyMckormik


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


Какой объект хочешь выбирать?
__________________
Timeo Danaos et dona ferentes :eek:
KennyMckormik вне форума  
 
Автор темы   Непрочитано 21.10.2009, 13:04
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


KennyMckormik, приложение смотрел??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 13:12
#4
Кулик Алексей aka kpblc
Moderator

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


Так это тебе фактически надо через vla-getBoundingBox получить границы объектов. Правда, есть одно "но": блоки с атрибутами обрабатываются не всегда корректно. На форуме, насколько я помню, была подобная тема (автор работающего лиспа, кажется, VVA; но могу и ошибаться).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.10.2009, 13:52
#5
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Кулик Алексей aka kpblc, насколько понял из того, что нашел там основная мысль в предварительной прорисовке рамки либо спецблока. Не то что хотелось-бы.
ps на первых порах атрибуты можно и не учитывать.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 13:56
#6
Nike

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


например так:
Код:
[Выделить все]
(defun GetBoundingBox (en / obj minpt maxpt)
  (if (= (type en) 'ENAME)
    (progn
      (setq obj (vlax-ename->vla-object en))
      (vla-getboundingbox obj 'minpt 'maxpt)
      (list
        (trans (vlax-safearray->list minpt) 0 1)
        (trans (vlax-safearray->list maxpt) 0 1)
      ) ;_ end of list
    ) ;_ end of progn
  ) ;_endof if progn 
) ;_endof defun

(setq box (GetBoundingBox (car(entsel)))); список из координат минимума и максимума габаритов выбранного объекта
(setq xy1 (car box)); координаты для определения области печати, xy1 - левая нижняя, xy2 - правая верхняя 
(setq xy2 (car (cdr box)))

Последний раз редактировалось Nike, 21.10.2009 в 14:02.
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 14:10
#7
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Nike, так понимаю сие определяет координаты для печати, вопрос а что с ними дальше делать??
Offtop: ps ссори за мой французский, но в программировании не силен.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 14:15
#8
Nike

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


ну а дальше эти координаты в (command "_.plot" подставлять
например как уменя:
Код:
[Выделить все]
       (command "_.plot" ;сама команда 
             "_Yes" ;нужны настройки 
             "model" ; Имя листа или [?] <Модель>: 
             printer ;Имя устройства вывода или [?] <HP2200-PCL6.pc3>: 
             format ;Формат листа бумаги или [?] <A4>: 
             "Millimeters" ;Единицы измерения размеров листа [Дюймы/Миллиметры] <дюйм>:
             a ;Ориентация чертежа [Книжная/Альбомная] <Книжная>: 
             "_No" ;Перевернуть чертеж? [Да/Нет] <Нет>:
             "_Window" ;Печатаемая область [Экран/Границы/Лимиты/Вид/Рамка] <Рамка>:
             xy1 ;Первая точка окна 
             xy2 ;Вторая точка окна 
             fit ;[Вписать] <Вписать>: ("_fit")
             "_center" ;Смещение от начала (x,y) или [Центрировать] <Центрировать>: 
             "_yes" ;Учитывать стили печати? [Да/Нет] <Да>:
             plotstyle ;Имя таблицы стилей печати или [?] (. если нет) <monochrome.ctb>:
             line-weight ;Учитывать веса линий? [Да/Нет] <Да>:
             "As displayed" ;Режим вывода раскрашенных ВЭ [Обычный/Каркас/Скрытие линий/Тонирование] <Обычный>:
             "_No" ;Запись чертежа в файл [Да/Нет] <Н>:
             "_yes" ;Сохранить изменения параметров листа [Да/Нет]? 
             Plot-not-prew ;Перейти к печати [Да/Нет] <Д>: 
    ) ;_ end of command
ну, у меня там свои переменные еще - printer, format, plotstyle, line-weight - определются настройками перед печатью пользователем и по выбору объекта. Если выбран блок с именеи "А4" то printer = HP2200-PCL6.pc3, если "А1" то HP DesignJet 500.pc3, например..

Последний раз редактировалось Nike, 21.10.2009 в 14:59.
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 14:19
#9
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Nike, прошу прошения, но как сие использовать?? загнать как макрос на кнопку??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 14:25
#10
Nike

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


Offtop: zenon, ты не знаешь, как LISP-программы использовать?
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 14:43
#11
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Offtop: Nike, знаю, но твой код больше смахивает на макрос на кнопку,
здесь http://dwg.ru/art/8 как-то по другому описано.
Если не трудно распиши как и что.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 14:52
#12
Nike

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


Offtop: zenon, это не макрос на кнопку, а фрагменты программы печати, которые интересуют, как я думаю, автора темы - код определения области печати по габаритам выбираемого объекта и собственно функция печати этой области. Помимо этого там еще куча вспомогательных замороченных функций, определяющих параметры печати. Это к теме не относится..
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 14:58
#13
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Nike, автора темы интересует программа готовая к применению
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 15:20
#14
Nike

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


ну вот например, для печати выбранного объекта на принтер HP CLJ 5550N PCL 6 A4.pc3 (надо подставить свой) на листе А4:
Код:
[Выделить все]
(defun GetBoundingBox (en / obj minpt maxpt)
  (if (= (type en) 'ENAME)
    (progn
      (setq obj (vlax-ename->vla-object en))
      (vla-getboundingbox obj 'minpt 'maxpt)
      (list
        (trans (vlax-safearray->list minpt) 0 1)
        (trans (vlax-safearray->list maxpt) 0 1)
      ) ;_ end of list
    ) ;_ end of progn
  ) ;_endof if progn 
) ;_endof defun

(princ "Выберите объект для печати")
(setq box (GetBoundingBox (car(entsel)))); список из координат минимума и максимума габаритов выбранного объекта
(setq xy1 (car box)); координаты для определения области печати, xy1 - левая нижняя, xy2 - правая верхняя 
(setq xy2 (car (cdr box)))

(command "_.plot"
             "_Yes"
             "model" ; Имя листа или [?] <Модель>: 
             "HP CLJ 5550N PCL 6 A4.pc3" ;Имя устройства вывода 
             "A4" ;Формат листа бумаги
             "Millimeters" ;Единицы измерения размеров листа
             "portrait" ;Ориентация чертежа 
             "_No" ;Перевернуть чертеж?
             "_Window" ;Печатаемая область
             xy1 ;Первая точка окна 
             xy2 ;Вторая точка окна 
             "_fit" ;[Вписать]
             "_center" ;Смещение от начала (x,y) или [Центрировать]
             "_yes" ;Учитывать стили печати?
             "monochrome.ctb" ;Имя таблицы стилей печати
             "_yes" ;Учитывать веса линий?
             "As displayed" ;Режим вывода раскрашенных ВЭ
             "_No" ;Запись чертежа в файл
             "_yes" ;Сохранить изменения параметров листа
             "_yes" ;Перейти к печати
    ) ;_ end of command
Цитата:
автора темы интересует
прошу пардону за невнимательнось blush:

Последний раз редактировалось Nike, 21.10.2009 в 15:30.
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 15:37
#15
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Nike, программа загрузилась, при загрузке появился запрос на выбор объекта, отправило на печать все хорошо, как повторно запустить прогу?? опять через загрузку??
вот что выдает на ввод

Цитата:
Command: GetBoundingBox
Unknown command "GETBOUNDINGBOX". Press F1 for help.
Цитата:
Command: (GetBoundingBox)
; error: too few arguments
что не так??

ps хотелось-бы создать кнопку с макросом типа
Цитата:
^C^C(if (null C:<команда>)(load "<файл>"));<команда>;
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:

Последний раз редактировалось zenon, 21.10.2009 в 15:39. Причина: добавил
zenon вне форума  
 
Непрочитано 21.10.2009, 16:16
#16
Nike

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


ну так засунь этот код в функцию, например
(defun c:zenon ()
<вышеприведенный код>
)
Сохрани в zenon.lsp и создавай свою кнопку:
^C^C(if (null C:zenon)(load "zenon"));zenon;

Это же все описано в http://dwg.ru/art/8, почитае еще внимательнее
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 16:33
#17
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Цитата:
Сообщение от Nike Посмотреть сообщение
ну так засунь этот код в функцию, например
(defun c:zenon ()
<вышеприведенный код>
)
спасибо получилось
можно еще потретирую??
1 - выбрать 2 тип (сплайн), то почему-то габариты больше чем у требуемого прямоугольника, если это не лечится то и фиг с ним.
2 - что очень желательно, можно ли как-то заставить программу автоматически выставлять требуемую конфигурацию листа, скажем если габарит ширины требуемой области печати > габарита высоты, то ориентация листа горизонтально, иначе вертикально.


PSS Да вот еще с динамическими блоками ведет себя странно, так при наличии параметра видимость в блоке, выбор происходит по габариту наибольшего из объектов блока, даже если он в данном вхождении и не отображается.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:

Последний раз редактировалось zenon, 21.10.2009 в 16:39. Причина: нашел еще багу
zenon вне форума  
 
Непрочитано 21.10.2009, 16:54
#18
Nike

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


А саму сообразить
это ж элементарно
Например так:

Код:
[Выделить все]
 (setq a (angle xy1 xy2));угол для вычисления ориентации листа
;;; Ориентация листа: если угол в диапазоне 45...135 или 225...315 то портрет, иначе - альбом
             (if (or (and (> a (* pi 0.25)) (< a (* pi 0.75))) (and (> a (* pi 1.25)) (< a (* pi 1.75))))
               (setq orientation "Portrait") 
               (setq orientation "Landscape") 
             ) ;_ end of if
этот код вставить перед командой _plot, а строку
Код:
[Выделить все]
"portrait" ;Ориентация чертежа
заменить на
Код:
[Выделить все]
orientation ;Ориентация чертежа
С первым вопросом - х.з..
С динамическими блоками тоже такую фигню видел. Как лечить - хз. Крыса & co надо в помощь..

Последний раз редактировалось Nike, 21.10.2009 в 17:12.
Nike вне форума  
 
Автор темы   Непрочитано 21.10.2009, 17:38
#19
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Nike, большой тебе спасиб
Offtop: а насчет Крыса, придется наверно позвать
ДЕ-ДУ-ШКА МО-РОЗ эээ тоисть Кулик Алексей aka kpblc
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 21.10.2009, 17:55
#20
Nike

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


Цитата:
Сообщение от zenon Посмотреть сообщение
Nike, большой тебе спасиб
Большой пожалуйста!
Nike вне форума  
Ответ
Вернуться   Форум 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