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


    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;
    }
    

      

  • 相关阅读:
    篝火晚会
    SECHS
    emmc4.X boot1 and boot2
    imx6Q Android7.1 Udisk Mount
    imx6Q 4.1.15 Perf support
    imx6Q 4.1.15 Kgtp support
    imx6Q 4.1.15 early console support
    imx6Q USB OTG Host/Device纯软件切换
    iMX6Q DDR Stresstest
    iMX6Q PowerSave调试
  • 原文地址:https://www.cnblogs.com/laoxuGiser/p/8960650.html
Copyright © 2020-2023  润新知