AutoCAD ファイルの機能にアクセスするには、Documents コレクションおよび Document オブジェクトを使用します。
図面を新規作成したり、既存の図面を開いたりするには、Documents コレクションに対してメソッドを使用します。Add メソッドは、図面を新規作成し、その図面を Documents コレクションに追加します。Open メソッドは、既存の図面を開きます。Documents コレクションには、AutoCAD セッションで開いたすべての図面を閉じる Close メソッドもあります。
図面を保存するには、Save メソッドまたは SaveAs メソッドを使用します。アクティブな図面に保存されていない変更がないかどうか調べたい場合があります。AutoCAD セッションを終える前に、または新規図面の開始前に、このような確認を行うことをお勧めします。現在の図面に未保存の変更が含まれていないことを確認するには、Saved プロパティを使用します。
図面を読み込んだり書き出したりするには、Document オブジェクトの Import メソッドおよび Export メソッドを使用します。
Open メソッドを使用して、既存の図面を開くことができます。VBA の Dir 関数、および AutoLISP の findfile 関数を使用して既存のファイルを開く前に、ファイルの存在を確認することができます。
(vl-load-com)
(defun c:Ch3_OpenDrawing ( / )
(setq acadObj (vlax-get-acad-object)
docs (vla-get-Documents acadObj))
(setq dwgName "c:\\Autodesk\\campus.dwg")
(if (findfile dwgName)
(vla-Open docs dwgName)
(alert (strcat "File " dwgName " does not exist."))
)
)
Sub Ch3_OpenDrawing()
Dim dwgName As String
dwgName = "c:\campus.dwg"
If Dir(dwgName) <> "" Then
ThisDrawing.Application.Documents.Open dwgName
Else
MsgBox "File " & dwgName & " does not exist."
End If
End Sub
以下の例では、Add メソッドを使って、既定のテンプレートに基づいて新規図面を作成します。
(vl-load-com)
(defun c:Ch3_NewDrawing ( / )
(setq acadObj (vlax-get-acad-object)
docs (vla-get-Documents acadObj))
(setq docObj (vla-Add docs))
)
Sub Ch3_NewDrawing() Dim docObj As AcadDocument Set docObj = ThisDrawing.Application.Documents.Add End Sub
以下の例は、現在の名前でアクティブな図面を保存し、再度新しい名前で保存します。
(vl-load-com)
(defun c:Ch3_SaveActiveDrawing ( / )
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj))
;; Save the active drawing under the current name
(vla-Save doc)
;; Save the active drawing under a new name
(vla-SaveAs doc "MyDrawing.dwg")
)
Sub Ch3_SaveActiveDrawing() ' Save the active drawing under the current name ThisDrawing.Save ' Save the active drawing under a new name ThisDrawing.SaveAs "MyDrawing.dwg" End Sub
以下の例は、未保存の変更がないかどうかをテストし、ユーザに図面を保存してよいかどうかを確認します(OK でなければ、最後にスキップします)。OK ならば、次のように Save メソッドを使用して現在の図面を保存します。
(vl-load-com)
(defun c:Ch3_TestIfSaved ( / )
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
utilObj (vla-get-Utility doc))
;; Define and call InitializeUserInput to set up the keywords
(setq keywordList "Yes No")
(vla-InitializeUserInput utilObj 0 keywordList)
(if (= :vlax-false (vla-get-Saved doc))
(if (/= "No" (vla-GetKeyword utilObj "\nDo you wish to save this drawing? [Yes/No] <Yes>: "))
(vla-Save doc)
)
)
)
Sub Ch3_TestIfSaved()
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