﻿WEBVTT

00:00:00.206 --> 00:00:03.696
您好，欢迎使用艺术家脚本。我叫Sybren。

00:00:03.746 --> 00:00:09.696
在这一集中，在之前的视频中我们将访问许多人要求的主题，即用户界面。

00:00:11.099 --> 00:00:15.354
我们创建了自己的运算符，然后将其转换为Add-on。

00:00:17.468 --> 00:00:22.368
在Blender中创建自己的用户界面的基础与创建类别几乎相同。

00:00:24.974 --> 00:00:29.824
您添加一些属性。您向它添加一个功能，然后注册该东西。

00:00:30.174 --> 00:00:33.139
因此，在此视频中，我们将介绍

00:00:33.139 --> 00:00:35.979
接下来，将查找现有的UI代码。

00:00:35.979 --> 00:00:42.294
因此，如果您想知道，他们是怎麽做到的？之后，您将知道在哪里找到它。

00:00:42.294 --> 00:00:47.399
在制作自己的猴子网格面板之前，我们将研究面板的成分。还有什麽？

00:00:47.532 --> 00:00:52.347
将在面板上添加运算符按钮，然后对布局进行一些调整。

00:00:52.578 --> 00:00:55.483
然后，我们将添加场景对象属性

00:00:55.483 --> 00:00:58.233
对此。我们还将研究条件绘图。

00:00:58.460 --> 00:01:03.615
因为有时没有活动对象，所以您将无法从活动对象中绘制属性。

00:01:04.885 --> 00:01:10.105
最后，我们将研究将自己的运算符添加到Blender中的现有菜单中。

00:01:10.873 --> 00:01:15.323
在我们做自己的之前，让我们看一下Blender中的现有面板。

00:01:16.073 --> 00:01:18.853
在3D视图中，按N以显示面板。

00:01:19.269 --> 00:01:24.049
接着让我们看一下3D光标面板，右键单击并选择“编辑源”。

00:01:24.801 --> 00:01:31.616
如果看不到“编辑源代码”选项，请转到“偏好设置”，
“界面”并激活“开发人员附加功能”

00:01:31.616 --> 00:01:35.656
在Python工具提示中，然后它应该会显示出来。

00:01:35.656 --> 00:01:38.316
让我们看看如果单击它会发生什麽。

00:01:38.316 --> 00:01:43.011
混合模式在角落告诉我们，但是由于我的缩放比例，它有点远。

00:01:43.744 --> 00:01:46.599
基本上，它告诉我们去文本编辑器，

00:01:46.599 --> 00:01:51.499
然后我们应该找到带有源文档。但是，有一种更简单的方法。

00:01:52.003 --> 00:01:55.978
如果拆分此窗口，并确保此处有文本编辑器，

00:01:58.042 --> 00:02:00.157
则可以单击“编辑源代码”

00:02:00.800 --> 00:02:05.225
那里，您有文档。它会为您打开，甚至滚动到右行。

00:02:07.833 --> 00:02:11.548
让我们滚动浏览一下，看看我们能找到什麽。

00:02:11.721 --> 00:02:16.621
如我们所见，将运算符作为一个类，它具有相同的命名方式。

00:02:16.621 --> 00:02:21.376
它具有大写的类别，然后是“面板类型”而不是“运算符类型”的“

00:02:21.376 --> 00:02:25.081
PT”。 然后以小写形式显示其余的标识符。

00:02:27.313 --> 00:02:29.248
在这里，您有面板类。

00:02:30.103 --> 00:02:34.503
在这种情况下，是面板和那个运算符。你会期望

00:02:34.503 --> 00:02:38.293
这里是“bpy.type.panel”，而不仅仅是“panel”。

00:02:38.293 --> 00:02:41.643
我们将稍等一下。让我们寻找其他共同点。

00:02:42.360 --> 00:02:49.510
首先是“bl标签”，它是面板的名称，用户界面，然后是类别，区域类型和空格类型。

00:02:52.601 --> 00:02:57.286
空间类型和区域类型描绘了它将在用户界面中显示的位置。

00:02:58.129 --> 00:03:02.894
在这种情况下，我们正在研究3D视图和区域类型是UI，

00:03:03.504 --> 00:03:07.574
这意味着它在3D视图中，而不在页眉或页脚中。

00:03:08.595 --> 00:03:11.450
然后类别是View这是此处标签的名称。

