public static SphereSelector Select(Sphere sphere, Vector2 selectPos, float maxDist, bool testCenter, bool testEdge) { bool edge = false; Sphere selectedSphere = null; Vector2 center = sphere.center; float radius = sphere.radius; // test center selection float centerDist = (selectPos - center).Length; if (testCenter) { if (centerDist <= maxDist) { maxDist = centerDist; selectedSphere = sphere; } } if (testEdge && selectedSphere == null) { float dist = Math.Abs(centerDist - radius); if (dist < maxDist) { maxDist = dist; selectedSphere = sphere; edge = true; // snap edgepos to radius Vector2 vSelectOffset = selectPos - center; vSelectOffset = Vector2.Normalize(vSelectOffset); vSelectOffset = vSelectOffset * radius; selectPos = center + vSelectOffset; } } if (selectedSphere != null) { SphereSelector selector = new SphereSelector(selectedSphere, maxDist, edge, selectPos); return(selector); } return(null); }
public bool OnSelect(Vector2 posView) { float touchRange = ccContext.SelectRadius; Vector2 p = CCContext.ViewToModel(posView, ccContext.ModelViewMatrix); float radius = CCContext.ViewToModel(touchRange, ccContext.ModelViewMatrix); switch (activeTool) { case Tool.ROIEdit: { selectedPrim = SphereSelector.Select(roiSphere, p, radius, true, true); if (selectedPrim != null) { ccContext.RequestRender(); return(true); } break; } case Tool.TagCreate: case Tool.TagDelete: { selectedPrim = TagSelector.Select(tags, p, radius); if (selectedPrim != null) { ccContext.RequestRender(); Console.WriteLine("selected:" + selectedPrim.GetPrimitive()); return(true); } break; } } return(false); }