天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 8|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    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中三维多段线转二维多段线的方法
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:52 , Processed in 0.061680 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表