|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Автоматизация экспорта Листов командой ЭКСПОРТВЭЛИСТА
Регистрация: 21.06.2013
Сообщений: 11
|
||
Просмотров: 9641
|
|
||||
Offtop: Я бы использовал в таком случаи, например: у нас есть 25 листов и нам необходимо смежникам передать 14, 18 и 23. Можно отправить весь проект, можно сидеть "вырывать" по листам, а можно через способ, о котором пишет автор темы. Да и заказчику можно отдать кучу файлов
![]()
__________________
Лучше не обещать, чем обещать и не исполнять. |
||||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Удали лишние закладки, оставь 14, 18 и 23 и передай.
Всей работы - 1,5 мин.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Цитата:
![]() Но считаю, что задумка Ali111 не совсем индивидуального характера и кому-то еще пригодится.
__________________
Лучше не обещать, чем обещать и не исполнять. |
||||
![]() |
|
||||
Цитата:
Заказчику лучше передавать чертежи в pdf - уже сшитые в файл, чтобы не мучился ![]() А выдавать полный комплект в dwg (с листами, подшивками и т.п.), да если это типовой проект - это перебор.
__________________
Лучше не обещать, чем обещать и не исполнять. |
||||
![]() |
|
||||
Регистрация: 21.06.2013
Сообщений: 11
|
Итак на счет ЗАЧЕМ это нужно ЭКСПОРТВЭЛИСТА:
1 неумение смежников или нехотенье смежников работать в листах 2 слабые ПК смежников. 3 предыдущие версии автокада у смежников 4 куча вопросов смежников "как и с чем едят эти листы" 5 ... Сможете дайте пожалуйста готовое решение. ежели нет оного. Может обсудим как это можно реализовать. В лиспе или макросах или может в .net FV Решив в какой среде можно это сделать, можно приступить к поиску как это сделать в данной среде. Полагаю что можно реализовать сие решение в .net FV, (ваше мнение приветствуется. ПОПРАВЬТЕ и НАПРВЬТЕ) но в визуале не работал. приветствуются полезные ссылки на учебные материалы по данной теме, но ссылки нужны с указанием темы, можно и страницы к указываемому материалу То есть как можно ближе к цели, с наименьшими затратами времени. "Время дорого-течет в одном направлении, золото можно вернуть, время врядли" |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
На курсы
Листы или нет - пофигу. Скорость обработки файла от этого практически не зависит. DWG TrueView решит и эту, и массу других проблем. Если не DWG TrueView - то Bentley XN View. На курсы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
![]() |
Ali111, сдаётся мне, что вы решаете последствия, а не причину проблемы.
Плевать на листы. Что вы передаёте смежникам? Архитектурные планы с нанесёнными на них вашими сетями? Что потом они делают с вашими чертежами? Удаляют вашу архитектуру, берут ваши сети, и подгружают по частям (т.к. всё разбито на куски) к своим чертежам? А не проще ли отдать им весь этаж (скажем) целиком, и пусть уже сами оформляют как хотят? На самом деле, настроить этот процесс большая работа, и в рамках одного сообщения на форуме я не могу охватить все возможные варианты совместной работы. Но экспортировать листы для того, что бы передать эти кусочки смежникам - мартышкин (читай, лишний) труд. Вы хотите решить проблему, а не заниматься устранением последствий? Залезьте глубже в вопросы совместной работы, почитайте, хотя бы http://dwg.ru/dnl/139, и ссылки, приведённые там в описании (это всё уже старое, но направление куда копать может дать). Посмотрите, что такое внешняя ссылка. Обратите внимание, первая же реакция на любой вопрос к программистам "помогите автоматизировать то, то и то" - "ЗАЧЕМ?". Очень часто люди пытаются решить последствия своих проблем, не пытаясь вдуматься и начать решать непосредственно САМИ проблемы. Мне очень понравился первый же абзац сказки про винни-пуха: Цитата:
Offtop: Я не пил! Ни капельки!
__________________
Алексей Последний раз редактировалось bargool, 24.06.2013 в 08:43. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
На самом деле, надо было автору еще в самом начале дать ссылку http://forum.dwg.ru/forumdisplay.php?f=33
Там наверняка найдутся люди могущие помочь за толику малую. |
|||
![]() |
|
||||
http://forums.autodesk.com/t5/AutoCA...e/td-p/2881158
Thanks for your input. I have written a quick little lisp without any frills but since i will be the only one using it, i am not concerned. I tested it on one drawing with 11 ps layouts and it worked so i'm going to use it as is. If you're interested, here it is. ~~~~~~~~~~~~~~~~~~~~~~~~~~ (defun c:eal (/ lo loList) (setvar "FILEDIA" 0) (foreach lo (layoutlist) (progn (setvar "CTAB" lo) (command "exportlayout" "") ) ) (setvar "FILEDIA" 1) ) ~~~~~~~~~~~~~~~~~~~~~~~~~~ P.S. I tested - Ok А вот откуда эта тварь (автогадовская) берет dwt при создании нового dwg - это вопрос вопросов ??? Дело в том, что новые (экспортированные в модель) dwg у меня с двумя пустыми (без ВЭ) вкладками листов. Задача max - найти *.dwt на основе которого создаются такие файлы (цель прописать набор параметров листов виртуального принтера). not tested http://www.theswamp.org/index.php?topic=44472.0 http://forums.autodesk.com/t5/NET/Se...d/td-p/3882929 /// ExportLayouts.cs (c) 2013 Tony Tanzillo /// /// AutoCAD.NET API sample that automates /// the EXPORTLAYOUT command to export all /// layouts in the current document. /// /// Two versions of the command are included. /// The second version (EXPORTLAYOUTS2) requires /// a reference to AcExportLayout.dll. using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Linq.Expressions; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; /// Needed with EXPORTLAYOUTS2 command only, and /// requires a reference to AcExportLayout.dll: using AcExportLayout = Autodesk.AutoCAD.ExportLayout; namespace ExportLayoutsExample { public static class ExportLayoutsCommands { /// <summary> /// Automates the EXPORTLAYOUT command to export /// all paper space layouts to .DWG files. /// /// In this example, we export each layout to /// a drawing file in the same location as the /// current drawing, wherein each file has the /// name "<dwgname>_<layoutname>.dwg". /// /// This is not a functionally-complete example: /// /// No checking is done to see if any of the /// files already exist, and existing files /// are overwritten without warning or error. /// /// No checking is done to detect if an existing /// file exists and is in-use by another user, or /// cannot be overwritten for any other reason. /// /// No checking is done to ensure that the user /// has sufficient rights to write files in the /// target location. /// /// You can and should deal with any or all of /// the above as per your own requirements. /// /// </summary> [CommandMethod( "EXPORTLAYOUTS" )] public static void ExportLayoutsCommand() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var editor = doc.Editor; try { if( (short) Application.GetSystemVariable( "DWGTITLED" ) == 0 ) { editor.WriteMessage( "\nCommand cannot be used on an unnamed drawing" ); return; } string format = Path.Combine( Path.GetDirectoryName( doc.Name ), Path.GetFileNameWithoutExtension( doc.Name ) ) + "_{0}.dwg"; string[] names = null; using( Transaction tr = doc.TransactionManager.StartTransaction() ) { // Get the localized name of the model tab: BlockTableRecord btr = (BlockTableRecord) SymbolUtilityServices.GetBlockModelSpaceId( db ) .GetObject( OpenMode.ForRead ); Layout layout = (Layout) btr.LayoutId.GetObject( OpenMode.ForRead ); string model = layout.LayoutName; // Open the Layout dictionary: IDictionary layouts = (IDictionary) db.LayoutDictionaryId.GetObject( OpenMode.ForRead ); // Get the names and ids of all paper space layouts into a list: names = layouts.Keys.Cast<string>() .Where( name => name != model ).ToArray(); tr.Commit(); } int cmdecho = 0; #if DEBUG cmdecho = 1; #endif using( new ManagedSystemVariable( "CMDECHO", cmdecho ) ) using( new ManagedSystemVariable( "CMDDIA", 0 ) ) using( new ManagedSystemVariable( "FILEDIA", 0 ) ) using( new ManagedSystemVariable( "CTAB" ) ) { foreach( string name in names ) { string filename = string.Format( format, name ); editor.WriteMessage( "\nExporting {0}\n", filename ); Application.SetSystemVariable( "CTAB", name ); editor.Command( "._EXPORTLAYOUT", filename ); } } } catch( System.Exception ex ) { #if DEBUG editor.WriteMessage( ex.ToString() ); #else throw ex; #endif } } /// <summary> /// /// Doesn't use the command line, requires AutoCAD R12 /// or later and a reference to AcExportLayout.dll: /// /// This version can be used from the application context, /// which can make it easier to use in a batch process that /// exports layouts of many files. /// /// The example also shows how to use the AcExportLayout /// component to export a layout to an in-memory Database /// without creating a drawing file. /// /// </summary> [CommandMethod( "EXPORTLAYOUTS2", CommandFlags.Session )] public static void ExportLayouts2() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var editor = doc.Editor; try { if( (short) Application.GetSystemVariable( "DWGTITLED" ) == 0 ) { editor.WriteMessage( "\nCommand cannot be used on an unnamed drawing" ); return; } string format = Path.Combine( Path.GetDirectoryName( doc.Name ), Path.GetFileNameWithoutExtension( doc.Name ) ) + "_{0}.dwg"; Dictionary<string, ObjectId> layouts = null; using( doc.LockDocument() ) { using( Transaction tr = doc.TransactionManager.StartTransaction() ) { // Get the localized name of the model tab: BlockTableRecord btr = (BlockTableRecord) SymbolUtilityServices.GetBlockModelSpaceId( db ) .GetObject( OpenMode.ForRead ); Layout layout = (Layout) btr.LayoutId.GetObject( OpenMode.ForRead ); string model = layout.LayoutName; // Open the Layout dictionary: IDictionary layoutDictionary = (IDictionary) db.LayoutDictionaryId.GetObject( OpenMode.ForRead ); // Get the names and ids of all paper space layouts // into a Dictionary<string,ObjectId>: layouts = layoutDictionary.Cast<DictionaryEntry>() .Where( e => ( (string) e.Key ) != model ) .ToDictionary( e => (string) e.Key, e => (ObjectId) e.Value ); tr.Commit(); } /// Get the export layout 'engine': Autodesk.AutoCAD.ExportLayout.Engine engine = Autodesk.AutoCAD.ExportLayout.Engine.Instance(); using( new ManagedSystemVariable( "CTAB" ) ) { foreach( var entry in layouts ) { string filename = string.Format( format, entry.Key ); editor.WriteMessage( "\nExporting {0} => {1}\n", entry.Key, filename ); Application.SetSystemVariable( "CTAB", entry.Key ); using( Database database = engine.ExportLayout( entry.Value ) ) { if( engine.EngineStatus == AcExportLayout.ErrorStatus.Succeeded ) { database.SaveAs( filename, DwgVersion.Newest ); } else { editor.WriteMessage( "\nExportLayout failed: ", engine.EngineStatus.ToString() ); break; } } } } } } catch( System.Exception ex ) { #if DEBUG editor.WriteMessage( ex.ToString() ); #else throw ex; #endif } } } public static class EditorInputExtensionMethods { public static PromptStatus Command( this Editor editor, params object[] args ) { if( editor == null ) throw new ArgumentNullException( "editor" ); return runCommand( editor, args ); } static Func<Editor, object[], PromptStatus> runCommand = GenerateRunCommand(); static Func<Editor, object[], PromptStatus> GenerateRunCommand() { MethodInfo method = typeof( Editor ).GetMethod( "RunCommand", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ); var instance = Expression.Parameter( typeof( Editor ), "instance" ); var args = Expression.Parameter( typeof( object[] ), "args" ); return Expression.Lambda<Func<Editor, object[], PromptStatus>>( Expression.Call( instance, method, args ), instance, args ) .Compile(); } } /// <summary> /// Automates saving/changing/restoring system variables /// </summary> public class ManagedSystemVariable : IDisposable { string name = null; object oldval = null; public ManagedSystemVariable( string name, object value ) : this( name ) { Application.SetSystemVariable( name, value ); } public ManagedSystemVariable( string name ) { if( string.IsNullOrWhiteSpace( name ) ) throw new ArgumentException( "name" ); this.name = name; this.oldval = Application.GetSystemVariable( name ); } public void Dispose() { if( oldval != null ) { object temp = oldval; oldval = null; Application.SetSystemVariable( name, temp ); } } } } Последний раз редактировалось perpetule, 04.09.2013 в 23:37. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ищи понятие "шаблона для ЙТУЦЭ
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Цель была работать в файле(ах) AiO (в подшивке, с пакетной печатью) и по завершении разбирать вышеозначенным лиспом и ЭКСПОРТВЭЛИСТА на файл-лист (в архив/совместимость и для последующего использования как образца для других проектов/вес). При инициализированных листах и наличии НПЛ в полученных файл-лист - засунуть в другую подшивку с пакетной печатью довольно легкая задача, но ЭКСПОРТВЭЛИСТА не дает такой возможности, он тупо создает две вкладки лист1 лист2 без ВЭ. Сразу работать как предлагает автодеск файл-лист нет никакого желания, т.к. при банальном вылете в фатал, нужно диспетчером просмотреть и восстановить кол-во файлов открытых на момент падения (= кол-ву листов). Можно оказывается и с ВЭ, правда вдвое меньше чем надо бы - см. скрин галка создавать ВЭ на новых листах. Остается открытым вопрос передачи НПЛ, хотя бы лиспом пакетом в указанные файлы и инициализация листов, где-то попадалась сист переменная, указывавашая открывать всегда лист/всегда модель/л-или-м--последнее-открытое-ранее. Последний раз редактировалось perpetule, 09.09.2013 в 22:36. |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какая прелесть, эти наши ПРОСТРАНСТВО ЛИСТА и AutoCad! | BM60 | AutoCAD | 554 | 20.02.2024 06:23 |
Публикация листов подшивки с разными параметрами печати | Vildar | AutoCAD | 23 | 28.01.2018 05:31 |
Автоматизация функции экспорта в mif послойно | maks24 | Программирование | 5 | 31.10.2012 09:50 |
Как одной командой напечатать несколько листов? | Red Nova | AutoCAD | 14 | 22.01.2008 13:06 |
Автоматизация экспорта в AutoCAD из ADT. | игорёк | Программирование | 8 | 18.12.2007 17:13 |