zoukankan      html  css  js  c++  java
  • 打断多段线 输入长度 打断

    #include "StdAfx.h"
    #include "FgPoly.h"
    #include "DwgDatabaseUtil.h"
    
    
    CFgPoly::CFgPoly()
    {
    }
    
    
    CFgPoly::~CFgPoly()
    {
    }
    AcDbObjectIdArray CFgPoly::FG(AcDbPolyline *pPolyline, double l)
    {
        AcDbObjectIdArray objArr;
        //获取多段线每个点
        int num = pPolyline->numVerts();
        //剩余点
        int SYnum = num;
        //移除点
        int YCnum = 1;
        //从序号中减去的数值 相当于已经减少了的点
        int Item = 0;
        //循环求每2点间距离
        for (int i = 0; i < num - 1; i++)
        {
            
            AcGePoint3d p1;
            pPolyline->getPointAt(i-Item, p1);
            double a = 0;
            pPolyline->getBulgeAt(i - Item, a);
            if (a!=0)
            {
                YCnum++;
                continue;
            }
            AcGePoint3d p2;
            pPolyline->getPointAt(i-Item + 1, p2);
            double distance;
            distance = p1.distanceTo(p2);
            acutPrintf(_T("
    多段线中第%d段直线的长度 %f"),i+1, distance);
            for (double temp = distance; temp > l; temp = temp - l)
            {
                AcGeVector3d vec;
                vec = p2 - p1;
                AcGePoint3d p3;
                vec = vec.normal();
                p3 = p1 + vec * l;
                //输出p3点
                acutPrintf(TEXT("
    截断点的坐标 %f,%f,%f"), p3.x, p3.y, p3.z);
                AcGePoint2d p12d = CDwgDatabaseUtil::converto2d(p1);
                AcGePoint2d p32d = CDwgDatabaseUtil::converto2d(p3);
                AcRxObject *obj = pPolyline->clone();
                AcDbPolyline *newPoly = new AcDbPolyline();
                newPoly =AcDbPolyline::cast(obj);
                for (int j = i; j < num-1; j++)
                {
                    newPoly->removeVertexAt(YCnum);
                }
                newPoly->addVertexAt(YCnum, p32d);
                pPolyline->addVertexAt(0, p32d);
                Item = Item - 1;
                for (int k = YCnum; k > 0;k--)
                {
                    pPolyline->removeVertexAt(1);
                    Item += 1;
                    YCnum--;
                    if (YCnum<1)
                    {
                        YCnum = 1;
                    }
                }
                
                CDwgDatabaseUtil::PostToModleSpace(newPoly);
                p1 = p3;
            }
    //         if (distance>l)
    //         {
    //             2 == pPolyline->numVerts();
    //             continue;
    //         }
            YCnum=YCnum+1;
        }
        return objArr;
    }
  • 相关阅读:
    2.5(他们其实都是图)
    食物链POJ1182
    LG P6748 『MdOI R3』Fallen Lord
    LG P4199 万径人踪灭
    LG P1912 [NOI2009]诗人小G
    LG P4381 [IOI2008]Island
    2020/8/9 模拟赛 T3 表格
    UOJ422 【集训队作业2018】小Z的礼物
    CF913F Strongly Connected Tournament
    LG P5643 [PKUWC2018]随机游走
  • 原文地址:https://www.cnblogs.com/xzh1993/p/4666448.html
Copyright © 2011-2022 走看看