C#Script编写Grasshopper电池(Slider篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

——今天开始正式记录自己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才是硬道理啊。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值