public bool processAxis(ref Ray3 spaceRay) { Vector3 trans = movable.ToolTranslation; xAxis.process(spaceRay, trans); yAxis.process(spaceRay, trans); zAxis.process(spaceRay, trans); Vector3 origin = spaceRay.Origin; if (xAxis.isSelected() && yAxis.isSelected() && zAxis.isSelected()) { float xAxisDistance = (xAxis.Intersection - origin).length2(); float yAxisDistance = (yAxis.Intersection - origin).length2(); float zAxisDistance = (zAxis.Intersection - origin).length2(); //X closest if (xAxisDistance < yAxisDistance && xAxisDistance < zAxisDistance) { yAxis.clearSelection(); zAxis.clearSelection(); } //Y closest else if (yAxisDistance < zAxisDistance && yAxisDistance < xAxisDistance) { xAxis.clearSelection(); zAxis.clearSelection(); } //Z closest else if (zAxisDistance < yAxisDistance && zAxisDistance < xAxisDistance) { yAxis.clearSelection(); xAxis.clearSelection(); } else { xAxis.clearSelection(); zAxis.clearSelection(); } } else if (xAxis.isSelected() && yAxis.isSelected()) { twoWayAxisComparison(xAxis, yAxis, ref origin); } else if (xAxis.isSelected() && zAxis.isSelected()) { twoWayAxisComparison(xAxis, zAxis, ref origin); } else if (zAxis.isSelected() && yAxis.isSelected()) { twoWayAxisComparison(zAxis, yAxis, ref origin); } bool selected = xAxis.isSelected() || yAxis.isSelected() || zAxis.isSelected(); movable.alertToolHighlightStatus(selected); return(selected); }
private void twoWayAxisComparison(RotationAxis axis0, RotationAxis axis1, ref Vector3 origin) { float axis0Distance = (axis0.Intersection - origin).length2(); float axis1Distance = (axis1.Intersection - origin).length2(); if (axis0Distance < axis1Distance) { axis1.clearSelection(); } else { axis0.clearSelection(); } }