マウスポインタ直下の図形のレイヤ&クラスにカレントレイヤ&クラスを変更した後、2Dセレクションポインタツールを選択する

デフォルトでは、右クリックでコンテキスト・メニューが起動します。しかし、「レイヤ&クラスをアクティブに」くらいしか使い道がありません。そこで、図形上で右クリックするとメニュー表示無しに、直下の図形のレイヤ&クラスにカレントレイヤ&クラスを変更し、2Dセレクションポインタツールが選択されるコマンドは汎用性があるのではと思い作ってみました。更に右クリックの判定を、AutoHotkey で行うことにより、非常に便利になり、クラスやレイヤのプルダウンを使うことはほとんど無くなりました。マウス直下の図形が無い場合は、2Dセレクションポインタツールの選択のみです。

AutoHotkey のahk ファイルには、次の記述をします。(参考)
AutoHotkey は、とてつもなく素晴らしいフリーのキーボード・ツールです。少し使いこなせるだけで、毎日の仕事が楽になります。検索すれば、様々な利用方法が見つかるでしょう。Vectorworks で使う場合は「自由にファンクション・キーをカスタマイズするには」も参考にしてみてください。


RButton::Send,{ESC}^!+d	;右マウスボタンにMoveCurrentLayer&Classを割り当て

下記が、プラグインのソースです。


{*******************************************************************************
        MoveCurrentLayerClass
        
        クリック直下の図形のレイヤ&クラスにカレントレイヤ&クラスを変更し、2Dセレクションポインタツールを選択
        
        Copyright 2010 兵藤善紀建築設計事務所
        www.hyodo-arch.com      2010.04.12

    2011.04.19  Ver 0.12    PickObjectがNILの場合にエラーが出るので、出ないように対処。
    2010.04.16  Ver 0.11    図形を選択しないで、マウス座標の下の図形を拾う
    2010.04.11  Ver 0.10    まず最初のバージョン
 *******************************************************************************}

PROCEDURE MoveCurrentLayerClass;
VAR
    hh, subhh                   :Handle;    {選択図形のハンドル}
    Layerhh                     :Handle;    {選択図形のレイヤのハンドル}
    SelectObjLayer              :String;    {選択図形のレイヤ名}
    SelectObjClass              :String;    {選択図形のクラス名}
    MousePt                     :Vector;    {マウスの座標}
    hhBool                      :Boolean;   {GetPickObjectInfoの返り値}
    intMes                      :Integer;   {GetPickObjectInfoの不使用の返り値}

BEGIN
    hh:= nil;
    GetMouse(MousePt.x,MousePt.y);
    hhBool:=GetPickObjectInfo(MousePt.x,MousePt.y,hh,subhh,intMes);

    IF hhBool THEN Begin        {もしカーソル座標に図形があるならば、クラス&レイヤを移動}
        Layerhh:=GetLayer(hh);              {選択図形のレイヤのハンドルを取得}
        SelectObjLayer:=GetLName(Layerhh);  {選択図形のレイヤ名を取得}
        SelectObjClass:=GetClass(hh);       {選択図形のクラス名を取得}
        Layer(SelectObjLayer);              {カレントレイヤの移動}
        NameClass(SelectObjClass);          {カレントクラスの移動}
    End;

    SetTool(-240);                      {2Dセレクションポインタを選択}
    {Message('ObjectType=',GetType(hh));}

END;
RUN ( MoveCurrentLayerClass );