ADN Open CIS
Сообщество программистов Autodesk в СНГ

10/08/2021

Доступ к файлам стандартов оформления AutoCAD (.dws)

У меня появился шанс исследовать эту проблему, когда я наткнулся на запрос на форуме.

Когда пользователь вызывает команду _LAYTRANS, появляется диалоговое окно транслятора слоёв, и пользователю разрешено сопоставление из загруженного рисунка на текущий рисунок.

Слои из загруженного чертежа сопоставляются со слоями в текущем чертеже или могут быть сопоставлены пользователем.

Эта настройка может быть сохранена в качестве файла стандартов (.dws), для будущего использования, когда пользователь получает рисунок от клиента, пользователь может проверить, соответствует ли чертеж указанным файлам стандартов.

Файл стандартов оформления содержит таблицу трансляции слоёв в виде расширенных данных для каждого из слоёв, которые могут быть сопоставлены или транслированы.

Например, в этом файле есть соответствие между слоями A,B,C и 1,2,3. Тогда слои A,B,C файла стандартов (исходного) транслируются в слои 1,2,3 текущего чертежа (назначения)

Чтение dws-файлов точно такое же как и чтение dwg-файлов, только с другим расширением (спасибо Lee за подсказку).

Код - C#: [Выделить]
  1. public static void tstreadDws()
  2.         {
  3.             // Сохраняем старый чертеж
  4.             Database oldDb = HostApplicationServices.WorkingDatabase;
  5.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  6.  
  7.             // При использовании ReadDwgFile никогда не указывайте True для buildDefaultDwg
  8.             // Так же, установите noDocument=True так как этот чертеж не соответствует
  9.             // никакому документу AutoCAD Document
  10.             using (Database db = new Database(false, true))
  11.             {
  12.                 db.ReadDwgFile("D:\\Temp\\MyStandard.dws", FileOpenMode.OpenForReadAndWriteNoShare, true, "");
  13.                 // Закрываем ввод, чтобы быть уверенным, что весь dwg-файл прочитан с диска
  14.                 // Это так же закрывает файл, так что сохранение (SaveAs)
  15.                 // файла будет возможно с тем же именем
  16.                 db.CloseInput(true);
  17.                 string appName = "ACLAYTRANS";              
  18.                 string msg = "ТАБЛИЦА СООТВЕСТВИЯ СЛОЕВ:\n";
  19.  
  20.                 // Переключим рабочую базу
  21.  
  22.                 HostApplicationServices.WorkingDatabase = db;
  23.                 using (Transaction t = db.TransactionManager.StartTransaction())
  24.                 {
  25.                     LayerTable lt = t.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
  26.                     foreach(ObjectId oId in lt)
  27.                     {
  28.                         LayerTableRecord ltr = t.GetObject(oId, OpenMode.ForRead) as LayerTableRecord;
  29.                        
  30.                         ResultBuffer rb = ltr.GetXDataForApplication(appName);
  31.                         if (rb != null)
  32.                         {
  33.                             string layerName = ltr.Name;
  34.                             // Получаем значения из Xdata
  35.                             foreach (TypedValue typeVal in rb)
  36.                             {
  37.                             
  38.                                 if(typeVal.TypeCode == 1000)
  39.                                 {
  40.                                     msg = msg + layerName + ":" + typeVal.Value +"\n";
  41.                                 }
  42.                             }
  43.                         }
  44.                         
  45.  
  46.                     }
  47.                     t.Commit();
  48.                 }
  49.                 ed.WriteMessage(msg);
  50.                 // Переключаем обратно рабочую базу
  51.               HostApplicationServices.WorkingDatabase = oldDb;
  52.                
  53.             }
  54.  
  55.         }

 

Результат:

ТАБЛИЦА СООТВЕСТВИЯ СЛОЕВ:
A:1
B:2
C:3

Источник: https://adndevblog.typepad.com/autocad/2017/05/accessing-drawing-standards-file-dws.html

 

Автор перевода: Александр Ривилис
Опубликовано 10.08.2021