首页 / C++ / C++ ARX二次开发-创建三维实体
C++ ARX二次开发-创建三维实体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ ARX二次开发-创建三维实体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3416字,纯文字阅读大概需要5分钟。
内容图文
二、本节课程
C++ ARX二次开发-创建三维实体
二、本节要讲解的知识点
1、arx提供的三类创建三维实体的方法:创建标准形状的实体、拉伸面域创建实体、旋转面域创建实体的例子。
2、布尔运算的使用例子。
三、具体内容
1、思路:AcDb3dSolid类,提供一个不包含任何参数的构造函数,用来创建一个“空”的实体,在构建对象AcDb3dSolid之后,要使用其成员函数来完成实体的创建。
(1)长方体:createBox函数用于创建长方体的,定义:
virtual Acad::ErrorStatus createBox(
double xLen,
double yLen,
double zLen
);
创建的是一个中心位于世界坐标系原点的长方体,长、宽和高分别平行于X、Y和Z轴。
(2)圆锥体:
virtual Acad::ErrorStatus createFrustum(
double height,
double xRadius,
double yRadius,
double topXRadius
);//创建平截头体
Height表示平截头体的高度,xRadius表示底面在X轴方向的半径,yRadius表示底面在y轴方向的半径,topXRadius表示顶面在X轴方向的半径。要创建圆锥体的话,topXRadius=0,xRadius=yRadius。
(3)拉伸面域来创建实体
virtual Acad::ErrorStatus extrudeAlongPath(
const AcDbRegion* region,
const AcDbCurve* path,
double taperAngle = 0.0
);
(4)旋转面域来创建实体
virtual Acad::ErrorStatus revolve(
const AcDbRegion* region,
const AcGePoint3d& axisPoint,
const AcGeVector3d& axisDir,
double angleOfRevolution
);
(5)布尔运算:
virtual Acad::ErrorStatus booleanOper(
AcDb::BoolOperType operation,
AcDb3dSolid* solid
);
AcDb::kBoolUnite
AcDb::kBoolIntersect
AcDb::kBoolSubtract
2、如何实现:
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, YunyouMyGroup,AddBox ,AddBox, ACRX_CMD_MODAL, NULL)
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, YunyouMyGroup,AddCylinder ,AddCylinder, ACRX_CMD_MODAL, NULL)
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, YunyouMyGroup,AddSpire ,AddSpire, ACRX_CMD_MODAL, NULL)
//创建长方体
static void YunyouMyGroupAddBox()
{
AcDb3dSolid *pSolid=new AcDb3dSolid();
Acad::ErrorStatus es=pSolid->createBox(40,50,30);
if (es!=Acad::eOk)
{
acedAlert(TEXT("创建长方体失败!"));
delete pSolid;
return;
}
AcGeMatrix3d xform;
AcGeVector3d vec(100,100,100);
xform.setToTranslation(vec);
es=pSolid->transformBy(xform);
CDwgDatabaseUtil::PostToModelSpace(pSolid);
}
//创建圆锥体
static void YunyouMyGroupAddCylinder()
{
AcDb3dSolid *pSolid=new AcDb3dSolid();
Acad::ErrorStatus es=pSolid->createFrustum(30,10,10,0);
if (es!=Acad::eOk)
{
acedAlert(TEXT("创建失败!"));
delete pSolid;
return;
}
CDwgDatabaseUtil::PostToModelSpace(pSolid);
}
//创建弹簧螺旋线
static void YunyouMyGroupAddSpire()
{
double radius,deltaVertical;
int number,segment;
radius=30,deltaVertical=12;
number=5,segment=30;
int n=number*segment;
double angle=8*atan(1)/segment;
AcGePoint3dArray points;
for (int i=0;i<n+1;i++)
{
AcGePoint3d vertex;
vertex[X]=radius*cos(8*i*atan(1)/segment);
vertex[Y]=radius*sin(8*i*atan(1)/segment);
vertex[Z]=i*deltaVertical/segment;
points.append(vertex);
}
AcDb3dPolyline *p3dPoly=new AcDb3dPolyline(AcDb::k3dSimplePoly,points);
AcDbObjectId spireId=CDwgDatabaseUtil::PostToModelSpace(p3dPoly);
AcGeVector3d vec(0,1,0);
AcGePoint3d ptCenter(30,0,0);
AcDbCircle *pCircle=new AcDbCircle(ptCenter,vec,3);
AcDbObjectId circleId=CDwgDatabaseUtil::PostToModelSpace(pCircle);
AcDbObjectIdArray boundaryIds,regionIds;
boundaryIds.append(circleId);
regionIds=CRegionUtil::Add(boundaryIds);
AcDbRegion *pRegion=NULL;
if (acdbOpenObject(pRegion,regionIds.at(0),AcDb::kForRead)==Acad::eOk)
{
AcDb3dPolyline *pPoly=NULL;
if (acdbOpenObject(pPoly,spireId,AcDb::kForRead)==Acad::eOk)
{
AcDb3dSolid *pSolid=new AcDb3dSolid();
pSolid->extrudeAlongPath(pRegion,pPoly);
CDwgDatabaseUtil::PostToModelSpace(pSolid);
pPoly->close();
}
pRegion->close();
}
}
3、实现的效果
————————————————
版权声明:本文为CSDN博主「云幽学院」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liujiangtaocsu/article/details/82917701
原文:https://www.cnblogs.com/mjgw/p/12392602.html
内容总结
以上是互联网集市为您收集整理的C++ ARX二次开发-创建三维实体全部内容,希望文章能够帮你解决C++ ARX二次开发-创建三维实体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。