00:03:13.265 --> 00:03:16.195
然后，我们将成为面板名称的标签。

00:03:17.856 --> 00:03:21.911
运算符在哪里一个运行功能，运行运算符的任务。

00:03:24.065 --> 00:03:27.290
在这里，我们有一个绘制函数来绘制面板。

00:03:27.492 --> 00:03:30.407
绘图本身是通过“self.layout”完成的

00:03:30.824 --> 00:03:32.719
这是一个UI布局实例。

00:03:33.856 --> 00:03:40.001
您可以通过“帮助”找到它，然后找到“Python API参考”，
然后搜索UILayout，

00:03:40.759 --> 00:03:44.689
一个词。在那里，您将找到所有可能的类描绘。

00:03:45.740 --> 00:03:50.980
在本视频中，我将继续向您展示基础知识，那将使您走得更远。

00:03:50.980 --> 00:03:53.255
现在，让我们回到类描绘，

00:03:53.700 --> 00:03:55.015
因为我们看到了

00:03:55.247 --> 00:03:59.182
该面板在这里，这与我们之前看到的有所不同。

00:04:00.272 --> 00:04:05.192
就象我说的那样，您会期望像“bpy.type.panel”这样的东西，

00:04:05.509 --> 00:04:07.144
而不仅仅是“panel”。

00:04:07.242 --> 00:04:10.877
这是因为在此文档中，导入方式是不同的。

00:04:12.131 --> 00:04:17.341
让我们滚动到顶部，在这里您可以从“bpy.type import”中看到

00:04:17.341 --> 00:04:21.171
标头，菜单和面板。因此，您只需键入“

00:04:23.374 --> 00:04:26.069
panel”而不是“bpy.type.panel”，

00:04:26.667 --> 00:04:28.367
它指的是同一件事。

00:04:28.878 --> 00:04:34.653
我个人会说，对于这样的输入要非常小心。它可以节省您一些打字

00:04:34.653 --> 00:04:39.838
这听起来似乎是一件好事，但您阅读代码的方式要比编写代码的方式多。

00:04:41.086 --> 00:04:46.856
我会一直优化以获得代码的可读性和可理解性，而不是节省几秒钟的击键。

00:04:50.371 --> 00:04:51.471
唯一的时间

00:04:51.488 --> 00:04:55.448
我将使用这样的导入的地方非常清楚发生了什麽。

00:04:56.446 --> 00:05:00.121
在这种情况下，它是Blender的用户界面描绘，

00:05:00.292 --> 00:05:04.572
而且只有一个标题，只有一个菜单，只有一个面板，

00:05:05.037 --> 00:05:07.372
它们总是来自“bpy.types”。

00:05:08.242 --> 00:05:12.102
因此，在这种情况下，我认为它可以接受。

00:05:12.102 --> 00:05:16.977
不过总的来说，我会避免这种情况，并始终使用事物的全名

00:05:16.977 --> 00:05:19.882
这样一来，您就可以清楚知道它的来源。

00:05:19.882 --> 00:05:24.882
现在，这已不复存在。让我们进入并为猴子网格制作自己的面板。

00:05:25.019 --> 00:05:27.484
让我们看一下我们的插件代码

00:05:28.506 --> 00:05:30.216
我们上次离开的地方。

00:05:31.171 --> 00:05:33.671
因此，这里有“monkey grid.py”。

00:05:35.037 --> 00:05:38.572
具有猴子网格运算符类以及注册和注销功能。

00:05:42.496 --> 00:05:47.261
现在，要做到这一点，我们可以添加一个猴子网格面板。

00:05:47.871 --> 00:05:52.851
因此，就象之前一样，我们创建我们的类，并为其正确命名。

00:05:52.851 --> 00:05:57.566
我保留类别“view 3D”，因为无论如何它都是一个View 3D面板。

00:05:57.763 --> 00:06:03.348
我们必须去PT。我称它为“猴子网格”然后扩展“bpy.type.panel”。

00:06:05.729 --> 00:06:10.159
我只是将这些值从3D光标面板复制到“猴子”类别中

00:06:10.159 --> 00:06:14.774
所以我们在那里有我们自己的小标签。我将其标记为“网格”。

00:06:17.376 --> 00:06:20.381
然后，您唯一真正需要的就是Draw函数。

00:06:21.510 --> 00:06:26.725
为了使其显示为面板，它需要具有Draw功能，即使该功能没有作用。

