SimpleGrasshopper 0.10.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package SimpleGrasshopper --version 0.10.1                
NuGet\Install-Package SimpleGrasshopper -Version 0.10.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SimpleGrasshopper" Version="0.10.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SimpleGrasshopper --version 0.10.1                
#r "nuget: SimpleGrasshopper, 0.10.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SimpleGrasshopper as a Cake Addin
#addin nuget:?package=SimpleGrasshopper&version=0.10.1

// Install SimpleGrasshopper as a Cake Tool
#tool nuget:?package=SimpleGrasshopper&version=0.10.1                

Simple Grasshopper

Hi, this is a repo to simplify your plugin development in Grasshopper.

With this repo, you don't need to understand what a GH_Component is and what a GH_Param is. All you need to do is add attributes!

NOTICE: For some reason, the SimpleGrasshopper.dll won't copy to the output directory automatically. If there is any way to make the nuget pacakge only copy this file, please tell me.

Quick Start

Add the package from nuget package.

  <ItemGroup>
    <PackageReference Include="SimpleGrasshopper" Version="0.9.1" />
  <ItemGroup>

Don't forget to copy this SimpleGrasshopper.dll file to your output folder!

image-20231124084353080

How to use

Component

All the components are methods. to simplify creating these things, a method is a component! To let it know which method should be the component, please tag it with DocObjAttribute with the basic info about it called Name, NickName, and Description!

using SimpleGrasshopper.Attributes;

namespace SimpleGrasshopper.GHTests;

internal class SimpleSubcategory
{
    [DocObj("Addition", "Add", "The addition of the integers.")]
    private static void SimpleMethod(int a, int b, out int c)
    {
        c = a + b;
    }
}

Now, you'll see a component in GH!

image-20231123221923982

The output is the parameters with the modifier out! And please don't use ref! It'll be regarded as input!

Component Infos

For some cases, you may want to add more information for this component, there are 3 attributes designed for this. They are SubCategoryAttribute, IconAttribute, and ExposureAttribute. You can also use the attribute ObsoleteAttribute.

using SimpleGrasshopper.Attributes;

namespace SimpleGrasshopper.GHTests;

[SubCategory("Just a test")]
internal class SimpleSubcategory
{
    [Icon("ConstructRenderItemComponent_24-24.png")] // The name of the png that is embedded in your dll.
    [Exposure(Grasshopper.Kernel.GH_Exposure.secondary)]
    [DocObj("Addition", "Add", "The addition of the integers.")]
    private static void SimpleMethod(int a, int b, out int c)
    {
        c = a + b;
    }
}
Parameters Info

If you want to change the description of the param, please use DocObjAttribute one more time to make it easier to read.

If you want to use some other Parameter with your parameter, please use ParamAttribute.

One more thing, for the angle parameter, is the AngleAttribute!

using SimpleGrasshopper.Attributes;
using SimpleGrasshopper.Data;

namespace SimpleGrasshopper.GHTests;

[SubCategory("Just a test")]
internal class SimpleSubcategory
{
    [DocObj("Special Param", "Spe", "Special Params")]
    private static void ParamTest(
        [DocObj("Name", "N", "The name of sth.")] string name, 
        [Param(ParamGuids.FilePath)]string path,
        [Angle]out double angle)
    {
        angle = Math.PI;
    }
}

image-20231123223432423

image-20231123223445165

image-20231123223455689

Data Access

If you want your data access to be a list, please set the param type to List<T>.

If you want your data access to be a tree. That would be complex.

If it is a built-in type, please do it like GH_Structure<GH_XXXX>. If it is your type, please do it like GH_Structure<SimpleGoo<XXXXX>>.

Enum Type

For some cases, you may want to add some enum parameters to your project, so just do it!

You can also add a default value for making it optional.

using SimpleGrasshopper.Attributes;
using SimpleGrasshopper.Data;

namespace SimpleGrasshopper.GHTests;

[SubCategory("Just a test")]
internal class SimpleSubcategory
{
    [DocObj("Enum Param", "Enu", "Enum testing")]
    private static void EnumTypeTest(out EnumTest type, EnumTest input = EnumTest.First)
    {
        type = EnumTest.First;
    }
}

public enum EnumTest : byte
{
    First,
    Second,
}

image-20231123225356231

Parameters

For parameters, they are just types! doing things like a type!

You can also add IconAttribute , ExposureAttribute, and ObsoleteAttribute.

using SimpleGrasshopper.Attributes;

namespace SimpleGrasshopper.GHTests;

[Icon("CurveRenderAttributeParameter_24-24.png")]
[DocObj("My type", "just a type", "Testing type.")]
public class TypeTest
{
}

image-20231123224941091

And this parameter can also be used in the component!

