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

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

Пакетная печать множества рамок (форматов) из пространства модели.

Результаты опроса: Что Вы используете для печати из данного списка ?
Предпочитаю обводить рамки руками 50 35.97%
Использую другие методы (своя программа) 18 12.95%
Программа РЕВЕРС. 31 22.30%
Создание Layout, от bargool 11 7.91%
Автоматическое создание листов, от swell 3 2.16%
Lisp - Распечатка нескольких листов, от sasha_lif 9 6.47%
!Plot_U - Макрос автоматической печати 13 9.35%
Vport_pp - Создания видовых портов из модели, от Boxa 6 4.32%
Batch Publish - публикации чертежей, от JTB World 1 0.72%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 139. Вы ещё не голосовали в этом опросе

Ответ
Поиск в этой теме
Непрочитано 03.10.2013, 14:15 6 |
Пакетная печать множества рамок (форматов) из пространства модели.
maratovich
 
г. Самара
Регистрация: 12.07.2009
Сообщений: 2,481

В данной теме будут собраны ссылки и описание на lisp, vba или иные программы которые позволяют упростить и автоматизировать печать множества рамок (форматов) из пространства модели, а так же перевод данных рамок в пространство листа.
Также предлагается обсуждать данный вопрос и варианты решения.
Убедительная просьба - не писать, что данная методика не верна и правильно выводить на печать из листов при помощи подшивки, не все могут понять и освоить подшивку и многим нравится (приходится) создавать рамки в модели. Не засоряйте тему.
Ссылки будут добавляться по мере обсуждения.

Список возможных вариантов:

1. Программа РЕВЕРС - автоматический поиск и пакетная печать множества рамок оформленных в пространстве модели и листов, автоматическое создание листов из рамок модели и многое другое.Сайт программы

Версия 3.6

Единственная программа которая сделает всё что Вам надо с минимальным количеством действий

Программа РЕВЕРС позволяет выполнить:
- автоматический поиск и пакетная печать множества рамок оформленных в пространстве модели и листов;
- автоматическое создание листов из рамок модели;
- автоматическое сохранение рамок в отдельные файлы;
- автоматическое создание ведомости чертежей;
- автоматическая нумерация страниц;
- поиск и пакетная печать обычных рамок и рамок динамических блоков;
- поиск рамок СПДС и рамок находящихся во внешних ссылках;
- поиск рамок созданных отрезками;
- автоматическое создание форматов листов и основной надписи (СПДС и ЕСКД);
- удобное заполнение основной надписи (СПДС и ЕСКД);
- автоматическая пакетная печать чертежей больших форматов на малых принтерах.

Видео уроки:
Общие принципы работы программы РЕВЕРС

Пакетная печать чертежей оформленных в пространстве модели AutoCAD

Печать PDF файлов с уникальным именем из пространства модели AutoCAD

Пакетная печать PDF с авторазворотом на принтер DWG to PDF

Копирование рамок в отдельные файлы

Создание ведомости чертежей в программе AutoCAD

Создание основной надписи и размерной рамки AutoCAD

Поиск рамок созданных отрезками в AutoCAD

Множественный выбор слоёв для поиска рамок

Поиск рамок СПДС и во внешних ссылках


2. Создание Layout для чертежей, оформленных в модели от bargool
Автоматическое создание листов по рамкам, указанным пользователем в модели. Автоматический выбор форматов бумаги и настройка листов.
Принцип работы:
Программа формирует предварительный список настроек листа, с форматами бумаги
Список формируется двумя способами
Из DWG to PDF.pc3
Выбираются все пользовательские форматы
В конец списка добавляются форматы, начинающиеся на "ISO A.."
Область печати выставляется "Лист"
Единицы измерения - миллиметры
Масштаб 1:1
Стиль печати - acad.ctb. Позже буду брать из файла конфигурации
Имя настройки берётся из имени формата бумаги. Если встречаются символы из ряда "\<>/?"":;*|,=`" - убираются
Из файла шаблона
Копируются пользовательские именованные настройки печати, доступные из диалога "Page setup"
Повторяю. Пользовательские настройки. Не листы, а именно настройки
Ещё раз. В листы не заглядываем ВООБЩЕ
Соответственно, имя настройки печати не должно начинаться с символа звёздочки "*"
- Запрашивает у пользователя "референтный размер".
Используется для определения масштаба рамки. По-умолчанию это 185 мм. - длина основной надписи
- Запрашивает у пользователя противоположные углы рамок
Слева-направо, сверху-вниз, или наоборот - не важно
Привязка принудительно выставляется "конточка"
- На основе масштаба и списка форматов определяет наиболее подходящий
При этом используется строго ориентация из "списка". Ориентацию с книжной на альбомную и обратно программа произвольно не меняет. Строго по "списку настроек"
- По выбранным форматам бумаги создаёт листы
В чертёж добавляет подходящие именованные настройки из "списка", настроенные на нужный формат бумаги
Присваивает созданным листам соответствующие именованные настройки
- Создаёт видовой экран, "смотрящий" на рамку, указанную пользователем

