90328
CAD 入力デバイスから値を読み取る grread
で以下のコードを使用して、マウスの右か左か、どちらをクリックしたか判定して、クリックした地点の座標を取得する処理を行おうとしています。

```

    (setq code_12 (grread (setq code (grread))))
    
```

このとき、変数code_12 に格納されるリストの 2 番目の要素はクリックした地点のXY座標が格納されるはずです。  
マウスの左クリックでは、クリックした地点の座標が格納されているのですが、右クリックではクリックした地点の座標が格納されず、コマンドラインでコマンドを実行したときのカーソルの地点のXY座標が格納されるようです。  
右クリックでもクリックした地点での座標を格納する方法はあるでしょうか？

関係があるか不明ですが、他にgrread で違いがある点としては、変数code のリストの 1 番目の要素は  
IJCADでは左クリック＝3、右クリック＝25となり、仕様にはない値25 が返されます。  
値が25になるときは、システム変数 SHORTCUTMENU＝0 に変更すると値は11 になる、ということで試したところ値は25 のままでした。  
[![0,0付近でコマンドを実行して、50,50付近で右クリックしたときのgrreadの戻り値](https://i.stack.imgur.com/RB6qS.png)](https://i.stack.imgur.com/RB6qS.png)
CC BY-SA 4.0
2022-07-26T08:19:50.397
90202
2022-08-02T04:23:20.670
53694
question
ijcad lisp
IJCAD2022 で grread (lisp関数) から右クリックしたときの座標値がクリックした地点の値ではない
>
> マウスの左クリックでは、クリックした地点の座標が格納されているのですが、右クリックではクリックした地点の座標が格納されず、コマンドラインでコマンドを実行したときのカーソルの地点のXY座標が格納されるようです。  
>  右クリックでもクリックした地点での座標を格納する方法はあるでしょうか？

以下の方法で右クリック時の座標を取得することができました。

  1. (grread 1)とし、マウス座標をリアルタイムで取得する
  2. リアルタイムで取得したマウス座標を変数に保存する
  3. 右クリックしたとき（＝リストの1番目の要素が25だったとき）、最後に保存した 2. の座標を取り出す

↓サンプルコード

```

    (defun C:rightclick (/ point)
    
        (setq loop T)
    
        (while loop
            (setq result (grread 1)) ; マウス座標をリアルタイムで取得する
    
            (cond
                ((= (car result) 5) ; マウス座標
                    (setq point (last result))
                )
    
                ((= (car result) 25) ; 右クリック
                    (setq loop nil)
                )
            )
        )
    point
    )
    
```
CC BY-SA 4.0
2022-08-02T04:23:20.670
90328
2022-08-02T04:23:20.670
52306
90202
answer