0
点赞
收藏
分享

微信扫一扫

不确定性环境下的自动驾驶汽车行为决策方法

small_Sun 2024-08-27 阅读 5

这段代码定义了一个名为 GH_Ex_Ana_SparkLine 的类,它是一个Grasshopper组件,用于在Excel工作表中添加迷你图(Sparkline)。以下是对这个组件的功能和主要特点的介绍:

  1. 功能概述:
    这个组件允许用户在Excel工作表中添加迷你图。迷你图是一种小型图表,通常嵌入在单个单元格中,用于显示数据趋势。

  2. 输入参数:

    • 工作表(Worksheet)
    • 数据范围(Data Range)
    • 放置位置(Placement)
    • 颜色(Color,可选,默认为黑色)
    • 权重(Weight,可选,默认为1)
    • 激活(Activate,可选,默认为false)
  3. 输出:

    • 更新后的Excel范围(Range)
  4. 主要流程:

    • 获取和验证工作表、数据范围和放置位置
    • 获取颜色和权重设置
    • 如果激活,则在指定位置添加迷你图
    • 输出更新后的范围
  5. 特点:

    • 继承自 GH_Ex_Rng__Base 类,可能是一个基础Excel操作组件
    • 提供了自定义图标
    • 使用了Grasshopper的参数系统来处理输入和输出
    • 允许用户自定义迷你图的颜色和权重
  6. 用途:
    这个组件可能是一个更大的Excel集成工具集的一部分,允许Grasshopper用户直接在3D建模环境中操作和分析Excel数据。通过添加迷你图,用户可以快速直观地查看数据趋势,而无需切换到Excel应用程序。

  7. 集成性:
    作为Grasshopper组件,它可以与其他组件结合使用,形成更复杂的数据分析和可视化工作流程。

总的来说,这是一个专门用于在Grasshopper环境中向Excel工作表添加迷你图的组件,为用户提供了一种便捷的方式来增强数据可视化能力。

Flow diagram

这个流程图将展示 GH_Ex_Ana_SparkLine 类中 SolveInstance 方法的主要步骤。

这个流程图展示了以下主要步骤:

  1. 开始 (Start)
  2. 获取工作表 (Get Worksheet)
    • 对应代码: DA.GetData(0, ref gooS);gooS.TryGetWorksheet(ref worksheet);
  3. 检查工作表是否有效 (Check if Worksheet is valid)
  4. 获取数据范围 (Get Data Range)
    • 对应代码: DA.GetData(1, ref gooR);gooR.TryGetRange(ref range, worksheet);
  5. 检查数据范围是否有效 (Check if Data Range is valid)
  6. 获取放置位置 (Get Placement)
    • 对应代码: DA.GetData(2, ref gooP);gooR.TryGetRange(ref placement, worksheet);
  7. 检查放置位置是否有效 (Check if Placement is valid)
  8. 获取颜色和权重 (Get Color and Weight)
    • 对应代码: DA.GetData(3, ref color);DA.GetData(4, ref weight);
  9. 获取激活状态 (Get Activation Status)
    • 对应代码: DA.GetData(5, ref activate);
  10. 检查是否激活 (Check if Activated)
  11. 如果激活,添加迷你图 (If activated, Add Sparkline)
    • 对应代码: range.AddSparkLine(placement, color, weight);
  12. 设置输出 (Set Output)
    • 对应代码: DA.SetData(0, range);
  13. 结束 (End)

这个流程图清晰地展示了 SolveInstance 方法的执行流程,包括数据获取、验证和处理的各个步骤。

Description

  1. 构造函数 (Constructor)
public GH_Ex_Ana_SparkLine()
  : base("Sparkline", "Spark",
      "添加一个迷你图",
      Constants.ShortName, Constants.SubAnalysis)
{
}

这是类的构造函数。它调用基类的构造函数,设置组件的名称、昵称、描述和分类。

  • “Sparkline” 是组件的全名
  • “Spark” 是简称
  • “添加一个迷你图” 是描述
  • Constants.ShortNameConstants.SubAnalysis 可能是定义组件类别的常量
  1. Exposure 属性 (Property)
public override GH_Exposure Exposure
{
    get { return GH_Exposure.primary; }
}

