コマンド実行時にカレントレイヤを変更するサンプルスクリプト


寸法コマンドを実行すると、「寸法」という名前のレイヤをカレントレイヤに変更するスクリプトのサンプルコードです。
コマンドを終了すると、カレントレイヤを前の状態に戻します。
あらかじめ、「寸法」という名前のレイヤを作成しておく必要があります。

コマンドが開始するときのイベントのスクリプト

コマンドが開始するときのイベントのスクリプトを作成します。

  1. メモ帳などのテキストエディタで新規ファイルを作成する
  2. 以下のコードをコピーして、テキストエディタに貼り付ける
    // 現在の図面を取得する
    var doc = Application.ActiveDocument;
    
    // 現在の図面のレイヤテーブルを取得する
    var layerTable = doc.LayerTable;
    
    // 実行したコマンドのユニーク名を取得する
    var currentCommand = Application.CommandManager.CurrentCommand;
    if(currentCommand == null)
    	return;
    var commandName = currentCommand.UniqueName;
    
    // コマンドのユニーク名が "RootPro.Shape.*Dimension" (* は任意のアルファベット) であるか調べる
    System.Text.RegularExpressions.Regex r =
        new System.Text.RegularExpressions.Regex(
            @"RootPro\.Shape\.[A-Za-z]+Dimension",
            System.Text.RegularExpressions.RegexOptions.None);
    
    System.Text.RegularExpressions.Match m = r.Match(commandName);
    while (m.Success)
    {
        // 寸法という名前のレイヤを取得
        Layer layer = layerTable.RootLayer.ChildLayers["寸法"];
        if(layer != null)
        {
            // 現在のカレントレイヤ名を保存しておく
            // Variables はすべてのスクリプトで共有する System.Collections.Generic.Dictionary 型のグローバル変数です。
            // 異なるイベント間で値を渡したいときに利用します
            Variables["OldCurrentLayer"] = layerTable.CurrentLayer.Name;
    
            // UNDO 処理を開始します。
            doc.UndoManager.BeginUndoUnit();
    
            // 寸法という名前のレイヤをカレントレイヤに変更する
            layerTable.CurrentLayer = layer;
    
            // UNDO 処理を終了します。
            doc.UndoManager.EndUndoUnit();
        }
        break;
    }
    
  3. スクリプトのフォルダーに Command.Begin という名前のフォルダーを作成して、そのフォルダー内に拡張子 .csx でファイルを保存する
    スクリプトのフォルダーは、RootPro CAD の [スクリプト] メニューの [スクリプトのフォルダーを開く] をクリックして表示されるフォルダーです。
    スクリプトのファイル名は、任意の名前を指定できます。
    補足
    ファイルの文字コードは「Unicode(UTF-8)」で保存する必要があります。メモ帳の場合は、[名前を付けて保存] ダイアログボックスの [保存] ボタンの左側にある [文字コード] ボックスを「UTF-8」に変更して保存してください。

コマンドが終了するときのイベントのスクリプト

コマンドが終了するときのイベントのスクリプトを作成します。

  1. メモ帳などのテキストエディタで新規ファイルを作成する
  2. 以下のコードをコピーして、テキストエディタに貼り付ける
    // 現在の図面を取得する
    var doc = Application.ActiveDocument;
        
    // 現在の図面のレイヤテーブルを取得する
    var layerTable = doc.LayerTable;
    
    // 実行したコマンドのユニーク名を取得する
    var commandName = Application.CommandManager.CurrentCommand.UniqueName;
    
    // コマンドのユニーク名が "RootPro.Shape.*Dimension" (* は任意のアルファベット) であるか調べる
    System.Text.RegularExpressions.Regex r =
        new System.Text.RegularExpressions.Regex(
            @"RootPro\.Shape\.[A-Za-z]+Dimension",
            System.Text.RegularExpressions.RegexOptions.None);
    
    System.Text.RegularExpressions.Match m = r.Match(commandName);
    while (m.Success)
    {
        // グローバル変数から前のカレントレイヤ名を取得する
        // Variables はすべてのスクリプトで共有する System.Collections.Generic.Dictionary 型のグローバル変数です
        // 異なるイベント間で値を渡したいときに利用します
        if(Variables.ContainsKey("OldCurrentLayer"))
        {
            string layerName = (string)Variables["OldCurrentLayer"];
    
            // 前のカレントレイヤに戻す
            Layer layer = layerTable.RootLayer.ChildLayers[layerName];
            if(layer != null)
            {
                // UNDO 処理を開始します。
                doc.UndoManager.BeginUndoUnit();
    
                layerTable.CurrentLayer = layer;
    
                // UNDO 処理を終了します。
                doc.UndoManager.EndUndoUnit();
            }
        }
        break;
    }
    
  3. スクリプトのフォルダーに Command.End という名前のフォルダーを作成して、そのフォルダー内に拡張子 .csx でファイルを保存する
    スクリプトのフォルダーは、RootPro CAD の [スクリプト] メニューの [スクリプトのフォルダーを開く] をクリックして表示されるフォルダーです。
    スクリプトのファイル名は、任意の名前を指定できます。
    補足
    ファイルの文字コードは「Unicode(UTF-8)」で保存する必要があります。メモ帳の場合は、[名前を付けて保存] ダイアログボックスの [保存] ボタンの左側にある [文字コード] ボックスを「UTF-8」に変更して保存してください。

スクリプトの動作を確認する

  1. RootPro CAD を起動する
  2. 「寸法」という名前のレイヤを作成して、カレントレイヤをそれ以外のレイヤに変更しておく
  3. 寸法コマンドを実行する
    自動的に「寸法」という名前のレイヤがカレントレイヤに変更されます。
  4. 寸法コマンドを終了する
    自動的にカレントレイヤが前の状態に戻ります。
補足
スクリプトは、RootPro CAD Professional の機能です。RootPro CAD Free では使用できません。
RootPro CAD を起動後に既存のスクリプトファイルのコードを変更した場合は、RootPro CAD を再起動しないでも即時に反映されます。

関連トピック