推荐:将 NSDT场景编辑器 加入你的3D开发工具链。

https://ted.sinoccdc.cn/

附加组件
创建一个目录,其加载项名称以 为前缀,即 。目录应遵循以下基础 结构:an_an_<your_extension_name>

an_<your_extension_name>/
├── __init__.py
├── auto_load.py
├── ui/
│ ├── __init__.py
│ ├── node_menu.py
├── sockets/
│ ├── __init__.py
│ ├── ...
├── nodes/
│ ├── __init__.py
│ ├── ...
不要在扩展名称中使用。animation_nodes

稍后我们将解释需要在这些文件中添加的内容。可以从动画节点复制文件auto_load.py源在没有任何更改的情况下,文件位于目录中。这 文件将帮助我们自动注册和加载类,所以它不是 强制性的,但建议使用。要使自动加载正常工作,每个 具有定义 Blender 类的文件的目录需要有一个空文件,即您在上面的子目录中看到的文件。animation_nodes__init__.py

此结构适用于简单扩展。更复杂的扩展, 利用Cython应该遵循更复杂的结构。此结构是 稍后在赛通中描述部分.

初始化
在顶级文件中,我们需要做三件事:__init__.py

确保动画节点已加载且可用。
初始化自动加载程序并注册/注销类。
更新套接字信息。仅当您定义新套接字时,才需要这样做。
'''
Copyright (C) 2020 <YOUR NAME>
<YOUR EMAIL>

Created by <YOUR NAME>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

'''

bl_info = {

"name": "Animation Nodes Test Extension",
"author": "<YOUR NAME>",
"version": (1, 0, 0),
"blender": (2, 90, 0),
"location": "Animation Nodes",
"description": "A Test Extension For Animation Nodes.",
"warning": "",
"doc_url": "",
"tracker_url": "",
"category": "Nodes",

}

import bpy
import addon_utils
from . import auto_load

try: import animation_nodes
except:

animation_nodes = addon_utils.enable("animation_nodes", default_set = False, persistent = True)
if not animation_nodes:
    raise Exception("Could not load Animation Nodes.")

auto_load.init()

animation_nodes.sockets.info.updateSocketInfo()

def register():

auto_load.register()

def unregister():

auto_load.unregister()

Nodes
将节点添加到目录或其任何子目录中。这 目录及其子目录应各自有一个空文件 正如我们之前提到的。检查nodes__init__.py节点开发指南 有关如何创建节点或检查动画节点源的信息 有关如何编写节点的示例。

笔记
绝对进口
在动画节点源中,动画节点对象是相对导入的。 这不适用于扩展。您必须绝对从 模块。因此,如果您在 动画节点源:animation_nodes

from .. perlin_noise cimport perlinNoise1D
它应该翻译成:

from animation_nodes.algorithms.perlin_noise cimport perlinNoise1D
执行代码中的扩展模块
您可以使用该模块(别名也为 -) 节点的执行代码。那是因为它是默认导入的。挨次 要使用扩展模块,您必须告诉动画节点通过导入它 重写方法。所以代码应该是:animation_nodesANgetUsedModules

def getUsedModules(self):
        return ["an_<your_extension_name>"]

插座
在目录或其任何子目录中添加套接字。这 目录及其子目录应各自有一个空文件 正如我们之前提到的。sockets__init__.py

用户界面
为了将您的节点添加到菜单中。在目录中的文件中,定义一个绘制函数,该函数绘制其他菜单或绘制节点 直接插入运算符。然后,在寄存器函数中,附加此绘制 函数到任何动画节点菜单或直接添加菜单。为 实例中,以下文件定义一个新菜单并绘制节点插入 其中的运算符。然后,定义一个绘制此菜单的绘制函数,即 然后追加到菜单,即节点添加菜单。菜单 将位于您追加到的菜单的末尾。node_menu.pyuiNODE_MT_add

import bpy
from animation_nodes.ui.node_menu import insertNode

class TestExtensionMenu(bpy.types.Menu):

bl_idname = "AN_MT_test_extension_menu"
bl_label = "Test Extension Menu"