Процесс работы:
Для вызова программы введите в ком. строку lfm
Либо задайте номер первого создаваемого листа, либо используйте опции ком. строки
Укажите "референтный" размер
Указывайте рамки, кликая по противоположным углам рамок.
Опции ком. строки см. соответствующий раздел
По окончании жмите escape или используйте опцию P

3. Автоматическое создание листов для чертежей, оформленных в модели от swell{d} (на данный момент работает только в NanoCAD)
Необходимые условия для работы скрипта:
Рамки листов должны быть начерчены в масштабе 1:100.
Готовые рамки можно скачать по ссылке (80.43 kB; загрузок: 71)
Рамки для чертежей должны быть в блоке. Скрипт заточен под 4 вида листов:
А1 альбомный (блок "КЖ-А1")
А2 альбомный (блок "КЖ-А2")
А3 альбомный (блок "КЖ-А3")
А4 книжный (блок "КЖ-А4")
Должен быть установлен PDFCreator (тестировалось с версией 1.6.2)

Алгоритм действий скрипта:
Удаляем все существующие в чертеже листы
Ищем в модели все блоки рамок, сохраняем их идентификатор и положение
Сортируем листы по горизонтали, сортируем во вертикали
Создаём настроенные листы для всех рамок в пространстве модели
Видео-иллюстрация работы скрипта
Запустить на печать все листы разом можно через Файл - Пакетная печать…

4. Lisp - Распечатка нескольких листов одновременно от sasha_lif
Фишка моей проги, что руками НИЧЕГО не надо по одному выделять. Скопом секущей рамкой выбираете область чертежа в моделе. Автоматически находятся синие рамки- полилинии, лежащие на отдельном слое format (на этом слое кроме них, не должно быть ничего другого), и по ним распечатывается все чертежи.При этом чертежи могут быть произвольного масштаба! См. чертеж с образцом.
Если у вас , я так думаю, под блоками нет этой особого прямоугольника, то можно зайти в блок, создать эту полилинию по наружному краю блока на слое format, сохранить блок, и затем командой BURST взорвать эти блоки. Это делать на копии чертежа. После этого печатай командой ASD.
Обсуждение темы здесь: http://forum.dwg.ru/showthread.php?t=86922&page=3
Видео работы:
http://www.youtube.com/watch?v=4HWgD...ature=youtu.be

5. !Plot_U - макрос автоматической печати из модели Autocad

Макрос для печати позволяет быстро распечатать из модели Autocad листы формата A0,A1,A2,A3,A4. Для этого нужно
- обвести все чертежи полилинией (каждую форматку отдельно);
- поместить эти полилинию на определенный слой (по умолчанию "Formatka");
- запустить макрос настройки (поиск форматок, выбор принтеров, стилей и порядка печати и т.п.);
- запустить макрос автоматической печати.
Последнюю версию макроса можно взять тут - http://engineerbox.ru/plot_u

6. Vport_pp - Программа для облегчения создания видовых портов из модели. от Boxa

Программа написана на VB.Net под AutoCAD.
Представляет из себя библиотеку (dll) загружаемую в autocad командой: _Netload
Создаем Впорты из модели.
Масштаб впорта берется из названия размерного стиля
  • М100 или М100 - масштаб 1/100
  • М050 или М50 - масштаб 1/50
  • М025 или М25 - масштаб 1/25
  • М020 или М20 - масштаб 1/20
  • и т.д.
TODO Вот это необходимо корректировать. Программа должна сама, на основе примитивов попавших в прямоугольник впорта, выставить необходимый масштаб впорта. Т.о. программа должна проанализировать размеры, блоки и др. элементы и понять какой необходимо выставить масштаб.
Команды
  • BX_VPORT_PP
  • bx_datainput
Условия работы
Наличие доступа в интернет.
Описание и схема работы
Запускаем команду.
Автокад автоматически переключается на пространство модели
Если программа не смогла определить масштаб, то спросит его у пользователя.
Далее указываем диагональ прямоугольника который нужно вывести в лист
После указания всех точек автокад автоматически переключается на последний использованный лист
Указываем точку вывода впорта, указанная точка будет соответствовать геометрическому центру порта
Впорт автоматически создается на нужном слое («КЖ_Видовые окна») с нужными настройками
Скачать
Скачать программу можно тут:vport_pp.7z
Примечание
Видео
ссылка на youtube

7. Batch Publish - приложение для AutoCAD® упрощает процесс публикации чертежей в формате DWF и / или PDF.

Это приложение для AutoCAD® упрощает процесс публикации (зарисовки) наборы чертежей в формате DWF и / или PDF.
Этот плагин может быть использован с AutoCAD, чтобы упростить процесс публикации наборов чертежей в формате DWF и / или PDF. Она работает как команда в AutoCAD - в отличие от отдельного исполняемого - и использует отдельный исполняемый файл для мониторинга состояния здоровья AutoCAD и перезапустить его по мере необходимости. Статус операции периодического издательского хранится на диске, что позволяет подобрать откуда она была прервана, а также для любого удалось документы на повторное без, начиная с нуля. Настройка доступна только публиковать рисунки, которые были изменены, так как они были в прошлом опубликованы, что делает его легче публиковать наборы документов на регулярной основе.

8. PlotSPDS - Печать для СПДС CS от doctorraz

