お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年11月12日金曜日

.NET - WMF ファイルに書き出す(AutoCAD 2011)

先日いただいたアンケートで、SendStringToExecute 以外の方法で WMF ファイルに書き出したいというものをいただきました。

VBA では、(ThisDrawing.Export fName, ""WMF"", sset) とやってできてたそうです。(管理人は、VBA はやったことないので勉強になりました。)

ということで、ググッてみたところ、ひとつ方法を見つけました。
実際に試してみたところ、WMF ファイルに書き出すことができました。

WMF 以外にも EXPORT コマンドで書き出せるファイルはできるんじゃないかと思います。

ただ、GetObject を使っているので、AutoCAD が複数起動しているときは、必ず最初に起動した AutoCAD が認識されちゃいます。
そのため、あとから起動した AutoCAD 上で実行しても、最初に起動した AutoCAD で開いている図面が WMF に書き出されちゃうので注意が必要です。
何かいい方法はないのかなと思いつつも見つけ出せないでいます。もし、何かご存じの方がいて教えてくれたら嬉しいです。

試してみたコードは以下のような感じです。
(プロジェクトを作るときに、「AutoCAD Interop Common」 と 「AutoCAD Interop」 にチェックを入れて、Imports Autodesk.AutoCAD.Interop と Imports Autodesk.AutoCAD.Interop.Common を追記しました。)

'----------------------------------------------------------------------------
Public Sub AVDO_ExportWMF()
    Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication
    Dim acadDoc As Autodesk.AutoCAD.Interop.AcadDocument
    Dim ssetObj As AcadSelectionSet = Nothing

    ' 起動している AutoCAD のインスタンスを読み込む(AutoCAD が複数起動しているときは、最初に起動した AutoCAD で実行されるので注意!!)
    acadApp = GetObject(, "AutoCAD.Application.18.1")
    acadDoc = acadApp.ActiveDocument

    Try
        ' セレクションセットの作成
        ssetObj = acadDoc.SelectionSets.Add("AVDO_SSET01")

        ' すべてのオブジェクトをセレクションセットに入れる
        ssetObj.Select(AcSelect.acSelectionSetAll)    'puts everything into the selection set object

        ' WMF ファイルに書き出し
        acadDoc.Export("C:\Temp\test", "wmf", ssetObj)

    Catch ex As System.Exception
        Application.ShowAlertDialog(ex.Message)

    Finally
        ' ssetObj を削除(これをやっておかないと、2回目からエラーになってしまう。)
        ssetObj.Delete()

    End Try
End Sub
'----------------------------------------------------------------------------

0 件のコメント:

コメントを投稿