def draw(self, context):
    layout = self.layout
    insertNode(layout, "an_TestExtensionNode", "Test Extension Node")

def drawMenu(self, context):

if context.space_data.tree_type != "an_AnimationNodeTree": return

layout = self.layout
layout.operator_context = "INVOKE_DEFAULT"

layout.separator()
layout.menu("AN_MT_test_extension_menu", text = "Test Extension Menu", icon = "SCRIPTPLUGINS")

def register():

bpy.types.NODE_MT_add.append(drawMenu)

def unregister():

bpy.types.NODE_MT_add.remove(drawMenu)

如果我想将菜单添加到动画节点中的矢量菜单中,我会 而是附加到菜单。有关完整列表 菜单和有关如何定义更复杂的菜单的更多示例,请检查动画节点源中的文件AN_MT_vector_menunode_menu.py这里.

Cython
如果您想编写自己的Cython代码并定义自己的Cython。 结构,您可以使用动画节点中的设置脚本,在这种情况下, 您的项目应遵循以下基础结构:

an_<your_extension_name>/
├── setup.py
├── _export_c_setup.py
├── conf.default.json
├── an_<your_extension_name>/
│ ├── ...
├── _setuputils/
│ ├── ...
内部目录是上面所示的目录。 目录、、 和应从动画节点复制an_<your_extension_name>_setuputilssetup.py_export_c_setup.pyconf.default.json源.您需要进行的唯一更改是将变量更改为 文件。需要做的最后一件事是设置 标头。addonNamean_<your_extension_name>setup.py_export_c_setup.py

头文件
为了构建你的扩展,Cython需要查看 动画节点。因此,首先从animation_nodes_headers.zip发布页面、解压缩并配置 构建系统通过将提取的目录的路径添加到 文件中命名的数组条目。通知 此文件是在您第一次构建后生成的,但您可以添加它 在此之前,您自己到根目录。示例如下所示:Cython Include Pathsconf.jsonconf.json

{

"Copy Target" : "/path/to/your/blender/addon/directory",
"Cython Include Paths" : ["/path/to/the/extracted/directory/animation_nodes_headers/"]

}
附加组件
创建一个目录,其加载项名称以 为前缀,即 。目录应遵循以下基础 结构:an_an_<your_extension_name>

an_<your_extension_name>/
├── __init__.py
├── auto_load.py
├── ui/
│ ├── __init__.py
│ ├── node_menu.py
├── sockets/
│ ├── __init__.py
│ ├── ...
├── nodes/
│ ├── __init__.py
│ ├── ...
不要在扩展名称中使用。animation_nodes

稍后我们将解释需要在这些文件中添加的内容。可以从动画节点复制文件auto_load.py源在没有任何更改的情况下,文件位于目录中。这 文件将帮助我们自动注册和加载类,所以它不是 强制性的,但建议使用。要使自动加载正常工作,每个 具有定义 Blender 类的文件的目录需要有一个空文件,即您在上面的子目录中看到的文件。animation_nodes__init__.py

此结构适用于简单扩展。更复杂的扩展, 利用Cython应该遵循更复杂的结构。此结构是 稍后在赛通中描述部分.

初始化
在顶级文件中,我们需要做三件事:__init__.py

确保动画节点已加载且可用。
初始化自动加载程序并注册/注销类。
更新套接字信息。仅当您定义新套接字时,才需要这样做。
'''
Copyright (C) 2020 <YOUR NAME>
<YOUR EMAIL>

Created by <YOUR NAME>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

'''

bl_info = {

"name": "Animation Nodes Test Extension",
"author": "<YOUR NAME>",
"version": (1, 0, 0),
"blender": (2, 90, 0),
"location": "Animation Nodes",
"description": "A Test Extension For Animation Nodes.",
"warning": "",
"doc_url": "",
"tracker_url": "",
"category": "Nodes",

}

import bpy
import addon_utils
from . import auto_load

try: import animation_nodes
except:

animation_nodes = addon_utils.enable("animation_nodes", default_set = False, persistent = True)
if not animation_nodes:
    raise Exception("Could not load Animation Nodes.")

auto_load.init()

animation_nodes.sockets.info.updateSocketInfo()

