天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 46|回复: 0

OBJECT ARX 实体类的炸开,求交,外包矩形函数使用

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
OBJECT ARX 实体类的炸开,求交,外包矩形函数使用
object command
//==============炸开============
static void TESTzhakaicmd()
{
// Add your code for command ahlzlARX._test here
ads_name ent;
ads_point pt;
if (acedEntSel(_T("\n请选择对象:"), ent, pt) != RTNORM)
{
  return;
}
AcDbObjectId entId;
acdbGetObjectId(entId, ent);
AcDbEntity *pEnt = NULL;
acdbOpenObject(pEnt, entId, AcDb::kForWrite);
AcDbVoidPtrArray pExps;
if (pEnt->explode(pExps) == Acad::eOk)
{
  for (int i = 0; i < pExps.length(); i++)
  {
   AcDbEntity *pExpEnt = (AcDbEntity*)pExps[i];
   acutPrintf(_T("\n分解后的对象类型名是: %s"), (pExpEnt->isA()->name()));
   LoadEntity(pExpEnt);
  }
  pEnt->erase(true);
}
else
{
  acutPrintf(_T("\n该对象不能被分解!"));
}
pEnt->close();
}


//选择两个对象,求交点;如果选了域,输出面积
static void TESTintersactcmd(){
ads_name ent1;
ads_point pt1;
if (acedEntSel(_T("\n请选择对象1:"), ent1, pt1) != RTNORM)
{
  return;
}
AcDbObjectId entId1;
acdbGetObjectId(entId1, ent1);
AcDbEntity *pEnt1 = NULL;
acdbOpenObject(pEnt1, entId1, AcDb::kForWrite);


ads_name ent2;
ads_point pt2;
if (acedEntSel(_T("\n请选择对象2:"), ent2, pt2) != RTNORM)
{
  return;
}
AcDbObjectId entId2;
acdbGetObjectId(entId2, ent2);
AcDbEntity *pEnt2 = NULL;
acdbOpenObject(pEnt2, entId2, AcDb::kForWrite);
AcGePoint3dArray ptArr;
pEnt1->intersectWith(pEnt2,AcDb::Intersect::kOnBothOperands,ptArr);


CString outStr;
outStr.Format(_T("交集点的数量:%d"),ptArr.length());
acutPrintf(outStr);


if(pEnt1->isKindOf(AcDbRegion::desc())){
AcDbRegion* r = (AcDbRegion*)pEnt1;
double area;
r->getArea(area);
CString str;
str.Format(_T("\n面积:%.2f"),area);
r->close();
}




pEnt1->close();
pEnt2->close();
}




////外包矩形,返回外接矩形的两个端点
static void TESTgeocmd(){


ads_name ent;
ads_point pt;
if (acedEntSel(_T("\n请选择对象:"), ent, pt) != RTNORM)
{
  return;
}
AcDbObjectId entId;
acdbGetObjectId(entId, ent);
AcDbEntity *pEnt = NULL;
acdbOpenObject(pEnt, entId, AcDb::kForWrite);


AcDbExtents extent;
Acad::ErrorStatus es = pEnt->getGeomExtents(extent);
if(es == Acad::ErrorStatus::eOk){


AcGePoint3d ptMin = extent.minPoint();
AcGePoint3d ptMax = extent.maxPoint();


CString str;


str.Format(_T("\nx1:%.2f ,y1:%.2f, z1:%.2f \nx2: %.2f,y2: %.2f, z2: %.2f"),ptMin[X],ptMin[Y],ptMin[Z],ptMax[X],ptMax[Y],ptMax[Z]);


acutPrintf(str);


}


}

 

 

 

 

OBJECT ARX 实体类的炸开,求交,外包矩形函数使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 15:35 , Processed in 0.170864 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表