Возможности утилиты:
автоматическое распознавание форматов СПДС GraphiCS;
автоматическая ориентация форматов (портрет, альбом);
автоматическое масштабирование форматов (даже если в чертеже разные масштабы);
печать в многостраничный PDF (принтер AutoCAD DWG to PDF);
одинаково работает в пространстве модели или листа;
печать форматов селектом AutoCAD или выбранным слоям;
печать с предварительно настроенным или пользовательским стилем печати;
печать с прозрачностью;
печать на разные принтеры в зависимости от настроек.
Для работы скрипта необходим СПДС GraphiCS.
Описание и настройки: http://doctorraz.blogspot.ru/2015/08/PlotSPDS.html
Видео работы:
Печать только форматов СПДС GraphiCS

9. Lisp - Создание листов и видовых экранов на них от Andrey_13
Программа создаёт листы с видовыми экранами, совпадающими c рамками листов.
Вызов командой "_Addlay".
Указать слой с рамками чертежей (рамки выполнить в виде прямоугольников либо в виде блоков).
Обсуждение темы здесь: http://forum.dwg.ru/showthread.php?t=124456

10. Программа Склейка (Skleyka) - Автоматическая печать больших чертежей на нескольких малых листах.Сайт программы

Версия 5.0

Склейка (Skleyka) - дополнение к AutoCAD, nanoCAD, BricsCAD, ZWCAD+ позволяет выполнить:
• Автоматическая печать чертежи формата А1 на нескольких листах А4 или А3.
• Автоматически разделить чертежи на малые части, для последующей печати на бумагу, в PDF и другие форматы.

Возможности программы Склейка (Skleyka):
• Выбор установленного принтера, формата бумаги и стилей печати;
• Выбор различных масштабов печати;
• Возможность принудительного вписания чертежа в требуемое количество листов;
• Возможность указания количества листов для вписания как по горизонтали, так и по вертикали;
• Возможность печати с различной ориентацией листов;
• Дополнительны настройки печати и программы;
• Просмотр перед печатью листов малого формата;

Видео уроки:
Быстрая печать больших чертежей на малых принтерах

11. Программный комплекс Bprint - позволяет быстро сохранить все чертежи в PDF или DWG отдельными файлами или "книгами"

1. Ссылка на сайт программы.
http://ries.pro/
(на сайте распространение программы не настроено)

2. Краткое описание
Программный комплекс Bprint позволяет быстро сохранить все чертежи в PDF или DWG отдельными файлами или "книгами" при этом присваивая конечным файлам имена из шифра каждого чертежа на транслите. Алгоритм программы выстроен под требования ООО "РН-УфаНИПИнефть". (Работает на версии Автокад 2013)


3. Расширенное описание.
Программу возможно запускать в нескольких одновременно запущенных Автокад, что ускоряет процесс сохранения в разы (актуально для нескольких сотен чертежей).

К программе прилагается макрос по нумерации чертежей:
1) Нумерация шифров чертежей для стадии "П" (нумеруется сам шифр каждого чертежа);
2) Нумерация листов чертежей для стадии "П" и "Р" (нумеруется ЛИСТ ЛИСТОВ на основании шифра);
3) Проверка на ошибки в шифрах (программа укажет на лист, где допущена ошибка в шифре);
4) Подготовка к пакетной печати (формирования транслита шифров чертежей и областей печати).
подробнее тут:
Информация о структуре динамического блока и работе макроса
* - Для некоторых функций есть требования к оформлению.

К макросу нумерации чертежей прилагается динамический блок рамки чертежа:
1) Первый, последующий и без штампа лист;
2) Стиль заполнения рамки под требования ООО "РН-УфаНИПИнефть";
3) Все стандартные книжные и альбомные форматы. Нестандартные (кратные) форматы от А4х3 до А0х3;
4) Настройка логотипа организации (содержание в одном блоке множества логотипов);
5) Основное преимущество динамического блока массовое изменения заполняемых данных штатными средствами Автокад;
6) Поля "дата" находится в отдельном слое, что позволяет при необходимости скрывать датую.
подробнее тут:
Информация о структуре динамического блока и работе макроса

Функционал Bprint:
1) Один лист чертежа сохраняется в один PDF/DWG файл;
2) Несколько листов чертежа сохраняются в одну PDF/DWG -книгу (возможность создавать множество книг и производить выбор книг);
3) Отправка на печать всех или выбранных чертежей (для кратных/нестандартных форматов требуется настройка МФУ);
4) Выбор масштаба листов чертежей;
5) Имена файлов PDF/DWG присваиваются из атрибута конкретного листа (изменяется в настройках);
6) Внесение и изменение размеров форматов в конфигурационном файле;
7) Настроенный стиль печати.
подробнее тут:
Подробное описание работы программы
* - Для некоторых функций есть требования к оформлению.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....

Последний раз редактировалось maratovich, 20.12.2016 в 17:37.
Просмотров: 264408
 
Непрочитано 06.04.2018, 15:15
#321
baksconstructor


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


Цитата:
Сообщение от MrBrown Посмотреть сообщение
Только в файле не четыре листа, а, как правило, поболее 20-ти.
Ну это семечки, смотрите вариант 1 в шапке темы, кстати листы (в прошлом посте) я тоже в Реверс сделал.
По лиспу sasha_lif - нужен ответ автора.
baksconstructor вне форума  
 