This property sets the exposure level of the component in the Grasshopper interface.
这个属性设置组件在Grasshopper界面中的曝光级别。
GH_Exposure.primary 表示这是一个主要组件,会在组件面板中显著位置显示。

  1. RegisterInputParams 方法 (Method)
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
    base.RegisterInputParams(pManager);
    pManager.AddGenericParameter("Placement", "P", "放置迷你图的单个单元格范围", GH_ParamAccess.item);
    pManager.AddColourParameter("Color", "C", "迷你图的颜色", GH_ParamAccess.item, Sd.Color.Black);
    pManager[3].Optional = true;
    pManager.AddNumberParameter("Weight", "W", "迷你图的线条粗细", GH_ParamAccess.item, 1);
    pManager[4].Optional = true;
    pManager.AddBooleanParameter("Activate", "_A", "如果为true,组件将被激活", GH_ParamAccess.item, false);
    pManager[5].Optional = true;
}

This method registers all input parameters for the component.
这个方法注册了组件的所有输入参数。

  • 使用 AddGenericParameter, AddColourParameter, AddNumberParameter, 和 AddBooleanParameter 方法添加不同类型的参数。
  • 每个参数都有名称、简称、描述,以及访问类型 (GH_ParamAccess.item 表示单个项)。
  • 一些参数有默认值,如颜色默认为黑色,权重默认为1。
  • 使用 Optional = true 设置参数为可选。
  1. RegisterOutputParams 方法 (Method)
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
    base.RegisterOutputParams(pManager);
}

This method registers output parameters. In this case, it calls the base class method without adding any additional outputs.
这个方法注册输出参数。在这个情况下,它调用基类方法而没有添加任何额外的输出。

  1. SolveInstance 方法 (Method)
protected override void SolveInstance(IGH_DataAccess DA)
{
    // ... (代码略)
}

This is the main method where the component’s logic is implemented.
这是实现组件逻辑的主要方法。让我们逐步分析其中的关键部分:

a. 获取工作表 (Get Worksheet)

IGH_Goo gooS = null;
DA.GetData(0, ref gooS);
ExWorksheet worksheet = new ExWorksheet();
bool hasWs = gooS.TryGetWorksheet(ref worksheet);

这段代码尝试从第一个输入获取工作表对象。TryGetWorksheet 是一个自定义方法,用于将输入转换为 ExWorksheet 对象。

b. 获取数据范围 (Get Data Range)

IGH_Goo gooR = null;
if (!DA.GetData(1, ref gooR)) return;
ExRange range = new ExRange();
if (!gooR.TryGetRange(ref range, worksheet)) return;
if (!hasWs) worksheet = range.Worksheet;

这部分代码获取数据范围。TryGetRange 是另一个自定义方法,用于将输入转换为 ExRange 对象。如果之前没有成功获取工作表,它会使用范围的工作表。

c. 获取放置位置 (Get Placement)

IGH_Goo gooP = null;
if (!DA.GetData(2, ref gooP)) return;
ExRange placement = new ExRange();
if (!gooR.TryGetRange(ref placement, worksheet)) return;

这段代码获取迷你图的放置位置,同样使用 TryGetRange 方法。

d. 获取颜色和权重 (Get Color and Weight)

Sd.Color color = Sd.Color.Black;
DA.GetData(3, ref color);

double weight = 1.0;
DA.GetData(4, ref weight);

这里获取颜色和权重设置,如果用户没有提供,则使用默认值。

e. 获取激活状态 (Get Activation Status)

bool activate = false;
DA.GetData(5, ref activate);

获取是否激活组件的布尔值。

f. 添加迷你图 (Add Sparkline)

if (activate) range.AddSparkLine(placement, color, weight);

If activated, add the sparkline to the specified range with the given placement, color, and weight.
如果激活,则使用指定的放置位置、颜色和权重向指定范围添加迷你图。

g. 设置输出 (Set Output)

DA.SetData(0, range);

Set the modified range as the output of the component.
将修改后的范围设置为组件的输出。

  1. Icon 属性 (Property)
protected override System.Drawing.Bitmap Icon
{
    get
    {
        return Properties.Resources.BB_Cell_Sparkline_01;
    }
}

This property provides the icon for the component in the Grasshopper interface.
这个属性为组件在Grasshopper界面中提供图标。

  1. ComponentGuid 属性 (Property)
public override Guid ComponentGuid
{
    get { return new Guid("24529e60-47b1-4201-94c2-58f14682bab6"); }
}

This property returns a unique identifier for the component. It’s crucial for Grasshopper to distinguish between different components.
这个属性返回组件的唯一标识符。这对于Grasshopper区分不同组件至关重要。

通过这个详细的分析,我们可以看到这个组件是如何设置、获取输入、处理数据,并最终添加迷你图到Excel工作表的。这个组件展示了Grasshopper与Excel集成的一个很好的例子,允许用户在3D建模环境中直接操作和可视化Excel数据。

