mieki256's diary



2021/08/21() [n年前の日記]

#2 [cg_tools][xyzzy][povray] POV-Ray のエディタについて少し調べた

POV-Ray 3.7 のエディタがちょっと使い辛いなと…。Ctrl + Space でキーワード補完ができるあたり便利なのだけど…。

カーソル移動が妙。 :

カーソルが各行の行末を越えた場所まで移動できてしまうので、かなり戸惑う…。いわゆるフリーカーソル仕様と言うヤツだろうか…。どうしてわざわざこんな仕様に…。

POV-Ray editor の設定画面(Alt + Enter で開く)を眺めていたら、Misc → Confine caret text、という項目が気になった。チェックを入れたら、カーソルが行末以降には移動しないようになった。

だよなあ…。フツーはそういうオプションをつけるわな…。

xyzzy の pov-mode について。 :

何か違うエディタを使ったほうが快適だったりするのだろうかとググってみたら、xyzzy 用に pov-mode を書いていた方がいらっしゃるようで。

_POV-Ray Tips その3
_xyzzy研究室〜ライブラリ (WebArchive)

試しに使わせてもらおう…。ありがたや。

少し触ってみて気が付いた。pov-mode.l 内の、*pov-mode* の初期化行が、現状(Windows10 x64 21H1 + POV-Ray 3.7)では合ってない模様。

Windows のレジストリを読み取って、pvengine.exe のある場所を決めているけど、今時の POV-Ray は :local-machine じゃなくて :current-user のほうにインストールフォルダを記録しているようで。

また、pov-insert-list-init() や pov-insert() も正常動作しないことに気づいた。今時の POV-Ray は、プログラム本体と別に、ドキュメントフォルダの中に関連リソースファイルをインストールしていて、Insert Menu フォルダ等はドキュメントフォルダ側に入っている。pov-mode.l は、プログラム本体が入ってるフォルダの中にそれらリソースファイルも入ってることを前提にして書かれているので動作しないのだろう。

リソースファイルが入ってるフォルダを *pov-docpath* という変数に入れて、*pov-home* ではなく *pov-docpath* を使うようにしてみた。
--- pov-mode.l.orig Sat Jun 24 23:32:51 2000
+++ pov-mode.l  Sat Aug 21 05:41:24 2021
@@ -66,6 +66,7 @@
 (defvar *pov-hwnd* 0)
 (defvar *pov-mode-hook* nil)
 (defvar *pov-home* nil)
+(defvar *pov-docpath* nil)
 (defvar *pov-insert-list* nil)
 
 (defvar pov-indent-level 2)
@@ -250,7 +251,8 @@
   (interactive)
   (kill-all-local-variables)
   (setq mode-name "POV")
