図面を保存して閉じる(.NET)

Database オブジェクトの内容を保存するには、Database オブジェクトの SaveAs メソッドを使用します。SaveAs を使用するときは、bBakAndRename パラメータに True を指定することにより、データベースの名前を変更する必要があるかどうか、およびディスク上の図面のバックアップの名前をバックアップ ファイルに変更する必要があるかどうかを指定できます。システム変数 DWGTITLED の値を調べることにより、データベースが既定の名前である Drawing1、Drawing2 などを使用しているかどうかを確認できます。DWGTITLED が 0 である場合、図面の名前は変更されていません。

アクティブな図面に保存されていない変更がないかどうか調べたい場合があります。AutoCAD セッションを終える前に、または新規図面の開始前に、このような確認を行うことをお勧めします。図面ファイルが変更されているかどうかを確認するには、システム変数 DBMOD の値を調べる必要があります。

図面を閉じる

開いている図面を閉じて、変更を破棄または保存するには、Document オブジェクトの CloseAndDiscard または CloseAndSave メソッドが使用されます。AutoCAD で開いているすべての図面を閉じるには、DocumentCollectionExtensionCloseAll メソッドを使用できます。

アクティブな図面を保存する

この例では、アクティブな図面が現在保存されていないか、現在の名前のままの場合、その図面を c:¥MyDrawing.dwg に保存します。

VB.NET

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("SaveActiveDrawing")> _
Public Sub SaveActiveDrawing()
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim strDWGName As String = acDoc.Name
 
    Dim obj As Object = Application.GetSystemVariable("DWGTITLED")
 
    '' Check to see if the drawing has been named
    If System.Convert.ToInt16(obj) = 0 Then
        '' If the drawing is using a default name (Drawing1, Drawing2, etc)
        '' then provide a new name
        strDWGName = "c:\MyDrawing.dwg"
    End If
 
    '' Save the active drawing
    acDoc.Database.SaveAs(strDWGName, True, DwgVersion.Current, _
                          acDoc.Database.SecurityParameters)
End Sub

C#

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
 
[CommandMethod("SaveActiveDrawing")]
public static void SaveActiveDrawing()
{
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    string strDWGName = acDoc.Name;
 
    object obj = Application.GetSystemVariable("DWGTITLED");
 
    // Check to see if the drawing has been named
    if (System.Convert.ToInt16(obj) == 0)
    {
        // If the drawing is using a default name (Drawing1, Drawing2, etc)
        // then provide a new name
        strDWGName = "c:\\MyDrawing.dwg";
    }
 
    // Save the active drawing
    acDoc.Database.SaveAs(strDWGName, true, DwgVersion.Current,
                          acDoc.Database.SecurityParameters);
}

VBA/ActiveX コード リファレンス

Sub SaveActiveDrawing()
    ' Save the active drawing under a new name
    ThisDrawing.SaveAs "MyDrawing.dwg"
End Sub

図面に未保存の変更がないか確認する

以下の例は、未保存の変更がないかどうかをテストし、ユーザに図面を保存してよいかどうかを確認します(OK でなければ、最後にスキップします)。OK ならば、次のように SaveAs メソッドを使って現在の図面を保存します。

VB.NET

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("DrawingSaved")> _
Public Sub DrawingSaved()
    Dim obj As Object = Application.GetSystemVariable("DBMOD")
 
    '' Check the value of DBMOD, if 0 then the drawing has not been changed
    If Not (System.Convert.ToInt16(obj) = 0) Then
        If MsgBox("Do you wish to save this drawing?", _
                  MsgBoxStyle.YesNo, _
                  "Save Drawing") = MsgBoxResult.Yes Then
            Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
            acDoc.Database.SaveAs(acDoc.Name, True, DwgVersion.Current, _
                                  acDoc.Database.SecurityParameters)
        End If
    End If
End Sub

C#

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
 
[CommandMethod("DrawingSaved")]
public static void DrawingSaved()
{
    object obj = Application.GetSystemVariable("DBMOD");
 
    // Check the value of DBMOD, if 0 then the drawing has no unsaved changes
    if (System.Convert.ToInt16(obj) != 0)
    {
        if (System.Windows.Forms.MessageBox.Show("Do you wish to save this drawing?",
                                  "Save Drawing",
                                  System.Windows.Forms.MessageBoxButtons.YesNo,
                                  System.Windows.Forms.MessageBoxIcon.Question)
                                  == System.Windows.Forms.DialogResult.Yes)
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            acDoc.Database.SaveAs(acDoc.Name, true, DwgVersion.Current,
                                  acDoc.Database.SecurityParameters);
        }
    }
}

VBA/ActiveX コード リファレンス

Sub DrawingSaved()
    If Not (ThisDrawing.Saved) Then
        If MsgBox("Do you wish to save this drawing?", _
                  vbYesNo) = vbYes Then
            ThisDrawing.Save
        End If
    End If
End Sub