SimpleGrasshopper 0.10.6
See the version list below for details.
dotnet add package SimpleGrasshopper --version 0.10.6
NuGet\Install-Package SimpleGrasshopper -Version 0.10.6
<PackageReference Include="SimpleGrasshopper" Version="0.10.6" />
paket add SimpleGrasshopper --version 0.10.6
#r "nuget: SimpleGrasshopper, 0.10.6"
// Install SimpleGrasshopper as a Cake Addin #addin nuget:?package=SimpleGrasshopper&version=0.10.6 // Install SimpleGrasshopper as a Cake Tool #tool nuget:?package=SimpleGrasshopper&version=0.10.6
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!
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!
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;
}
}
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,
}
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
{
}
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)
{
}
}
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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- Grasshopper (>= 7.2.21021.7001)
- System.Drawing.Common (>= 8.0.0)
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 |