Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }