2023/11/30(木) [n年前の日記]
#1 [cg_tools] InkscapeにExtensionを追加する手順を再度メモ
WindowsやLinux上で、無料で利用できるドローソフト、Inkscape について。
_Draw Freely | Inkscape
Inkscape 0.92.3 を使っていた頃に、ユーザエクステンション(拡張機能, Extension)をインストールする手順を少しメモしていたのだけど。
_mieki256's diary - InkscapeにExtensionを追加する手順をメモ
現行版 Inkscape 1.3 x64 を使って、そのあたりの動作確認をしていたら、「エクステンション管理」を使うとインストール作業が楽になることを今頃知ったので、とりあえずメモしておく。
環境は、Windows10 x64 22H2 + Inkscape 1.3 x64。
_Draw Freely | Inkscape
Inkscape 0.92.3 を使っていた頃に、ユーザエクステンション(拡張機能, Extension)をインストールする手順を少しメモしていたのだけど。
_mieki256's diary - InkscapeにExtensionを追加する手順をメモ
現行版 Inkscape 1.3 x64 を使って、そのあたりの動作確認をしていたら、「エクステンション管理」を使うとインストール作業が楽になることを今頃知ったので、とりあえずメモしておく。
環境は、Windows10 x64 22H2 + Inkscape 1.3 x64。
◎ ユーザエクステンションフォルダの場所 :
ユーザエクステンションが入る場所は、以下で確認できる。
Inkscape を起動して、編集 → 環境設定、を選ぶ。
システム、を選択。ユーザーエクステンションという項目に、場所が表示されてる。右のほうの「開く」ボタンをクリック。
エクスプローラが起動して、ユーザーエクステンションの保存場所が開かれる。
手作業でユーザエクステンションをインストールしていく時は、このフォルダの中に各ファイルをコピーしていけばいい。
Inkscape を起動して、編集 → 環境設定、を選ぶ。
システム、を選択。ユーザーエクステンションという項目に、場所が表示されてる。右のほうの「開く」ボタンをクリック。
エクスプローラが起動して、ユーザーエクステンションの保存場所が開かれる。
手作業でユーザエクステンションをインストールしていく時は、このフォルダの中に各ファイルをコピーしていけばいい。
◎ 手作業でインストールする手順 :
順番がちょっと逆になるけど、手作業でインストールする手順をメモしておく。後述の「エクステンション管理」機能を経由してインストールができるなら、そちらを使ってインストールしたほうがはるかに楽。
今回は、「Mirror」というエクステンションをインストールしてみる。これは、任意の直線を基準にして、図形を対称になるように移動/変形してくれる拡張機能。
_Mirror - Inkspace(Inkscapeのギャラリー) | Inkscape
ページを開くと下向きの矢印ボタンがあるのでクリックすると、zipファイルをダウンロードして入手できる。2023/11/30 の時点では、mirror_It7es4K.zip が得られる。
mirror_It7es4K.zip が入手できた。これをエクスプローラで開く。ちなみに、Windows10 x64 22H2 のエクスプローラは、zipファイルの中を覗ける機能を持っている。
zipファイル内には、Inkscape のバージョンに合わせたフォルダ群が入っていた。今回は Inkscape 1.3 で使いたいので、比較的バージョンが近い v1.2 をダブルクリック。
mirror.inx, mirror.py の2つのファイルが入ってる。両方選択して右クリック。メニューの中から「コピー」を選ぶ。
ユーザエクステンション保存フォルダの中で、右クリック。メニューの中から「貼り付け」を選ぶ。
mirror.inx と mirror.py が、ユーザエクステンション保存フォルダの中にコピーされた。ちなみに、何かフォルダを作っておいて(この場合は「Mirror」とか)、その中に入れたほうが管理は楽かもしれない。フォルダの中に入れてあっても Inkscape 上で反映される。
この状態で Inkscape を再起動すれば、追加したユーザエクステンションが、エクステンションメニュー内で項目として追加される。
一応、Mirror エクステンションの使い方もメモしておく。
対称線を基準にして、図形が移動した。
今回は、「Mirror」というエクステンションをインストールしてみる。これは、任意の直線を基準にして、図形を対称になるように移動/変形してくれる拡張機能。
_Mirror - Inkspace(Inkscapeのギャラリー) | Inkscape
ページを開くと下向きの矢印ボタンがあるのでクリックすると、zipファイルをダウンロードして入手できる。2023/11/30 の時点では、mirror_It7es4K.zip が得られる。
mirror_It7es4K.zip が入手できた。これをエクスプローラで開く。ちなみに、Windows10 x64 22H2 のエクスプローラは、zipファイルの中を覗ける機能を持っている。
zipファイル内には、Inkscape のバージョンに合わせたフォルダ群が入っていた。今回は Inkscape 1.3 で使いたいので、比較的バージョンが近い v1.2 をダブルクリック。
mirror.inx, mirror.py の2つのファイルが入ってる。両方選択して右クリック。メニューの中から「コピー」を選ぶ。
ユーザエクステンション保存フォルダの中で、右クリック。メニューの中から「貼り付け」を選ぶ。
mirror.inx と mirror.py が、ユーザエクステンション保存フォルダの中にコピーされた。ちなみに、何かフォルダを作っておいて(この場合は「Mirror」とか)、その中に入れたほうが管理は楽かもしれない。フォルダの中に入れてあっても Inkscape 上で反映される。
この状態で Inkscape を再起動すれば、追加したユーザエクステンションが、エクステンションメニュー内で項目として追加される。
一応、Mirror エクステンションの使い方もメモしておく。
- 図形と、対称線になる線分を作っておく。
- 図形をクリックして選択してから、対称線を Shift + クリックして、複数選択。
- エクステンション → パスの変形 → Mirror、を選択。
対称線を基準にして、図形が移動した。
◎ エクステンション管理を使ってインストール :
上記では手作業でインストールしたけれど、「エクステンション管理」を使ってインストールできるなら、そちらを使ったほうが簡単。
今回は、「Guide Creation Tools」という拡張をインストールしてみる。コレを使うと、色々な種類を選んでガイドを作成できる。
_Guide Creation Tools - Inkspace the Inkscape Gallery | Inkscape
エクステンション → エクステンション管理、を選択。エクステンション管理のウインドウが表示される。
もし、拡張の詳細を知りたい時は、拡張名を選択した状態で、左下の「Details and Comments」をクリックすれば、Inkscape公式サイトの該当ページがWebブラウザで表示される。
「Guide Creation Tools」がインストールされた。
ちなみに、この画面で該当項目をクリックして選択して、右下の「Uninstall Package」をクリックすれば、アンインストールすることもできる。
Guide Creation Tools の使い方もメモしておく。何か図形を選択した状態で、エクステンション → ガイド → Guide Creation Tools、を選択。
設定ダイアログが表示される。ここでは「プリセット」の中から「Centered」を選んで、「適用」をクリックしてみた。
選んでいた図形の中心線になるようなガイドが作成された。
今回は、「Guide Creation Tools」という拡張をインストールしてみる。コレを使うと、色々な種類を選んでガイドを作成できる。
_Guide Creation Tools - Inkspace the Inkscape Gallery | Inkscape
エクステンション → エクステンション管理、を選択。エクステンション管理のウインドウが表示される。
- Install Packages を選択。
- 検索入力欄に単語を入力。「guide」と打ち込んで Enterキー。
- 「Guide Creation Tools」がリストアップされたので、クリックして選択。
- 「Install Package」ボタンをクリック。
もし、拡張の詳細を知りたい時は、拡張名を選択した状態で、左下の「Details and Comments」をクリックすれば、Inkscape公式サイトの該当ページがWebブラウザで表示される。
「Guide Creation Tools」がインストールされた。
ちなみに、この画面で該当項目をクリックして選択して、右下の「Uninstall Package」をクリックすれば、アンインストールすることもできる。
Guide Creation Tools の使い方もメモしておく。何か図形を選択した状態で、エクステンション → ガイド → Guide Creation Tools、を選択。
設定ダイアログが表示される。ここでは「プリセット」の中から「Centered」を選んで、「適用」をクリックしてみた。
選んでいた図形の中心線になるようなガイドが作成された。
[ ツッコむ ]
#2 [hsp] hsp3dishでスクリーンセーバを作れないか再度挑戦したがダメだった
HSP の hsp3dish を使ってスクリーンセーバを作れないものかと考えていたけれど、名案(?)が閃いたので、再度試してみた。
結果を先に書くと、やっぱりダメだった。
環境は、Windows10 x64 22H2 + HSP 3.7 beta 7。
結果を先に書くと、やっぱりダメだった。
環境は、Windows10 x64 22H2 + HSP 3.7 beta 7。
◎ 経緯 :
以前、hsp3dish を使ってスクリーンセーバが作れるのか実験してみたけれど、その時の実験は失敗に終わった。
HSPの標準機能を使ってスクリーンセーバを作成する場合、フルスクリーン表示モードにおいては、以下のような状態で作ることになっている。
しかし、hsp3dish は、表示ウインドウが必ず1つであることを強制する上に、必ずウインドウID0に描画するという制限がある。ウインドウID2が作れないし、ウインドウID2に描画していくこともできない…。
hsp3dishを使って、ウインドウID0をデスクトップサイズに変更して描画してみたが、一見それらしく表示されたものの、通常のスクリーンセーバのようには動作してくれなかった。マウスを動かしても、キーボードを叩いても、終了してくれない。これではスクリーンセーバにならない。
と、ここまでが前回の実験結果だった。
そこでふと、自前でキー押しやマウスカーソル移動を判定して、自分で勝手に終了してしまえばいいのではないかと思いついた。
また、多重起動禁止も盛り込んでおいた。と言うのも、Windowsのスクリーンセーバは多重起動されてしまう時があるらしいので…。このあたりも、HSP側がイイ感じに処理してくれないだろうから、自前で処理しなければならない可能性がある。
そんなわけで、それで上手くいくのか、実験をしてみたのだけど…。
HSPの標準機能を使ってスクリーンセーバを作成する場合、フルスクリーン表示モードにおいては、以下のような状態で作ることになっている。
- HSP起動時に作られるウインドウID0には一切手を触れない。
- 表示ウインドウID2を新規作成して、そのウインドウID2に描画していく。
しかし、hsp3dish は、表示ウインドウが必ず1つであることを強制する上に、必ずウインドウID0に描画するという制限がある。ウインドウID2が作れないし、ウインドウID2に描画していくこともできない…。
hsp3dishを使って、ウインドウID0をデスクトップサイズに変更して描画してみたが、一見それらしく表示されたものの、通常のスクリーンセーバのようには動作してくれなかった。マウスを動かしても、キーボードを叩いても、終了してくれない。これではスクリーンセーバにならない。
と、ここまでが前回の実験結果だった。
そこでふと、自前でキー押しやマウスカーソル移動を判定して、自分で勝手に終了してしまえばいいのではないかと思いついた。
また、多重起動禁止も盛り込んでおいた。と言うのも、Windowsのスクリーンセーバは多重起動されてしまう時があるらしいので…。このあたりも、HSP側がイイ感じに処理してくれないだろうから、自前で処理しなければならない可能性がある。
そんなわけで、それで上手くいくのか、実験をしてみたのだけど…。
◎ ソース :
実験に使ったソースは以下。
_ssstarh3d.hsp
使用画像は以下。
_star.png
_preview.png
動作させると以下のような画面になる。昔のWindowsに標準で入ってた「宇宙飛行」みたいなソレ。
_ssstarh3d.hsp
使用画像は以下。
_star.png
_preview.png
動作させると以下のような画面になる。昔のWindowsに標準で入ってた「宇宙飛行」みたいなソレ。
◎ 結果 :
この実験も失敗に終わった。
フルスクリーン表示モードは、一見それらしくなってるし、何かのキーを押すか、マウスを動かせば終了するようになったのだけど。
Windows10の、「スクリーンセーバーの変更」ウインドウで、hsp3dish を使って作ったスクリーンセーバを選んだところ、ウインドウ内の小さな窓に収まるようにプレビュー画像を表示することができなかった。別ウインドウが表示されてしまって、その中にプレビューが表示されてしまう。
HSPの標準機能を使ってスクリーンセーバを作る場合は、「スクリーンセーバーの変更」から与えられたウインドウハンドルに従って、ウインドウID0が小さな窓に収まるようにサイズその他が調整されるのだけど…。
hsp3dish を使った場合は、与えられたウインドウハンドルも、ウインドウハンドルから得られる情報もガン無視して、いつものように通常ウインドウを表示してしまうのだろう…。
そんなわけで、HSp 3.7 beta 7 の時点では、hsp3dish を使ってWindows用のスクリーンセーバは作れない ―― そう断言してもいいのかもしれない。無念。
フルスクリーン表示モードは、一見それらしくなってるし、何かのキーを押すか、マウスを動かせば終了するようになったのだけど。
Windows10の、「スクリーンセーバーの変更」ウインドウで、hsp3dish を使って作ったスクリーンセーバを選んだところ、ウインドウ内の小さな窓に収まるようにプレビュー画像を表示することができなかった。別ウインドウが表示されてしまって、その中にプレビューが表示されてしまう。
HSPの標準機能を使ってスクリーンセーバを作る場合は、「スクリーンセーバーの変更」から与えられたウインドウハンドルに従って、ウインドウID0が小さな窓に収まるようにサイズその他が調整されるのだけど…。
hsp3dish を使った場合は、与えられたウインドウハンドルも、ウインドウハンドルから得られる情報もガン無視して、いつものように通常ウインドウを表示してしまうのだろう…。
そんなわけで、HSp 3.7 beta 7 の時点では、hsp3dish を使ってWindows用のスクリーンセーバは作れない ―― そう断言してもいいのかもしれない。無念。
◎ 多重起動禁止について :
多重起動禁止処理については、以下のページが参考になった。
_二重起動の防止(1) - Advanced HSP
_HSP講座 - プログラ広場 (mutex.as)
Windows の kernel32.dll が持っている、CreateMutex関数を利用することで、多重起動しているかどうかを判別できるので、ソレを使って多重起動禁止処理が作れるらしい。
紹介されているソースをコピペさせてもらって、手元でも動作確認してみた。
_test_createmutex_b.hsp
生成された .exe を最初に実行すると以下のような表示になる。
その状態で、同じ .exe をまた実行すると、以下のような表示になる。OKボタンをクリックすれば終了する。
たしかに、多重起動禁止が実現できた。
_二重起動の防止(1) - Advanced HSP
_HSP講座 - プログラ広場 (mutex.as)
Windows の kernel32.dll が持っている、CreateMutex関数を利用することで、多重起動しているかどうかを判別できるので、ソレを使って多重起動禁止処理が作れるらしい。
紹介されているソースをコピペさせてもらって、手元でも動作確認してみた。
_test_createmutex_b.hsp
; 多重起動禁止テストその2 ; ; 二重起動の防止(1) - Advanced HSP ; http://chokuto.ifdef.jp/advanced/singleton1.html ; ; 2023/11/30, Windows10 x64 22H2 + HSP 3.7 beta 7 #packopt name "test_createmutex_b" ; filename #packopt type 0 ; generate ".exe" ; 多重起動をチェックするためのミューテックスオブジェクト名を定義。 ; アプリ固有の名前であること。 #define MUTEX_NAME "HSP_WinAPI_Test_Mutex" ; ---------------------------------------- ; アプリケーションの起動チェックを行うモジュール #module #uselib "kernel32.dll" #cfunc CreateMutex "CreateMutexA" int, int, sptr #cfunc GetLastError "GetLastError" #func CloseHandle "CloseHandle" int #define ERROR_ALREADY_EXISTS 183 ; アプリがすでに起動されているか取得する関数 #defcfunc AlreadyAppRunning str name if (hMutex == 0) { ; 名前付きミューテックスオブジェクトの作成 hMutex = CreateMutex(0, 0, name) ; オブジェクトがすでに作成されていたかどうかの判別 if (GetLastError() == ERROR_ALREADY_EXISTS) { ; すでに同じ名前のオブジェクトが存在する alreadyRunning = 1 } else { ; オブジェクトが新しく作成された alreadyRunning = 0 } } return alreadyRunning ; クリーンアップ処理(終了時に自動実行) #deffunc CleanupAppRunChecker onexit if (hMutex != 0) { ; ミューテックスオブジェクトハンドルのクローズ CloseHandle hMutex hMutex = 0 } return ; ---------------------------------------- #global *start if (AlreadyAppRunning(MUTEX_NAME)) { dialog "すでに起動されています。" end } mes "二重起動してしません。" stop
生成された .exe を最初に実行すると以下のような表示になる。
その状態で、同じ .exe をまた実行すると、以下のような表示になる。OKボタンをクリックすれば終了する。
たしかに、多重起動禁止が実現できた。
◎ マウスカーソル座標の取得 :
デスクトップ上のマウスカーソル座標の取得でちょっとハマったのでメモ。
HSP の場合、ginfo_mx, ginfo_my で、デスクトップ上のマウスカーソル座標が得られる。
当初、mousex, mousey でマウスカーソル座標を取得しようとしたのだけど。これはアプリウインドウ内にマウスカーソルがある場合に、アプリウインドウ内のマウスカーソル座標を取得できる変数だった。アプリウインドウの外でマウスカーソルを動かして、反応しないな、おかしいなと悩んでしまった…。
HSP の場合、ginfo_mx, ginfo_my で、デスクトップ上のマウスカーソル座標が得られる。
当初、mousex, mousey でマウスカーソル座標を取得しようとしたのだけど。これはアプリウインドウ内にマウスカーソルがある場合に、アプリウインドウ内のマウスカーソル座標を取得できる変数だった。アプリウインドウの外でマウスカーソルを動かして、反応しないな、おかしいなと悩んでしまった…。
[ ツッコむ ]
以上、1 日分です。