2017-10-10 4 views
0

Dans les méthodes décrites de référence API pour sélectionner/isoler des objets (en condition qu'un seul modèle est chargé dans la visionneuse):Sélectionner/isoler dans l'approche multimodèle

- select(dbids,selectionType) 
- isolate(node)/isolateById(dbids) // that is the difference? 

Je sais sélectionnez analogique pour multimodèle:

viewer.impl.selector.setSelection([objectIds], model); 

Les questions sont:

  1. est-isoler analogique pour le mode multimodèle existe?
  2. Comment puis-je sélectionner/isoler deux objets à partir de modèles différents en même temps?

Répondre

0

Dans la version récente de l'API du viewer.impl.visibilityManager renvoie une MultiModelVisibilityManager, de sorte que vous pouvez passer d'un modèle comme second argument:

MultiModelVisibilityManager.prototype.isolate = function (node, model) 

Jetez un oeil à viewer3D.js (L # 17825) pour voir les méthodes disponibles sur cet objet. Autant que je sache, il n'y a aucun moyen de sélectionner deux objets provenant de différents modèles dans un seul appel, vous émettriez juste un appel de sélection pour chaque modèle passant des identifiants respectifs. Je ne vois pas de problème avec ça.

Espérons que ça aide.

0

Pour la isolate, vous pouvez faire quelque chose comme ça (emprunté à la Viewer3D.js):

// Get selected elements from each loaded models 
var selection = this.viewer.getAggregateSelection(); 
var allModels = this.viewer.impl.modelQueue().getModels().concat(); // shallow copy 
// Isolate selected nodes. 
selection.forEach(function(singleRes){ 
    singleRes.model.visibilityManager.isolate(singleRes.selection); 
    var indx = allModels.indexOf(singleRes.model); 
    if (indx >= 0) { 
     allModels.splice(indx, 1); 
    } 
}); 
// Hide nodes from all other models 
while (allModels.length) { 
    allModels.pop().visibilityManager.setAllVisibility(false); 
} 
this.viewer.clearSelection(); 

Pour le select, vous devez passer le modèle correspondant et dbids au viewer.impl.selector.setSelection([dbIds], model); et appeler setSelection pour chaque réglé, comme ci-dessous. Il ne peut pas être archivé à la fois.

var selSet = [ 
    { 
     selection: [1234, 5621], 
     model: model1 
    }, 
    { 
     selection: [12, 758], 
     model: model2 
    }, 
]; 

selSet.forEach(funciton(sel) { 
    viewer.impl.selector.setSelection(sel.selection, sel.model); 
}); 
+0

Ce code ne fonctionne pas, la sélection est effacée dans les modèles qui ne correspondent pas au modèle donné (Viewer3D.js - ligne 18580). Pour obtenir la sélection de plusieurs modèles, je dois utiliser directement "model.selector.setSelection (ids)" et déclencher l'événement de changement manuellement –