Непрочитано 18.04.2018, 13:48
#322
obit


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


Что нового в Реверс 4.0?
obit вне форума  
 
Непрочитано 18.04.2018, 14:07
2 | #323
baksconstructor


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


Цитата:
Сообщение от obit Посмотреть сообщение
Что нового в Реверс 4.0?
Что замечено, собственно и было в бетта версии:
1. Главное окно меняет размер.
2. Деление на задания - если указать Добавить к набору, то можно несколько раз выбирать рамкой и в таблице этот выбор будет делится на очерёдность.
3. Выбор внутри полилиний - если несколько рамок обведены полилнией, то можно указать только полилинию и прога найдет только рамки внутри этой полилинии, коточе если разные разделы в одной модели то можно обвести прямоугольками и потом только их указать.
4. Переваривает штамп созданный таблицей СПДС
5. Автопечать из папки - в отдельном Автокаде.
6. Проверка номеров страниц - одинаковые, отствуют
7. Включение / отключение слоёв перед печатью
8. Отключение уведомлений.
9. Подсчет количества листов А4 соответсвует все распечатаное.
10. Запуск команд с клавиатуры.
11. поменялся интерфейс.
12. вижу работу в progeCAD, но незнаю что это.
остальное - ХЗ

----- добавлено через ~43 мин. -----
Собственно поставьте и узнаете, переход на новую бесплатный.
baksconstructor вне форума  
 
Непрочитано 18.04.2018, 14:58
#324
obit


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


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Собственно поставьте и узнаете, переход на новую бесплатный.
Спасибо за changelog)
Просто поверх установленной накатить?
obit вне форума  
 
Непрочитано 18.07.2018, 07:47
#325
Komplanar


 
Регистрация: 07.01.2014
Сообщений: 3,488


Чот я не могу понять, как программой "Реверс" пользоваться. Скачал 4 версию, открыл файлик с кучей листиков формата А3 в модели, штампы и рамки сделаны простыми примитивами (отрезками-полилиниями), указываю масштаб, проверяю его по длине штампа (программка указывает, что масштаб 100 и выставляет его), отмечаю галочки "полилинией" "отрезками", а дальше игры с включением-отключением галочек не помогают, прога не видит форматы. Хотя когда выделяешь рамки, услужливо подсвечивает штампы, но после довольно длительного поиска не находит ни одного штампа. Штампы вычерчены строго по формату А3, отклонений нет. Мож ещё со слоями надо что-то сделать?
Komplanar вне форума  
 
Непрочитано 18.07.2018, 07:49
#326
baksconstructor


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


Цитата:
Сообщение от Komplanar Посмотреть сообщение
Штампы вычерчены строго по формату А3, отклонений нет. Мож ещё со слоями надо что-то сделать?
Пример файла с рамкой приложите.
baksconstructor вне форума  
 
Непрочитано 18.07.2018, 08:20
#327
Komplanar


 
Регистрация: 07.01.2014
Сообщений: 3,488


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Пример файла с рамкой приложите.
Собственно, уже разобрался. По каким-то причинам прога плохо переваривает рамки, сделанные из простых незамкнутых полилиний (даже при выделении галочек "Внешняя рамка сделана полилинией или отрезком"), взорвав полилинии в отрезки, прога мгновенно нашла все рамки. Только взрывать занимает столько же времени, сколько и выделение рамкой для печати... А в отдельный слой рамки не вынесены.
UPD. Альтернативный способ - быстренько накидать поверх обычных рамок квадратные полилинии. Эти квадраты прога тоже находит быстро.

Последний раз редактировалось Komplanar, 18.07.2018 в 08:25.
Komplanar вне форума  
 
Непрочитано 18.07.2018, 08:31
#328
baksconstructor


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


Цитата:
Сообщение от Komplanar Посмотреть сообщение
По каким-то причинам прога плохо переваривает рамки, сделанные из простых незамкнутых полилиний
1. Приложите пример.
2. А зачем вы создаёте рамки отрезками из полилиний ?
3. Поставьте галочку "Отрезками", найдёт всё без взрывов.
baksconstructor вне форума  
 
Непрочитано 18.07.2018, 09:10
#329
baksconstructor


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


Komplanar
Для вашего случая - в настройках Реверс - настройки поиска отрезков - указать алгоритм "Полный".
Тогда взрывать ничего не нужно.
Миниатюры
Нажмите на изображение для увеличения
Название: поиск отдельных полилиний.png
Просмотров: 65
Размер:	143.8 Кб
ID:	204577  
baksconstructor вне форума  
 
Непрочитано 18.07.2018, 09:47
#330
Komplanar


 
Регистрация: 07.01.2014
Сообщений: 3,488


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Komplanar
Для вашего случая - в настройках Реверс - настройки поиска отрезков - указать алгоритм "Полный".
Тогда взрывать ничего не нужно.
Чёт не помогло. Прилагаю тестовый файл с пустыми листами, работает либо после взрывания внешней рамки в отрезки, либо после вычерчивания дополнительной рамки поверх.
Тест определения штампов.dwg
Komplanar вне форума  
 
