private void yawCamera(double angle) { Vector3d backToZero; Point3d center; if (choosingPivotPoint && pivotPointAdjustor.getPivotPointBG() != null) { center = pivotPointAdjustor.getPivotPointPos(); } else { center = getObjCenter(); } backToZero = new Vector3d(center); backToZero.negate(); Transform3D back = new Transform3D(); back.set(backToZero); Transform3D rotate = new Transform3D(); rotate.set(new AxisAngle4d(up, angle)); Transform3D toOri = new Transform3D(); toOri.set(new Vector3d(center)); // creating composite transform, reversing the order Transform3D fullRotate = new Transform3D(toOri); fullRotate.mul(rotate); fullRotate.mul(back); fullRotate.transform(cameraPos); fullRotate.transform(cameraFocus); }
@Override public void mouseClicked(MouseEvent e) { if (measurer != null && measurementVisible) { Marker marker = measurer.getMarker(); Point3d markerPos = marker.getMarkerPos(); // if there's any selected node, unselect it if (selectedNode != null) { ((Mark) selectedNode.getParent().getParent().getParent()).unSelect(); selectedNode = null; } if (hoveredNode != null && hoveredNode.getParent().getParent().getParent() instanceof Mark) { // select the clicked one selectedNode = hoveredNode; ((Mark) selectedNode.getParent().getParent().getParent()).select(); } // click to add a mark dot else if (measuring) { Mark currentMark; // could be the last mark, or a new one try { currentMark = measurer.getMarks().getLast(); if (!currentMark.isFristPointPlaced()) { // last mark completed Mark newMark = measurer.createMark(); // create new one newMark.createFirstPoint(markerPos); marker.initMarkerLine(markerPos); } else { // use last mark currentMark.createSecondPoint(markerPos); currentMark.createText(); currentMark.createMarkLine(); marker.removeMarkerLine(); } } catch (NoSuchElementException ex) { // no mark found currentMark = measurer.createMark(); currentMark.createFirstPoint(markerPos); marker.initMarkerLine(markerPos); } } } if (choosingPivotPoint) { pivotPointAdjustor.putPivotPoint(pivotPointAdjustor.getPlacer().getPos()); } }
@Override public void mouseMoved(MouseEvent e) { if (e.getX() > 0 && e.getX() < this.getWidth() && e.getY() > 0 && e.getY() < this.getHeight() && (canting.getCor() != null) && measuring && measurementVisible) { MyPickResult result = getMouseIntersection(e, true); Point3d pos = result.getPoint(); if (pos != null) { if (measurer == null) { measurer = new Measurer(pos); kainTG.addChild(measurer); initSnapList(); } else { measurer.getMarker().updatePos(pos); measurer.getMarker().setVisible(true); } hoveredNode = result.getNode(); } else { hoveredNode = null; } // if hovers any mark, highlight it if (hoveredNode != null && hoveredNode.getParent().getParent().getParent() instanceof Mark) { // before highlight, unhighlight previous mark if (lastHoveredNode != null) { if (selectedNode != null && lastHoveredNode.getParent().getParent().getParent() == selectedNode.getParent().getParent().getParent()) // if it is selected { ((Mark) selectedNode.getParent().getParent().getParent()).select(); } else { ((Mark) lastHoveredNode.getParent().getParent().getParent()).unHighlight(); } lastHoveredNode = null; } // highlight ((Mark) hoveredNode.getParent().getParent().getParent()).highlight(); lastHoveredNode = hoveredNode; } else { // unhighlight previous mark if (lastHoveredNode != null) { if (selectedNode != null && lastHoveredNode.getParent().getParent().getParent() == selectedNode.getParent().getParent().getParent()) // if it is selected { ((Mark) selectedNode.getParent().getParent().getParent()).select(); } else { ((Mark) lastHoveredNode.getParent().getParent().getParent()).unHighlight(); } lastHoveredNode = null; } } } if (e.getX() > 0 && e.getX() < this.getWidth() && e.getY() > 0 && e.getY() < this.getHeight() && (canting.getCor() != null) && choosingPivotPoint) { MyPickResult result = getMouseIntersection2(e); Point3d pos = result.getPoint(); if (pos != null) { if (pivotPointAdjustor == null) { pivotPointAdjustor = new PivotPointAdjustor(pos); kainTG.addChild(pivotPointAdjustor); } else { pivotPointAdjustor.getPlacer().updatePos(pos); } } } }