Get hatch boundary

Hi i try to get hatch boundry in hatch in rhino by grasshopper
But i don’t know select hatch in Rhino and (set)
that (import hatch )in grasshopper please help me and What is hatch input in c# component?
For example is hatch geometry Base data or ???generic data ,…

Hi @Rh-3d-p,

Is this helpful?

import Rhino
import scriptcontext as sc

def test_hatch_boundary():
    go = Rhino.Input.Custom.GetObject()
    go.SetCommandPrompt("Select hatches")
    go.GeometryFilter = Rhino.DocObjects.ObjectType.Hatch
    go.GroupSelect = True
    go.SubObjectSelect = False
    go.GetMultiple(1, 0)
    if go.CommandResult() != Rhino.Commands.Result.Success: return
    for objref in go.Objects():
        hatch = objref.Hatch()
        if hatch:
            curves = hatch.Get3dCurves(True)
            for curve in curves:
if __name__ == "__main__":

– Dale

Hi thanks
But i don’t need use scriptcontext and python
I need to slove in c#. For write plugin .

The code for C# plug-in command isn’t much different.

protected override Result RunCommand(RhinoDoc doc, RunMode mode)
  var go = new GetObject();
  go.SetCommandPrompt("Select hatches");
  go.GeometryFilter = Rhino.DocObjects.ObjectType.Hatch;
  go.GroupSelect = true;
  go.SubObjectSelect = false;
  go.GetMultiple(1, 0);
  if (go.CommandResult() != Rhino.Commands.Result.Success)
    return go.CommandResult();

  foreach (var objref in go.Objects())
    var hatch = objref.Hatch();
    if (null != hatch)
      var curves = hatch.Get3dCurves(true);
      foreach (var curve in curves)


  return Result.Success;

– Dale

hi @dale again
If I want to run in Grasshopper
What should I enter in the using section so that it does not give an error?
Error (CS0115): 'Script_Instance.RunCommand(Rhino.RhinoDoc, Rhino.Commands.RunMode)': no suitable method found to override (line 63)
hatch (10.8 KB)


You might consider using the hatch object GUID to reference it in Grasshopper like this.

private void RunScript(Guid id, ref object Outer, ref object Inner)
  var rhinoObject = RhinoDocument.Objects.FindId(id);
  if (rhinoObject is HatchObject)
    var hatch = rhinoObject.Geometry as Hatch;
    Outer = hatch.Get3dCurves(true);
    Inner = hatch.Get3dCurves(false);
import Rhino
rhino_object = Rhino.RhinoDoc.ActiveDoc.Objects.Find(id)
if type(rhino_object) is Rhino.DocObjects.HatchObject:
    hatch = rhino_object.Geometry
    Outer = hatch.Get3dCurves(True)
    Inner = hatch.Get3dCurves(False) (7.4 KB)