Snapping to Nodes in Editor?

Is there any way to snap to nodes of the grid during editor mode?
This would be especially useful in grid/hex or pointgraph games, such as placing obstacles or objects.

Right now I’m using GetNearest, but it doesn’t work during play.
'transform.position = (Vector3) _graph.GetNearest(transform.position).node.position;'

For 2D grids I use the following Editor Script, but I would love to access the underlying matrix of nodes used by whichever graph I’m using.

using UnityEngine;
using UnityEditor;
using System.Collections;
 
public class SnapToGrid : ScriptableObject
{
	[MenuItem ("Position/Snap to Grid %g")]
	static void MenuSnapToGrid()
	{
		Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
		
		float gridx = 1.0f;
		float gridy = 1.0f;
		float gridz = 1.0f;
		
		foreach (Transform transform in transforms)
		{
			Vector3 newPosition = transform.position;
			newPosition.x = Mathf.Round(newPosition.x / gridx) * gridx;
			newPosition.y = Mathf.Round(newPosition.y / gridy) * gridy;
			newPosition.z = Mathf.Round(newPosition.z / gridz) * gridz;
			transform.position = newPosition;
		}
	}

	[MenuItem ("Position/Snap to Grid Micro #%g")]
	static void MenuSnapToGridPixel()
	{
		Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
		
		float gridx = 0.25f;
		float gridy = 0.25f;
		float gridz = 0.25f;
		
		foreach (Transform transform in transforms)
		{
			Vector3 newPosition = transform.position;
			newPosition.x = Mathf.Round(newPosition.x / gridx) * gridx;
			newPosition.y = Mathf.Round(newPosition.y / gridy) * gridy;
			newPosition.z = Mathf.Round(newPosition.z / gridz) * gridz;
			transform.position = newPosition;
		}
	}
}

Any suggestions on how I can have a SnapToGraph Editor script?

It should definitely work during play mode? And in editor mode assuming you scan the graph first.