5

我正在尝试在 three.js 项目中使用 dat.gui 来允许打开和关闭场景中各种元素的可见属性。从功能上讲,这很好用。但是,我遇到的问题是因为我正在为场景中每个孩子的可见属性创建一个复选框,我最终得到了一长串标记为“可见”的复选框。

基本上,这是:

var visFolder = gui.addFolder('Components');                
for (var comp in scene.children[i].children){
   visFolder.add(scene.children[i].children[comp],'visible');
}

结果是这样的:

{'visible' : true,
 'visible' : true,
 'visible' : true,
 'visible' : true,
 ...
}

所有 gui 元素都正确引用了每个孩子的可见属性,但对用户没有太大帮助。

是否有提供将显示给用户的别名而不是属性名称(我想使用元素的名称或 id)?

4

2 回答 2

18

也许你的意思是这样的:

gui.add(properties, "x").min(10).max(20).name("X coord");
gui.add(properties, "visible").name("Show image A");
于 2015-03-01T01:00:43.870 回答
-1

@米哈伊尔

谢谢!不幸的是,API 文档并不清楚此方法/分配将设置控制器的显示名称以及文件夹。它指出:

桂。名称:字符串

图形用户界面的名称。用于文件夹。即文件夹名称

种类:GUI的实例属性

更正(在原始发布后编辑):'.name' 是文件夹的属性。'.name()' 是新 GUI 构造函数的一部分,详见此处:https ://github.com/dataarts/dat.gui/blob/master/API.md#new_GUI_new

我构建了一个快速代码笔来说明在从具有在多个文件夹中找到的相同属性的数据对象动态创建文件夹时如何使用“name()”分配。它还动态分配文件夹名称,只是为了演示文件夹与控制器的名称分配之间的区别:

代码:

var datGui = new dat.GUI();
var data = {Folder_1: {setting:true},
            Folder_2: {setting:false}
           } //data
 var datController ={};          
 for (var folder in data){
        var newFolder = datGui.addFolder(folder.replace("_"," "))
    for (var setting in data[folder]){
        var datUniqueProperty = folder + "_" + setting;
        datController[datUniqueProperty] = data[folder][setting];
        var test = newFolder.add(datController,datUniqueProperty).name(setting);
    } //for setting 
 } //for folder 

文件夹

于 2018-06-05T15:44:20.637 回答