Непрочитано 18.07.2018, 10:04
#331
allar8


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


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
1. Приложите пример.
2. А зачем вы создаёте рамки отрезками из полилиний ?
Скорее всего ничего вопрошающий не создавал а получил файл от смежников или подрядчиков и этот файл надо быстренько распечатать, а лишние манипуляции по подготовке файла для печати через реверс как всегда нет.
Мне тоже знакома такая проблема.
Но я не парюсь с настройками реверс. Быстрее обвести специально созданным для этой цели блоком, ну или можно и полилиниями обвести.
Для ускорения обвода - нужно копировать командой _copy подготовленную обводную рамку для одинаковых форматов
Блок обводной рамки приложил
Так полюбому бысрее получается чем каждый раз вспоминать настройки реверса, т.к. печатаешь всякие левые форматы реже
Ну или надо для сябя делать записки с настройками реверса
Что бы избегать проблем при печати левых рамок - мы на будущее всегда подрядчиков обязываем, если есть возможность - оформлять с нашими рамками.

Последний раз редактировалось allar8, 21.02.2021 в 15:28.
allar8 вне форума  
 
Непрочитано 18.07.2018, 11:05
#332
baksconstructor


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


Цитата:
Сообщение от Komplanar Посмотреть сообщение
Прилагаю тестовый файл с пустыми листами
Очень странные линии...
Откуда (из какой программы) получены рамки ?
Суть в том что полилинии рамки невозможно редактировать и у них есть "Уровень" в свойствах, который не равен 0.
Точки этих полилиний невозможно сдвинуть перпендикулярно (точки нижней полилинии нельзя подвинуть вниз).
Если обнулить "уровень" то всё слетает в одну линию.
Реверс их не берёт, походу из-за этого.
Цитата:
Сообщение от allar8 Посмотреть сообщение
Быстрее обвести специально созданным для этой цели блоком, ну или можно и полилиниями обвести.
Согласен, при таких линиях только так.
baksconstructor вне форума  
 
Непрочитано 18.07.2018, 12:16
#333
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 1,458


Некая альтернатива Реверсу:
если все создано в модели, то для быстрого создания листов и пакетной печати мы пользуемся вот этим:
http://forum.dwg.ru/showthread.php?t=124456&page=3
ИМХО удобнее.
Oleg T вне форума  
 
Непрочитано 18.07.2018, 12:24
#334
baksconstructor


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


Цитата:
Сообщение от Oleg T Посмотреть сообщение
Некая альтернатива Реверсу
см. шапку - п.9
Offtop: Мы Реверс для печати из модели используем, без создания листов, чтобы сохранять в ПДФ с определёнными именами, но он и создавать листы тоже может
baksconstructor вне форума  
 
