Проблема с PickCanvas, когда некоторые элементы были преобразованы - PullRequest
0 голосов
/ 16 октября 2019

У меня есть код, который использует PickCanvas, чтобы определить, где в 3D пользователь нажал на 3D-модель. Модель сделана из TriangleStrips. Это все работает нормально.

Теперь, если я добавлю Цилиндр в сцену, это тоже нормально. Но если я поверну цилиндр в TransformGroup, я больше не смогу щелкнуть по нему. Любые идеи приветствуются!

Transform3D tr = new Transform3D();
//tr.rotX(Math.PI/2); <--- uncommenting this line breaks PickCanvas
TransformGroup cylGroup = new TransformGroup(tr);               
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
tg.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
tg.setCapability(TransformGroup.ALLOW_PARENT_READ);
tg.setCapability(TransformGroup.ALLOW_PICKABLE_READ);
tg.setCapability(TransformGroup.ALLOW_PICKABLE_WRITE);
cylGroup.addChild(cyl);     
tg.addChild(cylGroup);

Вот как я читаю результат щелчка мышью:

pickCanvas.setShapeLocation(evt);
PickResult result = pickCanvas.pickClosest();
Point3d eyePos = pickCanvas.getStartPosition();
PickIntersection pi = result.getClosestIntersection(eyePos);
Point3d insectPt = pi.getPointCoordinates();

1 Ответ

0 голосов
/ 16 октября 2019

Решено:

Point3d insectPt = pi.getPointCoordinates();
Transform3D local_to_vworld = result.getLocalToVworld();
local_to_vworld.transform(insectPt); 

Никогда раньше не нуждалось в этом, так как мои треугольные полосы были добавлены без преобразования.

...