【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_SparkLine.cs

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

迷你图列(Sparkline Column)和迷你图(Sparkline)确实有一些区别。让我为您解释这两者的主要区别:

  1. 展示方式:

    • 迷你图(Sparkline):通常是一个小型的内嵌图表,可以放在单个单元格内。它可以是折线图、柱状图或赢/输图。
    • 迷你图列(Sparkline Column):特指柱状图样式的迷你图,每个数据点用一个小柱子表示。
  2. 数据表现:

    • 迷你图:可以灵活地表现各种类型的数据趋势,包括连续的变化。
    • 迷你图列:更适合展示离散的数据点或比较不同类别的数值。
  3. 视觉效果:

    • 迷你图:可以是连续的线条(折线图),也可以是分离的柱状或点状。
    • 迷你图列:总是由一系列竖直的小柱子组成。
  4. 适用场景:

    • 迷你图:适用于展示连续数据的趋势,如股票价格变化、温度变化等。
    • 迷你图列:更适合比较不同类别或时间点的单一数值,如月度销售额比较。
  5. 定制选项:

    • 迷你图:通常有更多的定制选项,如选择不同的图表类型(线形、柱状、赢/输)。
    • 迷你图列:定制选项可能相对较少,主要集中在颜色、宽度等方面。
  6. 在Excel中的实现:

    • 迷你图:Excel提供了多种类型的迷你图供选择。
    • 迷你图列:是迷你图的一种特定类型,专指柱状图样式。
  7. 数据密度:

    • 迷你图:可以在有限的空间内展示较多的数据点。
    • 迷你图列:由于每个数据点都用一个柱子表示,可能在同样的空间内展示较少的数据点。
  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 方法的主要步骤。

是 Yes
否 No
是 Yes
否 No
是 Yes
否 No
是 Yes
否 No
开始 Start
获取工作表 Get Worksheet
工作表有效? Worksheet valid?
获取数据范围 Get Data Range
结束 End
数据范围有效? Data Range valid?
获取放置位置 Get Placement
放置位置有效? Placement valid?
获取颜色和权重 Get Color and Weight
获取激活状态 Get Activation Status
是否激活? Activated?
添加迷你图 Add Sparkline
设置输出 Set Output
结束 End

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

  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的设置
  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmywillstronger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值