【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_SparkColumn.cs

server/2024/10/9 15:16:51/

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

  1. 功能概述:
    这个组件允许用户在 Grasshopper 环境中为 Excel 工作表添加迷你图列。迷你图是一种小型的内嵌图表,通常用于显示数据趋势,非常适合在有限的空间内展示数据变化。

  2. 主要特点:

    • 自定义放置:用户可以指定迷你图列的具体放置位置。
    • 颜色定制:允许用户自定义迷你图的颜色。
    • 激活选项:提供一个开关来控制是否添加迷你图列。
  3. 输入参数:

    • 工作表:指定要操作的 Excel 工作表。
    • 数据范围:指定用于生成迷你图的数据范围。
    • 放置位置:指定迷你图列的放置位置(单个单元格范围)。
    • 颜色:设置迷你图的颜色(默认为黑色)。
    • 激活选项:控制是否添加迷你图列。
  4. 输出:

    • 处理后的 Excel 范围对象。
  5. 使用场景:
    这个组件特别适用于数据可视化和报告生成场景,例如:

    • 在财务报表中展示每月销售趋势。
    • 在产品性能报告中显示各项指标的变化。
    • 在科学研究中快速展示实验数据的变化趋势。
  6. 技术特点:

    • 继承自 GH_Ex_Rng__Base 类,可能复用了一些基础的 Excel 操作功能。
    • 使用 Grasshopper 的参数系统来处理输入和输出。
    • 组件暴露级别设置为 primary,表示这是一个主要的、常用的组件。
  7. 用户界面:

    • 组件在 Grasshopper 界面中显示为主要组件(primary exposure)。
    • 使用自定义图标(BB_Cell_Sparkline3_01)以便于识别。
  8. 实现细节:

    • 组件首先获取必要的输入数据(工作表、数据范围、放置位置、颜色)。
    • 然后检查是否激活添加迷你图列的功能。
    • 如果激活,调用 range.AddSparkColumn 方法来添加迷你图列。
    • 最后,将处理后的范围对象作为输出返回。
  9. 扩展性:

    • 通过修改 RegisterInputParams 方法,可以轻松添加新的输入参数。
    • SolveInstance 方法可以进行扩展,以实现更复杂的迷你图功能或其他数据可视化效果。

总的来说,这个组件为 Grasshopper 用户提供了一个强大而简单的工具,用于在 Excel 中快速添加迷你图列,从而增强数据的可视化效果。它将 Excel 的高级图表功能无缝集成到 Grasshopper 的参数化设计环境中,使得数据分析和报告生成过程更加高效和直观。这对于需要频繁生成数据报告或进行数据可视化的用户来说是一个非常有价值的工具。

Flow diagram

GH_Ex_Ana_SparkColumn类的流程图:

Yes
No
Start / 开始
Initialize Component / 初始化组件
Solve Instance / 解决实例
Get Worksheet / 获取工作表
Get Data Range / 获取数据范围
Get Placement Range / 获取放置范围
Get Color / 获取颜色
Get Activate Flag / 获取激活标志
Activate? / 是否激活?
Add Spark Column / 添加迷你图列
Skip / 跳过
Set Output / 设置输出
End / 结束

说明:

  1. Start / 开始: 流程开始
  2. Initialize Component / 初始化组件: 对应构造函数 GH_Ex_Ana_SparkColumn()
  3. Solve Instance / 解决实例: 对应 SolveInstance(IGH_DataAccess DA) 方法
  4. Get Worksheet / 获取工作表: DA.GetData(0, ref gooS)gooS.TryGetWorksheet(ref worksheet)
  5. Get Data Range / 获取数据范围: DA.GetData(1, ref gooR)gooR.TryGetRange(ref range, worksheet)
  6. Get Placement Range / 获取放置范围: DA.GetData(2, ref gooP)gooR.TryGetRange(ref placement, worksheet)
  7. Get Color / 获取颜色: DA.GetData(3, ref color)
  8. Get Activate Flag / 获取激活标志: DA.GetData(4, ref activate)
  9. Activate? / 是否激活?: if (activate)
  10. Add Spark Column / 添加迷你图列: range.AddSparkColumn(placement, color)
  11. Skip / 跳过: 如果不激活,跳过添加迷你图列
  12. Set Output / 设置输出: DA.SetData(0, range)
  13. End / 结束: 流程结束

这个流程图展示了组件的主要执行步骤,包括数据获取、条件判断和结果输出。每个步骤都有中英双语说明,并且对应到代码中的相关部分。

