⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createdbobj.cpp

📁 能在MDT5/6环境下对已经存在地曲面进行全部和局部区域展开
💻 CPP
字号:
#include "stdafx.h"
#include "StdArx.h"

#include "CreateDbObj.h"

#include "GeUtilities.h"

Acad::ErrorStatus 
createSpline(const AcGeNurbCurve3d& crv, AcDbSpline*& spl)
{
	AcGe::EntityId type;
	if (crv.isDegenerate(type)) {
		return Acad::eDegenerateGeometry;
	}

	int degree;
	Adesk::Boolean rational,periodic,closed;
	AcGeKnotVector knots;
	AcGePoint3dArray controlPoints;
	AcGeDoubleArray weights;
	int i;
	
	crv.getDefinitionData(degree,rational,periodic,knots,controlPoints,weights);
	closed = crv.isClosed();
	
	AcGeDoubleArray splknots;
	for(i=0;i<knots.length();i++)
		splknots.append(knots[i]);
	spl = new AcDbSpline(degree,rational,closed,periodic,controlPoints,splknots,weights);

	if (spl->isNull()) {
		return Acad::eNotNewlyCreated;
	} else {
		return Acad::eOk;
	}
}

Acad::ErrorStatus 
createSpline(const AcGeNurbCurve2d& crv, AcDbSpline*& spl, double z)
{
	AcGe::EntityId type;
	if (crv.isDegenerate(type)) {
		return Acad::eDegenerateGeometry;
	}

	int degree;
	Adesk::Boolean rational,periodic,closed;
	AcGeKnotVector knots;
	AcGePoint2dArray controlPoints2d;
	AcGePoint3dArray controlPoints;
	AcGeDoubleArray weights;
	int i;
	
	crv.getDefinitionData(degree,rational,periodic,knots,controlPoints2d,weights);
	closed = crv.isClosed();
	points2dTo3d(controlPoints2d,controlPoints,z);
	
	AcGeDoubleArray splknots;
	for (i=0; i<knots.length(); i++)
		splknots.append(knots[i]);
	spl = new AcDbSpline(degree,rational,closed,periodic,controlPoints,splknots,weights);

	if (spl->isNull()) {
		return Acad::eNotNewlyCreated;
	} else {
		return Acad::eOk;
	}
}


Acad::ErrorStatus 
createSpline(const AcGePoint3dArray& crv, AcDbSpline*& spl)
{
	spl = new AcDbSpline(crv);

	if (spl->isNull()) {
		return Acad::eNotNewlyCreated;
	} else {
		return Acad::eOk;
	}
}

Acad::ErrorStatus 
createSpline(const AcGePoint2dArray& crv, AcDbSpline*& spl, double z)
{
	AcGePoint3dArray crv3d;
	points2dTo3d(crv,crv3d);
	
	spl = new AcDbSpline(crv3d);
	
	if (spl->isNull()) {
		return Acad::eNotNewlyCreated;
	} else {
		return Acad::eOk;
	}
}

Acad::ErrorStatus 
createRegion(const ChGeLoop2d& loop,AcDbRegion*& pRg, int genType, double z)
{
	AcDbVoidPtrArray pLoop,pRgs;
	AcDbSpline *pSpl;
	AcDb3dPolyline *poly;
	AcDbLine *pLine;
	AcGePoint3dArray pnts;
	
	int i,len,j,jlen;
	len = loop.length();
	pLoop.setLogicalLength(0);
	for (i=0; i<len; i++) {
		if (loop[i].length()>1) {
			points2dTo3d(loop[i],pnts,z);
			if (genType==1) {
				pSpl = new AcDbSpline(pnts);
				pLoop.append(pSpl);
			} else if (genType==2) {
				poly = new AcDb3dPolyline(AcDb::k3dSimplePoly,pnts);
				pLoop.append(poly);
			} else if (genType==3) {
				jlen = loop[i].length();
				for (j=1; j<jlen; j++) {
					pLine = new AcDbLine(pnts[j-1],pnts[j]);
					pLoop.append(pLine);
				}
			}
		}
	}
	pRg->createFromCurves(pLoop,pRgs);
	len = pLoop.length();
	if (genType==1) {
		for (i=0; i<len; i++) {
			delete (AcDbSpline*)(pLoop[i]);
		}
	} else if (genType==2) {
		for (i=0; i<len; i++) {
			delete (AcDb3dPolyline*)(pLoop[i]);
		}
	} else if (genType==3) {
		for (i=0; i<len; i++) {
			delete (AcDbLine*)(pLoop[i]);
		}
	}
	len = pRgs.length();
	if (len != 1) {
		for (i=0; i<len; i++) {
			delete (AcDbRegion*)(pRgs[i]);
		}
		return Acad::eInvalidInput;
	}
	pRg = (AcDbRegion*)(pRgs[0]);
	
	return Acad::eOk;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -