一、前言
本文章的代码中会使用一段将实体添加到数据库的封装方法,如果想复制源码的话可以翻翻本专栏前面的代码会有讲到如何封装实体添加到数据库。
二、开始
1.右击项目>>添加>>类
2.cube.h、cube.ccp文件代码分别如下
cube.h
#pragma once
class cube
{
public:
static void InitApp();
static void UnLoad();
};
cube.ccp
#include "stdafx.h"
#include "aced.h"
#include "dbents.h"
#include "dbsymtb.h"
#include "acdb.h"
#include "geassign.h"
#include "cube.h"
#include "MDatabase.h"
void CreateCube();
void cube::InitApp() {
acedRegCmds->addCommand(L"cube",L"CreateCube",L"CreateCube",ACRX_CMD_TRANSPARENT, CreateCube);
}
void cube::UnLoad() {
acedRegCmds->removeGroup(_T("cube"));
}
void CreateCube() {
double left_leading_X;
acedGetReal(L"/n请输入立方体中心点X坐标:", &left_leading_X);
double left_leading_Y;
acedGetReal(L"/n请输入立方体中心点Y坐标:", &left_leading_Y);
double left_leading_Z;
acedGetReal(L"/n请输入立方体中心点Z坐标:", &left_leading_Z);
double sideLength;
acedGetReal(L"/n请输入立方体边长", &sideLength);
AcGePoint3d basePoint = {left_leading_X,left_leading_Y,left_leading_Z};
// 创建多边形面
AcDbPolyFaceMesh* pMesh = new AcDbPolyFaceMesh();
pMesh->setDatabaseDefaults(acdbHostApplicationServices()->workingDatabase());
// 计算立方体的八个顶点
double halfLength = sideLength / 2.0;
AcGePoint3d points[8] = {
//底面左前点
basePoint + AcGeVector3d(-halfLength, -halfLength, -halfLength),
//底面右前点
basePoint + AcGeVector3d(halfLength, -halfLength, -halfLength),
//底面右后点
basePoint + AcGeVector3d(halfLength, halfLength, -halfLength),
//底面左后点
basePoint + AcGeVector3d(-halfLength, halfLength, -halfLength),
//顶面左前点
basePoint + AcGeVector3d(-halfLength, -halfLength, halfLength),
//顶面右前点
basePoint + AcGeVector3d(halfLength, -halfLength, halfLength),
//顶面右后点
basePoint + AcGeVector3d(halfLength, halfLength, halfLength),
//顶面左后点
basePoint + AcGeVector3d(-halfLength, halfLength, halfLength)
};
// 添加顶点到网格
for (int i = 0; i < 8; i++) {
AcDbPolyFaceMeshVertex* pVertex = new AcDbPolyFaceMeshVertex(points[i]);
pMesh->appendVertex(pVertex); // 使用指针添加顶点
}
// 添加面 (6个面)
pMesh->appendFaceRecord(new AcDbFaceRecord(1, 2, 3, 4)); // 底面
pMesh->appendFaceRecord(new AcDbFaceRecord(5, 6, 7, 8)); // 顶面
pMesh->appendFaceRecord(new AcDbFaceRecord(1, 2, 6, 5)); // 前面
pMesh->appendFaceRecord(new AcDbFaceRecord(2, 3, 7, 6)); // 右面
pMesh->appendFaceRecord(new AcDbFaceRecord(4, 3, 7, 8)); // 后面
pMesh->appendFaceRecord(new AcDbFaceRecord(1, 4, 8, 5)); // 左面
MDatabase database;
database.AddEntityToModelSpace(pMesh);
// 关闭网格
pMesh->close();
}
3.修改acrxEntryPoint.cpp文件
三、测试效果
1.点击 生成>>生成解决方案
2.启动项目
3.Autocad输入命令 appload
4.选中项目生成的ARX文件
5.Autocad输入命令 createcube
6.输入立方体中心点X,Y,Z坐标与边长
7.效果图如下