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);
Application.DocumentManager.ExecuteInApplicationContext(OpenNewTemplateDoc, FullFileName);
rb = DrawDraw.AcadEvalLisp("(c:ace_add_dwg_to_project nil (list nil nil (list Discr1 Discr2 Discr3) nil nil))"); // Здесь первый nil имеется в виду текущий документ MdiActiveDocument, созданный в OpenNewTemplateDoc
}
private void OpenNewTemplateDoc(object FileName)
{
Document NewDoc = Application.DocumentManager.Open(FileName.ToString(), false);
Application.DocumentManager.MdiActiveDocument = NewDoc;
}
}