Code

using Grasshopper.Kernel;
using Grasshopper.Kernel.Parameters;
using Grasshopper.Kernel.Types;
using Rhino.Geometry;
using System;
using System.Collections.Generic;
using Sd = System.Drawing;

namespace Bumblebee.Components
{
    // 定义一个用于添加迷你图的Grasshopper组件
    public class GH_Ex_Ana_SparkLine : GH_Ex_Rng__Base
    {
        /// <summary>
        /// 初始化 GH_Ex_Ana_SparkLine 类的新实例
        /// </summary>
        public GH_Ex_Ana_SparkLine()
          : base("Sparkline", "Spark",
              "添加一个迷你图",
              Constants.ShortName, Constants.SubAnalysis)
        {
        }

        /// <summary>
        /// 设置组件的曝光级别
        /// </summary>
        public override GH_Exposure Exposure
        {
            get { return GH_Exposure.primary; }
        }

        /// <summary>
        /// 注册所有输入参数
        /// </summary>
        protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
        {
            base.RegisterInputParams(pManager);
            // 添加放置迷你图的单元格范围参数
            pManager.AddGenericParameter("Placement", "P", "放置迷你图的单个单元格范围", GH_ParamAccess.item);
            // 添加迷你图颜色参数,默认为黑色
            pManager.AddColourParameter("Color", "C", "迷你图的颜色", GH_ParamAccess.item, Sd.Color.Black);
            pManager[3].Optional = true;
            // 添加迷你图线条粗细参数,默认为1
            pManager.AddNumberParameter("Weight", "W", "迷你图的线条粗细", GH_ParamAccess.item, 1);
            pManager[4].Optional = true;
            // 添加激活参数,控制是否执行迷你图添加操作
            pManager.AddBooleanParameter("Activate", "_A", "如果为true,组件将被激活", GH_ParamAccess.item, false);
            pManager[5].Optional = true;
        }

        /// <summary>
        /// 注册所有输出参数
        /// </summary>
        protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
        {
            base.RegisterOutputParams(pManager);
        }

        /// <summary>
        /// 这是执行实际工作的方法
        /// </summary>
        /// <param name="DA">用于从输入检索数据和存储到输出的DA对象</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            IGH_Goo gooS = null;
            DA.GetData(0, ref gooS);
            ExWorksheet worksheet = new ExWorksheet();
            bool hasWs = gooS.TryGetWorksheet(ref worksheet);

            // 获取数据范围
            IGH_Goo gooR = null;
            if (!DA.GetData(1, ref gooR)) return;
            ExRange range = new ExRange();
            if (!gooR.TryGetRange(ref range, worksheet)) return;
            if (!hasWs) worksheet = range.Worksheet;

            // 获取放置位置
            IGH_Goo gooP = null;
            if (!DA.GetData(2, ref gooP)) return;
            ExRange placement = new ExRange();
            if (!gooR.TryGetRange(ref placement, worksheet)) return;

            // 获取颜色设置,默认为黑色
            Sd.Color color = Sd.Color.Black;
            DA.GetData(3, ref color);

            // 获取线条粗细设置,默认为1.0
            double weight = 1.0;
            DA.GetData(4, ref weight);

            // 获取激活状态
            bool activate = false;
            DA.GetData(5, ref activate);

            // 如果激活,则添加迷你图
            if (activate) range.AddSparkLine(placement, color, weight);

            // 设置输出
            DA.SetData(0, range);
        }

        /// <summary>
        /// 提供组件的图标
        /// </summary>
        protected override System.Drawing.Bitmap Icon
        {
            get
            {
                // 你可以向项目资源添加图像文件并像这样访问它们:
                // return Resources.IconForThisComponent;
                return Properties.Resources.BB_Cell_Sparkline_01;
            }
        }

        /// <summary>
        /// 获取此组件的唯一ID。发布后不要更改此ID。
        /// </summary>
        public override Guid ComponentGuid
        {
            get { return new Guid("24529e60-47b1-4201-94c2-58f14682bab6"); }
        }
    }
}

这些注释解释了代码的主要部分和功能:

  1. 类的定义和继承关系
  2. 构造函数的作用
  3. 输入参数的注册和说明
  4. 主要的 SolveInstance 方法的工作流程
  5. 各个输入参数的获取和处理
  6. 迷你图的添加条件
  7. 图标和组件GUID的设置
举报

相关推荐

0 条评论