00:06:28.258 --> 00:06:32.203
而且因为Python中的函数总是必须要有一些东西，

00:06:33.042 --> 00:06:37.497
我在这里输入“pass”，这是Python代码不运行任何操作的原因。

00:06:37.997 --> 00:06:42.177
缩进“：”後的每个代码块，每个缩进博客都需要

00:06:43.918 --> 00:06:46.198
那里有一点文本，以确保

00:06:47.458 --> 00:06:49.398
Python知道它是缩进的。

00:06:51.305 --> 00:06:54.070
这就是为什麽他们使用“通过”关键字。

00:06:54.471 --> 00:06:59.076
现在，剩下的唯一事情就是告诉Blender这个类首先存在，

00:07:00.206 --> 00:07:01.841
这意味着要注册它。

00:07:01.879 --> 00:07:05.249
我们可以复制register和unregister类的函数调用，

00:07:07.300 --> 00:07:09.875
然后放入我们的新类，就是这样。

00:07:11.379 --> 00:07:13.449
我们去Blender，走着瞧吧。

00:07:14.415 --> 00:07:17.410
现在，我们要做的就是重新加载脚本。

00:07:17.614 --> 00:07:21.359
转到系统，重新加载脚本，您将看到“猴子”

00:07:21.949 --> 00:07:25.569
在这里弹出。此路线还使您可以右键单击

00:07:26.923 --> 00:07:29.148
然后添加到快速收藏夹。

00:07:29.646 --> 00:07:32.441
您可以按Q，然后重新加载脚本，

00:07:33.710 --> 00:07:37.080
将为您提供一种快速重新加载它们的方法。

00:07:37.080 --> 00:07:40.550
当我们转到“猴子”选项卡时，我们可以看到

00:07:40.550 --> 00:07:43.600
我们的网格面板在这里。还没有任何东西。

00:07:43.600 --> 00:07:48.180
当然，我们在那里没有画任何东西，但至少它会显示出来。

00:07:48.180 --> 00:07:50.180
我们为运算符放置一个按钮。

00:07:50.180 --> 00:07:53.850
让我们回到代码，然后在“绘制”“self.layout”中

00:07:55.305 --> 00:07:58.640
让我们画画。要绘制运算符，请键入

00:07:59.436 --> 00:08:02.426
“operator”，然后输入运算符的ID名称

00:08:04.564 --> 00:08:07.504
你想在那里。让我们将其粘贴粘贴。

00:08:09.229 --> 00:08:11.579
转到Blender，重新加载脚本。

00:08:12.913 --> 00:08:18.733
在那里，您可以看到，网格面板中有一个猴子抓握按钮，它确实有效。

00:08:19.365 --> 00:08:22.135
要自描绘此按钮，有几种可能性。

00:08:22.386 --> 00:08:27.306
让我们来看一下它们。首先，我们可以更改按钮上显示的文本。

00:08:32.085 --> 00:08:34.680
因此，我们将其称为“默认网格”。

00:08:34.680 --> 00:08:39.135
因为按下此按钮，只会为我们提供默认属性。保存文档，

00:08:39.315 --> 00:08:43.915
回到Blender，重新加载脚本，现在它被称为“默认网格”。

00:08:45.227 --> 00:08:51.547
令人高兴的是，如果我们搜索“猴子网格”，它在F3面板中仍称为“猴子网格”，

00:08:52.419 --> 00:08:54.394
因为那是运算符的名字。

00:08:55.276 --> 00:09:00.191
只是在用户界面的这个特定位置上，我们在按钮上有不同的文本。

00:09:02.018 --> 00:09:04.903
最后，我们可以为其添加一个图标。

00:09:07.233 --> 00:09:13.323
然后我们必须知道该图标的名称，因此您可以查看现有代码以欺骗该图标，

00:09:14.419 --> 00:09:20.739
也可以激活图标查看器插件。它与Blender捆绑在一起，但默认情况下未激活。

00:09:20.833 --> 00:09:22.913
然后，在Python代码中，

00:09:22.913 --> 00:09:25.558
您会得到一个名为Icon Viewer的按钮。

00:09:25.558 --> 00:09:30.388
您可以单击所需的图标。说一只猴子。这被复制到剪贴板上，

00:09:31.336 --> 00:09:34.921
将其粘贴到此处，保存，然后返回Blender，

00:09:35.149 --> 00:09:38.359
重新加载脚本，然后在其中找到图标。

