mieki256's diary



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。

ユーザエクステンションフォルダの場所 :

ユーザエクステンションが入る場所は、以下で確認できる。

Inkscape を起動して、編集 → 環境設定、を選ぶ。

inkscape_ext_ss01.png


システム、を選択。ユーザーエクステンションという項目に、場所が表示されてる。右のほうの「開く」ボタンをクリック。

inkscape_ext_ss02.png


エクスプローラが起動して、ユーザーエクステンションの保存場所が開かれる。

inkscape_ext_ss03.png


手作業でユーザエクステンションをインストールしていく時は、このフォルダの中に各ファイルをコピーしていけばいい。

手作業でインストールする手順 :

順番がちょっと逆になるけど、手作業でインストールする手順をメモしておく。後述の「エクステンション管理」機能を経由してインストールができるなら、そちらを使ってインストールしたほうがはるかに楽。

今回は、「Mirror」というエクステンションをインストールしてみる。これは、任意の直線を基準にして、図形を対称になるように移動/変形してくれる拡張機能。

_Mirror - Inkspace(Inkscapeのギャラリー) | Inkscape


ページを開くと下向きの矢印ボタンがあるのでクリックすると、zipファイルをダウンロードして入手できる。2023/11/30 の時点では、mirror_It7es4K.zip が得られる。

inkscape_ext_ss04.png


mirror_It7es4K.zip が入手できた。これをエクスプローラで開く。ちなみに、Windows10 x64 22H2 のエクスプローラは、zipファイルの中を覗ける機能を持っている。

inkscape_ext_ss05.png


zipファイル内には、Inkscape のバージョンに合わせたフォルダ群が入っていた。今回は Inkscape 1.3 で使いたいので、比較的バージョンが近い v1.2 をダブルクリック。

inkscape_ext_ss06.png


mirror.inx, mirror.py の2つのファイルが入ってる。両方選択して右クリック。メニューの中から「コピー」を選ぶ。

inkscape_ext_ss07.png


ユーザエクステンション保存フォルダの中で、右クリック。メニューの中から「貼り付け」を選ぶ。

inkscape_ext_ss08.png


mirror.inx と mirror.py が、ユーザエクステンション保存フォルダの中にコピーされた。ちなみに、何かフォルダを作っておいて(この場合は「Mirror」とか)、その中に入れたほうが管理は楽かもしれない。フォルダの中に入れてあっても Inkscape 上で反映される。

inkscape_ext_ss09.png


この状態で Inkscape を再起動すれば、追加したユーザエクステンションが、エクステンションメニュー内で項目として追加される。


一応、Mirror エクステンションの使い方もメモしておく。
  1. 図形と、対称線になる線分を作っておく。
  2. 図形をクリックして選択してから、対称線を Shift + クリックして、複数選択。
  3. エクステンション → パスの変形 → Mirror、を選択。

inkscape_ext_ss10.png


対称線を基準にして、図形が移動した。

inkscape_ext_ss11.png

エクステンション管理を使ってインストール :

上記では手作業でインストールしたけれど、「エクステンション管理」を使ってインストールできるなら、そちらを使ったほうが簡単。

今回は、「Guide Creation Tools」という拡張をインストールしてみる。コレを使うと、色々な種類を選んでガイドを作成できる。

_Guide Creation Tools - Inkspace the Inkscape Gallery | Inkscape


エクステンション → エクステンション管理、を選択。エクステンション管理のウインドウが表示される。

inkscape_ext_ss12.png


  1. Install Packages を選択。
  2. 検索入力欄に単語を入力。「guide」と打ち込んで Enterキー。
  3. 「Guide Creation Tools」がリストアップされたので、クリックして選択。
  4. 「Install Package」ボタンをクリック。

inkscape_ext_ss13.png

もし、拡張の詳細を知りたい時は、拡張名を選択した状態で、左下の「Details and Comments」をクリックすれば、Inkscape公式サイトの該当ページがWebブラウザで表示される。


「Guide Creation Tools」がインストールされた。

inkscape_ext_ss14.png

ちなみに、この画面で該当項目をクリックして選択して、右下の「Uninstall Package」をクリックすれば、アンインストールすることもできる。


Guide Creation Tools の使い方もメモしておく。何か図形を選択した状態で、エクステンション → ガイド → Guide Creation Tools、を選択。

inkscape_ext_ss15.png


設定ダイアログが表示される。ここでは「プリセット」の中から「Centered」を選んで、「適用」をクリックしてみた。

inkscape_ext_ss16.png


