array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 objectarx 填充的分割 - 爱码网

objectarx 填充的分割

主要思路:找到填充边界集合:vecBo,然后把面积最大的边界找出来:bo1,用分割曲线和bo1通过boundary命令构成两个新的最大封闭边界,左边的记为 boLeft(红色部分),右边的记为boRight(绿色部分),在vecBo边界集合分开为:boLeft内部的边界,和boRight内部的边界。这样在分别填充的时候,就能有正确的填充边界集合。

下面放出代码:
通过选择填充求得填充边界集合:

static void GetHatchBo(AcDbHatch *pHatch,vector<AcDbEntity*>&vecBo)
    {
        Acad::ErrorStatus es;

        Adesk::Int32 LoopType;

        AcGeVoidPointerArray edgeptrAry;
        AcGeIntArray edgeTypesAry;

        AcGePoint2dArray vertices;
        AcGeDoubleArray bulges;

        //获得填充边界的数目
        int LoopNum = pHatch->numLoops();

        for (int i = 0; i < LoopNum; i++)
        {
            //获取边界类型
            LoopType = pHatch->loopTypeAt(i);
            //如果边界是多义线
            if (LoopType & AcDbHatch::kPolyline)
            {
                //取得边界定义数据(polyline)的顶点数组和凸度数组,它们是一一对应的
                es = pHatch->getLoopAt(i, LoopType, vertices, bulges);
                acutPrintf(L"\n多段线");
                //是不是根据这些顶点数组和凸度数组构造一条AcDb多义线取决于你
                AcDbPolyline *pl = new AcDbPolyline();

                GetPolyline(vertices, bulges, pl);

                vecBo.push_back(pl);
            }
            else
            {
                //几乎可以取得除polyline外的所有边界定义数据
                //第三个参数返回值是无值指针数组
                //第四个参数返回值是组成边界的每一条边的类型
                //它们也是一一对应的关系
                es = pHatch->getLoopAt(i, LoopType, edgeptrAry, edgeTypesAry);

                //遍历,因为每一条边界又可能由多种AcGe曲线构成
                for (int j = 0; j < edgeTypesAry.length(); j++)
                {

                    if (edgeTypesAry[j] == AcDbHatch::kLine)//直线
                    {
                        AcGeLineSeg2d *LnSeg = (AcGeLineSeg2d *)edgeptrAry[j];
                        acutPrintf(L"\n直线");
                        AcGePoint2d pt1 = LnSeg->startPoint();
                        AcGePoint2d pt2 = LnSeg->endPoint();

                        AcDbLine *line = new AcDbLine(AcGePoint3d(pt1.x,pt1.y,0), AcGePoint3d(pt2.x, pt2.y, 0));

                        vecBo.push_back(line);
                    }
                    //圆弧
                    else if (edgeTypesAry[j] == AcDbHatch::kCirArc)
                    {
                        AcGeCircArc2d *cirArc = (AcGeCircArc2d *)edgeptrAry[j];
                        acutPrintf(L"\n圆弧");
                        //可以根据数学圆弧构造相应的AcDb圆弧,取决于你(以下同)
                        AcGePoint2d center = cirArc->center();
                        double ra = cirArc->radius();
                        double angle1 = cirArc->startAng();
                        double angle2 = cirArc->endAng();
                        AcDbCircle *cir = new AcDbCircle(AcGePoint3d(center.x, center.y, 0), AcGeVector3d::kZAxis, ra);

                        vecBo.push_back(cir);

                    }
                    else if (edgeTypesAry[j] == AcDbHatch::kEllArc)//椭圆弧
                    {
                        AcGeEllipArc2d *ellArc = (AcGeEllipArc2d *)edgeptrAry[j];
                        acutPrintf(L"\n椭圆弧");

                        AcGePoint2d center = ellArc->center();
                        AcGeVector2d majorVec = ellArc->majorAxis();
                        double angle1 = ellArc->startAng();
                        double angle2 = ellArc->endAng();
                        double rad = ellArc->majorRadius();
                        double rad2 = ellArc->minorRadius();
                        

                        AcDbEllipse *ell = new AcDbEllipse(AcGePoint3d(center.x, center.y, 0), 
                            AcGeVector3d::kZAxis, AcGeVector3d(majorVec.x,majorVec.y,0), rad / rad2, angle1, angle2);
                        vecBo.push_back(ell);
                    }
                    else if (edgeTypesAry[j] == AcDbHatch::kSpline)//NURBS曲线
                    {
                        AcGeNurbCurve2d *spline = (AcGeNurbCurve2d *)edgeptrAry[j];
                        acutPrintf(L"\nNURBS曲线");

                        AcDbSpline * spl = NULL;

                        createSpline(*spline, spl, 0);

                        vecBo.push_back(spl);

                    }
                }
            }
        
            vertices.removeAll();
            bulges.removeAll();
            edgeptrAry.removeAll();
            edgeTypesAry.removeAll();
        }
    }
获得填充边界集合

相关文章: