double VentCaculate::getVentLenth(AcDbObjectId objId) { AcDbObjectIdArray objIds; DrawHelper::FindMineGEs(_T("Tunnel"),objIds); int len = objIds.length(); AcGePoint3d spt,ept; //获取选择工作面的始末节点 LinkedGE *pEdge = getLinkedGE(objId); pEdge->getSEPoint(spt,ept); AcGePoint3dArray findedPts; findedPts.append(spt); for(int i = 0; i < len; i++) { pEdge = getLinkedGE(objIds[i]); pEdge->getSEPoint(spt,ept); //acutPrintf(_T("\n%d->始节点:(%f,%f),末节点(%f,%f)"),i,spt.x,spt.y,ept.x,ept.y); if (findedPts.contains(spt) && !findedPts.contains(ept)) { findedPts.append(ept); i = -1; } else if (findedPts.contains(ept) && !findedPts.contains(spt)) { findedPts.append(spt); i = -1; } } CString ventLenthStr; DataHelper::GetPropertyData( objId, _T( "长度" ), ventLenthStr); double ventLenth = _tstof(ventLenthStr); for (int i = 0;i < len; i++) { //需要排除进风巷和回风巷 CString name; bool isVentTunel = false; DataHelper::GetPropertyData( objIds[i], _T( "名称" ), name ); if ( _T("进风巷") != name && _T("回风巷") != name) { isVentTunel = true; } //获取其他巷道的始末节点 pEdge = getLinkedGE(objIds[i]); pEdge->getSEPoint(spt,ept); CString lenthStr; DataHelper::GetPropertyData( objIds[i], _T( "长度" ), lenthStr); double lenth = _tstof(lenthStr); if ((findedPts.contains(spt)||findedPts.contains(ept))&& isVentTunel) { //acutPrintf(_T("\n始节点:(%f,%f),末节点(%f,%f)"),spt.x,spt.y,ept.x,ept.y); ventLenth += lenth; } } return ventLenth; }