14/04/2015
Изменение путей к растрам в чертеже с абсолютных на относительные
Ниже показан пример кода, который позволяет изменить абсолютные пути к файлам растров на относительные пути (по отношению к пути к файлу чертежа). Те же пути к растрам, которые уже были относительными, остаются неизменными.
Код - C#: [Выделить]
- using System.IO;
- Document doc
- = Application.DocumentManager.MdiActiveDocument;
- Editor ed = doc.Editor;
- string dwgFilePath = null ;
- dwgFilePath = @"D:\Temp\Test.dwg" ;
- using (Database db = new Database(false , true ))
- {
- db.ReadDwgFile(dwgFilePath,
- FileOpenMode.OpenForReadAndWriteNoShare,
- false , "" );
- using (Transaction tr
- = db.TransactionManager.StartTransaction())
- {
- DBDictionary nod = tr.GetObject(
- db.NamedObjectsDictionaryId,
- OpenMode.ForRead) as DBDictionary;
- ObjectId imageDictId = nod.GetAt("ACAD_IMAGE_DICT" );
- DBDictionary imageDict
- = tr.GetObject(imageDictId, OpenMode.ForRead)
- as DBDictionary;
- foreach (DBDictionaryEntry dbDictEntry in imageDict)
- {
- RasterImageDef rasterImageDef = tr.GetObject(
- dbDictEntry.Value,
- OpenMode.ForWrite) as RasterImageDef;
- ed.WriteMessage("{0} Старый путь : {1}" ,
- Environment.NewLine, rasterImageDef.SourceFileName);
- try
- {
- if (File.Exists(rasterImageDef.SourceFileName))
- {
- dynamic dwgPathUri
- = new Uri(dwgFilePath);
- dynamic rasterImagePathUri
- = new Uri(rasterImageDef.SourceFileName);
- // Делаем путь к растру относительным
- // к пути чертежа
- dynamic relativeRasterPathUri
- = dwgPathUri.MakeRelativeUri
- (rasterImagePathUri);
- // Устанавливаем путь как относительный
- rasterImageDef.SourceFileName
- = Uri.UnescapeDataString(
- relativeRasterPathUri.ToString());
- ed.WriteMessage(
- "{0} Путь к растру изменен на: {1}" ,
- Environment.NewLine,
- rasterImageDef.SourceFileName);
- // Перезагружаем растр в AutoCAD, чтобы обновить
- // активный путь к файлу
- rasterImageDef.Load();
- // Проверяем нашли ли мы его
- ed.WriteMessage("{0} Растр найден по пути: {1}" ,
- Environment.NewLine,
- rasterImageDef.ActiveFileName);
- }
- }
- catch (UriFormatException ex)
- {
- // Можем проигнорировать это.
- // Если путь к растру уже был относительный,
- // то мы можем пропустить это исключение
- }
- }
- tr.Commit();
- }
- db.SaveAs(db.OriginalFileName,
- true ,
- db.OriginalFileVersion,
- db.SecurityParameters);
- }
Автор перевода: Александр Ривилис
Отредактировано 14.04.2015 в 01:18:13
Обсуждение: http://adn-cis.org/forum/index.php?topic=2632
Опубликовано 14.04.2015Отредактировано 14.04.2015 в 01:18:13