def register():

auto_load.register()

def unregister():

auto_load.unregister()

Nodes
将节点添加到目录或其任何子目录中。这 目录及其子目录应各自有一个空文件 正如我们之前提到的。检查nodes__init__.py节点开发指南 有关如何创建节点或检查动画节点源的信息 有关如何编写节点的示例。

笔记
绝对进口
在动画节点源中,动画节点对象是相对导入的。 这不适用于扩展。您必须绝对从 模块。因此,如果您在 动画节点源:animation_nodes

from .. perlin_noise cimport perlinNoise1D
它应该翻译成:

from animation_nodes.algorithms.perlin_noise cimport perlinNoise1D
执行代码中的扩展模块
您可以使用该模块(别名也为 -) 节点的执行代码。那是因为它是默认导入的。挨次 要使用扩展模块,您必须告诉动画节点通过导入它 重写方法。所以代码应该是:animation_nodesANgetUsedModules

def getUsedModules(self):
        return ["an_<your_extension_name>"]

插座
在目录或其任何子目录中添加套接字。这 目录及其子目录应各自有一个空文件 正如我们之前提到的。sockets__init__.py

用户界面
为了将您的节点添加到菜单中。在目录中的文件中,定义一个绘制函数,该函数绘制其他菜单或绘制节点 直接插入运算符。然后,在寄存器函数中,附加此绘制 函数到任何动画节点菜单或直接添加菜单。为 实例中,以下文件定义一个新菜单并绘制节点插入 其中的运算符。然后,定义一个绘制此菜单的绘制函数,即 然后追加到菜单,即节点添加菜单。菜单 将位于您追加到的菜单的末尾。node_menu.pyuiNODE_MT_add

import bpy
from animation_nodes.ui.node_menu import insertNode

class TestExtensionMenu(bpy.types.Menu):

bl_idname = "AN_MT_test_extension_menu"
bl_label = "Test Extension Menu"

def draw(self, context):
    layout = self.layout
    insertNode(layout, "an_TestExtensionNode", "Test Extension Node")

def drawMenu(self, context):

if context.space_data.tree_type != "an_AnimationNodeTree": return

layout = self.layout
layout.operator_context = "INVOKE_DEFAULT"

layout.separator()
layout.menu("AN_MT_test_extension_menu", text = "Test Extension Menu", icon = "SCRIPTPLUGINS")

def register():

bpy.types.NODE_MT_add.append(drawMenu)

def unregister():

bpy.types.NODE_MT_add.remove(drawMenu)

如果我想将菜单添加到动画节点中的矢量菜单中,我会 而是附加到菜单。有关完整列表 菜单和有关如何定义更复杂的菜单的更多示例,请检查动画节点源中的文件AN_MT_vector_menunode_menu.py这里.

赛通
如果您想编写自己的Cython代码并定义自己的Cython。 结构,您可以使用动画节点中的设置脚本,在这种情况下, 您的项目应遵循以下基础结构:

an_<your_extension_name>/
├── setup.py
├── _export_c_setup.py
├── conf.default.json
├── an_<your_extension_name>/
│ ├── ...
├── _setuputils/
│ ├── ...
内部目录是上面所示的目录。 目录、、 和应从动画节点复制an_<your_extension_name>_setuputilssetup.py_export_c_setup.pyconf.default.json源.您需要进行的唯一更改是将变量更改为 文件。需要做的最后一件事是设置 标头。addonNamean_<your_extension_name>setup.py_export_c_setup.py

头文件
为了构建你的扩展,Cython需要查看 动画节点。因此,首先从animation_nodes_headers.zip发布页面、解压缩并配置 构建系统通过将提取的目录的路径添加到 文件中命名的数组条目。通知 此文件是在您第一次构建后生成的,但您可以添加它 在此之前,您自己到根目录。示例如下所示:Cython Include Pathsconf.jsonconf.json

{

"Copy Target" : "/path/to/your/blender/addon/directory",
"Cython Include Paths" : ["/path/to/the/extracted/directory/animation_nodes_headers/"]

}


斯文的小蝌蚪
4 声望0 粉丝