# GH_AbstractGraph class

Namespace: [Grasshopper.Kernel.Graphs](https://developer.rhino3d.com/api/gh1/namespace/grasshopper.kernel.graphs.md) · Assembly: [Grasshopper](https://developer.rhino3d.com/api/gh1/assembly/grasshopper.md)

```cs
public abstract class GH_AbstractGraph : IGH_Graph
```

**Derived types:** [GH_BezierGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-beziergraph.md), [GH_ConicGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-conicgraph.md), [GH_DoubleSineGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-doublesinegraph.md), [GH_GaussianGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-gaussiangraph.md), [GH_LinearGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-lineargraph.md), [GH_ParabolaGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-parabolagraph.md), [GH_PerlinGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-perlingraph.md), [GH_PowerGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-powergraph.md), [GH_SincGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-sincgraph.md), [GH_SineGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-sinegraph.md), [GH_SquareRootGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-squarerootgraph.md)

## Constructors

- [GH_AbstractGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/ctor.md)

## Properties

- [Description](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/description.md)
- [GraphTypeID](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/graphtypeid.md)
- [Grips](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/grips.md): Gets the grip collection, you'd be wise not to modify the collection. If you want to add or remove grips, use the AddGrip() and ClearGrips() methods instead.
- [Icon_16x16](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/icon-16x16.md)
- [IsValid](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/isvalid.md)
- [Name](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/name.md)

## Methods

- [AddGrip](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/addgrip.md)
- [ClearCaches](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/clearcaches.md)
- [ClearGrips](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/cleargrips.md)
- [CreateDerivedDuplicate](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/createderivedduplicate.md): Implement this function and return an instance of yourself with all specific values copied. All properties in the GH_AbstractGraph class are copied by the GH_AbstractGraph.
- [CreateGrips](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/creategrips.md): Override this function if your Graph supports grip controls
- [CurveToPointFArray](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/curvetopointfarray.md): (static)
- [Draw_PostRenderGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-postrendergraph.md)
- [Draw_PostRenderGrid](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-postrendergrid.md)
- [Draw_PostRenderGrip](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-postrendergrip.md)
- [Draw_PostRenderTags](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-postrendertags.md)
- [Draw_PreRenderGraph](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-prerendergraph.md)
- [Draw_PreRenderGrid](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-prerendergrid.md)
- [Draw_PreRenderGrip](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-prerendergrip.md)
- [Draw_PreRenderTags](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/draw-prerendertags.md)
- [Duplicate](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/duplicate.md)
- [EmitProxyObject](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/emitproxyobject.md): Override this function if you want to be able to edit the graph through a PropertyGrid.
- [GDI_GraphPath](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/gdi-graphpath.md)
- [GHGraphToPointArray](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/ghgraphtopointarray.md): (2 overloads)
- [Internal_GripChanged](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/internal-gripchanged.md): By default, the grip is clamped to the unit domain and UpdateEquation is called. If you want to alter this behaviour, override this function.
- [IntersectionEvaluate](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/intersectionevaluate.md): (static) Evaluates a curve by intersecting it with a vertical line at t
- [OnGraphChanged](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/ongraphchanged.md)
- [PrepareForUse](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/prepareforuse.md): This function is called when the graph is about to be used for the first time, maybe more often. You're supposed to reset all defaults. By default, this function calls ClearGrips(), CreateGrips() and UpdateEquation()
- [Read](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/read.md)
- [UpdateEquation](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/updateequation.md): This function is usually called after a grip change. This is where you re-evaluate your equation constants based on grip locations.
- [ValueAt](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/valueat.md): This function supplies evaluation logic for the unit domains
- [Write](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/write.md)

## Events

- [GraphChanged](https://developer.rhino3d.com/api/gh1/type/grasshopper.kernel.graphs.gh-abstractgraph/graphchanged.md)
