Тема: Как сохранить чертеж AutoCAD средствами COM?

Необходимо сохранить чертеж AutoCad средствами COM.
1 Способ:
Используюя фкункцию:
Application.ActiveDocument.Save();
все получается, но файл вываливается в C:\windows\system32 , что естественно не устранивает
2. Споссоб
Используюя фкункцию:
Application.ActiveDocument.SaveAs("test.dwg", AcSaveAsType.acR15_dwg, "");
но при этом выдается ошибка сервера.
Как побороть данную проблему?

Re: Как сохранить чертеж AutoCAD средствами COM?

Попробуй указать полное имя не "test.dwg", а  "D:\work\.....\test.dwg"

Re: Как сохранить чертеж AutoCAD средствами COM?

Да нет, не помогло.
Полный тест ошибки:

"Ошибка на сервере. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))"

Re: Как сохранить чертеж AutoCAD средствами COM?

Из какого приложения вы пытаетесь управлять сохранением файлов AutoCAD?
Для первого способа надо по крайней мере предварительно выбрать нужную текущую директорию с помощью операторов ChDrive, ChDir перед этим убедившись что таковая директория существует (или создать с помощью MkDir).

Sub test_A()
ChDir "D:\Documents and Settings\Alexander"
ActiveDocument.Save
End Sub
Sub test_B()
ActiveDocument.SaveAs "D:\Documents and Settings\Alexander"\test1.dwg"
End Sub
Sub test_C()
ActiveDocument.SaveAs "D:\Documents and Settings\Alexander"\test2.dwg", ac2004_dwg
End Sub

Вроде всё работает.

Re: Как сохранить чертеж AutoCAD средствами COM?

Как я понимаю команда

ChDir

имеет отношение к ОС, а не к AutoCad. Рабочая папка AutoCad определена в свойстве

Application.Path

, но данный параметр read only.
Сохранить файл пытаюсь из C#.Net кода, который требует указание всех параметров, поэтому конструкция вида:

Application.ActiveDocument.SaveAs("test.dwg");

здесь невозможна и приходится указывать все три параметра

ActiveDocument.SaveAs(@"C:\test.dwg", Application.Preferences.OpenSave.SaveAsType , "");

msdn по подобной ошике пишет следующее:

MORE INFORMATION
This problem occurs only when the COM server is running under a different user account than the COM client. If the COM server identity is configured to run under the same user account as the client, the error does not occur. The error occurs only when the COM server is local to the client. If the COM server is remote, the error does not occur. Also, the error seems to occur only when the document file is created with sub-objects (streams and sub-storages) and then passed to the server. If the file is closed (the root storage is released) and then reopened before passing the IStorage pointer to the COM server, the error does not occur.

Re: Как сохранить чертеж AutoCAD средствами COM?

> detox
А так?

// Define Command "SaveDWG"
[CommandMethod("SaveDWG")]
static public void test() // This method can have any name
{
  Database db = HostApplicationServices.WorkingDatabase;
  db.SaveAs("c:\\test.dwg",DwgVersion.Current);
}

Хотя правильнее было бы спросить у тебя версию AutoCAD, версию MS VS .NET, версию .NET, метод использования C# (COM или .NET)

Re: Как сохранить чертеж AutoCAD средствами COM?

Версия AutoСad 2006 г.
VS 2005.
2.Net
Использую AutoCAD через COM, т.е.:

Application = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.16");

Ваш метод через netload СРАБОТАЛ! И в принципе он решает проблему, но хотелось бы использовать именно сохранение через COM.

Re: Как сохранить чертеж AutoCAD средствами COM?

Если кому станет интересно

ActiveDocument.SaveAs(@"C:\test.dwg", Application.Preferences.OpenSave.SaveAsType , null);

вместо "" надо null

Re: Как сохранить чертеж AutoCAD средствами COM?

а вот так вернее всего
Autodesk.AutoCAD.Interop.AcadApplicationClass doc = new Autodesk.AutoCAD.Interop.AcadApplicationClass();
            object obg = new object();
            obg="Mtext";
            doc.Visible = true;
            doc.Application.Documents.Open(@"C:\1.dwg", null, null);
                       doc.Application.ActiveDocument.SaveAs(@"C:\2.dxf", Autodesk.AutoCAD.Interop.Common.AcSaveAsType.ac2004_dxf, null);
            doc.Application.ActiveDocument.Close(null,null);
            this.Close();

Re: Как сохранить чертеж AutoCAD средствами COM?

object obg = new object();
obg="Mtext";
мона выкинуть, это были эксперементы -))