久久国产精品国产精品_强行挺进朋友漂亮人妻身体_免费在线观看一级片_男女视频91_久久毛毛片_久久96国产精品久久久

技術支持 / 技術論壇 / 二次開發 / 【技術分享】【C#】用clipper實現多邊形偏置
【技術分享】【C#】用clipper實現多邊形偏置
freeter
帖子
1
精華
0
積分
12
二次開發 技術分享

    Clipper庫是一個開源的C++庫,專門用于線段和多邊形的裁剪以及偏置計算。它提供了一套簡單易用的API,允許開發人員快速地創建復雜的裁剪和偏置算法。參考鏈接:https://www.cnblogs.com/zhigu/p/11943118.html

    1.導入clpper庫

    2.編寫相關類

    由于clipper采用的是整型數據,可以通過適當的縮放數據來計算。同時指出Clipper庫能接受范圍為(4.6+18)的整數坐標值,支持擴展到非常高的精度。這說明我們可以放心得對極小數值進行較大倍數的縮放,不會造成算法的問題,類里采用的精度是1000。

    /// <summary>
    /// 偏置多邊形(clipper)
    /// </summary>
    internal class OffsetPolygon
    {
        /// <summary>
        /// clipper中的路徑
        /// </summary>
        internal List<IntPoint> Path { set; get; }=new List<IntPoint>();

        /// <summary>
        /// 偏置距離
        /// </summary>
        internal double OffsetDistance { set; get; }

        /// <summary>
        /// 精度
        /// </summary>
        internal double ClipperScale { set; get; } = 1000;

        internal OffsetPolygon(List<Point3> point3S, double offsetDistance)
        {
            for (int i = 0; i < point3S.Count; i++)
            {
                var x = Math.Round(point3S[i].X, 3) * 1000;
                var y = Math.Round(point3S[i].Y, 3) * 1000;
                this.Path.Add(new IntPoint(x,y));
            }
            this.OffsetDistance = offsetDistance;
        }


        internal List<IntPoint> Commit()
        {
            int miterLimit = 2;
            ClipperOffset co = new ClipperOffset(miterLimit); //向ClipperOffset對象添加一個路徑用來準備偏置
            co.AddPath(Path, JoinType.jtRound, EndType.etClosedPolygon);
            List<List<IntPoint>> paths=new List<List<IntPoint>>();
            co.Execute(ref paths,this.OffsetDistance*1000);
            var offsetPath = paths.First();
            return offsetPath;
        }

    3.使用類

                    var discretePointList = GetSelectFacePointSet(selectFace); //獲取多邊形點集
                    var cSys = selectFace.AskFaceData().Direction.InitializeZ(selectFace.AskFaceData().Point); 
                    discretePointList =discretePointList.Select(a => a.ToWcs(cSys)).ToList(); //點集轉換(轉換成所在平面的坐標)

                    OffsetPolygon offsetPolygon=new OffsetPolygon(discretePointList,2); //實例偏置類
                    var offsetIntPoints = offsetPolygon.Commit();
                    var offsetPoint3S = offsetIntPoints.Select(a => new Point3((double)a.X / 1000, (double)a.Y / 1000)).ToList();

                    //相對坐標轉回去
                    theUfSession.Csys.SetWcs(cSys.Create().Tag);
                    int inputCSys = UFConstants.UF_CSYS_ROOT_WCS_COORDS;
                    int outputCSys = UFConstants.UF_CSYS_ROOT_COORDS;
                    List<Point3> targetPoint3S=new List<Point3>();
                    for (int i = 0; i < offsetPoint3S.Count; i++)
                    {
                        Point3 outputPoint = new Point3();
                        theUfSession.Csys.MapPoint(inputCSys,offsetPoint3S[i],outputCSys,outputPoint);
                        targetPoint3S.Add(outputPoint);
                    }

                    //臨時線繪制
                    for (int i = 0; i < targetPoint3S.Count; i++)
                    {
                        CreateTempLine(targetPoint3S[i],targetPoint3S[(i+1)%targetPoint3S.Count]); 
                    }

效果圖:


925 0 2023-12-27 17:59:26
暫時還沒有回復評論

回復加入討論

回復
請選擇移動至版塊:
確認移動
主站蜘蛛池模板: 噜啊噜在线视频 | 最近2019中文字幕大全视频10 | 美女裸体色黄污视频网站 | 少妇性饥渴BBBBB搡BBBB | 欧美日本一道本一区二区 | 波多野结衣AV高清一区二区三区 | 丰满岳乱妇在线观看中字 | 无码午夜嘿嘿嘿 | 777米奇影视第四色 欧美无砖专区一中文字 | 韩国三级A视频在线观看 | 美女露100%奶头无遮挡 | 日日夜夜成人 | 亚洲午夜精品一区二区三区四区 | 亚洲国产综合精品2020 | 午夜无码片在线观看影视 | 好紧好大快点舒服使劲 | 看久久久久久A级毛片 | 欧美日韩精品视频一区二区三区 | 国产拍揄自揄精品视频 | 最好的2019中文大全在线观看 | 亚洲色欲色欲WWW | 免费国产污网站在线观看 | 欧美网站免费观看在线 | 狠狠色丁香婷婷综合尤物 | 少妇人妻88久久中文字幕 | 欧美激欧美啪啪片sm | 欧美又大又色又爽AAAA片 | 中文字幕高清在线观看 | 免费人成网站视频在线观看国内 | 欧美日本高清在线不卡区 | 亚洲午夜无码片在线观看影院百度 | 国产女人高潮抽搐叫床视频 | 99久热这里精品免费 | 国产精品一品二区三区的使用体验 | 上海富婆按摩高潮不断 | 97久久综合区小说区图片区 | 伊人久久大香线蕉综合啪小说 | 亚洲综合色噜噜狠狠网站超清 | 欧美日韩无线码在线观看 | 免费网禁呦萝资源网 | 又紧又大又爽精品一区二区 |