00:09:39.732 --> 00:09:42.757
在工具提示中，您还可以查看说明。

00:09:43.929 --> 00:09:48.614
您会看到它实际上将调用我们的运算符将所有默认参数。

00:09:49.387 --> 00:09:52.462
让我们对其进行调整并进行一些按钮

00:09:52.462 --> 00:09:55.282
这些参数使用特定值而不是默认值。

00:09:56.114 --> 00:09:58.359
再说一次，我们回到源头。

00:10:00.390 --> 00:10:03.635
让我们复制此调用，而不是仅仅拥有它，

00:10:05.540 --> 00:10:08.740
我们可以说“props = self.layout.operator......”

00:10:11.632 --> 00:10:13.842
让我们将其更改为“Big Grid”，

00:10:15.712 --> 00:10:19.647
“self.layout.operator”是一个返回某些内容的函数，

00:10:19.647 --> 00:10:22.452
它返回的东西代表了运算符的属性。

00:10:24.215 --> 00:10:27.690
在这里我们可以说“道具”。让我们来看一下。

00:10:31.173 --> 00:10:33.493
我们有“X数”，“Y数”和“大小”。

00:10:35.521 --> 00:10:39.336
所以在这里我们可以说“props.count X = 10”

00:10:41.968 --> 00:10:44.878
和“count y =“，以及“size = 0.8”。

00:10:50.895 --> 00:10:55.630
保存，回到Blender，重新加载脚本，我们有了一个新按钮

00:10:57.263 --> 00:11:03.283
在“大网格”上，将鼠标悬停在它上面时，您会看到它的那些参数值不同。

00:11:04.037 --> 00:11:05.077
删除猴子，

00:11:06.396 --> 00:11:11.556
删除後单击“大网格”，当然会自动使用这些值。最重要的是，

00:11:11.556 --> 00:11:16.011
也可以制作一个小的网格，然后我们可以使用更多按钮。

00:11:20.460 --> 00:11:22.010
所以对于小网格，

00:11:24.585 --> 00:11:29.970
让我们将X设置为1，将Y设置为1，并将大小保留为默认值。

00:11:31.612 --> 00:11:33.467
所以我们在这里不提。

00:11:35.562 --> 00:11:40.387
保存，回到Blender，重新加载，然后我们还有一个小网格。

00:11:43.745 --> 00:11:48.775
当然只有1。但是在Redo面板中，我们可以根据需要扩展它。

00:11:51.106 --> 00:11:53.191
现在，您还可以看到，

00:11:53.191 --> 00:11:59.031
能够在该按钮上设置文本的价值，因为它都是相同的运算符，但行为不同。

00:12:00.879 --> 00:12:02.664
现在，还有一件事。

00:12:02.664 --> 00:12:07.244
我不喜欢这些按钮之间的间隔如何，因为它们基本上是

00:12:07.703 --> 00:12:14.063
做同样的事情。他们正在创建一个猴子网格，并且应该将它们真正分组在一起。

00:12:14.063 --> 00:12:18.648
幸运的是，我们可以做到这一点通过将泥土放在圆柱中。

00:12:18.648 --> 00:12:23.863
我能听到您的询问，但是Sybren，他们已经在专栏中了，您在说什麽？

00:12:23.863 --> 00:12:28.398
好的，创建列的函数具有一些我们可以用来影响布局的参数。

00:12:29.221 --> 00:12:31.801
因此，让我们再次看一下代码。

00:12:31.801 --> 00:12:36.091
现在，通过调用“self.layout.operator”绘制每个运算符，

00:12:37.003 --> 00:12:38.958
我们可以对其进行更改。

00:12:38.958 --> 00:12:40.723
我们可以先创建一列，

00:12:45.242 --> 00:12:48.677
然后，我们不是在“self.layout”上调用operator，

00:12:49.035 --> 00:12:51.315
而是在“col”上调用operator，

00:12:53.947 --> 00:12:57.172
保存代码，返回Blender，重新加载脚本，

00:12:59.146 --> 00:13:02.106
您可以看到，它们已经被挤在一起了。

00:13:02.845 --> 00:13:06.760
我们可以走得更远。在此处添加“align = true”，

00:13:10.537 --> 00:13:14.397
然后将它们完全按照我的意愿将它们捏在一起。

00:13:15.627 --> 00:13:19.692
因此，在运算符旁边，您还可以绘制属性

