Desidero aggiornare il menu dat.gui con nuovi valori. Ho caricato un modello e visualizzato nella cartella il nome degli oggetti all'interno di una cartella gui.
Come posso visualizzare il nuovo nome dell'oggetto quando ricarico un altro modello?
Oppure è possibile ripristinare/cancellare la GUI. aggiorna dat.gui con nuovi valori
risposta
In sostanza, è necessario impostare i controllori di "ascoltare" per l'ingresso quando si aggiunge, per esempio,
gui = new dat.GUI();
var guiX = gui.add(parameters, 'x').min(0).max(200).listen();
Per la documentazione, vedere:
http://workshop.chromeexperiments.com/examples/gui/#9--Updating-the-Display-Automatically
Per un esempio di questo in Three.js, vedi:
La mia risposta non non riflettono tua domanda, ma sarà utile per gli altri che cambiano a livello di codice i valori all'interno della scena 3D e la necessità di aggiornare i controlli GUI.
Quando si dichiara:
var cubeX = folder1.add(parameters, 'x').min(-100).max(100).step(1).listen();
aver dichiarato i parametri in anticipo, per esempio
parameters = {
x: 0, y: 0, z: 0
}
Ora è possibile ascoltare gli eventi chiave o l'evento appropriato e modificare i valori nella GUI del genere:
window.addEventListener('keydown', function(event) {
if(event.keyCode == 88) { // x pressed
parameters.x++; // GUI value changed
cube.scale.x = parameters.x; // 3d object changed
}
}
soluzione di Echt Einfach non ha funzionato per me, e uno di Stemkoski è un po 'largo Ho finalmente fatto con la funzione updateDisplay
:
for (var i in gui.__controllers) {
gui.__controllers[i].updateDisplay();
}
http://workshop.chromeexperiments.com/examples/gui/#10--Updating-the-Display-Manually
Si noti che se si hanno i valori in qualche cartella folder1
la chiamata è come questo:
for (var i = 0; i < this.gui.__folders.folder1.__controllers.length; i++) {
this.gui.__folders.folder1.controllers[i].updateDisplay();
}
Se non si desidera per codificare il codice folder1
o semplicemente per aggiornare tutte le cartelle, è possibile procedere come segue:
for (var i = 0; i < Object.keys(gui.__folders).length; i++) {
var key = Object.keys(gui.__folders)[i];
for (var j = 0; j < gui.__folders[key].__controllers.length; j++)
{
gui.__folders[key].__controllers[j].updateDisplay();
}
}
Le soluzioni di Lee Stemkoski e Echt Einfach utilizzano il metodo .listen() su un controller selezionato nella GUI. soluzione
di jmmut, utilizzando .updateDisplay(), loop attraverso tutti i controller nella GUI
Mi sembra che entrambi questi tipi di soluzioni sono costose se desideri solo aggiornare manualmente il valore di un singolo controller a un momento particolare
È possibile evitare questo utilizzando il metodo .updateDisplay() per un controller SINGLE.
Un modo per farlo è se si conosce in anticipo l'indice [i] del controller singolo.Ma questo è piuttosto difficile da implementare.
Un modo migliore è quello di fare riferimento al controllo particolare per nome
// AT INITIALISATION TIME
gui1 = new dat.GUI();
Gparameters = { x: 0, y: 0, z: 0}
var gui1_X = gui1.add(Gparameters, 'x').min(0).max(200); // note no need to use the method .listen()
// AT RUN TIME
Gparameters.x++;
gui1_X.updateDisplay()
Nota: Non ho inserito il codice aggiuntivo richiesto per fare questo lavoro con i controller all'interno di cartelle. Puoi ottenerlo dalle altre risposte.
listen ha un bug associato, se si utilizzano i menu a discesa. Vedi qui: https://code.google.com/p/dat-gui/issues/detail?id=59
Ecco una breve funzione per aggiornare tutti i controller iterando attraverso tutte le cartelle.
function updateDisplay(gui) {
for (var i in gui.__controllers) {
gui.__controllers[i].updateDisplay();
}
for (var f in gui.__folders) {
updateDisplay(gui.__folders[f]);
}
}
E 'facile quando ho letto il codice sorgente di dat.gui:
https://github.com/dataarts/dat.gui/blob/master/src/dat/controllers/Controller.js#L36
Come si vede, this.object = object
, this
è un controller si aggiunge, e object
è ciò che è necessario modificare. Ecco codice esempio:
var gui = new dat.GUI();
// init a controller
var controller = gui.add(object, 'property');
// update a controller
controller.object = newObject;
scritto una funzione per aggiornare dat.gui dropdowns con una nuova serie di valori:
function updateDatDropdown(target, list){
innerHTMLStr = "";
if(list.constructor.name == 'Array'){
for(var i=0; i<list.length; i++){
var str = "<option value='" + list[i] + "'>" + list[i] + "</option>";
innerHTMLStr += str;
}
}
if(list.constructor.name == 'Object'){
for(var key in list){
var str = "<option value='" + list[key] + "'>" + key + "</option>";
innerHTMLStr += str;
}
}
if (innerHTMLStr != "") target.domElement.children[0].innerHTML = innerHTMLStr;
}
utilizzati:
myDropdown = gui.add(MyObject, 'myVariable', ['one','two','three']);
updateDatDropdown(myDropdown , ['A','B','C']);
// Also accepts named values
updateDatDropdown(myDropdown , {'A':1,'B':2,'C':3});
- 1. aggiorna JFrame dopo aver aggiunto nuovi componenti
- 2. dat.gui custom css class
- 3. Come eliminare l'elemento dat.GUI?
- 4. Laravel 5 aggiorna più righe con valori diversi
- 5. Aggiorna valori nella colonna Identity
- 6. Laravel Copia record e duplicati con nuovi valori
- 7. GridView RowUpdating non può ottenere i nuovi valori
- 8. OrbitControls e dat.gui text non funziona
- 9. DAT.gui - pronti per la produzione alternativa
- 10. Spring - Sostituzione dei valori delle proprietà del bean con i nuovi valori del file delle proprietà
- 11. Aggiorna tag canvas HTML su ogni richiesta AJAX con nuovi dati
- 12. È possibile creare un pulsante utilizzando dat.gui
- 13. TFS ottiene l'ultima versione con nuovi file
- 14. aggiorna la finestra della console con java
- 15. Estensione Chrome: background.js non accetta i nuovi valori da localStorage
- 16. "Aggiorna"
- 17. come assegnare nuovi valori alle variabili nell'equazione predefinita?
- 18. Come aggiungere nuovi valori nominali a Istanze usando AddValues?
- 19. Assegnare nuovi valori a slice da MultiIndex DataFrame
- 20. Aggiungere nuovi valori per un'opzione di attributo nel Magento
- 21. Postgres: aggiorna tutti i valori nella colonna di uno?
- 22. MYSQL Aggiorna tutti i valori delle chiavi esterne
- 23. TSQL 2005, XML DML - Aggiorna due valori contemporaneamente?
- 24. knockout.js: aggiorna i collegamenti?
- 25. aggiorna o ricarica datatable
- 26. aggiorna il file xml con php Xpath
- 27. Excel "Aggiorna tutto" con OpenXML
- 28. Aggiorna DataSet annidato con poFetchDetailsOnDemand
- 29. Ignora valori Null quando si aggiorna il database in Hibernate
- 30. come aggiungere array esistente nella collezione esistente in MongoDB usando Java con nuovi valori
È non fa wok, perché la prima volta quando carico un modello ho una cartella con alcuni nomi come: folder.add (name1, true); folder.add (nome2, vero); ... E quando carico un nuovo modello cambia il nome. Quindi mi piacerebbe cambiare il nome nella cartella o resettare il gui. – user2244365
Finalmente ho trovato una soluzione con il gui aggiungere il prototipo di Andreas Köberle che rimuove le cartelle – user2244365
Sembra che l'ascolto non funzioni più. Sto cercando di ascoltare un SelectController e ricevo un avviso quando carico la mia pagina ''webkitRequestAnimationFrame' è specifico del fornitore. Si prega di utilizzare il 'requestAnimationFrame' standard di instead.' dat.gui.js: 2841 Sto usando Chrome versione 40.0.2214.115 –