【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondUnique.cs

这段代码定义了一个名为 GH_Ex_Ana_CondUnique 的 Grasshopper 组件。以下是该组件的功能和介绍:

功能介绍:
这个组件是用于在 Excel 范围内添加基于唯一值的条件格式。它允许用户高亮显示工作表中的唯一值或非唯一值。

主要特点:

  1. 条件格式化:基于唯一值对 Excel 范围应用条件格式。
  2. 颜色选择:允许用户指定高亮显示的颜色。
  3. 翻转选项:可以选择高亮显示唯一值或非唯一值。
  4. 清除功能:可以清除现有的条件格式。
  5. 激活控制:用户可以控制是否应用条件格式。

组件参数:

  • 输入:

    1. 工作表(Worksheet)
    2. 范围(Range)
    3. 单元格颜色(Cell Color)
    4. 翻转选项(Flip)
    5. 清除选项(Clear)
    6. 激活选项(Activate)
  • 输出:

    1. 更新后的范围(Updated Range)

使用流程:

  1. 用户提供 Excel 工作表和要应用格式的范围。
  2. 设置高亮颜色、是否翻转(高亮非唯一值)、是否清除现有条件、是否激活。
  3. 如果激活,组件将应用或清除条件格式。
  4. 输出更新后的范围。

这个组件是 Grasshopper 环境中用于 Excel 数据分析和可视化的工具之一,特别适用于需要快速识别数据集中唯一或重复值的场景。它提供了一种程序化的方式来应用 Excel 的条件格式功能,使数据分析和展示更加高效和灵活。

Flow diagram

Yes / 是
Yes / 是
No / 否
No / 否
Start / 开始
Initialize Component / 初始化组件
Register Input Parameters / 注册输入参数
Register Output Parameters / 注册输出参数
SolveInstance Method / SolveInstance 方法
Get Worksheet Data / 获取工作表数据
Get Range Data / 获取范围数据
Get Color, Flip, Clear, Activate / 获取颜色,翻转,清除,激活参数
Activate? / 是否激活?
Clear? / 是否清除?
Clear Conditions / 清除条件
Add Conditional Unique / 添加条件唯一格式
Set Output Data / 设置输出数据
End / 结束

这个更新后的流程图包含了每个步骤的中英文标签,更好地对应了代码中的英文和您要求的中文说明。图表展示了从组件初始化到条件格式应用的整个过程,包括数据获取、条件检查和最终的输出设置。

每个节点都包含了英文说明和对应的中文翻译,使得流程图更容易理解和跟踪代码的执行过程。开始和结束节点使用了不同的样式以突出显示。

这个流程图应该能够清晰地展示 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 方法来注册基本参数。
  • 然后添加特定于此组件的参数:
    1. 单元格颜色(Cell Color):用于高亮显示的颜色。
    2. 翻转(Flip):决定是否高亮显示非唯一值。
    3. 清除(Clear):是否清除现有条件。
    4. 激活(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);
    }

说明:

  • 这是组件的核心方法,执行主要的逻辑。
  • 步骤包括:
    1. 获取工作表和范围数据。
    2. 获取用户输入的颜色、翻转、清除和激活选项。
    3. 如果激活,则应用条件格式:
      • 如果需要清除,先清除现有条件。
      • 添加基于唯一值的条件格式。
    4. 将更新后的范围设置为输出。
    /// <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"); } // 返回组件的唯一标识符
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hmywillstronger

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

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

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

打赏作者

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

抵扣说明:

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

余额充值