00:13:19.692 --> 00:13:23.032
在面板上，这几乎是您想要的任何属性。

00:13:23.954 --> 00:13:29.444
因此，您无法使用它来将遍布Blender用户界面的这些属性组合在一起，

00:13:30.895 --> 00:13:32.195
但是你用很多

00:13:32.381 --> 00:13:39.531
因此，对于您的特定工作流程，
您可以将它们添加到自己的面板中，使您的生活更轻松。

00:13:39.531 --> 00:13:43.701
因此，让我们采用两个属性，一个是Cycles的属性。

00:13:44.412 --> 00:13:46.612
假设周期中的视图样本数。

00:13:48.262 --> 00:13:50.112
另外，我想有相对

00:13:51.385 --> 00:13:56.155
到当前选定的对象。因此，让我们在那里绘制视图可见性。

00:13:56.440 --> 00:13:58.770
所以这里的人就是其中之一

00:13:59.846 --> 00:14:04.626
视图样本数，我们要添加的另一个属性是此处，禁用视图。

00:14:05.512 --> 00:14:07.047
在转到代码之前，

00:14:07.406 --> 00:14:10.201
让我们看看Blender已经告诉了我们什麽。

00:14:10.201 --> 00:14:15.391
您将鼠标悬停在视图属性上。在那里，在工具提示的底部说

00:14:15.391 --> 00:14:18.201
“bpy data scenes.cycle.preview示例”

00:14:19.986 --> 00:14:21.796
这几乎是我们想要的。

00:14:21.956 --> 00:14:26.721
但是，如果要使用它，我们将在脚本中硬编码名称“场景”。

00:14:26.721 --> 00:14:31.436
因此，如果我们重命名了“场景”，那麽我们的脚本已经损坏。

00:14:31.436 --> 00:14:35.616
而且，当您使用多个场景时，它也将不再起作用。

00:14:35.616 --> 00:14:37.586
因此，与其直接使用

00:14:37.586 --> 00:14:40.411
就当前而言，即使在这种情况下，

00:14:40.411 --> 00:14:45.156
它也可能起作用，但是我们将再次使用上下文，并获得

00:14:46.881 --> 00:14:52.006
当前场景为“context.scene”。因此，我们要显示的属性实际上是

00:14:52.683 --> 00:14:55.088
“context.scene.cycle.preview示例”。

00:14:57.454 --> 00:15:01.359
现在，让我们看一下代码。让我们添加另一列。

00:15:10.518 --> 00:15:13.413
然后我们“col.prop”为我们喧染该属性。

00:15:15.788 --> 00:15:21.633
它至少需要两个参数。第一个是包含属性的东西，然后是名称属性。

00:15:23.692 --> 00:15:25.832
所以包含属性的东西是

00:15:27.386 --> 00:15:30.071
“context.scene.cycle”一切到最后一点。

00:15:33.176 --> 00:15:35.106
然后名称是“预览样本”。

00:15:37.486 --> 00:15:42.616
保存，返回Blender，重新加载脚本，然后在其中“预览示例10”。

00:15:45.397 --> 00:15:50.087
所以我们可以改变这个，您可以在这里看到它的变化不错。

00:15:50.462 --> 00:15:55.287
这表明我们拥有正确的属性。所以在这里，您还可以添加

00:15:55.287 --> 00:15:59.812
这些文本和图标参数。它们与运算符“col”的工作方式相同。

00:15:59.812 --> 00:16:02.382
因此，为了使视频保持一点点，

00:16:02.835 --> 00:16:04.195
我会留给你玩。

00:16:05.960 --> 00:16:11.330
现在，让我们看一下我们要添加的第二个属性，即活动对象的属性。

00:16:13.131 --> 00:16:16.856
我希望能够控制视图的可见性。那就是这个人

00:16:19.021 --> 00:16:22.821
那里说“bpy.data对象suzanne.pi视图”

00:16:23.641 --> 00:16:28.336
同样，与场景一样，我们不想仅针对Suzanne运行此操作。

00:16:29.121 --> 00:16:33.806
我们要这样做对于当前活动对象，表示“context.active对象”。

00:16:35.441 --> 00:16:40.191
因此，我们要使用的属性是“context.active object.hide视图”

00:16:42.540 --> 00:16:44.965
让我们只复制我们拥有的内容。

