- UID
- 135542
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-5-10
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
希望大家在这里研究探讨一些三维开发的经验技巧,本人做该方面的工作有段时间,不过有些东西还是搞不明白,此方面的资料又奇缺!!
[php]
//*********************生成长方体***********************
/* pt -- 长方体中心;
xLen -- 长方体在x方向上的长度;
yLen -- 长方体在y方向上的长度;
zLen -- 长方体在Z方向上的长度;*/
//******************************************************
void CreatBox(AcGePoint3d pt, double xLen, double yLen, double zLen)
{
AcGePoint3d ptCent(0,0,0);
Acad::ErrorStatus es;
AcDb3dSolid *p3dObj = new AcDb3dSolid;
es = p3dObj->createBox(xLen, yLen, zLen);
if (es != Acad::eOk)
{
// AfxMessageBox("建立长方体失败!!");
}
AcDbObjectId entid;
pBlockTableRecord->appendAcDbEntity(entid,p3dObj);
p3dObj->close();
Move_Ent(entid,ptCent,pt);
}
//*******************生成平截头体**************************
/* pt -- 直径中心并位于高度的一半处
注意:地面平行于xy平面*/
//*********************************************************
void CreatFrustum(AcGePoint3d pt, double m_h, double m_xRad, double m_yRad, double topXRad)
{
AcGePoint3d ptCent(0,0,0);
Acad::ErrorStatus es;
AcDb3dSolid *p3dObj = new AcDb3dSolid;
es = p3dObj->createFrustum(m_h,m_xRad,m_yRad,topXRad);
if (es != Acad::eOk)
{
AfxMessageBox("建立平截头体失败!!");
}
AcDbObjectId entid;
pBlockTableRecord->appendAcDbEntity(entid,p3dObj);
p3dObj->close();
Move_Ent(entid,ptCent,pt);
}
//*******************生成球体************************
/* pt -- 球心
m_rad -- 球体半径*/
//***************************************************
void CreatSphere(AcGePoint3d pt, double m_rad)
{
AcGePoint3d ptCent(0,0,0);
Acad::ErrorStatus es;
AcDb3dSolid *p3dObj = new AcDb3dSolid;
es = p3dObj->createSphere(m_rad);
if (es != Acad::eOk)
{
AfxMessageBox("建立球体失败!!");
}
AcDbObjectId entid;
pBlockTableRecord->appendAcDbEntity(entid,p3dObj);
p3dObj->close();
Move_Ent(entid,ptCent,pt);
}
//******************生成圆环体************************
/* pt -- 圆环中心
m_majRad -- 圆环半径
m_minRad -- 圆管半径
注意 :圆环平面位于xy平面*/
//****************************************************
void CreatTorus(AcGePoint3d pt, double m_majRad, double m_minRad)
{
AcGePoint3d ptCent(0,0,0);
Acad::ErrorStatus es;
AcDb3dSolid *p3dObj = new AcDb3dSolid;
es = p3dObj->createTorus(m_majRad, m_minRad);
if (es != Acad::eOk)
{
AfxMessageBox("建立圆环体失败!!");
}
AcDbObjectId entid;
pBlockTableRecord->appendAcDbEntity(entid,p3dObj);
p3dObj->close();
Move_Ent(entid,ptCent,pt);
}
//**************生成楔体**********************
/* pt -- 直径中心并位于高度的一半处
注意:长宽组成矩形*/
//********************************************
void CreatWedge(AcGePoint3d pt, double xLen, double yLen,
double zLen)
{
AcGePoint3d ptCent(0,0,0);
Acad::ErrorStatus es;
AcDb3dSolid *p3dObj = new AcDb3dSolid;
es = p3dObj->createWedge(xLen, yLen, zLen);
if (es != Acad::eOk)
{
AfxMessageBox("建立楔体失败!!");
}
AcDbObjectId entid;
pBlockTableRecord->appendAcDbEntity(entid,p3dObj);
p3dObj->close();
Move_Ent(entid,ptCent,pt);
}
//******************生成回转体**********************
/* pt -- 旋转基点
ver -- 旋转轴
angle -- 旋转角度(角度制)
注意: 旋转轴不能垂直于面域平面、不能穿过面域*/
//**************************************************
void CreatRevolve(AcDbObjectId entid,
AcGeVector3d normal,
AcGePoint3d pt,
AcGeVector3d ver,
double angle)
{
Acad::ErrorStatus es;
AcDbCurve *curve;
AcDbObjectId tm;
if (acdbOpenObject(curve,entid,AcDb::kForWrite)!=Acad::eOk)
{
AfxMessageBox("打开实体失败!");
return ;
}
AcDbVoidPtrArray lines,regions1;
lines.append((void*)curve);
curve->close();
es = AcDbRegion::createFromCurves(lines,regions1);
if(es != Acad::eOk)
{
AfxMessageBox("获得面域失败!");
return ;
}
angle = angle*PI/180;
AcDbRegion *pregion1=AcDbRegion::cast((AcRxObject*)regions1[0]);
AcDb3dSolid *p3dobj = new AcDb3dSolid;
es = p3dobj->revolve(pregion1,pt,ver,angle);
if (es != Acad::eOk)
{
AfxMessageBox("建立回转体失败!请检查回转轴和基准点是否正确!");
}
pBlockTableRecord->appendAcDbEntity(tm,p3dobj);
p3dobj->close();
delete pregion1;
}
[/php] |
|