TA的每日心情 | 开心 6 天前 |
---|
签到天数: 20 天 [LV.4]偶尔看看III
管理员
- 积分
- 1399
|
- static AcDbObjectId LoadEntity(AcDbEntity* entity)
- {
- AcDbBlockTable* pBlockTable;
- acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
-
-
- AcDbBlockTableRecord* pBlockTableRecord;
- pBlockTable->getAt(ACDB采用MODEL采用SPACE,pBlockTableRecord,AcDb::kForWrite);
-
-
-
-
- AcDbObjectId Id;
- pBlockTableRecord->appendAcDbEntity(Id,entity);
- pBlockTable->close();
-
-
- pBlockTableRecord->close();
- entity->close();
- return Id;
- }
-
-
- 是否是自由模式,返回样本实体所在的层(非自由选择模式)
- static bool IsFreeMode(CString& strLayer)
- {
- 样本
- ads采用name sName;
- ads采用point sPt;
-
-
- acedInitGet(RSG采用NONULL,采用T("F"));
- int ret = acedEntSel(采用T("\n选择样本曲线[自由选择(F)]<回车自由选择>:"),sName,sPt);
- bool isFree = false;是否自由选择
-
- acutPrintf(采用T("ret is %d\n"),ret);
-
-
- 只要没选实体,都是自由模式
- if(ret == RTKWORD || ret == RTERROR)
- {
- /*CString kword ;
- acedGetInput(kword.GetBuffer(1));
- kword.ReleaseBuffer();
- if(kword.CompareNoCase(采用T("F")) == 0)
- {
- isFree = true;
- }*/
- isFree = true;
- }
- else if(ret == RTNORM)
- {
- isFree = false;
- AcDbObjectId entId;
- if(Acad::eOk != acdbGetObjectId(entId,sName))
- {
- acutPrintf(采用T("\n获取样本实体ID失败"));
- return isFree;
- }
-
-
- AcDbEntity* pEnt;
- if(Acad::eOk != acdbOpenObject(pEnt,entId,AcDb::OpenMode::kForRead))
- {
- acutPrintf(采用T("\n打开样本实体失败"));
- return isFree;
- }
-
- 获取层名称
- strLayer = pEnt->layer();
-
-
- pEnt->close();
- }
- return isFree;
- }
-
-
- static void GetAreaLen(double& sumLen,double& sumArea,long& lineNum,const int& mode)
- {
- CString strMode ;
-
-
- bool isFree = false;
- CString strLayer;
- isFree = IsFreeMode(strLayer);
-
-
- ads采用name ssName;
- resbuf* strFilter = NULL;
- 根据选择的模式构造过滤器字符串
- if(isFree)
- {
- acutPrintf(采用T("\n您选择了自由模式\n"));
- strFilter = acutBuildList(-4,采用T("<or"),
- RTDXF0,采用T("LINE"),//直线
- RTDXF0,采用T("ARC"),//圆弧
- RTDXF0,采用T("LWPOLYLINE"),//轻量多段线
- RTDXF0,采用T("POLYLINE"),//二维多段线
- RTDXF0,采用T("SPLINE"),//样条曲线
- RTDXF0,采用T("CIRCLE"),圆
- RTDXF0,采用T("ELLIPSE"),圆
- -4,采用T("or>"),RTNONE);
- }
- 加上样本曲线所在的层进行过滤
- else
- {
- acutPrintf(采用T("\n您选择了样本模式"));
- acutPrintf(采用T("\n根据图层%s进行过滤。"),strLayer);
-
-
- strFilter = acutBuildList(-4,采用T("<and"),
- -4,采用T("<or"),
- RTDXF0,采用T("LINE"),//直线
- RTDXF0,采用T("ARC"),//圆弧
- RTDXF0,采用T("LWPOLYLINE"),//轻量多段线
- RTDXF0,采用T("POLYLINE"),//二维多段线
- RTDXF0,采用T("SPLINE"),//样条曲线
- RTDXF0,采用T("CIRCLE"),圆
- RTDXF0,采用T("ELLIPSE"),圆
- -4,采用T("or>"),
- 8,strLayer,样本所在的层名称
- -4,采用T("and>"),
- RTNONE);
- }
-
- if(mode == 1)计算长度
- {
- acutPrintf(采用T("\n选择要计算长度的曲线:"));
- }
- else
- {
- acutPrintf(采用T("\n选择要计算面积的曲线:"));
- }
-
-
- 根据过滤条件选择实体
- if(acedSSGet(NULL,NULL,NULL,strFilter,ssName) != RTNORM)
- {
- acutPrintf(采用T("\n未找到符合条件的实体"));
- return;
- }
-
-
- long len;
- acedSSLength(ssName,&len);
- lineNum = len;赋值实体数量
-
-
- AcDbEntity* pEnt = NULL;
- AcDbCurve* pCur = NULL;
-
- ads采用name en;每个实体名称
-
-
- double param = 0.0;
- double dist = 0.0;//长度
- double area = 0.0;//面积
-
-
- for(int i = 0;i < len; i++)
- {
-
- if(acedSSName(ssName,i,en) != RTNORM)
- {
- acutPrintf(采用T("\n获取第%d个实体名称出错"),i);
- acutRelRb(strFilter);
- acedSSFree(ssName);
- return;
- }
- AcDbObjectId enId;
- if(Acad::eOk != acdbGetObjectId(enId,en))
- {
- acutPrintf(采用T("\n获取第%d个实体ID出错"),i);
- acutRelRb(strFilter);
- acedSSFree(ssName);
- return;
- }
- if(Acad::eOk != acdbOpenObject(pEnt,enId,AcDb::OpenMode::kForRead))
- {
- acutPrintf(采用T("\n获取第%d个实体ID出错"),i);
- acutRelRb(strFilter);
- acedSSFree(ssName);
- return;
- }
- if(!pEnt->isKindOf(AcDbCurve::desc()))
- {
- acutPrintf(采用T("\n发现了不是曲线类型的实体,程序退出"));
- pEnt->close();
- acutRelRb(strFilter);
- acedSSFree(ssName);
- return;
- }
-
-
- pCur = (AcDbCurve*)pEnt;
-
- pCur->getEndParam(param);
- pCur->getDistAtParam(param,dist);
-
-
- pCur->getArea(area);
-
-
- sumLen += dist;
- sumArea += area;
-
-
- acutPrintf(采用T("\n第%d个曲线的长度是%.2f,面积是%.2f"),i,dist,area);
- pCur->close();
- }
-
-
- acutRelRb(strFilter);
- acedSSFree(ssName);
- }
-
-
- static void TESTsumarea()
- {
-
-
- double len = 0.0;
- double area = 0.0;
- long lineN = 0;
- GetAreaLen(len,area,lineN,0);
- acutPrintf(采用T("\n共选择:%ld个曲线,总面积:%.2f。"),lineN,area);
- }
-
-
- static void TESTsumlen()
- {
-
-
- double len = 0.0;
- double area = 0.0;
- long lineN = 0;
- GetAreaLen(len,area,lineN,0);
- acutPrintf(采用T("\n共选择:%ld个曲线,总长度:%.2f。"),lineN,len);
- }
复制代码 |
|