00:16:47.449 --> 00:16:51.089
将包含属性的内容更改为“context.active对象”

00:16:56.110 --> 00:17:00.515
并将属性名称更改为“隐藏视图”。这应该喧染该属性。

00:17:01.024 --> 00:17:04.399
让我们来看看。在Blender中，重新加载，

00:17:04.627 --> 00:17:06.807
还有我们想要拥有的属性。

00:17:08.960 --> 00:17:11.620
现在，让我们看看它是否有效。

00:17:12.594 --> 00:17:16.804
你去 它正在工作，但是有点奇怪，因为它消失了，

00:17:18.836 --> 00:17:21.541
在这里却没有。到底是怎么回事？

00:17:21.541 --> 00:17:26.406
事实证明，当您隐藏对象时，该对象不再处于活动状态。

00:17:26.406 --> 00:17:29.126
这意味着“context.active对象”将变为"无"，

00:17:29.933 --> 00:17:31.153
而不是Suzanne。

00:17:32.264 --> 00:17:34.214
"无"没有属性隐藏视图。

00:17:35.126 --> 00:17:38.311
因此，我们的代码实际上正在引起问题。

00:17:39.035 --> 00:17:42.535
看看我启动Blender的终端。在这里，你看，

00:17:42.923 --> 00:17:46.038
底部的错误消息是我从中启动Blender的终端。

00:17:50.310 --> 00:17:53.800
它抱怨第82行的“monkey grid.py”

00:17:56.613 --> 00:17:59.968
文档是我们刚添加的“col”，并且显示错误

00:18:00.658 --> 00:18:05.193
有一个参数的数据。因此，显然，此参数称为“数据”。

00:18:09.437 --> 00:18:11.722
"功能数据"不支持到"无"的分配。

00:18:12.991 --> 00:18:16.081
描述有点含糊，但与我刚才说的不符。

00:18:17.964 --> 00:18:21.704
活动对象为无(none)，并且您不能绘制none的属性。

00:18:24.173 --> 00:18:29.108
因此，我们必须对此代码添加一些保护，以使其始终有效。

00:18:32.360 --> 00:18:35.495
我们知道“context.active对象”可以变成无。

00:18:38.537 --> 00:18:42.147
因此，让我们检查一下。在这种情况下，

00:18:43.077 --> 00:18:44.872
我们只添加一个标签。

00:18:47.280 --> 00:18:50.115
否则，我们将象以前一样绘制属性。

00:18:52.447 --> 00:18:56.132
让我们看看它现在如何工作。重新加载脚本，

00:18:59.617 --> 00:19:04.982
就在那里。它说“没有活动对象”而不是出错，所有代码将继续工作。

00:19:07.856 --> 00:19:13.156
您可以说这是一个愚蠢的按钮，因为它只起作用一次，您将是对的。

00:19:13.659 --> 00:19:15.324
但我想有这个例子

00:19:15.841 --> 00:19:19.011
向您展示问题出在哪里以及如何解决。

00:19:21.751 --> 00:19:27.256
这也是我觉得很重要的一件事的证明，这说明了为什麽不存在某些东西。

00:19:29.821 --> 00:19:37.206
因此，现在，我们绘制文本“无活动对象”，
而不是完全不绘制属性，而只是默默地跳过它，

00:19:39.036 --> 00:19:43.156
向任何使用您的代码的人表明为什麽该选项消失了。

00:19:46.092 --> 00:19:49.017
我认为这很重要。这就是为什麽

00:19:49.017 --> 00:19:53.067
无论如何我都想在这里有这个例子，即使它没有用。

00:19:53.536 --> 00:19:56.301
您现在知道了如何绘制自己的属性，

00:19:56.354 --> 00:20:00.509
因此取决于您如何使其对您的特定工作流程有用。

00:20:00.628 --> 00:20:06.598
在结束本视频之前，我想向您展示一件事，这是在菜单中添加运算符。

00:20:07.723 --> 00:20:12.778
鉴于我们到当前为止所看到的，这很容易。这就是为什麽

00:20:12.778 --> 00:20:18.593
我把它作为最后一步。让我们将猴子网格运算符添加到网格添加菜单中。

00:20:18.840 --> 00:20:22.765
所以在这里，我们有Add，Mesh，这会很好

00:20:23.180 --> 00:20:26.165
如果在“猴子”下面，有一个猴子网格。

00:20:26.165 --> 00:20:30.930
这意味着，我们必须将其添加到菜单中，并且有一个技巧。

