Как импортировать лист из существующего dwg в подшивку?

Автор Тема: Как импортировать лист из существующего dwg в подшивку?  (Прочитано 3993 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Добрый день
Подскажите пожалуйста как импортировать лист из существующего dwg в подшивку через ImportSheet?
Саму подшивку создать получить но попутно возник вопрос - можно ли создать саму подшивку без указания файла шаблона, т.е. пустую ?

Отмечено как Решение Doublefish 03-06-2015, 08:45:16

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как вариант с минимумом проверок на ошибки:
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.Windows;
  8. using ACSMCOMPONENTS20Lib;
  9.  
  10. [assembly: CommandClass(typeof(Rivilis.SheetUtils))]
  11.  
  12. namespace Rivilis
  13. {
  14.   public class SheetUtils
  15.   {
  16.     [CommandMethod("ImportSheet")]
  17.     public void MyCommand()
  18.     {
  19.       Document doc = Application.DocumentManager.MdiActiveDocument;
  20.       if (doc == null) return;
  21.       Editor ed = doc.Editor;
  22.       AcSmSheetSetMgr mgr = new AcSmSheetSetMgr();
  23.       OpenFileDialog dlgDst = new OpenFileDialog (
  24.         "Файл подшивки", "SheetSetFile", "dst", "Выберите файл подшивки", 0);
  25.       System.Windows.Forms.DialogResult res = dlgDst.ShowDialog();
  26.       if (res != System.Windows.Forms.DialogResult.OK) return;
  27.       OpenFileDialog dlgDwg = new OpenFileDialog(
  28.         "Файл чертежа", "Drawing", "dwg", "Выберите файл чертежа", 0);
  29.       res = dlgDwg.ShowDialog();
  30.       if (res != System.Windows.Forms.DialogResult.OK) return;
  31.       PromptStringOptions prStr =
  32.         new PromptStringOptions("\nУкажите имя Layout: ");
  33.       prStr.AllowSpaces = true;
  34.       PromptResult rs = ed.GetString(prStr);
  35.       if (rs.Status != PromptStatus.OK) return;
  36.       ImportSheet(dlgDst.Filename, dlgDwg.Filename, rs.StringResult);
  37.     }
  38.  
  39.     void ImportSheet(string dstFile, string dwgFile, string layoutName)
  40.     {
  41.       AcSmSheetSetMgr mgr = new AcSmSheetSetMgr();
  42.       AcSmDatabase db = mgr.OpenDatabase(dstFile, false);
  43.       db.LockDb(db);
  44.       try
  45.       {
  46.         AcSmSheetSet sheetSet = db.GetSheetSet();
  47.         AcSmAcDbLayoutReference lRef = new AcSmAcDbLayoutReference();
  48.         lRef.InitNew(sheetSet);
  49.         lRef.SetFileName(dwgFile);
  50.         lRef.SetName(layoutName);
  51.         AcSmSheet sheet = sheetSet.ImportSheet(lRef);
  52.         sheetSet.InsertComponent(sheet, null);
  53.       }
  54.       finally
  55.       {
  56.         db.UnlockDb(db, true);
  57.         mgr.Close(db);
  58.       }
  59.     }
  60.   }
  61. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Саму подшивку создать получить но попутно возник вопрос - можно ли создать саму подшивку без указания файла шаблона, т.е. пустую ?
Судя по документации если второй параметр null или "", то подшивка создаётся без шаблона:
http://help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-59A14E74-18D9-4FA7-BAE7-5678E23BFB81.htm
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение