Перейти к содержанию

Перенос Листов в отдельные файлы (не ехпортлайаут)


Рекомендуемые сообщения

Идея была в следущем: сохранить все листы в отдельные файлы - как листы с моделью где лежит ГП и изыскания. Генпланист нашёл на CADuser-е код который его устраивает по функционалу https://www.caduser.ru/forum/topic50883.html пост 3 и попросил его переделать под нанокад 20.1. На виртуалку был поставлен НС 64 20.1, ВС 2012 ап4 (как требовал СДК), поменял библиотеки и всё нормально откомпилировалось

а при запуске:
   Error during command executing: 'eWasOpenForWrite'

Хотя и методы и классы существуют...

сильно ругается на  db.SaveAs(dwgNewFullPath.Replace("\\", "\\\\"), DwgVersion.AC1021); - ему палки не нравятся что ли? :mellow:

W7 64 - VS насторена на 64 бит

 

Class1.txt

Ссылка на сообщение
Поделиться на другие сайты

а отладчик чего говорит?
 

Всякие дела с путями, если писать по хорошему, так как ниже колхозить не нужно.

dwgNewFullPath = dwgPath + "\\" + dwgNameWoExt + "_[" + acLayout.LayoutName + "]_.dwg";
db.SaveAs(dwgNewFullPath.Replace("\\", "\\\\"), DwgVersion.AC1021);

 

используйте System.IO.Path  и статические методы Combine и IsPathFullyQualified

Ссылка на сообщение
Поделиться на другие сайты

посмотрел код. Диагноз - "...все переделать". переписать надо по хорошему..
и сходу не понял "сохранить все листы в отдельные файлы" как это работает и что значит.
 

в исходной ссылке из на CADUSER говориться о том, что автор пытается "пересохранить этот файл в отдельные файлы с одним Листом в каждом файле", т.е. подразумевается то должен быть код, который меняет кол-во листов как минимум.
при этом в коде, как то не видно чтобы вообще что делали с листами в принципе.
вообщем, по моему скромному мнению, это не тот который следует "адаптировать", если он вообще работал.

Изменено пользователем Ivanco
Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Ivanco сказал:

при этом в коде, как то не видно чтобы вообще что делали с листами в принципе.

Похоже, там делается активным определенный лист и файл сохраняется со старым именем с добавкой имени листа.

Т.е., в результате получается набор фактически одинаковых файлов, но с разными активными лэйаутами.

Если это так, то полезность, действительно, сомнительная

Ссылка на сообщение
Поделиться на другие сайты

Полезность и правда практически нулевая, НО есть такое слово ЗАКАЗЧИК, вот ему и надо так "модель + 1 лист". И народ вручную это лопатит и деваться некуда. 

Попыталься хоть как-то помочь

Ссылка на сообщение
Поделиться на другие сайты

Надо вытащить db.SaveAs из транзанкции. Зачем второе сохранение не понял. Вот так работает:

 

var doc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        	var ed = doc.Editor;
        	var db = doc.Database;            
            var hs = Teigha.DatabaseServices.HostApplicationServices.Current;
            
            

            //получаем полный путь к DWG файлу 
            string dwgFullPath = hs.FindFile(doc.Name, doc.Database, Teigha.DatabaseServices.FindFileHint.Default);
            //получаем имя DWG файла 
            string dwgName = System.IO.Path.GetFileName(dwgFullPath);
            //получаем имя DWG файла без расширения 
            string dwgNameWoExt = System.IO.Path.GetFileNameWithoutExtension(dwgFullPath);
            //получаем путь к DWG файлу 
            string dwgPath = System.IO.Path.GetDirectoryName(dwgFullPath);
            //путь для сохранения новых DWG файлов 
            string dwgNewFullPath = "";
            //получаем путь к TEMP 
            string tempPath = System.IO.Path.GetTempPath();

            
            var layouts_names = new System.Collections.Generic.List<string>();
            
            using (Teigha.DatabaseServices.Transaction tr = db.TransactionManager.StartTransaction())
            {
            	var acLayouts = tr.GetObject(db.LayoutDictionaryId, Teigha.DatabaseServices.OpenMode.ForRead) as Teigha.DatabaseServices.DBDictionary;
                      
                //перебираем все вкладки 
                foreach (var item in acLayouts)
                {                     
                    var layout_name = item.Key;
                    
                    if (layout_name.ToUpper() != "MODEL" && layout_name.ToUpper() != "МОДЕЛЬ")
                    	layouts_names.Add(layout_name);
                }
            }
            
            
            var acLayoutMgr = Teigha.DatabaseServices.LayoutManager.Current;
            
            foreach (var layout_name in layouts_names) {
            	
            	acLayoutMgr.CurrentLayout = layout_name;
            	
                dwgNewFullPath = dwgPath + "\\" + dwgNameWoExt + "_[" + layout_name + "]_.dwg";
                                
                db.SaveAs(dwgNewFullPath, Teigha.DatabaseServices.DwgVersion.AC1021);
            }

 

Ссылка на сообщение
Поделиться на другие сайты

Не получилось, пишет:

Ошибка    1    Элемент "layouts_names" не существует в текущем контексте.    C:\Users\User764\Documents\Visual Studio 2012\Projects\ClassLibrary1\ClassLibrary1\Class1.cs    46    23    ClassLibrary1

Наверно что-то не так делаю ((


 

Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, Boroda888 сказал:

Он скорее всего Ваш..:D

W7 64b

NC 20.1 и 21 64b

Пробовал на 20.1

VS 2012 up4

Class1.cs 4 \u043a\u0411 · 1 загрузка

Хм. Там моя 1 строчка, в конце которой забыта точка с запятой. Отредактировал файл класса.

Class1.cs

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, все работает! С меня как нибудь... 

Прада 2 странных предупреждения было:

Предупреждение    1    Директива using для "System" ранее встречалась в этом пространстве имен    
Предупреждение    2    Директива using для "HostMgd.ApplicationServices" ранее встречалась в этом пространстве имен
Разве тоько одир раз вызывать можно? Нелогично...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
×
×
  • Создать...