Непрочитано 07.08.2018, 17:27
#335
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Здравствуйте! Наш проектный институт коснулась эта PDF напасть, теперь всех разработчиков заставляют PDFить самим по листам, склеивать и сдавать. Мной четыре года назад был разработан модуль разбиения по листам из модели. Модуль кустарный но устраивает. Сейчас встал вопрос к модулю прикрутить печаталку ПДФ. Думаю модуль РЕВЕРС скорее всего покрыл проблему но руководство анно. Полазив в интернете нашел вот такой код:
Код:
[Выделить все]
    using System;
    using System.Globalization;
    using System.Linq;
    using System.Text.RegularExpressions;
    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.Geometry;
    using Autodesk.AutoCAD.LayerManager;
    using Autodesk.AutoCAD.PlottingServices;
    using Autodesk.AutoCAD.Runtime;
    using System.Runtime.InteropServices;
    using Exception = System.Exception;
    using PlotType = Autodesk.AutoCAD.DatabaseServices.PlotType;
     
    namespace AutocadTestProject {
        public class AutocadTest : IExtensionApplication {
          [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
          static extern int acedTrans13(double[] point, IntPtr fromRb,  IntPtr toRb, int disp, double[] result);
          [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
          static extern int acedTrans12(double[] point, IntPtr fromRb, IntPtr toRb,  int disp, double[] result);
          static int acedTrans(double[] point, IntPtr fromRb, IntPtr toRb, int disp, double[] result)
          {
            return Application.Version.Major > 12 ?
              acedTrans13(point, fromRb, toRb, disp, result) :
              acedTrans12(point, fromRb, toRb, disp, result);
          }
     
            public string DocumentName;
     
            [CommandMethod("PrintTest1")]
            public void Test1() {
                var scale = 50;
                var doc = Application.DocumentManager.MdiActiveDocument;
                DocumentName = doc.Name;
                try {
                    using (doc.LockDocument()) {
                        using (var tr = doc.TransactionManager.StartTransaction()) {
                            var db = doc.Database;
                            using (var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable) {
                                if (bt == null) throw new Exception("block table is null");
                                using (var model_space = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord) {
                                    if (model_space == null) throw new Exception("model space is null");
                                    using (var layout = tr.GetObject(model_space.LayoutId, OpenMode.ForRead) as Layout) {
                                        if (layout == null) throw new Exception("layout is null");
                                        SetPlotSettingsAndPrint(@"DWG to PDF.pc3", layout, scale);
                                    }
                                }
                            }
                            tr.Commit();
                        }
                    }
                } catch (Exception exception) {
                    doc.Editor.WriteMessage("Exception: " + exception.Message);
                }
            }
     
            public void SetPlotSettingsAndPrint(string plotter_name, Layout layout, double scale, int copy_count = 1) {
                var psv = PlotSettingsValidator.Current;
                using (var ps = new PlotSettings(layout.ModelType)) {
                    ps.CopyFrom(layout);
                    psv.SetPlotConfigurationName(ps, plotter_name, null);
                    psv.RefreshLists(ps);
                    var media_name = SetClosestMediaName(ps, new Point2d(210, 297));
                    if (String.IsNullOrEmpty(media_name)) {
                        throw new Exception("Paper format not found");
                    }
                    psv.SetPlotPaperUnits(ps, PlotPaperUnit.Millimeters);
                    psv.SetPlotOrigin(ps, Point2d.Origin);
                    psv.SetUseStandardScale(ps, false);
                    psv.SetCustomPrintScale(ps, new CustomScale(1, 1.004 * scale));
                    psv.SetPlotRotation(ps, ps.PlotRotation == PlotRotation.Degrees000 ? PlotRotation.Degrees180 : PlotRotation.Degrees270);
                    Point3d p1 = new Point3d(0.126985232607694, -0.501646732562222, 0);
                    Point3d p2 = new Point3d(10500.1269852326, 14849.4983532674, 0);
     
                    ResultBuffer rbFrom = new ResultBuffer(new TypedValue(5003, 0)),
                                 rbTo =   new ResultBuffer(new TypedValue(5003, 2));
                    double[] p1res = new double[] { 0, 0, 0 };
                    double[] p2res = new double[] { 0, 0, 0 };
                    acedTrans(p1.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject,  0, p1res);
                    acedTrans(p2.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject,  0, p2res);
                    psv.SetPlotWindowArea(ps, new Extents2d(p1res[0], p1res[1], p2res[0], p2res[1]));
                    psv.SetPlotType(ps, PlotType.Window);
    //                psv.SetPlotCentered(ps, info.PrintCenteredUse);
                    ps.PrintLineweights = true;
                    for (var i = 0; i < copy_count; i++) {
                        PrintLayout(ps, layout.ObjectId, layout.LayoutName, @"c:\temp.pdf");
                    }
                }
            }
     
            private class SelectedMedia {
                public double Offset = 0.0;
                public string Name = "";
                public PlotRotation Rotation = PlotRotation.Degrees000;
     
                public void Update(string name, double offset, PlotRotation rotation_type) {
                    Name = name;
                    Offset = offset;
                    Rotation = rotation_type;
                }
            }
     
            public string SetClosestMediaName(PlotSettings ps, Point2d need_layout_size, bool match_printable_area = true) {
                var psv = PlotSettingsValidator.Current;
                psv.SetUseStandardScale(ps, false);
                psv.SetStdScaleType(ps, StdScaleType.ScaleToFit);
                psv.RefreshLists(ps);
     
                var canonical_media_name_list = psv.GetCanonicalMediaNameList(ps);
                var selected = new SelectedMedia {
                    Offset = 0.0,
                    Name = "",
                    Rotation = PlotRotation.Degrees000,
                };
     
                foreach (var name in canonical_media_name_list) {
                    var width = 0.0;
                    var height = 0.0;
                    var fast_size = true;
                    try {
                        var locale_name = psv.GetLocaleMediaName(ps, name);
                        var size = GetSizeByLocaleMediaName(locale_name);
                        width = size.X;
                        height = size.Y;
                    } catch {
                        psv.SetCanonicalMediaName(ps, name);
                        psv.SetPlotPaperUnits(ps, PlotPaperUnit.Millimeters);
                        width = ps.PlotPaperSize.X;
                        height = ps.PlotPaperSize.Y;
                        fast_size = false;
                    }
     
                    var rotation_type = width + 0.1 < need_layout_size.X || height + 0.1 < need_layout_size.Y ? PlotRotation.Degrees090 : PlotRotation.Degrees000;
                    var offset = Math.Abs(width * height - need_layout_size.X * need_layout_size.Y);
                    if (String.IsNullOrEmpty(selected.Name) || offset < selected.Offset) {
                        selected.Update(name, offset, rotation_type);
                    }
                    if (rotation_type == PlotRotation.Degrees090 && (height < need_layout_size.X || width < need_layout_size.Y)) continue;
                    if (fast_size) {
                        psv.SetCanonicalMediaName(ps, name);
                        psv.SetPlotPaperUnits(ps, PlotPaperUnit.Millimeters);
                        width = ps.PlotPaperSize.X;
                        height = ps.PlotPaperSize.Y;
                    }
                    if (match_printable_area) {
                        width -= (ps.PlotPaperMargins.MinPoint.X + ps.PlotPaperMargins.MaxPoint.X);
                        height -= (ps.PlotPaperMargins.MinPoint.Y + ps.PlotPaperMargins.MaxPoint.Y);
                    }
                    offset = Math.Abs(width * height - need_layout_size.X * need_layout_size.Y);
     
                    if (String.IsNullOrEmpty(selected.Name) || offset < selected.Offset) {
                        selected.Update(name, offset, rotation_type);
                        if (Math.Abs(selected.Offset) < 0.01) break;
                    }
                }
     
                psv.SetCanonicalMediaName(ps, selected.Name);
                psv.SetPlotRotation(ps, selected.Rotation);
                return psv.GetLocaleMediaName(ps, selected.Name);
            }
     
            private Point2d GetSizeByLocaleMediaName(string locale_media_name) {
                var reg = new Regex(@"^.+?\((\d+(?:[,.]\d*)?)[^\d]+(\d+(?:[,.]\d*)?)[^\d]+\)$");
                if (!reg.IsMatch(locale_media_name)) {
                    locale_media_name = String.Format("temp({0})", locale_media_name);
                }
                var matches = reg.Matches(locale_media_name);
                var x = Convert.ToDouble(matches[0].Groups[1].Value.Replace(",", "."), NumberFormatInfo.InvariantInfo);
                var y = Convert.ToDouble(matches[0].Groups[2].Value.Replace(",", "."), NumberFormatInfo.InvariantInfo);
                var point = new Point2d(x, y);
                return point;
            }
     
            public void PrintLayout(PlotSettings plot_settings, ObjectId layout_id, string layout_name, string filename = "") {
                var bg_plot = Application.GetSystemVariable("BACKGROUNDPLOT");
                try {
                    Application.SetSystemVariable("BACKGROUNDPLOT", 0);
     
                    if (PlotFactory.ProcessPlotState != ProcessPlotState.NotPlotting) throw new Exception("Плоттер в данный момент занят");
                    using (var plot_info = new PlotInfo {Layout = layout_id}) {
                        plot_info.OverrideSettings = plot_settings;
                        Print(layout_name, plot_info, filename);
                    }
     
                } finally {
                    Application.SetSystemVariable("BACKGROUNDPLOT", bg_plot);
                }
            }
     
            protected void Print(string layout_name, PlotInfo plot_info, string filename) {
                using (var plot_info_validator = new PlotInfoValidator {MediaMatchingPolicy = MatchingPolicy.MatchEnabled}) {
                    plot_info_validator.Validate(plot_info);
                }
                using (var plot_engine = PlotFactory.CreatePublishEngine()) {
                    using (var plot_dialog = new PlotProgressDialog(false, 1, true)) {
                        plot_dialog.set_PlotMsgString(PlotMessageIndex.DialogTitle, "Печать листа");
                        plot_dialog.set_PlotMsgString(PlotMessageIndex.SheetName, String.Format(" Печатается лист : {0}", layout_name));
                        plot_dialog.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Отмена печати");
                        plot_dialog.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Выполнение печати:");
     
                        plot_dialog.LowerPlotProgressRange = 0;
                        plot_dialog.UpperPlotProgressRange = 100;
                        plot_dialog.PlotProgressPos = 0;
     
                        plot_dialog.OnBeginPlot();
                        plot_dialog.IsVisible = true;
     
                        plot_engine.BeginPlot(plot_dialog, null);
                        plot_engine.BeginDocument(plot_info, DocumentName, null, 1, !String.IsNullOrEmpty(filename), filename);
     
                        plot_dialog.OnBeginSheet();
                        plot_dialog.LowerSheetProgressRange = 0;
                        plot_dialog.UpperSheetProgressRange = 100;
                        plot_dialog.SheetProgressPos = 0;
     
                        using (var plot_page_info = new PlotPageInfo()) {
                            plot_engine.BeginPage(plot_page_info, plot_info, true, null);
                            plot_engine.BeginGenerateGraphics(null);
                            plot_dialog.SheetProgressPos = 50;
                            plot_engine.EndGenerateGraphics(null);
                            plot_engine.EndPage(null);
                        }
     
                        plot_dialog.SheetProgressPos = 100;
                        plot_dialog.OnEndSheet();
     
                        plot_engine.EndDocument(null);
     
                        plot_dialog.PlotProgressPos = 100;
                        plot_dialog.OnEndPlot();
                        plot_engine.EndPlot(null);
                    }
                }
            }
     
            public void Initialize() {
                    
            }
     
            public void Terminate() {
                
            }
        }
    }
автор Александр Ривилис
Как я понял с небольшими доработками, а именно подача координат и выбор размеров листов, он меня должен был полностью удовлетворить если бы не одно но... Мы используем Bricscad...
Первая проблема отсутствие в брикскаде все что касается plot_dialog, я как понял это диалоговое окно, для моего кустарного модуля такая роскошь особо не нужна, комментами выпилил.
Вторая и самая плохая проблема, в коде используется вот такаие строчки:
Код:
[Выделить все]
[DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
      static extern int acedTrans13(double[] point, IntPtr fromRb,  IntPtr toRb, int disp, double[] result);
      [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
      static extern int acedTrans12(double[] point, IntPtr fromRb, IntPtr toRb,  int disp, double[] result);
      static int acedTrans(double[] point, IntPtr fromRb, IntPtr toRb, int disp, double[] result)
      {
        return Application.Version.Major > 12 ?
          acedTrans13(point, fromRb, toRb, disp, result) :
          acedTrans12(point, fromRb, toRb, disp, result);
      }
Не много подправив Брикскад при запуске говорит следующее"не удается найти точку входа "acedtrans" в DLL "bricscad.exe" поиск в интернете не дал результата и не понятно вообще есть в bricscad-е этот acedtrans. Помогите кто сталкивался с такой проблемой, можно ли обойтись без acedtrans или подскажите как печатать по-другому(с использованием какого нибудь стороннего принтера или еще чего нибудь). Если кто сталкивался накидайте ссылки на другие методы печати из автокада (брикскад не найдете мне кажется) в vb.net или C#.net.
veb86 вне форума  
 
Автор темы   Непрочитано 07.08.2018, 17:29
#336
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от veb86 Посмотреть сообщение
но руководство анно
А можно узнать причину ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 07.08.2018, 17:33
#337
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,009


veb86,
Вроде у Брискада отвечают на вопросы пользователей, насколько слышал.. ) А так - Вricscad developer reference
Сергей812 вне форума  
 
Непрочитано 07.08.2018, 17:54
#338
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Цитата:
Сообщение от maratovich Посмотреть сообщение
А можно узнать причину ?
Мы в свое время купили программу пакетной печати и под нее разбивали по листам, она брала все листы с сохранением структуры папок. Т.е. можно было целый проект с глубокой структурой папок загнать и на выходе получить туже структуру папок только с уже от ПДФинами файлами. Но это программа ПДФит через одно место, т.е. на входе А1 а на выходе как указал в настройках. Указал А4 все что попало в печать будет А4 и не важно лист А0 или не стандарт, ну и что что при приближении видно ничего не будет. За то разраб молодец новую версию выпустил коперайт подправил, все по ржали. Кому интерессно могу программу сказать только завтра
За софт у нас отвечает системный администратор программист, я ему говорил нужна программа и это не дело что я сижу и ПДФю много времени уходит. Программу РЕВЕРС мне посоветовали коллеги, по своим коридорам узнал, говорю вот как классно делает показал видео. Он посмотрел и сказал что это все фигня, там на против каждого формата надо выбирать принтер и указывать формат листа печати, это опять будет тоже самое, каждый лист указывай какого он формата, вообщем это поле напугало его. Он начал говорить типо опять купим, опять все будет плохо, опять будет валятся. Ему нужно видео где все работает автоматом, открыл чертеж нашел листы и их форматы, нажал кнопку и получил ПДФы. минимум действий.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Вроде у Брискада отвечают на вопросы пользователей, насколько слышал.. ) А так - Вricscad developer reference
Они чудные, жесть, я им один раз задал вопрос по API, тоже каких то функций автокадовских не хватало. Они мне сразу. Предъявите номер лицензионного продукта и напишите пожалуйста с почты на которую закуплены лицензии. Я им а как я буду общатся с вами с почты организации в которую я не имею доступа. Короче я забил на общение с ними, можно на их форуме пообщаться, но мне как то dwg,ru ближе, роднее Начал с Вас!

----- добавлено через ~2 мин. -----
Еще посоветуйте модераторы, мне этот вопрос повторить в ветке программирование -> NET или не надо. Что бы разработчики вопрос видели.
veb86 вне форума  
 
Непрочитано 07.08.2018, 18:07
#339
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,009


Цитата:
Сообщение от veb86 Посмотреть сообщение
Они мне сразу. Предъявите номер лицензионного продукта и напишите пожалуйста с почты на которую закуплены лицензии. Я им а как я буду общатся с вами с почты организации в которую я не имею доступа.
Вы бы уточнили - что только процесс идентификации идет через ту почту или всегда надо общаться только через нее. В крайнем случае можно же договориться, что пересылать через ту почту и обратно - скорее всего это почта айтишников. Если последние вменяемые, конечно..
Сергей812 вне форума  
 
Автор темы   Непрочитано 07.08.2018, 19:06
#340
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от veb86 Посмотреть сообщение
Он посмотрел и сказал что это все фигня, там на против каждого формата надо выбирать принтер и указывать формат листа печати, это опять будет тоже самое, каждый лист указывай какого он формата, вообщем это поле напугало его. Он начал говорить типо опять купим, опять все будет плохо, опять будет валятся.
Плох ваш администратор (небось 1С программирует), не пробуя ничего, сразу давать своё решение - не есть гуд.
В Реверс всего один раз указывается в шаблоне какой формат на какой принтер отсылать, а при дальнейшей работе 2 кнопки - Найти и Печать, и всё готово.
Шаблоны сохраняются и выбирать заново не требуется.

По поводу Bricscad - многое зависит от версии (года), это не полный аналог Автокада и возможно что то не работает. Надеюсь у вас Bricscad больше 2012.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Пакетная печать множества рамок (форматов) из пространства модели.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли печатать массив чертежей из пространства модели softer AutoCAD 3 28.02.2011 13:57
Опять про печать из модели нескольких листов gizmo_zx Программирование 2 28.09.2010 12:33
Печать из пространства листа dimcoff AutoCAD 6 06.02.2009 22:53
Программное позиционирование пространства модели во ViewPort Danger_pgs Программирование 8 10.06.2008 20:42
Автоматическая печать из пространства модели Дмитрий_В AutoCAD 9 19.04.2006 16:52