首页 > 其他分享 >cad.net CurveInfo类

cad.net CurveInfo类

时间:2025-01-17 18:43:34浏览次数:1  
标签:OriginalC3d return cc CurveInfo net Curve3d public cad

曲线信息类

主要是缓存一层包围盒

1,存档曲线Curve
2,复合曲线CompositeCurve3d
3,单元曲线Curve3d
验证包围盒在这里:
https://www.cnblogs.com/JJBox/p/18677417

public class CurveInfo : DRect {
    public int RegionColor = 0; // 染色:斜区0,横区1,竖区2
    public MyGroup Group { get; }
    public ConcurrentBag<double> Paramss { get; }
    public Curve3d OriginalC3d { get; }

    public CurveInfo(Curve3d cc) {
        OriginalC3d = cc;
        _left = cc.OrthoBoundBlock.GetMinimumPoint().Y;
        _right = cc.OrthoBoundBlock.GetMaximumPoint().Y;
        _bottom = cc.OrthoBoundBlock.GetMinimumPoint().X;
        _top = cc.OrthoBoundBlock.GetMaximumPoint().X;
        Group = new(0);
        Paramss = new();
    }

    public CurveInfo(Curve curve) {
        var cc = curve.GetGeCurve();
        OriginalC3d = cc;
        _left = cc.OrthoBoundBlock.GetMinimumPoint().Y;
        _right = cc.OrthoBoundBlock.GetMaximumPoint().Y;
        _bottom = cc.OrthoBoundBlock.GetMinimumPoint().X;
        _top = cc.OrthoBoundBlock.GetMaximumPoint().X;
        Group = new(0);
        Paramss = new();
    }

    // 根据曲线参数打断
    public IEnumerable<CurveInfo> BreakCurves() {
        var array = Paramss.ToArray();
        Array.Sort(array);
        return GetSplitCurvesToInfo(array);
    }

    public IEnumerable<CurveInfo> GetSplitCurvesToInfo(double[] paramss) {
        Curve3d[] resultArray = null;
        GetSplitCurves(paramss, ref resultArray);
        return resultArray.Select(curve3d => new CurveInfo(curve3d));
    }

    // 断分,扫描线碰撞需要
    // 从后面往前打断
    // 打断之后只有两个成员,头不输出,用来继续打断.
    public void GetSplitCurves(double[] paramss, ref Curve3d[] resultArray) {
        int size = paramss.Length + 1;
#if NET80
        resultArray = stackalloc Curve3d[size];
#else
        resultArray = new Curve3d[size];
#endif
        Curve3d cur = OriginalC3d;
        for (int i = paramss.Length - 1; i >= 0; i--) {
            Curve3d[] cs = cur.GetSplitCurves(paramss[i]);
            resultArray[i + 1] = cs.Last();
            cur = cs.First();
        }
        resultArray[0] = cur;
    }

    // TODO 炸开失败要返回本体,这里炸开有这个功能吗?
    // 单元曲线:复合曲线炸开而来.
    static Interval _interval = new Interval(Tolerance.Global.EqualPoint);
    public Curve3d[] Explode() {
        return OriginalC3d.Explode(_interval);
    }
    public IEnumerable<CurveInfo> ExplodeToInfo() {
        return Explode().Select(curve3d => new CurveInfo(curve3d));
    }

    // 隐式转换
    public static implicit operator Curve3d(CurveInfo m) {
        return m.OriginalC3d;
    }
    public static implicit operator CompositeCurve3d(CurveInfo m) {
        return Curve.CreateFormGeCurve(m.OriginalC3d))
                .ToCompositeCurve3d();
    }
    public static implicit operator Curve(CurveInfo m) {
        return Curve.CreateFormGeCurve(m.OriginalC3d));
    }

    public bool HasPoint(Point3d pt) {
        return OriginalC3d.StartPoint.IsEqualTo(pt, Tolerance.Global)
            || OriginalC3d.EndPoint.IsEqualTo(pt, Tolerance.Global);
    }
    public bool HasTwoPoint(CurveInfo other) {
        return (OriginalC3d.StartPoint.IsEqualTo(other.OriginalC3d.StartPoint, Tolerance.Global)
            && OriginalC3d.EndPoint.IsEqualTo(other.OriginalC3d.EndPoint, Tolerance.Global))
            || (OriginalC3d.StartPoint.IsEqualTo(other.OriginalC3d.EndPoint, Tolerance.Global)
            && OriginalC3d.EndPoint.IsEqualTo(other.OriginalC3d.StartPoint, Tolerance.Global));
    }
}

