grasshopper(C#script)生成蛇皮管道

摸索grasshopper的第二天,决定使用一下脚本电池,制作一个随机生成管道的蛇皮东西,如下
在这里插入图片描述
其中除了用到interpolate来连线和pipe来成管,就是一个C#的脚本电池了,作用是不走回头路的随机生成点,然后用interpolate连接起来最后用pipe成管道
在这里插入图片描述
由于网上的资源太少,只能自己摸索。在C#的editor中,灰色背景的部分是不能编辑的,能编辑的只有白色背景的部分,一是(这里的x,y,A等可以在电池中修改名称,这里我把x改为seed,随机种子,y改为num,点数)

private void RunScript(object x, object y, ref object A)
{

}

和下图之间的部分

 // <Custom additional code> 

  // </Custom additional code> 

在RunScript中写下如下代码,解释如注释

private void RunScript(object seed, object num, ref object A)
  {
  	// 创建一个列表,用来存放三维点(rhino.geometry.point3d)
    List<Point3d> plist = new List<Point3d>();
    // 实例化一个三维点
    Point3d mp = new Point3d();
    // 将object转化为int
    int pnum = Convert.ToInt32(num);
    int pseed = Convert.ToInt32(seed);
    // 实例化一个随机数生成的玩意儿
    Random r = new Random(pseed);
    int dir = 0;  // 记录当前方向
    int lastdir = dir;  // 保存上一步方向,避免马上走回头路

    for (int i = 0; i < pnum; i++)  // 循环需要的点数
    {
      lastdir = dir;  // 保存上一步的方向
      dir = r.Next(6);  // 更新这一步的方面,随机上下前后左右6个方向
      // 见后面的函数,这里的作用主要是如果这一步是回到上一步,那就重新来一次
      if (Math.Abs(lastdir - dir) == 3)  
      {
        i -= 1;
        dir = lastdir;
      }
      // 没有走回头路就开始移动,保存移动后的点
      else
      {
        randMove(ref mp, dir);
        plist.Add(mp);
      }
    }
    A = plist;  // 把结果保存在A中,因为连线要从A连出来
  }

在注释中间写上randMove方法

public void randMove(ref Point3d p, int dir)
  {
    switch(dir)
    {
      case 0:
        p.X += 1;
        break;
      case 1:
        p.Y += 1;
        break;
      case 2:
        p.Z += 1;
        break;
      case 3:
        p.X -= 1;
        break;
      case 4:
        p.Y -= 1;
        break;
      case 5:
        p.Z -= 1;
        break;
    }
  }

这个没什么解释,为什么前面要用lastdir和dir相差是否为3的意思就是如果相差为3,那么这一步和上一步就是相反的一步,也就走了回头路了
**

运行结果

**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后烘焙一下,到渲染模式
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值