00:20:30.930 --> 00:20:34.865
我给你看。但是首先，我们必须知道它是哪个菜单。

00:20:34.882 --> 00:20:39.897
您可以将鼠标悬停在“添加”上，它显示“查看3DMT添加”，

00:20:40.218 --> 00:20:43.198
您可能已经猜到MT代表“菜单类型”。

00:20:45.362 --> 00:20:48.647
现在，问题是，子菜单不显示此内容。

00:20:49.608 --> 00:20:51.903
看，您不知道什麽是网格。

00:20:52.287 --> 00:20:57.797
但是我们可以在Python控制台中环顾四周，看看是否仍然可以找到它。

00:20:58.486 --> 00:20:59.781
它是一种类型

00:21:00.238 --> 00:21:04.923
因此它是“bpy.types.View3D_MT”的一部分。

00:21:11.256 --> 00:21:14.061
让我们看看是否可以找到一些东西。

00:21:18.483 --> 00:21:23.228
在那里，“添加网格”。因此，这很有可能成为我们的菜单。

00:21:23.701 --> 00:21:28.396
在这里调用它只会给出一个错误。因此，我们不要这样做。

00:21:28.396 --> 00:21:32.511
但是至少，我们现在有了名称“view 3D MT mesh add”

00:21:33.346 --> 00:21:38.201
在“bpy.types”中。让我们复制此内容，然后转到“代码”。

00:21:39.374 --> 00:21:44.599
您可能已经猜到了，我们必须在寄存器和注销函数中做一些事情，

00:21:45.628 --> 00:21:48.813
但是这次是完全不同的比当前为止所见。

00:21:50.024 --> 00:21:56.069
首先，我们必须创建自己的函数，该函数将绘制要添加到菜单的所有内容。

00:21:56.069 --> 00:21:57.704
这样看起来象这样。

00:22:01.626 --> 00:22:03.126
你能想到的名字

00:22:06.015 --> 00:22:10.280
再次，“自我，背景”。现在，让我们在其中添加“

00:22:11.354 --> 00:22:15.289
pass”以使Python开心。 这个功能基本上会被称为

00:22:16.559 --> 00:22:18.719
在该面板的“绘制”功能之后。

00:22:19.114 --> 00:22:23.584
因此，我们自己的面板具有带有“self”和“context”的Draw函数，

00:22:24.903 --> 00:22:29.163
将使用相同的“self”和相同的“context”来调用此函数。

00:22:29.224 --> 00:22:33.124
因此，在我们的案例中，“自我”将引用该菜单。

00:22:33.335 --> 00:22:39.595
现在，让我们注册和注销此功能。这是通过获取“bpy.types.view 3D

00:22:40.964 --> 00:22:44.859
....”并说“
.append(mesh_add_menu_draw)”来完成的

00:22:47.683 --> 00:22:51.068
相反的是“删除”。因此，如果取消注册，

00:22:57.076 --> 00:23:01.371
将“删除网格添加菜单绘制”。现在，在这里放什麽？

00:23:02.713 --> 00:23:07.003
这与面板相同。我们可以称之为“self.layout.operator”

00:23:15.605 --> 00:23:18.845
希望运算符的想法，并且这应该起作用。

00:23:19.942 --> 00:23:26.327
让我们保存并返回Blender，重新加载脚本，
添加网格，然后这里有“猴子网格”。

00:23:28.378 --> 00:23:29.608
它还没有图标。

00:23:30.430 --> 00:23:35.210
但是现在，您知道了如何添加一个，因此我将其留给您。

00:23:35.210 --> 00:23:41.595
现在，您已经了解了如何添加自己的面板，如何将自己的操作项添加到现有菜单。

00:23:41.595 --> 00:23:42.955
但最重要的是

00:23:42.955 --> 00:23:45.550
您已经看到了如何查看其他代码。

00:23:45.626 --> 00:23:50.476
因此，当您看到有趣的事情时，想知道他们是如何做到的，

00:23:51.190 --> 00:23:57.810
您只需右键单击“编辑源代码”，
Blender中的大多数用户界面元素都是用Python编写的，

00:23:58.673 --> 00:24:02.443
然后就可以了。这就是“艺术家脚本”这一集的内容。

00:24:04.772 --> 00:24:10.102
如果您有任何疑问或意见，请留在下面的评论中，我们很快会再见。