Александр Ривилис, собака не в этом порылась в любом случае.
После выполнения моей команды автокад вообще перестает принимать свои родные команды.
То есть до запуска моей команды в командную строку автокада пишешь
(c:ace_add_dwg_to_project nil (list nil nil (list Discr1 Discr2 Discr3) nil nil)) и он добавляет текущий чертеж в проект. После запуска моей команды пишешь в командную строку все тоже самое, но автокад не реагирует.
Я нашел вот эту тему, где решается моя проблема:
https://forums.autodesk.com/t5/autocad-electrical-forum/add-drawings-to-active-project/td-p/4672543Если в трех словах, то надо обновить проект (командой
(c:ace_wdp_reread)).
С учетом всех замечаний рабочий код вот такой:
public class test : IExtensionApplication
{
[System.Security.SuppressUnmanagedCodeSecurity]
[System.Runtime.InteropServices.DllImport("accore.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint = "?acedEvaluateLisp@@YAHPEB_WAEAPEAUresbuf@@@Z")]
extern public static int acedEvaluateLisp(string lispLine, out IntPtr result);
[CommandMethod("qwe", CommandFlags.Session)]
public void Qwe()
{
Document CurrDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
ResultBuffer rb = DrawDraw.AcadEvalLisp("(ace_getactiveproject)");
TypedValue tv = rb.AsArray().FirstOrDefault();
String CurrFileName = tv.Value.ToString();
String TemplateFileName = @"C:\Template\А3 С4 л2.dwt";
String FileName = "NewFileName.dwg";
String FullFileName = Path.Combine(Path.GetDirectoryName(CurrFileName), FileName);
Database NewDB = new Database(false, true);
NewDB.ReadDwgFile(TemplateFileName, FileOpenMode.OpenForReadAndWriteNoShare, true, "");
NewDB.CloseInput(true);
if (File.Exists(FullFileName)) // Если есть файл с таким именем, то удалить
{
var AllOpenDocs = Application.DocumentManager.Cast<Document>(); // Если открыт, то закрыть
foreach (Document d in AllOpenDocs)
if (d.Name.ToLower().Equals(FullFileName.ToLower()))
d.CloseAndDiscard(); // Должен быть установлен флаг CommandFlags.Session
File.Delete(FullFileName);
}
NewDB.SaveAs(FullFileName, DwgVersion.Newest);
NewDB.Dispose();
Document NewDoc = Application.DocumentManager.Open(FullFileName, false);
Application.DocumentManager.MdiActiveDocument = NewDoc;
using (NewDoc.LockDocument())
{
rb = DrawDraw.AcadEvalLisp("(c:ace_wdp_reread)");
rb = DrawDraw.AcadEvalLisp("(c:ace_add_dwg_to_project nil (list nil nil (list nil nil nil) nil nil))");
}
}
}
Остается только прикрутить это все на формочку.