Description

  1. 构造函数
public GH_Ex_Ana_SparkColumn(): base("Sparkcolumn", "Spark","Add a Sparkline Column",Constants.ShortName, Constants.SubAnalysis)
{
}

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

  • “Sparkcolumn” 是组件的全名
  • “Spark” 是简称
  • “Add a Sparkline Column” 是描述
  • Constants.ShortNameConstants.SubAnalysis 可能是定义组件分类的常量
  1. Exposure 属性
public override GH_Exposure Exposure
{get { return GH_Exposure.primary; }
}

解释:
这个属性设置组件在Grasshopper界面中的显示级别。
GH_Exposure.primary 表示这是一个主要组件,将在工具栏中prominently显示。
// This property sets the display level of the component in the Grasshopper interface.
// GH_Exposure.primary indicates that this is a main component and will be prominently displayed in the toolbar.

  1. RegisterInputParams 方法
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{base.RegisterInputParams(pManager);pManager.AddGenericParameter("Placement", "P", "A single Cell Range to place the sparkline", GH_ParamAccess.item);pManager.AddColourParameter("Color", "C", "The Sparkline color", GH_ParamAccess.item, Sd.Color.Black);pManager[3].Optional = true;pManager.AddBooleanParameter("Activate", "_A", "If true, the component will be activated", GH_ParamAccess.item, false);pManager[4].Optional = true;
}

解释:
这个方法注册组件的输入参数。

  • 调用基类方法注册基本参数
  • 添加"Placement"参数:指定迷你图的放置位置
  • 添加"Color"参数:指定迷你图的颜色,默认为黑色
  • 添加"Activate"参数:控制组件是否激活,默认为false
  • 将Color和Activate参数设置为可选
    // This method registers the input parameters for the component.
    // It adds parameters for placement, color, and activation, with color and activation being optional.
  1. RegisterOutputParams 方法
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{base.RegisterOutputParams(pManager);
}

解释:
这个方法注册组件的输出参数。在这里,它只调用基类方法,可能是在基类中已经定义了所需的输出参数。

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

解释:
这是组件的核心方法,执行主要的逻辑处理。让我们逐步分析其中的关键部分:

a. 获取工作表

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

这部分尝试从输入获取Excel工作表。
// This part attempts to retrieve the Excel worksheet from the input.

b. 获取数据范围

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;

这部分获取用于生成迷你图的数据范围。
// This section retrieves the data range used to generate the sparkline.

c. 获取放置位置

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

这部分获取迷你图的放置位置。
// This part gets the placement location for the sparkline.

d. 获取颜色和激活状态

Sd.Color color = Sd.Color.Black;
DA.GetData(3, ref color);bool activate = false;
DA.GetData(4, ref activate);

获取用户指定的颜色和是否激活组件的标志。
// Retrieves the user-specified color and the flag indicating whether to activate the component.

e. 添加迷你图列

if (activate) range.AddSparkColumn(placement, color);

如果激活,则在指定位置添加迷你图列。
// If activated, adds a sparkline column at the specified location.

f. 设置输出

DA.SetData(0, range);

将处理后的范围对象作为输出返回。
// Returns the processed range object as output.

  1. Icon 属性
protected override System.Drawing.Bitmap Icon
{get{return Properties.Resources.BB_Cell_Sparkline3_01;}
}

解释:
这个属性返回组件在Grasshopper界面中显示的图标。

  1. ComponentGuid 属性
public override Guid ComponentGuid
{get { return new Guid("eec5041f-61eb-4b7e-8d3a-6f56b46c8718"); }
}

解释:
这个属性返回组件的唯一标识符。这个GUID在组件发布后不应更改,用于确保组件的唯一性。
// This property returns the unique identifier for the component.
// This GUID should not be changed after the component is published to ensure its uniqueness.

