Создать чертеж в текущем проекте AutoCAD Electrical

Автор Тема: Создать чертеж в текущем проекте AutoCAD Electrical  (Прочитано 205 раз)

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

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

  • ADN OPEN
  • Сообщений: 16
  • Карма: 0
Господа, пытаюсь на C# создать в электрикале новый чертеж в текущем проекте.
Чертеж-то создаю, но не могу найти как привязать его к проекту - имя проекта текущего документа и системная переменная с именем текущего проекта пусты.
Полная ж задача сводится к тому, что надо создавать сразу несколько чертежей по заданным шаблонам - аналогично действию, когда в диспетчере проектов, при нажатии правой кнопкой мыши, выбирается пункт "создать чертеж" и открывается окно для заполнения его свойств (имя, шаблон, описание, значения для листа).

Код - C# [Выбрать]
  1. public class CreateNewDrawInProj: IExtensionApplication
  2. {
  3.         [CommandMethod("qwe")]
  4.         public void Qwe()
  5.         {
  6.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  7.             Editor ed = doc.Editor;
  8.             Database db = doc.Database;
  9.  
  10.             String CurrFileName = doc.Name;
  11.  
  12.             String TemplateFileName = @"C:\Template\A3-1.dwt"; // Директория с шаблонами
  13.             NewFileName = System.IO.Path.GetDirectoryName(CurrFileName) + System.IO.Path.DirectorySeparatorChar + "NewFileName.dwg";
  14.  
  15.             if (System.IO.File.Exists(NewFileName))
  16.                 System.IO.File.Delete(NewFileName);
  17.  
  18.             Database NewDB = new Database(false, true);
  19.            
  20.             NewDB.ReadDwgFile(TemplateFileName, FileOpenMode.OpenForReadAndWriteNoShare, true, "");
  21.               NewDB.ProjectName = db.ProjectName; // Empty
  22.               Object ProlName = Application.GetSystemVariable("PROJECTNAME"); // Empty
  23.             NewDB.CloseInput(true);
  24.             NewDB.SaveAs(NewFileName, DwgVersion.Newest);
  25.            
  26.             Application.DocumentManager.ExecuteInApplicationContext(CreateNewDoc, null);
  27.         }
  28.  
  29.         private String NewFileName = string.Empty;
  30.         private void CreateNewDoc(object userdata)
  31.         {
  32.             Document NewDoc = Application.DocumentManager.Open(NewFileName, false);
  33.             Application.DocumentManager.MdiActiveDocument = NewDoc;
  34.         }
  35.  
  36.         public void Initialize()
  37.         {
  38.         }
  39.         public void Terminate()
  40.         {
  41.         }
  42. }
  43.  

Я знаю, что список включенных в проект чертежей хранится в специальном XML-файле имя_проекта.aepx.
Неужели надо вручную туда дописывать добавляемые чертежи. И опять же как все же узнать имя текущего проекта?

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

  • Administrator
  • *****
  • Сообщений: 8407
  • Карма: 1014
  • Рыцарь ObjectARX
  • Skype: rivilis
Насколько я в курсе в AutoCAD Electrical всё API на AutoLISP. Например, функция (ace_getactiveproject) возвращает активный проект.
А (c:ace_add_dwg_to_project  dwg2add  paramlst) добавляет чертежи в текущий проект.


 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 16
  • Карма: 0
Александр Ривилис, ясно, спасибо. Придется копать в сторону AutoLisp.

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

  • Administrator
  • *****
  • Сообщений: 8407
  • Карма: 1014
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр Ривилис, ясно, спасибо. Придется копать в сторону AutoLisp.

Можно попытаться вызвать lisp-функции из .NET: P/Invoke для acedEvaluateLisp
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 16
  • Карма: 0
Можно попытаться вызвать lisp-функции из .NET
Спасибо за идею, а то совсем тоска.