首页 > 其他 > 详细

ObjectARX中三维多段线转二维多段线的方法

时间:2020-03-10 01:44:03      阅读:64      评论:0      收藏:0      [点我收藏+]

Acad::ErrorStatus

AcDb3dPolylineToAcDb2dPolyline(AcDbObjectId objId, int flag /* =0 */)
{
 
    Acad::ErrorStatus es;
    AcDbEntity *pEnt = NULL;
    double elev = 0.0;
    es = acdbOpenObject(pEnt, objId, AcDb::kForWrite);
    int i = 0;
    if (pEnt->isKindOf(AcDb3dPolyline::desc()))
    {
        AcDb2dPolyline *pNewline = new AcDb2dPolyline();
        AcDb3dPolyline *pPline = AcDb3dPolyline::cast(pEnt);
        AcDbObjectIterator *pItr = pPline->vertexIterator();
 
        for (pItr->start(); !pItr->done(); pItr->step())
        {
            AcDb3dPolylineVertex *pVertex = NULL;
            AcDbObjectId vId = pItr->objectId();
            acdbOpenObject(pVertex, vId, AcDb::kForRead);
            AcDb::Vertex3dType verType = pVertex->vertexType();
            if (verType != AcDb::k3dControlVertex)
            {
                i++;
                AcDb2dVertex *p2dVertex = new AcDb2dVertex(pVertex->position());
                p2dVertex->setXData(pVertex->xData());
                pNewline->appendVertex(p2dVertex);
                p2dVertex->close();
            }
            if (flag == 1)
            {
                elev += pVertex->position().z;
            }
 
            pVertex->close();
        }
        delete pItr;
        pItr = 0;
        double eleva = elev / i;
 
        pNewline->setElevation(eleva);
        pNewline->setPropertiesFrom(pPline);
        if (pPline->isClosed())
        {
            pNewline->makeClosed();
        }
        pNewline->setXData(pPline->xData());
        m_DbUtil.PostToModelSpace(pNewline);
        pPline->erase();
 
    }
    pEnt->close();
 
    return es;
}

ObjectARX中三维多段线转二维多段线的方法

原文:https://www.cnblogs.com/mjgw/p/12452541.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!