// ====================================================================== // 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))); }
// ====================================================================== // 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); }