提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
——今天开始正式记录自己grasshopper的学习过程,起初是在B站和油管上面学习,发现太过于零碎,反而花费了过多无用的时间,后来在CSDN上发现了不少可靠的系列文章,使我受益匪浅,因此记录自己的一点学习心得,既可以帮助与我面临相同困难的同学,也可以促使自己向新的领域不断进发。
提示:以下是本篇文章正文内容,下面案例可供参考
一、slider介绍
——slider作为作为gh中常用电池,时常会因为数量过多而让人修改的头疼,但不得不说作为基础电池,它的确用的还算舒适。
二、生成电池
1.生成slider
代码如下:
private void RunScript(bool generate, ref object A)
{
if(generate)
{
Grasshopper.Kernel.Special.GH_NumberSlider slid = new Grasshopper.Kernel.Special.GH_NumberSlider();
// 生成slider
GrasshopperDocument.AddObject(slid, false);
}
}
2.改变slider的attributes
代码如下:
private void RunScript(bool generate, List<System.Object> x, ref object A)
{
Random rnd = new Random();
if(generate)
{
Grasshopper.Kernel.Special.GH_NumberSlider slid = new Grasshopper.Kernel.Special.GH_NumberSlider();
// 样式
slid.CreateAttributes();
// 位置
slid.Attributes.Pivot = new PointF((float) this.Component.Attributes.DocObject.Attributes.Bounds.Left -
slid.Attributes.Bounds.Width - 30,
(float) this.Component.Params.Input[1].Attributes.Bounds.Y
+ this.Component.Params.Input[1].SourceCount*30);
// 数值
slid.Slider.Maximum = 10;
slid.Slider.Minimum = 0;
slid.Slider.DecimalPlaces = 2;
slid.SetSliderValue((decimal) (rnd.Next(1000) * 0.01));
// 生成slider
GrasshopperDocument.AddObject(slid, true);
// 连接
this.Component.Params.Input[1].AddSource(slid);
}
}
2.改变slider的colorAttr
代码如下:
private void RunScript(int x, double max, System.Drawing.Color color, ref object A)
{
//获取Input[0]端口slider
var input = (Component.Params.Input[0].Sources[0]);
var slid = (Grasshopper.Kernel.Special.GH_NumberSlider) input;
if(slid != null)
{
slid.Slider.RailDisplay = Grasshopper.GUI.Base.GH_SliderRailDisplay.Filled;
slid.Slider.RailFullColour = color;
slid.Slider.Minimum = 0;
slid.Slider.Maximum = (decimal) max;
slid.Slider.DrawControlBackground = true;
slid.Slider.DrawControlShadows = true;
slid.Slider.DrawControlBorder = true;
slid.Slider.ControlEdgeColour = Color.Blue;
slid.Slider.ControlBackColour = Color.Yellow;
slid.Slider.ControlShadowColour = Color.Red;
}
}
——哈哈哈…发现了slider的一个小bug!!slider的值超过其最大值时,会飞出去,除非重新设定value,不然不依赖代码无法拖动。
移动slider后又变回预设,可能需要更改全局模式。
总结
——Rhino+Grasshopper需要深入学习的无非是RhinoCommon(C#)&以此为基础编译的RhinoScriptSyntax(Python)、Grasshopper API(C#)&以此为基础编译的ghenv(Python)。从个人学习简历来说,虽然python入门较快,但直接学习C#会更有框架逻辑性,而且可以制作自己的插件。
——下一章会讲解Value List的生成。
PS:听说GH2要来了,大家优先学好RhinoCommon才是硬道理啊。