using SimpleGrasshopper.Attributes;
using SimpleGrasshopper.Data;

namespace SimpleGrasshopper.GHTests;

[SubCategory("Just a test")]
internal class SimpleSubcategory
{
    [DocObj("Type Testing", "T", "Testing for my type")]
    private static void MyTypeTest(TypeTest type)
    {

    }
}

image-20231123225140458

Settings

Well, for some lazy people like me, who doesn't like to use Instances.Setting.GetValue(XXX), etc. I just want to make it ez.

So, just tag a static field with the attribute SettingAttribute!

using SimpleGrasshopper.Attributes;
using System.Drawing;

namespace SimpleGrasshopper.GHTests;

internal static partial class SettingClass
{
    [Setting]
    private static readonly bool firstSetting = true;

    [Setting]
    private static readonly Color secondSetting = Color.AliceBlue;
}

internal readonly partial struct SettingStruct
{
    [Setting]
    private static readonly string anotherSetting = default!;
}

And you can use it like this.

var a = SettingClass.FirstSetting;
var b = SettingClass.SecondSetting;
var c = SettingStruct.AnotherSetting;

That makes it easier!

Advanced

So it is making it easier. But if you still want to modify the GH_Component or GH_PersistentParam. You can use the keyword partial to modify the class. For the components, the class is CLASSNAME_METHODNAME_Component. For the parameters, the class is CLASSNAME_Parameter.

Product Compatible and additional computed target framework versions.
.NET net7.0-windows7.0 is compatible.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.8.6 87 10/22/2024
1.8.5 104 10/8/2024
1.8.4 155 6/27/2024
1.8.2 152 5/15/2024
1.8.1 115 5/11/2024
1.8.0 111 5/11/2024
1.7.13 118 5/10/2024
1.7.12 119 5/10/2024
1.7.11 129 5/9/2024
1.7.10 130 5/7/2024
1.7.9 119 5/6/2024
1.7.8 126 4/30/2024
1.7.7 124 4/30/2024
1.7.5 115 4/30/2024
1.7.4 118 4/30/2024
1.7.3 114 4/29/2024
1.7.2 109 4/29/2024
1.7.1 114 4/29/2024
1.7.0 117 4/28/2024
1.6.4 119 4/26/2024
1.6.3 124 4/22/2024
1.6.2 148 3/24/2024
1.6.1 129 3/24/2024
1.6.0 122 3/22/2024
1.5.4 129 3/22/2024
1.5.3 135 3/7/2024
1.5.2 132 2/20/2024
1.5.1 120 1/30/2024
1.5.0 126 1/19/2024
1.4.9 114 1/18/2024
1.4.8 119 1/17/2024
1.4.7 114 1/16/2024
1.4.5 146 1/14/2024
1.4.4 113 1/14/2024
1.4.3 125 1/13/2024
1.4.2 122 1/12/2024
1.4.1 120 1/12/2024
1.4.0 118 1/12/2024
1.3.10 119 1/12/2024
1.3.9 117 1/11/2024
1.3.8 110 1/11/2024
1.3.7 111 1/10/2024
1.3.5 113 1/10/2024
1.3.4 130 1/9/2024
1.3.3 117 1/8/2024
1.3.1 136 1/4/2024
1.3.0 132 1/3/2024
1.2.9 117 1/3/2024
1.2.8 141 1/1/2024
1.2.7 126 12/29/2023
1.2.6 135 12/28/2023
1.2.5 128 12/26/2023
1.2.4 120 12/24/2023
1.2.3 117 12/23/2023
1.2.2 143 12/22/2023
1.2.1 125 12/22/2023
1.2.0 106 12/22/2023
1.1.9 116 12/21/2023
1.1.8 118 12/21/2023
1.1.7 117 12/21/2023
1.1.6 109 12/21/2023
1.1.5 88 12/20/2023
1.1.4 135 12/20/2023
1.1.3 98 12/20/2023
1.1.2 110 12/20/2023
1.1.1 134 12/19/2023
1.1.0 113 12/19/2023
1.0.6 124 12/18/2023
1.0.5 108 12/18/2023
1.0.4 151 12/16/2023
1.0.3 136 12/14/2023
1.0.2 119 12/13/2023
1.0.1 112 12/13/2023
1.0.0 134 12/13/2023
0.10.6 133 12/11/2023
0.10.5 128 12/11/2023
0.10.4 150 12/4/2023
0.10.3 135 11/28/2023
0.10.2 120 11/27/2023
0.10.1 143 11/27/2023
0.10.0 152 11/26/2023
0.9.10 165 11/26/2023
0.9.9 143 11/26/2023
0.9.8 147 11/26/2023
0.9.7 141 11/24/2023