标签:OriginalC3d,return,cc,CurveInfo,net,Curve3d,public,cad
From: https://www.cnblogs.com/JJBox/p/18677524

相关文章

  • 基于注意力机制和残差网络的轻量级图像分类模型(AR-LiteNet)
    新模型设计:基于注意力机制和残差网络的轻量级图像分类模型(AR-LiteNet)目录新模型设计:基于注意力机制和残差网络的轻量级图像分类模型(AR-LiteNet)引言1.AR-LiteNet简介2.AR-LiteNet的数学原理2.1卷积操作2.2通道注意力机制2.3残差连接2.4损失函数3.......
  • 基于 KubeSphere v4 的 Kubernetes 生产环境部署架构设计及成本分析
    本文作者:运维有术。今天分享的主题是:如何规划设计一个高可用、可扩展的中小规模生产级K8s集群?通过本文的指导,您将掌握以下设计生产级K8s集群的必备技能:集群规划能力合理规划节点规模和资源配置设计高可用的控制平面、计算平面、存储平面架构规划网络拓扑和安全策略制......
  • 【韩国汉阳大学主办】第六届土木建筑及灾害防控国际学术会议暨第三届智慧城市建筑与基
    第六届土木建筑及灾害防控国际学术会议暨第三届智慧城市建筑与基础设施耐久性国际学术会议(CADPC&DuraBI2025)20256thInternationalConferenceonCivil,ArchitectureandDisasterPreventionandControl&3rdInternationalConferenceonDurabilityofBuildinga......
  • MiniMax TTS新模型T2A-01-HD:情感控制10秒克隆限时免费;真人表演+文本命令,Kinetix精准生
      开发者朋友们大家好: 这里是**「RTE开发者日报」**,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • OpenAI 宕机思考丨Kubernetes 复杂度带来的服务发现系统的风险和应对措施
    作者:王建伟(正己)12月11日,OpenAI旗下AI聊天机器人平台ChatGPT、视频生成工具Sora及其面向开发人员的API自太平洋时间下午3点左右起发生严重中断,耗费约三个小时才顺利恢复所有服务。OpenAI在事后报告中写道,“该问题源自新部署的遥测服务,此项服务无意间压垮了Kuberne......
  • SautinSoft PDF Focus .Net 2024.12.18
    SautinSoftPDFFocus.NetisapowerfultoolfordevelopersneedingtoconvertPDFdocumentsintovariousformatslikeWord(DOCX,RTF),Excel(CSV,XLS,XLSX),HTML,XML,text,andimages(JPEG,PNG,TIFF,GIF,Bitmap).ItsupportsallPDFversionsfrom......
  • VoxelNet网络结构
    paper:https://arxiv.org/abs/1711.06396github:https://github.com/skyhehe123/VoxelNet-pytorch.git简介VoxelNet是一个端到端利用点云进行3D目标检测的网络,它的最大特征是把点云转成体素(voxel,所谓体素,其实就是网格,三维空间中的网格)形式再进行特征提取。VoxelNet填补了......
  • 基于阿里云容器服务Kubernetes版(ACK)| 容器化管理云上应用
    基于阿里云容器服务Kubernetes版(ACK)|容器化管理云上应用ACKACK的优势ACK的应用场景部署方案介绍部署操作资源准备一键部署释放资源测评体验在现行的大环境下,企业上云容器化应用托管已经逐渐成为主流,其中以能够自动部署、扩展、管理容器化应用以及能实现应用的快速......
  • .NET 中使用 JWT 进行身份验证和授权
    在.NET中使用JWT进行身份验证和授权在现代Web开发中,身份验证和授权是至关重要的,尤其是在构建分布式应用和微服务时。JSONWebToken(JWT)是一种非常流行的解决方案,用于在不同系统之间传递身份验证信息和授权信息。在本文中,我们将探讨如何在.NET中使用JWT,介绍如何创建......
  • 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多线程技术的
    背景我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今的QPS突破240次/秒,连接数突破4000,日请求数接近1000万。(PS:阿里云真贵啊)在这篇文章中,我将简要介绍我在技术上做了哪些工作,我是如何做到的。PS:虽......