Просмотрите наши продукты
Aspose.3D for Java 19,3 Примечания к выпуску
Улучшения и изменения
Ключ | Сводка | Категория |
---|---|---|
THREEDNET-471 | XPath как методы адресации объектов | Новая функция |
Публичные API и обратные несовместимые изменения
См. Список любых изменений, внесенных в общедоступный API, таких как добавленные, переименованные, удаленные или устаревшие члены, а также любые несовместимые назад изменения, внесенные в Aspose.3D for Java. Если у вас есть опасения по поводу каких-либо изменений, пожалуйста, поднимите их наФорум поддержки Aspose.3D.
Добавлен метод selectSingleObject в классе 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;
Добавлен метод selectObjects в классе 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;
Ниже приводится пример кода для запроса одного или нескольких объектов:
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);
Синтаксис запроса был вдохновлен XPath, поэтому большинство концепций и синтаксиса похожи, синтаксис запроса совместим с URL, поэтому он будет использоваться в нашей облачной версии в будущем. Обычно синтаксис состоит изУсловие имени префикса / Имя Состояние /.
Префикс = | Описание = |
---|---|
Глобальный селектор, любой потомок рассматривается как корневой узел для выполнения выбора | |
/ | Корневой селектор, только один предок используется для поиска |
Другие | Предположим, что это имя, и выберите объект по имени в глобальном режиме селектора |
Имя-это строка, которая соответствует имени объекта, или подстановочный знак «*» используется для сопоставления с любым именем. Условие-это выражение, чтобы решить, выбрать ли объект, логические операторы (нет) и или операторы сравнения>/</>=/<=/!= поддерживаются. Для доступа к свойству в выражении условия используется префикс «@», например, @ Name будет читать свойство Name. Синтаксис ярлыка для типа тестирования поддерживается |
Выберите все узлы, используя глобальный селектор синтаксиса:
//<Node>
Это короткий синтаксис:
//*[<Node>]
Или
//*[@Type = Node]
Выберите узел второго уровня с видимым родителем:
//<Node>[@Visible]/<Node>