예제 #1
0
        // ======================================================================
        // Extract graph information at a given point.
        // ----------------------------------------------------------------------
        Prelude.Tuple <iCS_EditorObject, iCS_EditorObject> GetGraphInfoAt(Vector2 point, iCS_IStorage iStorage)
        {
            iCS_EditorObject objectAt = iStorage.GetPortAt(point);

            if (objectAt == null)
            {
                objectAt = iStorage.GetNodeAt(point);
            }
            return(new Prelude.Tuple <iCS_EditorObject, iCS_EditorObject>(objectAt, iStorage.GetClosestPortAt(point)));
        }
예제 #2
0
        // ======================================================================
        // Displays which element is being picked.
        // ----------------------------------------------------------------------
        public iCS_PickInfo GetPickInfo(Vector2 pick, iCS_IStorage iStorage)
        {
            iCS_PickInfo pickInfo = new iCS_PickInfo(iStorage);

            pickInfo.PickedPoint           = pick;
            pickInfo.PickedPointInGUISpace = TranslateAndScale(pick);
            var port = iStorage.GetPortAt(pick);

            if (port != null)
            {
//            Debug.Log("Port: "+port.Name+" is being picked");
                pickInfo.PickedObject            = port;
                pickInfo.PickedPart              = iCS_PickPartEnum.EditorObject;
                pickInfo.PickedPartGraphPosition = port.GlobalRect;
                pickInfo.PickedPartGUIPosition   = TranslateAndScale(pickInfo.PickedPartGraphPosition);
                return(pickInfo);
            }
            var pickedNode = iStorage.GetNodeAt(pick);

            if (pickedNode != null)
            {
                if (IsFoldIconPicked(pickedNode, pick))
                {
//                Debug.Log("Fold icon of: "+pickedNode.Name+" is being picked");
                    pickInfo.PickedObject            = pickedNode;
                    pickInfo.PickedPart              = iCS_PickPartEnum.FoldIcon;
                    pickInfo.PickedPartGraphPosition = GetFoldIconPosition(pickedNode);
                    pickInfo.PickedPartGUIPosition   = TranslateAndScale(pickInfo.PickedPartGraphPosition);
                    return(pickInfo);
                }
                if (IsMinimizeIconPicked(pickedNode, pick))
                {
//                Debug.Log("Minimize icon of: "+pickedNode.Name+" is being picked");
                    pickInfo.PickedObject            = pickedNode;
                    pickInfo.PickedPart              = iCS_PickPartEnum.MinimizeIcon;
                    pickInfo.PickedPartGraphPosition = GetMinimizeIconPosition(pickedNode);
                    pickInfo.PickedPartGUIPosition   = TranslateAndScale(pickInfo.PickedPartGraphPosition);
                    return(pickInfo);
                }
                if (IsNodeNamePicked(pickedNode, pick))
                {
//                Debug.Log("Node name: "+pickedNode.Name+" is being picked");
                    pickInfo.PickedObject = pickedNode;
                    pickInfo.PickedPart   = iCS_PickPartEnum.Name;
                    Rect  namePos  = GetNodeNamePosition(pickedNode);
                    float invScale = 1.0f / Scale;
                    pickInfo.PickedPartGraphPosition = new Rect(namePos.x, namePos.y, namePos.width * invScale, namePos.height * invScale);
                    var guiPos = TranslateAndScale(Math3D.ToVector2(namePos));
                    pickInfo.PickedPartGUIPosition = new Rect(guiPos.x, guiPos.y, namePos.width, namePos.height);
                    return(pickInfo);
                }
                bool result = iStorage.UntilMatchingChildNode(pickedNode,
                                                              c => {
                    if (c.IsIconizedOnDisplay)
                    {
                        if (IsNodeNamePicked(c, pick))
                        {
                            pickInfo.PickedObject            = c;
                            pickInfo.PickedPart              = iCS_PickPartEnum.Name;
                            Rect namePos                     = GetNodeNamePosition(c);
                            float invScale                   = 1.0f / Scale;
                            pickInfo.PickedPartGraphPosition = new Rect(namePos.x, namePos.y, namePos.width * invScale, namePos.height * invScale);
                            var guiPos = TranslateAndScale(Math3D.ToVector2(namePos));
                            pickInfo.PickedPartGUIPosition = new Rect(guiPos.x, guiPos.y, namePos.width, namePos.height);
                            return(true);
                        }
                    }
                    return(false);
                }
                                                              );
                if (result)
                {
                    return(pickInfo);
                }
            }
            var closestPort = iStorage.GetClosestPortAt(pick);

            if (closestPort != null)
            {
                if (IsPortNamePicked(closestPort, pick, iStorage))
                {
                    pickInfo.PickedObject = closestPort;
                    pickInfo.PickedPart   = iCS_PickPartEnum.Name;
                    Rect  namePos  = GetPortNamePosition(closestPort, iStorage);
                    float invScale = 1.0f / Scale;
                    pickInfo.PickedPartGraphPosition = new Rect(namePos.x, namePos.y, namePos.width * invScale, namePos.height * invScale);
                    var guiPos = TranslateAndScale(Math3D.ToVector2(namePos));
                    pickInfo.PickedPartGUIPosition = new Rect(guiPos.x, guiPos.y, namePos.width, namePos.height);
                    return(pickInfo);
                }
                if (IsPortValuePicked(closestPort, pick))
                {
                    pickInfo.PickedObject = closestPort;
                    pickInfo.PickedPart   = iCS_PickPartEnum.Value;
                    Rect  namePos  = GetPortValuePosition(closestPort);
                    float invScale = 1.0f / Scale;
                    pickInfo.PickedPartGraphPosition = new Rect(namePos.x, namePos.y, namePos.width * invScale, namePos.height * invScale);
                    var guiPos = TranslateAndScale(Math3D.ToVector2(namePos));
                    pickInfo.PickedPartGUIPosition = new Rect(guiPos.x, guiPos.y, namePos.width, namePos.height);
                    return(pickInfo);
                }
            }
            if (pickedNode != null)
            {
//            Debug.Log("Node: "+pickedNode.Name+" is being picked");
                pickInfo.PickedObject            = pickedNode;
                pickInfo.PickedPart              = iCS_PickPartEnum.EditorObject;
                pickInfo.PickedPartGraphPosition = pickedNode.GlobalRect;
                pickInfo.PickedPartGUIPosition   = TranslateAndScale(pickInfo.PickedPartGraphPosition);
                return(pickInfo);
            }
            return(null);
        }