打断多段线 输入长度 打断

#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("\n多段线中第%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("\n截断点的坐标 %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;
}

 

转载于:https://www.cnblogs.com/xzh1993/p/4666448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值