選んでいた図形の中心線になるようなガイドが作成された。

inkscape_ext_ss17.png

#2 [hsp] hsp3dishでスクリーンセーバを作れないか再度挑戦したがダメだった

HSP の hsp3dish を使ってスクリーンセーバを作れないものかと考えていたけれど、名案(?)が閃いたので、再度試してみた。

結果を先に書くと、やっぱりダメだった。

環境は、Windows10 x64 22H2 + HSP 3.7 beta 7。

経緯 :

以前、hsp3dish を使ってスクリーンセーバが作れるのか実験してみたけれど、その時の実験は失敗に終わった。

HSPの標準機能を使ってスクリーンセーバを作成する場合、フルスクリーン表示モードにおいては、以下のような状態で作ることになっている。
  • HSP起動時に作られるウインドウID0には一切手を触れない。
  • 表示ウインドウID2を新規作成して、そのウインドウID2に描画していく。
そういう仕組みにしておくことで、Windows用のスクリーンセーバに求められる細かい仕様は、HSP側でイイ感じに処理してくれるのだろう。たぶん。

しかし、hsp3dish は、表示ウインドウが必ず1つであることを強制する上に、必ずウインドウID0に描画するという制限がある。ウインドウID2が作れないし、ウインドウID2に描画していくこともできない…。

hsp3dishを使って、ウインドウID0をデスクトップサイズに変更して描画してみたが、一見それらしく表示されたものの、通常のスクリーンセーバのようには動作してくれなかった。マウスを動かしても、キーボードを叩いても、終了してくれない。これではスクリーンセーバにならない。

と、ここまでが前回の実験結果だった。

そこでふと、自前でキー押しやマウスカーソル移動を判定して、自分で勝手に終了してしまえばいいのではないかと思いついた。

また、多重起動禁止も盛り込んでおいた。と言うのも、Windowsのスクリーンセーバは多重起動されてしまう時があるらしいので…。このあたりも、HSP側がイイ感じに処理してくれないだろうから、自前で処理しなければならない可能性がある。

そんなわけで、それで上手くいくのか、実験をしてみたのだけど…。

ソース :

実験に使ったソースは以下。

_ssstarh3d.hsp

使用画像は以下。

_star.png
_preview.png

動作させると以下のような画面になる。昔のWindowsに標準で入ってた「宇宙飛行」みたいなソレ。

ssstarh3d_scr_ss01.png

結果 :

この実験も失敗に終わった。

フルスクリーン表示モードは、一見それらしくなってるし、何かのキーを押すか、マウスを動かせば終了するようになったのだけど。

Windows10の、「スクリーンセーバーの変更」ウインドウで、hsp3dish を使って作ったスクリーンセーバを選んだところ、ウインドウ内の小さな窓に収まるようにプレビュー画像を表示することができなかった。別ウインドウが表示されてしまって、その中にプレビューが表示されてしまう。

ssstarh3d_scr_ss02.png

HSPの標準機能を使ってスクリーンセーバを作る場合は、「スクリーンセーバーの変更」から与えられたウインドウハンドルに従って、ウインドウID0が小さな窓に収まるようにサイズその他が調整されるのだけど…。

hsp3dish を使った場合は、与えられたウインドウハンドルも、ウインドウハンドルから得られる情報もガン無視して、いつものように通常ウインドウを表示してしまうのだろう…。

そんなわけで、HSp 3.7 beta 7 の時点では、hsp3dish を使ってWindows用のスクリーンセーバは作れない ―― そう断言してもいいのかもしれない。無念。

多重起動禁止について :

多重起動禁止処理については、以下のページが参考になった。

_二重起動の防止(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 を最初に実行すると以下のような表示になる。

test_createmutex_b_ss01.png


その状態で、同じ .exe をまた実行すると、以下のような表示になる。OKボタンをクリックすれば終了する。

test_createmutex_b_ss02.png


たしかに、多重起動禁止が実現できた。

マウスカーソル座標の取得 :

デスクトップ上のマウスカーソル座標の取得でちょっとハマったのでメモ。

HSP の場合、ginfo_mx, ginfo_my で、デスクトップ上のマウスカーソル座標が得られる。

当初、mousex, mousey でマウスカーソル座標を取得しようとしたのだけど。これはアプリウインドウ内にマウスカーソルがある場合に、アプリウインドウ内のマウスカーソル座標を取得できる変数だった。アプリウインドウの外でマウスカーソルを動かして、反応しないな、おかしいなと悩んでしまった…。

以上、1 日分です。

過去ログ表示

Prev - 2023/11 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project