这段代码定义了一个名为 GH_Ex_Ana_CondUnique
的 Grasshopper 组件。以下是该组件的功能和介绍:
功能介绍:
这个组件是用于在 Excel 范围内添加基于唯一值的条件格式。它允许用户高亮显示工作表中的唯一值或非唯一值。
主要特点:
- 条件格式化:基于唯一值对 Excel 范围应用条件格式。
- 颜色选择:允许用户指定高亮显示的颜色。
- 翻转选项:可以选择高亮显示唯一值或非唯一值。
- 清除功能:可以清除现有的条件格式。
- 激活控制:用户可以控制是否应用条件格式。
组件参数:
-
输入:
- 工作表(Worksheet)
- 范围(Range)
- 单元格颜色(Cell Color)
- 翻转选项(Flip)
- 清除选项(Clear)
- 激活选项(Activate)
-
输出:
- 更新后的范围(Updated Range)
使用流程:
- 用户提供 Excel 工作表和要应用格式的范围。
- 设置高亮颜色、是否翻转(高亮非唯一值)、是否清除现有条件、是否激活。
- 如果激活,组件将应用或清除条件格式。
- 输出更新后的范围。
这个组件是 Grasshopper 环境中用于 Excel 数据分析和可视化的工具之一,特别适用于需要快速识别数据集中唯一或重复值的场景。它提供了一种程序化的方式来应用 Excel 的条件格式功能,使数据分析和展示更加高效和灵活。
Flow diagram
这个更新后的流程图包含了每个步骤的中英文标签,更好地对应了代码中的英文和您要求的中文说明。图表展示了从组件初始化到条件格式应用的整个过程,包括数据获取、条件检查和最终的输出设置。
每个节点都包含了英文说明和对应的中文翻译,使得流程图更容易理解和跟踪代码的执行过程。开始和结束节点使用了不同的样式以突出显示。
这个流程图应该能够清晰地展示 GH_Ex_Ana_CondUnique
类的主要执行流程,同时满足您对中英双语说明的要求。
Description
public class GH_Ex_Ana_CondUnique : GH_Ex_Rng__Base
{
/// <summary>
/// 初始化 GH_Ex_Ana_CondUnique 类的新实例。
/// Initializes a new instance of the GH_Ex_Ana_CondUnique class.
/// </summary>
public GH_Ex_Ana_CondUnique()
: base("Conditional Unique", "Unique",
"Add conditional formatting to a Range based on unique values",
Constants.ShortName, Constants.SubAnalysis)
{
}
说明:
- 这是组件的构造函数。它调用基类构造函数,设置组件的名称、昵称、描述和类别。
- “Conditional Unique” 是组件的全名,“Unique” 是简称。
- 描述说明了组件的功能:基于唯一值为 Range 添加条件格式。
/// <summary>
/// 设置组件的暴露级别。
/// Set Exposure level for the component.
/// </summary>
public override GH_Exposure Exposure
{
get { return GH_Exposure.secondary; }
}
说明:
- 这个属性定义了组件在 Grasshopper 界面中的可见性级别。
GH_Exposure.secondary
表示这是一个次要组件,通常在子菜单或高级选项中显示。
/// <summary>
/// 注册此组件的所有输入参数。
/// Registers all the input parameters for this component.
/// </summary>
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
base.RegisterInputParams(pManager);
pManager[1].Optional = true;
pManager.AddColourParameter("Cell Color", "C", "The cell highlight color", GH_ParamAccess.item, Sd.Color.LightGray);
pManager[2].Optional = true;
pManager.AddBooleanParameter("Flip", "F", "If true, non unique values will be highlighted", GH_ParamAccess.item, false);
pManager.AddBooleanParameter("Clear", "_X", "If true, the existing conditions will be cleared", GH_ParamAccess.item, false);
pManager.AddBooleanParameter("Activate", "_A", "If true, the condition will be applied", GH_ParamAccess.item, false);
pManager[5].Optional = true;
}
说明:
- 这个方法注册了组件的所有输入参数。
- 首先调用基类的
RegisterInputParams
方法来注册基本参数。 - 然后添加特定于此组件的参数:
- 单元格颜色(Cell Color):用于高亮显示的颜色。
- 翻转(Flip):决定是否高亮显示非唯一值。
- 清除(Clear):是否清除现有条件。
- 激活(Activate):是否应用条件。
- 部分参数被设置为可选(Optional)。
/// <summary>
/// 注册此组件的所有输出参数。
/// Registers all the output parameters for this component.
/// </summary>
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
base.RegisterOutputParams(pManager);
}
说明:
- 这个方法注册组件的输出参数。
- 在这个案例中,它只是调用基类的
RegisterOutputParams
方法,没有添加额外的输出。
/// <summary>
/// 这是实际执行工作的方法。
/// This is the method that actually does the work.
/// </summary>
/// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</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;
DA.GetData(1, ref gooR);
ExRange range = new ExRange();
if (!gooR.TryGetRange(ref range, worksheet)) return;
if (!hasWs) worksheet = range.Worksheet;
// 获取颜色参数
Sd.Color color = Sd.Color.LightGray;
DA.GetData(2, ref color);
// 获取翻转选项
bool flip = false;
DA.GetData(3, ref flip);
// 获取清除选项
bool clear = false;
DA.GetData(4, ref clear);
// 获取激活选项
bool activate = false;
DA.GetData(5, ref activate);
// 如果激活,执行条件格式化
if (activate)
{
if (clear) range.ClearConditions();
range.AddConditionalUnique(color, flip);
}
// 设置输出数据
DA.SetData(0, range);
}
说明:
- 这是组件的核心方法,执行主要的逻辑。
- 步骤包括:
- 获取工作表和范围数据。
- 获取用户输入的颜色、翻转、清除和激活选项。
- 如果激活,则应用条件格式:
- 如果需要清除,先清除现有条件。
- 添加基于唯一值的条件格式。
- 将更新后的范围设置为输出。
/// <summary>
/// 为组件提供一个图标。
/// Provides an Icon for the component.
/// </summary>
protected override System.Drawing.Bitmap Icon
{
get
{
return Properties.Resources.BB_Cond_Unique_01;
}
}
/// <summary>
/// 获取此组件的唯一ID。发布后请勿更改此ID。
/// Gets the unique ID for this component. Do not change this ID after release.
/// </summary>
public override Guid ComponentGuid
{
get { return new Guid("28ad7faa-df68-4797-a884-5869f6548bf5"); }
}
说明:
Icon
属性提供组件的图标。ComponentGuid
属性返回组件的唯一标识符,这对于 Grasshopper 识别和管理组件很重要。
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
{
// 定义一个基于 GH_Ex_Rng__Base 的 Grasshopper 组件
public class GH_Ex_Ana_CondUnique : GH_Ex_Rng__Base
{
/// <summary>
/// 初始化 GH_Ex_Ana_CondUnique 类的新实例。
/// </summary>
public GH_Ex_Ana_CondUnique()
: base("Conditional Unique", "Unique",
"Add conditional formatting to a Range based on unique values",
Constants.ShortName, Constants.SubAnalysis)
{
// 构造函数调用基类构造函数,设置组件名称、昵称、描述和类别
}
/// <summary>
/// 设置组件的暴露级别。
/// </summary>
public override GH_Exposure Exposure
{
get { return GH_Exposure.secondary; } // 设置为次要组件
}
/// <summary>
/// 注册此组件的所有输入参数。
/// </summary>
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
base.RegisterInputParams(pManager); // 调用基类方法注册基本参数
pManager[1].Optional = true; // 设置第二个参数为可选
pManager.AddColourParameter("Cell Color", "C", "The cell highlight color", GH_ParamAccess.item, Sd.Color.LightGray); // 添加颜色参数
pManager[2].Optional = true;
pManager.AddBooleanParameter("Flip", "F", "If true, non unique values will be highlighted", GH_ParamAccess.item, false); // 添加翻转选项
pManager[3].Optional = true;
pManager.AddBooleanParameter("Clear", "_X", "If true, the existing conditions will be cleared", GH_ParamAccess.item, false); // 添加清除选项
pManager[4].Optional = true;
pManager.AddBooleanParameter("Activate", "_A", "If true, the condition will be applied", 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;
DA.GetData(1, ref gooR); // 获取第二个输入参数(范围)
ExRange range = new ExRange();
if (!gooR.TryGetRange(ref range, worksheet)) return; // 尝试获取范围,如果失败则返回
if (!hasWs) worksheet = range.Worksheet; // 如果没有工作表,使用范围的工作表
Sd.Color color = Sd.Color.LightGray;
DA.GetData(2, ref color); // 获取高亮颜色
bool flip = false;
DA.GetData(3, ref flip); // 获取翻转选项
bool clear = false;
DA.GetData(4, ref clear); // 获取清除选项
bool activate = false;
DA.GetData(5, ref activate); // 获取激活选项
if (activate) // 如果激活
{
if (clear) range.ClearConditions(); // 如果需要清除,清除现有条件
range.AddConditionalUnique(color, flip); // 添加条件唯一格式
}
DA.SetData(0, range); // 设置输出数据为更新后的范围
}
/// <summary>
/// 为组件提供一个图标。
/// </summary>
protected override System.Drawing.Bitmap Icon
{
get
{
// 返回组件的图标
return Properties.Resources.BB_Cond_Unique_01;
}
}
/// <summary>
/// 获取此组件的唯一ID。发布后请勿更改此ID。
/// </summary>
public override Guid ComponentGuid
{
get { return new Guid("28ad7faa-df68-4797-a884-5869f6548bf5"); } // 返回组件的唯一标识符
}
}
}