対象製品: IJCAD 2016 以降
IJCAD 2016 以降の .NET API で、CADの組み込みコマンドと同じコマンド名のコマンドを定義しても、
.NET アセンブリをロードしただけでは定義したコマンドはアクティブになりません。
コマンド名を入力して実行しても、定義されたコマンドではなく組み込みコマンドが実行されます。
CADの組み込みコマンドと、.NET で定義したコマンドを置き換えるには組み込みコマンドの定義を解除する必要があります。
組み込みコマンドの定義を解除するにはUNDEFINE[コマンド定義解除]コマンドを使用し、
再度組み込みコマンドを有効にするにはREDEFINE[再定義]コマンドを使用します。
.NET API を使用したサンプルは以下の通りになります。
VB.NET
'コマンドの置き換え(LINE)
<CommandMethod("NETCmd", "LINE", CommandFlags.Modal)>
Public Sub LineCommand_NET()
'独自の処理
Application.ShowAlertDialog("独自の処理(LINE)")
End Sub
'コマンドの置き換え(CIRCLE)
<CommandMethod("NETCmd", "CIRCLE", CommandFlags.Modal)>
Public Sub CircleCommand_NET()
'独自の処理
Application.ShowAlertDialog("独自の処理(CIRCLE)")
End Sub
'コマンドの置き換え(QSAVE)
<CommandMethod("NETCmd", "QSAVE", CommandFlags.Modal)>
Public Sub QuickSaveCommand_NET()
'独自の処理
Application.ShowAlertDialog("独自の処理(QSAVE)")
End Sub
' 置き換えの状態(true = NET定義コマンド : false = 組み込みコマンド)
Private Shared m_bSwapCmd As Boolean = False
'組み込みコマンドとNET定義コマンドの置き換え
<CommandMethod("NETCmd", "SWAPCMD", CommandFlags.Modal)>
Public Sub SwapCommand()
Dim icEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
If m_bSwapCmd Then
'REDEFINEコマンドを使用して組み込みコマンドを再定義する
icEd.Command( _
"_.REDEFINE", "LINE", _
"_.REDEFINE", "CIRCLE", _
"_.REDEFINE", "QSAVE")
'組み込みコマンドがアクティブ
m_bSwapCmd = False
icEd.WriteMessage(vbCr + _
"CADの組み込みコマンドがアクティブになりました")
Else
'UNDEFINEコマンドを使用して組み込みコマンドの定義を解除する
icEd.Command( _
"_.UNDEFINE", "LINE", _
".UNDEFINE", "CIRCLE", _
"_.UNDEFINE", "QSAVE")
'NET定義コマンドがアクティブ
m_bSwapCmd = True
icEd.WriteMessage(vbCr + _
"NET定義コマンドがアクティブになりました")
End If
End Sub
C#
//コマンドの置き換え(LINE)
[CommandMethod("NETCmd", "LINE", CommandFlags.Modal)]
public void LineCommand_NET()
{
//独自の処理
Application.ShowAlertDialog("独自の処理(LINE)");
}
//コマンドの置き換え(CIRCLE)
[CommandMethod("NETCmd", "CIRCLE", CommandFlags.Modal)]
public void CircleCommand_NET()
{
//独自の処理
Application.ShowAlertDialog("独自の処理(CIRCLE)");
}
//コマンドの置き換え(QSAVE)
[CommandMethod("NETCmd","QSAVE",CommandFlags.Modal)]
public void QuickSaveCommand_NET()
{
//独自の処理
Application.ShowAlertDialog("独自の処理(QSAVE)");
}
// 置き換えの状態(true = NET定義コマンド : false = 組み込みコマンド)
private static bool m_bSwapCmd = false;
//組み込みコマンドとNET定義コマンドの置き換え
[CommandMethod("NETCmd", "SWAPCMD", CommandFlags.Modal)]
public void SwapCommand()
{
Editor icEd = Application.DocumentManager.MdiActiveDocument.Editor;
if (m_bSwapCmd)
{
//REDEFINEコマンドを使用して組み込みコマンドを再定義する
icEd.Command(
"_.REDEFINE", "LINE",
"_.REDEFINE", "CIRCLE",
"_.REDEFINE", "QSAVE");
//組み込みコマンドがアクティブ
m_bSwapCmd = false;
icEd.WriteMessage("\nCADの組み込みコマンドがアクティブになりました");
}
else
{
//UNDEFINEコマンドを使用して組み込みコマンドの定義を解除する
icEd.Command(
"_.UNDEFINE", "LINE",
".UNDEFINE", "CIRCLE",
"_.UNDEFINE", "QSAVE");
//NET定義コマンドがアクティブ
m_bSwapCmd = true;
icEd.WriteMessage("\nNET定義コマンドがアクティブになりました");
}
}
※IJCAD 2015 では、コマンドの再定義を行わなくても置き換わってしまう現象が確認されています。