Cet article est l'article du 8ème jour de Lisp Advent Carendar 2019.
Créons un module complémentaire pour Blender, un outil DCC, en utilisant Hy, un dialecte Lisp de type Clojure qui fonctionne sur Python.
Hy
Blender
https://www.blender.org
Ce qui suit est pour Windows 10. Si vous utilisez un autre système d'exploitation, veuillez le lire comme il convient (je vais vous expliquer un peu).
Tout d'abord, installez Python 3 (64 bits). Pour le moment (décembre 2019), la dernière série 3.8 ou la précédente 3.7 est bonne. Supprimez le programme d'installation du site Web officiel et installez-le. Veillez à ne pas installer la version 32 bits.
Une fois Python 3 installé, créez un environnement Python virtuel, venv '', et installez Hy dedans pour garder l'environnement propre. Cette fois, créez-le avec le nom
venv_hy_blender``` dans le répertoire
`` .virtualenvs``` sous le répertoire de base.
La dernière version, Hy 0.17.0, n'implémente pas encore l'annotation de type, installez donc la dernière branche principale de GitHub.
Dans Windows 10 cmd, tapez:
$ cd %USERPROFILE%
$ mkdir .virtualenvs
$ cd .virtualenvs
$ py -3 -m venv venv_hy_blender
$ cd venv_hy_blender
$ Scripts\activate.bat
$ python -m pip install git+https://github.com/hylang/hy.git
$ deactivate.bat
py
Est une commande Windows uniquement, donc pour les autres systèmes d'exploitationpy -3
Remplacez par la commande de démarrage de l'interpréteur python 3 sur cet os (généralementpython3
Oupython
est).
De plus, la commande activate pour activer l'environnement virtuel diffère selon l'OS et le Shell, donc reportez-vous à "Commandes pour activer l'environnement virtuel" dans le lien "venv --- Créer un environnement virtuel" ci-dessous.
Déposez et installez le dernier programme d'installation de Blender 2.81 à partir du site officiel.
Vous trouverez ci-dessous une réécriture Hy du code Python Bringing It All Together du didacticiel du module complémentaire Blender.
Si vous utilisez Python, vous constaterez que vous pouvez écrire Python presque tel quel.
Supposons que vous créez ceci dans le répertoire
blender_sandbox```.
La seule annotation de type qui ne figure pas dans la documentation actuelle de Hy est `` (^ type nom de la variable) ''. Pour plus de détails, reportez-vous à "Implémenter les annotations PEP 3107 et 526".
cursor_array.hy
(import bpy)
(setv bl-info {
:name "Cursor Array"
:blender (, 2 81 0)
:category "Object"
})
(defclass ObjectCursorArray [(. bpy types Operator)]
"Object Cursor Array"
(setv bl-idname "object.cursor_array")
(setv bl-label "Cursor Array")
(setv bl-options #{"REGISTER" "UNDO"})
(^((. bpy props IntProperty) :name "Steps" :default 2 :min 1 :max 100) total)
(defn execute [self context]
(setv scene (. context scene))
(setv cursor (. scene cursor location))
(setv obj (. context active-object))
(for [i (range (. self total))]
(setv obj-new ((. obj copy)))
((. scene collection objects link) obj-new)
(setv factor (/ i (. self total)))
(setv (. obj-new location) (+ (* (. obj location) factor) (* cursor (- 1.0 factor)))))
#{"FINISHED"}))
(defn menu_func [self context]
((. self layout operator) (. ObjectCursorArray bl-idname)))
; store keymaps here to access after registration
(setv addon-keymaps [])
(defn register []
((. bpy utils register-class) ObjectCursorArray)
((. bpy types VIEW3D-MT-object append) menu-func)
;; handle the keymap
(setv wm (. bpy context window-manager))
;; Note that in background mode (no GUI available), keyconfigs are not available either,
;; so we have to check this to avoid nasty errors in background case.
(setv kc (. wm keyconfigs addon))
(when kc
(setv km ((. wm keyconfigs addon keymaps new) :name "Object Mode" :space-type "EMPTY"))
(setv kmi ((. km keymap-items new) (. ObjectCursorArray bl-idname) "T" "PRESS" :ctrl True :shift True))
(setv (. kmi properties total) 4)
((. addon-keymaps append) (, km kmi))))
(defn unregister []
;; Note: when unregistering, it's usually good practice to do it in reverse order you registered.
;; Can avoid strange issues like keymap still referring to operators already unregistered...
;; handle the keymap
(for [(, km kmi) addon-keymaps]
((. km keymap-items remove) kmi))
((. addon-keymaps clear))
((. bpy utils unregister-class) ObjectCursorArray)
((. bpy types VIEW3D-MT-object remove) menu-func))
(when (= --name-- "__main__")
(register))
blender_Blender2 dans le répertoire sandbox.81.Créez un fichier de commandes de démarrage avec le nom bat.
```venv_hy_blender```de```site-packages```Et l'ajout créé-sur le répertoire (```blender_sandbox```) Est un fichier batch qui démarre Blender.
```site-packages```Est le répertoire d'installation des modules tiers de python, que possède python lui-même et son environnement virtuel.
À l'origine, l'environnement virtuel est commuté avec ```activate``` et `` `deactivate```, et le` `site-packages``` est utilisé, mais cette fois Blender 2.81 intégré Python 3.7. Je fais quelque chose d'un peu méchant pour importer et utiliser Hy dans `` `` venv_hy_blender``` à 4.
#### **`dos:Blender2.81.bat`**
@ECHO OFF SETLOCAL
SET THISDIR=%~dp0 SET PYTHONPATH=%THISDIR%;%USERPROFILE%.virtualenvs\venv_hy_blender\Lib\site-packages;%PYTHONPATH% SET BLENDER_EXE="C:\Program Files\Blender Foundation\Blender 2.81\blender.exe"
%BLENDER_EXE%
# Courir
Lancez Blender à partir de ce fichier batch et sélectionnez `` Scripting '' dans la barre de menu ci-dessus.
Pour importer le script ci-dessus depuis la console, entrez ce qui suit:
```python
>>> import hy
>>> import cursor_array
>>> cursor_array.register()
Vous pouvez maintenant exécuter `Cursor Array``` depuis`
Layout>
Object```. Faisons le.
Oui.
Recommended Posts