Aspose.3D for Java 19.3 Note di rilascio
Miglioramenti e modifiche
Chiave | Riassunto | Categoria |
---|---|---|
THREEDNET-471 | XPath come metodi di indirizzamento degli oggetti | Nuova funzionalità |
Pubblico API e modifiche incompatibili arretrate
Vedere l’elenco di eventuali modifiche apportate al pubblico API come membri aggiunti, rinominati, rimossi o deprecati, nonché qualsiasi modifica non retrocompatibile apportata allo Aspose.3D for Java. Se hai dubbi su eventuali modifiche elencate, sollevalo sulForum di supporto Aspose.3D.
Aggiunto il metodo selectSingleObject nella classe com.aspose.threed.Node
/**
* Select single object under current node using XPath-like query syntax.
* @param path
* @throws ParseException ParseException will be thrown if the path contains malformed query.
*/
public A3DObject selectSingleObject(String path)
throws ParseException;
Aggiunto metodo selectOggetti in classe com.aspose.threed.Node
/**
* Select multiple objects under current node using XPath-like query syntax.
* @param path
* @throws ParseException ParseException will be thrown if the path contains malformed query.
*/
public ArrayList<A3DObject> selectObjects(String path)
throws ParseException;
Di seguito è riportato il codice di esempio per interrogare uno o più oggetti:
Scene s = new Scene();
Node a = s.getRootNode().createChildNode("a");
a.createChildNode("a1");
a.createChildNode("a2");
s.getRootNode().createChildNode("b");
Node c = s.getRootNode().createChildNode("c");
c.createChildNode("c1").addEntity(new Camera("cam"));
c.createChildNode("c2").addEntity(new Light("light"));
/*
The hierarchy of the scene looks like:
- Root
- a
- a1
- a2
- b
- c
- c1
- cam
- c2
- light
*/
//select objects that has type Camera or name is 'light' whatever it's located.
List<A3DObject> objects = s.getRootNode().selectObjects("//*[(@Type = 'Camera') or (@Name = 'light')]");
Assert.assertEquals(2, objects.size());
Assert.assertTrue(objects.get(0) instanceof Camera);
Assert.assertTrue(objects.get(1) instanceof Light);
//Select single camera object under the child nodes of node named 'c' under the root node
A3DObject c1 = s.getRootNode().selectSingleObject("/c/*/<Camera>");
Assert.assertNotNull(c1);
// Select node named 'a1' under the root node, even if the 'a1' is not a directly child node of the
A3DObject obj = s.getRootNode().selectSingleObject("a1");
Assert.assertEquals("a1", obj.getName());
//Select the node itself, since the '/' is selected directly on the root node, so the root node is selected.
obj = s.getRootNode().selectSingleObject("/");
Assert.assertNotNull(obj);
Assert.assertTrue(obj instanceof Node);
Assert.assertEquals(s.getRootNode(), obj);
La sintassi della query è stata ispirata da XPath, quindi la maggior parte dei concetti e della sintassi sono simili, la sintassi della query è compatibile con l’URL, quindi verrà utilizzata nella nostra versione cloud in futuro. Di solito, una sintassi è composta daCondizione del nome prefisso / Condizione del nome /.
Prefisso = | Descrizione = |
---|---|
Selettore globale, qualsiasi discendente viene trattato come nodo radice per eseguire la selezione | |
/ | Selettore radice, solo un antenato serve a guardare in alto |
Altro | Supponiamo che sia un nome e seleziona l’oggetto in base al nome in modalità selettore globale |
Il nome è una stringa che corrisponde al nome dell’oggetto o il carattere jolly “*” viene utilizzato per corrispondere a qualsiasi nome. La condizione è un’espressione per decidere se selezionare l’oggetto, sono supportati gli operatori booleani (non) e o gli operatori di confronto>/</>=/<=/=/!=. Per accedere a una proprietà nell’espressione di condizione, viene utilizzato il prefisso ‘@’, ad esempio @ Name leggerà la proprietà Name. Una sintassi di collegamento per il tipo di test è supportata da |
Seleziona tutti i nodi usando il selettore globale della sintassi:
//<Node>
Questa è la sintassi breve di:
//*[<Node>]
O
//*[@Type = Node]
Seleziona un nodo di secondo livello con un genitore visibile:
//<Node>[@Visible]/<Node>