总结:
这个组件展示了如何在Grasshopper中创建一个与Excel交互的自定义组件。它通过获取用户输入的各种参数(如工作表、数据范围、放置位置、颜色等),来在Excel中添加迷你图列。这种方法很好地展示了如何将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
{public class GH_Ex_Ana_SparkColumn : GH_Ex_Rng__Base{/// <summary>/// 初始化 GH_Ex_An_SparkColumn 类的新实例。/// </summary>public GH_Ex_Ana_SparkColumn(): base("Sparkcolumn", "Spark","Add a Sparkline Column",Constants.ShortName, Constants.SubAnalysis){// 构造函数调用基类构造函数,设置组件的名称、昵称、描述和类别}/// <summary>/// 设置组件的暴露级别。/// </summary>public override GH_Exposure Exposure{get { return GH_Exposure.primary; } // 将组件设置为主要级别,在工具栏中prominently显示}/// <summary>/// 注册此组件的所有输入参数。/// </summary>protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager){base.RegisterInputParams(pManager); // 调用基类方法注册基本参数pManager.AddGenericParameter("Placement", "P", "A single Cell Range to place the sparkline", GH_ParamAccess.item); // 添加放置位置参数pManager.AddColourParameter("Color", "C", "The Sparkline color", GH_ParamAccess.item, Sd.Color.Black); // 添加颜色参数,默认黑色pManager[3].Optional = true; // 设置颜色参数为可选pManager.AddBooleanParameter("Activate", "_A", "If true, the component will be activated", GH_ParamAccess.item, false); // 添加激活参数pManager[4].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); // 获取颜色参数bool activate = false;DA.GetData(4, ref activate); // 获取激活参数if (activate) range.AddSparkColumn(placement, color); // 如果激活,则添加迷你图列DA.SetData(0, range); // 设置输出数据}/// <summary>/// 为组件提供一个图标。/// </summary>protected override System.Drawing.Bitmap Icon{get{// 你可以将图像文件添加到项目资源中并像这样访问它们:// return Resources.IconForThisComponent;return Properties.Resources.BB_Cell_Sparkline3_01; // 返回组件的图标}}/// <summary>/// 获取此组件的唯一ID。发布后不要更改此ID。/// </summary>public override Guid ComponentGuid{get { return new Guid("eec5041f-61eb-4b7e-8d3a-6f56b46c8718"); } // 返回组件的唯一标识符}}
}

这些注释详细解释了代码的每个部分,包括:

  1. 类的整体结构和继承关系
  2. 构造函数的作用和参数设置
  3. 输入参数的注册过程和每个参数的含义
  4. 输出参数的注册
  5. SolveInstance 方法中的详细步骤,包括数据获取、处理和输出
  6. 图标和组件GUID的设置及其重要性

http://www.ppmy.cn/server/106623.html

相关文章

谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程

文章目录 一&#xff0c;基本概念二&#xff0c;消息从producer到consumer的过程 一&#xff0c;基本概念 RabbitMQ是一个流行的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。以下是RabbitMQ的一些基本概念&#xff1a; Broker&#x…

92.WEB渗透测试-信息收集-Google语法(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;91.WEB渗透测试-信息收集-Google语法&#xff08;5&#xff09; 监控的漏洞也有很多 打…

python从入门到精通:异常操作、模块操作及包操作

目录 1、异常概念 2、异常的捕获方法 3、异常的传递 4、python模块 4.1、模块的导入 4.2、自定义模块 5、python包 5.1、自定义python包 5.2、安装第三方包 1、异常概念 当检测到一个错误时&#xff0c;python解释器会无法执行&#xff0c;反而出现一些错误的提示&a…

简单的qml 属性浏览器

简单的qml 属性浏览器 Github qt-quick-qml-property-browser 有用的话点个star 基于quick2 TableView实现&#xff0c;主要思想是根据model type role 的数据确认该项的类型&#xff0c; 使用Loader分类别加载对应类型的组件&#xff08;string、int、double、bool和enum&…

CyberScraper-2077+simple-one-api:使用大模型爬虫

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

岩土工程中的渗流问题:有限单元法的理论与实践

有限单元法在岩土工程问题中应用非常广泛&#xff0c;很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便&#xff0c;但其使用对用户来说往往是一个“黑箱子”。相比而言&#xff0c;开源的有限元程序计算方法透明、计算过程可控&#xff0c;…

Java IO精髓:高效块读写入技术深入解析

文件的复制 首先我们先用昨天学习的知识来完成文件的复制,使用read和write方法来完成。 public static void main(String[] args) throws IOException {FileInputStream fis new FileInputStream("./image.png");FileOutputStream fos new FileOutputStream("…

DDM分库分表,批量更新性能调优

场景&#xff1a;全量更新六千万的数据 方式一&#xff1a;循环update语句&#xff08;效率低&#xff09; 首次用的这种方式&#xff0c;DDM解析后&#xff0c;利用show processList查看数据库&#xff0c;还是单条update执行&#xff0c; 单批次1000条&#xff0c;耗时9~1…