码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-27 13:34:13      阅读:589      评论:0      收藏:0      [点我收藏+]

标签:data   iter   pac   ++   div   二维   for   close   rom   

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中三维多段线转二维多段线的方法

标签:data   iter   pac   ++   div   二维   for   close   rom   

原文地址:https://www.cnblogs.com/laoxuGiser/p/8960650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!