ARX方式创建三维实体 CAD作业9_1

原创辛苦,转载请注明!

编写一ObjectARX程序,使其能生成下图的三维实体,命令为MakeSolid。

ARX方式创建三维实体 CAD作业9_1_第1张图片

圆柱1:直径100,高度200;

圆柱2:直径50,长度200;

圆柱3:直径30,长度200;

球1:直径150;

方盒:端面为60×60正方形,高度200。

具体代码如下:原创辛苦,转载请注明!



MakeSolid.cpp

//
// ObjectARX defined commands

#include "StdAfx.h"
#include "StdArx.h"

// This is command 'MAKESOLID'
void BaiyangBaiyangMakeSolid()
{
	// TODO: Implement the command
	//创建对象并设置属性
	AcDb3dSolid *pSphere1=new AcDb3dSolid();
	//创建一个直径150的球体,球心默认为在原点
	pSphere1->createSphere(75);
	//创建一个圆柱实体1,高200,X方向半径为50,y方向半径为50
	AcDb3dSolid *pFrustum1=new AcDb3dSolid();
	pFrustum1->createFrustum(200,50,50,50);

	//创建圆柱实体2,高200,直径为50
	AcDb3dSolid *pFrustum2=new AcDb3dSolid();
	pFrustum2->createFrustum(200,25,25,25);

	//创建圆柱实体3,高200,直径为30
	AcDb3dSolid *pFrustum3=new AcDb3dSolid();
	pFrustum3->createFrustum(200,15,15,15);

	//创建圆柱实体1中需要挖去的立方体
	//立方体高200,底部为60X60的正方形
	AcDb3dSolid *pBox1=new AcDb3dSolid();
	pBox1->createBox(60,60,200);
	//上面创建的实体中心均默认为在原点,需要进行旋转、平移等操作
	//才能得到最后的图

	//对各个实体进行旋转、平移
	double PI=3.1415926;
	AcGeMatrix3d mr;//进行旋转操作的矩阵
	AcGeVector3d v(0,1,0);//沿Y轴旋转
	AcGePoint3d center(0,0,0);//进行旋转操作的中心
	mr.setToRotation(PI/2.0,v,center);//旋转方式设置为以原点为中心
	//沿Y轴旋转,旋转方向默认为逆时针

	//旋转圆柱体2、3
	pFrustum2->transformBy(mr);
	pFrustum3->transformBy(mr);

	//布尔运算求并
	//将球体、圆柱体1、圆柱体2并成一个实体并存到圆柱实体2的指针中
	pFrustum2->booleanOper(AcDb::kBoolUnite,pSphere1);
	pFrustum2->booleanOper(AcDb::kBoolUnite,pFrustum1);
	
	//将圆柱实体3、立方体1并成一个实体
	pFrustum3->booleanOper(AcDb::kBoolUnite,pBox1);

	//用并后的实体2减去并后的实体3
	pFrustum2->booleanOper(AcDb::kBoolSubtract,pFrustum3);

	//获取当前图形的块表指针
	AcDbBlockTable *pBlockTable;
	acdbHostApplicationServices()->workingDatabase()->getSymbolTable
		(pBlockTable,AcDb::kForRead);

	//获取当前图形的块表记录指针
	AcDbBlockTableRecord *pBlockTableRecord;
	pBlockTable->getAt(ACDB_MODEL_SPACE,
		pBlockTableRecord,AcDb::kForWrite);
	//关闭块表指针
	pBlockTable->close();
	//将对象写入块表记录指针
	AcDbObjectId pFrustum2ID;
	pBlockTableRecord->appendAcDbEntity(pFrustum2ID,pFrustum2);
	
	//写入完毕,关闭块表记录指针
	pBlockTableRecord->close();
	//设置图层
	pFrustum2->setLayer("0");
	//关闭之前创建所有对象
	pSphere1->close();
	pFrustum1->close();
	pFrustum2->close();
	pFrustum3->close();
	pBox1->close();
}


你可能感兴趣的:(ARX方式创建三维实体 CAD作业9_1)