

IJCAD2017 VB.NETにて印刷時にSetPlotConfigurationNameでeInvalidInput (code :
5)エラーが発生する。IJCADの印刷コマンドでは、PC3ファイルは選択できるが、VB.NETでは、PC3設定ファイルが認識できていない。理由は下記のプログラムを実行するとpc3ファイルが出力されない。OPTIONSで何らかの変更を行うとPC3ファイルの一覧が表示されるケースがある。（OPTIONSの設定は印刷に関係なく、何らかの設定変更で「適用」実施すると、PC3ファイルが表示される）

[code]

    ' Lists the available plotters (plot configuration [PC3] files)
    <CommandMethod("PlotterList")> _
    Public Shared Sub PlotterList()
        ' Get the current document and database, and start a transaction
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    
        acDoc.Editor.WriteMessage(vbLf & "Plot devices: ")
    
        For Each plotDevice As String In PlotSettingsValidator.Current.GetPlotDeviceList()
            ' Output the names of the available plotter devices
            acDoc.Editor.WriteMessage(vbLf & "  " & plotDevice)
        Next
    End Sub
    
[/code]

## 追記1

回答して頂いた通り、最新状態にすることで、PC3ファイルの一覧が表示されるようになりましたが、根本的な原因において、まだ、SetPlotConfigurationNameでeInvalidInput
(code :
5)が表示されます。当初はデバイス名（pc3名）がおかしいと思っていましたが、用紙サイズ（カノニカルメディア名）の指定ができないようです。色々試していますが、原因不明です。下記にコードを添付します。

[code]

    <CommandMethod("PlotterLocalMediaNameList")> _
    Public Shared Sub PlotterLocalMediaNameList()
        ' Get the current document and database, and start a transaction
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
         Using plSet As PlotSettings = New PlotSettings(True)
            Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
            Dim pStrOpts As PromptStringOptions = New PromptStringOptions(vbLf & _
                                                                         "PC3 name: ")
            pStrOpts.AllowSpaces = True
            Dim PC3name As PromptResult = acDoc.Editor.GetString(pStrOpts)
            Dim pStrOpts2 As PromptStringOptions = New PromptStringOptions(vbLf & _
                                                                         "CM name: ")
            pStrOpts2.AllowSpaces = True
            Dim CMname As PromptResult = acDoc.Editor.GetString(pStrOpts2)
            ' Set the Plotter and page size
    
            acPlSetVdr.SetPlotConfigurationName(plSet, PC3name.StringResult, CMname.StringResult)
    
            acDoc.Editor.WriteMessage(vbLf & "Canonical and Local media names: ")
    
            Dim cnt As Integer = 0
    
            For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
    
                ' Output the names of the available media for the specified device
                acDoc.Editor.WriteMessage(vbLf & "  " & mediaName & " | " & _
                                          acPlSetVdr.GetLocaleMediaName(plSet, cnt))
                cnt = cnt + 1
            Next
        End Using
    
    End Sub
    
[/code]

本コードを作成するにあたって、やりたいことは、PC3ファイルと用紙サイズを指定して印刷したいのですが、SetPlotConfigurationNameでエラーが発生したため、上記のような用紙サイズの一覧表示を行わせるサンプルコードを作成しました。引き続き調べていますが、原因がわかりません。

## 追記2

tknmtさん、[追加サンプルコードの投稿](https://ja.stackoverflow.com/a/49169/19110)ありがとうございます。  
実行するとやはり下記のエラーメッセージが表示される状況です。

[code]

    GrxCAD.Runtime.Exception: eInvalidInput (code : 5)
       場所 GrxCAD.DatabaseServices.PlotSettingsValidator.
    SetPlotConfigurationName(PlotSettings plotSet, String plotDeviceName, String 
    mediaName)
       場所 Class1.plot.PlotSetting()
       場所 GrxCAD.ApplicationServices.GcMgdCmdClass.InvokeWorker(MethodInfo mi, 
    Object commandObject, Boolean 
    bLispFunction)
       場所 GrxCAD.ApplicationServices.GcMgdCmdClass.
    InvokeWorkerWithException(MethodInfo mi, Object commandObject, Boolean 
    bLispFunction)
    
[/code]

同様の処理でAutoCADでは問題なく動作しますが、IJCADではエラーとなります。


CC BY-SA 4.0
2018-10-10T22:12:08.960
49160
2018-10-17T04:20:19.707
2018-10-16T09:25:53.583
19110
30466
question
.net ijcad 印刷
IJCAD2017 VB.NET、SetPlotConfigurationNameでeInvalidInput (code : 5)エラー


IJCADで記載されているプログラムを実行してみましたが、問題なくPC3ファイルの一覧が出力されました。  
オプションで何らかの変更を行うとPC3ファイルの一覧が表示されるケースがあるとの事ですが、印刷するレイアウトのプロットデバイスを、PlotSettingsValidator.RefreshListsメソッドで最新の状態にした後であれば一覧が表示されるようになるかもしれません。

[code]

    <CommandMethod("RefreshList")>
    Public Sub RefreshList()
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim plSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
        Using Trans As Transaction = doc.TransactionManager.StartTransaction()
            Dim curSpace As BlockTableRecord = Trans.GetObject(doc.Database.CurrentSpaceId, OpenMode.ForRead)
            Dim curLayout As Layout = Trans.GetObject(curSpace.LayoutId, OpenMode.ForRead)
            plSetVdr.RefreshLists(curLayout)
            For Each plotDevice In plSetVdr.GetPlotDeviceList()
                doc.Editor.WriteMessage(vbLf & plotDevice)
            Next
        End Using
    End Sub
    
[/code]

IJCADで現在のレイアウントの印刷設定を行うサンプルコードを追記しておきます

[code]

    Public Sub PlotSetting()
        Dim db = Application.DocumentManager.MdiActiveDocument.Database
        Using tr As Transaction = db.TransactionManager.StartTransaction()
            Dim curSpace As BlockTableRecord = tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead)
            Dim layout As Layout = tr.GetObject(curSpace.LayoutId, OpenMode.ForWrite)
            Dim plSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
            plSetVdr.SetUseStandardScale(layout, True)
            plSetVdr.SetPlotCentered(layout, True)
            plSetVdr.SetPlotConfigurationName(layout, "DWG To PDF.pc3", Nothing)
            For Each mediaName As String In plSetVdr.GetCanonicalMediaNameList(layout)
                Dim localName As String = plSetVdr.GetLocaleMediaName(layout, mediaName)
                If localName = "ISO A4 (297.00 x 210.00 MM)" Then
                    plSetVdr.SetCanonicalMediaName(layout, mediaName)
                    Exit For
                End If
            Next
            tr.Commit()
        End Using
    End Sub
    
[/code]

IJCADで用紙サイズを指定するには、表示用の印刷名から実際の印刷名を求める必要があります。  
実際の印刷名を使用した場合は、SetPlotConfigurationNameメソッドでPC3ファイル名と同時に設定することも可能でした。


CC BY-SA 4.0
2018-10-11T02:00:35.583
49169
2018-10-15T01:39:46.210
2018-10-15T01:39:46.210
49160
answer


AutoCADでは問題なく動作するとの事ですが、AutoCADとIJCADでは用紙サイズ名が異なりますので、IJCADの用紙サイズ名を確認してそれを指定するようにしてみてください。  
用紙サイズ名と一致するローカルメディア名を把握しているのであれば、SetPlotConfigurationNameメソッドでデバイス名とメディア名を同時に指定することが可能ですが、ローカルメディア名が解らない状態でしたら、先ずはSetPlotConfigurationNameメソッドではバイス名のみを指定して、メディア名には
Nothing
を指定し、指定した用紙サイズ名と一致するローカルメディア名のメディア名を、SetCanonicalMediaNameメソッドで指定すると印刷設定を変更できるようになると思います。

追記  
PC3ファイルにカスタム用紙サイズを追加しているとの事ですが、IJCADの.NET
APIではカスタム用紙サイズを設定しようとすると例外などは発生しませんでしたが、印刷設定を正常に変更できないことはこちらでも確認しています。


CC BY-SA 4.0
2018-10-16T00:32:23.723
49321
2018-10-17T04:20:19.707
2018-10-17T04:20:19.707
49160
answer


本件、[ご教授いただいた](https://ja.stackoverflow.com/a/49169/19110)とおり、先ずメディア名には Nothing
を指定し、実行したところ、正常に動作しました。ちなみに下記を実行し、正常に動作したことを報告します。前回エラーになったのは、リスト情報が最新になっていなかったのでエラーになっていたようです。

[code]

    <CommandMethod("PlotSet")> _
    Public Shared Sub PlotSetting()
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim db = Application.DocumentManager.MdiActiveDocument.Database
        Using tr As Transaction = db.TransactionManager.StartTransaction()
            Dim curSpace As BlockTableRecord = tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead)
            Dim layout As Layout = tr.GetObject(curSpace.LayoutId, OpenMode.ForWrite)
            Dim plSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
            plSetVdr.SetUseStandardScale(layout, True)
            plSetVdr.SetPlotCentered(layout, True)
            plSetVdr.SetPlotConfigurationName(layout, "PLOTPRT.pc3", Nothing)
            For Each mediaName As String In plSetVdr.GetCanonicalMediaNameList(layout)
                Dim localName As String = plSetVdr.GetLocaleMediaName(layout, mediaName)
                acDoc.Editor.WriteMessage(vbLf & "  " & mediaName & "  " & localName)
                If localName = "ISO A4 (210.00 x 297.00 MM)" Then
                    plSetVdr.SetCanonicalMediaName(layout, mediaName)
                    Exit For
                End If
            Next
            tr.Commit()
        End Using
    End Sub
    
[/code]

このPC3ファイルは本来指定したいファイルで、メディア名も取得できました。  
大変お世話になりました。ありがとうございます。

もう1つ追加情報ですが、PC3ファイルを変更した場合、先ほどのロジックでもエラーとなることがわかりました。（一度IJCADを再起動すると、正常に実行されます。）これが実行できなかった一番の原因だったようです。PC3ファイルにカスタム図面サイズなどを設定してテストしていたため、このような試行の場合、起動しなおさないといけないようです。(ほかの環境でも同じでしょうか？)


CC BY-SA 4.0
2018-10-16T08:52:34.397
49347
2018-10-16T09:29:01.273
2018-10-16T09:29:01.273
19110
30466
49160
answer