-  (setq *pov-home* (read-registry "SOFTWARE\\POV-Ray\\CurrentVersion\\Windows\\" "HOME" :local-machine))
+  (setq *pov-home* (read-registry "SOFTWARE\\POV-Ray\\v3.7\\Windows\\" "Home" :current-user))
+  (setq *pov-docpath* (read-registry "SOFTWARE\\POV-Ray\\v3.7\\Windows\\" "DocPath" :current-user))
   (pov-insert-list-init)
   (setq buffer-mode 'pov-mode)
   (use-syntax-table *pov-mode-syntax-table*)
@@ -321,10 +323,10 @@
     (winapi:SendMessage *pov-hwnd* WM_COMMAND CM_FILEEXIT 0)))
 
 (defun pov-insert-list-init()
-  (if (null *pov-home*)
+  (if (null *pov-docpath*)
       (return-from pov-insert-list-init nil))
   (setq *pov-insert-list* nil)
-  (let* ((topdir (concat *pov-home* "/Insert Menu"))
+  (let* ((topdir (concat *pov-docpath* "/Insert Menu"))
     (dirlist (directory topdir :directory-only t)))
     (dolist (dir dirlist)
       (let ((filelist (directory (concat topdir "/" dir) :file-only t :wild "*.txt")))
@@ -334,12 +336,12 @@
 
 (defun pov-insert ()
   (interactive)
-  (if (null *pov-home*)
+  (if (null *pov-docpath*)
       (error "POV-Rayがインストールされていません"))
   (let* ((category (completing-read "Category: "
                    (mapcar #'car *pov-insert-list*) :case-fold t :must-match t))
     (item (completing-read "Item: "
                (cdr (assoc category *pov-insert-list* :test #'string-equal))
                :case-fold t :must-match t)))
-    (insert-file-contents (concat *pov-home* "/Insert Menu/" category "/" item ".txt"))))
+    (insert-file-contents (concat *pov-docpath* "/Insert Menu/" category "/" item ".txt"))))
 

これで、C-c i を叩けば、POV-Ray のInsertメニュー相当が使えるようになった。例えば、Category で col と打ってTABキーを叩けば「D0 - Colors」が補完されて、Item で gr と打ってTABキーを叩けば、gr が含まれる色名が選べるようになる。どれかしらを選ぶとテンプレートっぽい記述が挿入される。

ただ、上記の修正は、POV-Ray 3.7 がインストールされていることを決め打ちしてレジストリを読み取っているので、手抜き過ぎてちょっと気になる…。まあ、使用している POV-Ray のバージョンが変わった時には、書き直してバイトコンパイルすれば済むのだけど…。自分ことだから、たぶんそのへん数日経ったら全部奇麗に忘れてそう…。

emacsにpov-modeを導入してみた。 :

emacs (NTEmacs 26.3) にも pov-mode があるらしいので導入してみた。

M-x package-list-packages と打つとネット経由でインストールできるパッケージの一覧が表示される。pov-mode を探して、iキーを叩いてインストール予定マークの「I」をつけてから、xキーで実行してインストール。

~/.emacs.d/init.el (~/.emacs) に以下を追記。
;; ----------------------------------------
;; pov-mode (POV-Ray)

;; (add-to-list 'load-path "~/.emacs.d/elpa/pov-mode-3.2/pov-mode.el")
(autoload 'pov-mode "pov-mode" "PoVray scene file mode" t)
(add-to-list 'auto-mode-alist '("\\.pov\\'" . pov-mode))
(add-to-list 'auto-mode-alist '("\\.inc\\'" . pov-mode))

emacs を再起動。

何かしらの .pov ファイルを開くと pov-mode になる。その状態で、M-x customize-group。Enter を叩いてから、pov と打って再度 Enter。pov-mode で設定できる変数の一覧が表示される。

pov-mode の README によると、以下の3つの変数を設定するといいらしい。
  • Pov Include Dir
  • Pov Documentation Directory
  • Pov Insertmenu Location
Pov Documentation Directory は htmlフォルダを指定するらしいけど、それはちょっとどこにあるのか分からない…。また、povray-command も指定しないといかんような気がする…。

とりあえず、以下を指定するような感じになった。
 '(pov-include-dir "D:/home/POV-Ray/v3.7/include")
 '(pov-insertmenu-location "D:/home/POV-Ray/v3.7/Insert Menu/")
 '(povray-command "C:/Prog/POV-Ray/v3.7/bin/pvengine.exe")

キー割り当てを眺めた感じでは、C-M-i を叩くとキーワード補完ができるようではあるなと…。それ以外の機能はまだ分かってない…。

Visual Studio Code用の拡張もあるらしい。 :

vsocde (Microsoft Visual Studio Code)に対応した POV-Ray の拡張もあるらしい。

_POV-Ray - Visual Studio Marketplace

Windows上で使う場合は pvengine.exe に PATH を通しておけ、と書いてあるな…。通しておくか…。

Windows10 x64 21H1 + vscode 1.59.1 上でインストールしてみた。

.pov を開くと色分けしてくれるし、キーワードも補完してくれる。また、Ctrl + Shift + B を叩いたら、POV-Ray を呼び出してレンダリングしてくれた。レンダリング後の画像も、vscode 内に表示してくれる。なんだか至れり尽くせりな印象。

ただ、ドキュメントの整形・フォーマット (formatter) は存在していないっぽい。

インテリセンスでキーワードをガンガン補完してくれる上に、ショートカットキーでレンダリングができるあたり、エディタでテキストをガシガシ打って POV-Ray を使うなら、一番快適かもしれない。後はフォーマッターさえあれば…だけど。

Linux上でも試してみた。 :

Linux上でも POV-Ray が使えるのかどうか気になったので、Ubuntu Linux 20.04 LTS 上でも動くかどうか試してみた。VMware Player 上の Ubuntu と、実機(サブPC)にインストールした Ubuntu の両方で動作確認。

POV-Ray 自体は、apt でインストールできる。
sudo apt install povray povray-doc povray-examples
POV-Ray 3.7 がインストールされた。

/usr/bin/ に povray というコマンドがインストールされたが、Windows版とは違って、実行しようとしてもエディタ画面のようなものは表示されなかった。

以下のページで Linux版について説明されてた。やはり、Linux版はコマンドラインツールしか提供されてないらしい。おそらく、.pov ファイルを渡したら計算して結果画像を出力する、といった機能しか持ってないのではないかなと…。

_POV-Ray: Download: Useful tools for POV-Ray for Unix

Ubuntu上に vscode がインストール済みだったので、更に POV-Ray用の拡張もインストール。vscode で .pov ファイルを記述して動作確認した。Ctrl + Shift + B を叩いたら、povray を呼び出して画像を出力した後、vscode のウインドウ内に結果画像を表示してくれた。

ちなみに…。
  • include は、/usr/share/povray-3.7/include/ に入ってる。
  • examples は、/usr/share/doc/povray/examples/ に入ってる。
  • doc は、/usr/share/doc/povray/html/ に入ってる。

_Debian -- パッケージのファイル一覧: povray-includes/buster/all
_Debian -- パッケージのファイル一覧: povray-examples/buster/all
_Debian -- パッケージのファイル一覧: povray-doc/buster/all

これらのファイル配置を目にしたことで、emacs の pov-mode が、完全に *NIX環境で使うことを前提にして書かれてることが分かった。emacs の pov-mode は、「docディレクトリを指定せよ」的仕様で作られてるけど…。*NIX なら html/ があるけど Windows には無いので…。

以上です。

過去ログ表示

Prev - 2021/08 - 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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project