// DbLowVoltSys.cpp: implementation of the TDbLowVoltSys class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "DbLowVoltSys.h" #include "PipeWireMonitor.h" extern void SplitBlkStr(const TCHAR *pszInput, CString &sTK, CString &sRecord); ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Acad::ErrorStatus TDrawerData::dwgInFields (AcDbDwgFiler* pFiler) { XString xsName; ReadString(pFiler, xsName); m_csLoopName = (const TCHAR*)xsName; ReadString(pFiler, xsName); m_csPurpose = (const TCHAR*)xsName; // pFiler->readItem(&m_nPower); // pFiler->readItem(&m_nKx); // pFiler->readItem(&m_nCos); // pFiler->readItem(&m_nCalcPower); // pFiler->readItem(&m_nCalcCurrent); pFiler->readItem(&m_nLength); pFiler->readItem(&m_ID); // pFiler->readItem((AcGePoint3d *)&m_ptIns); // pFiler->readItem((AcGePoint3d *)&m_ptSheetCol); return pFiler->filerStatus(); } Acad::ErrorStatus TDrawerData::dwgOutFields(AcDbDwgFiler* pFiler) const { pFiler->writeItem((const TCHAR *)m_csLoopName); pFiler->writeItem((const TCHAR *)m_csPurpose); // pFiler->writeItem(m_nPower); // pFiler->writeItem(m_nKx); // pFiler->writeItem(m_nCos); // pFiler->writeItem(m_nCalcPower); // pFiler->writeItem(m_nCalcCurrent); pFiler->writeItem(m_nLength); pFiler->writeItem(m_ID); // pFiler->writeItem((const AcGePoint3d &)m_ptIns); // pFiler->writeItem((const AcGePoint3d &)m_ptSheetCol); return pFiler->filerStatus(); } Acad::ErrorStatus TCabinetData::dwgInFields (AcDbDwgFiler* pFiler) { XString xsName; ReadString(pFiler, xsName); m_csName = (const TCHAR*)xsName; ReadString(pFiler, xsName); m_csSpec = (const TCHAR*)xsName; pFiler->readItem(&m_iType); Adesk::UInt16 nNum=0; pFiler->readItem(&nNum); m_lstDrawer.Reset(); for(Adesk::UInt16 i=0; idwgInFields(pFiler); m_lstDrawer.Append(pData); } return pFiler->filerStatus(); } Acad::ErrorStatus TCabinetData::dwgOutFields(AcDbDwgFiler* pFiler) const { pFiler->writeItem((const TCHAR *)m_csName); pFiler->writeItem((const TCHAR *)m_csSpec); pFiler->writeItem(m_iType); Adesk::UInt16 nCount=(Adesk::UInt16)m_lstDrawer.Length(); pFiler->writeItem(nCount); for(Adesk::UInt16 i=0; ifilerStatus(); } TCabinetData & TCabinetData::operator = (const TCabinetData &src) { CopyObject(src, *this); return *this; } TCabinetData::TCabinetData(const TCabinetData &src) { *this = src; } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ACRX_DXF_DEFINE_MEMBERS(ATSLowVoltSys, ATSSheet, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 1, ATS_LOWVOLTSYS, "ATS_LOWVOLTSYS图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com"); IMPLEMENT_TENTBASE(TDbLowVoltSys); const Adesk::UInt8 TDbLowVoltSys::g_nVersion = 1; TDbLowVoltSys::TDbLowVoltSys() { m_dBusWidth = 2; m_bIsBusNull = TRUE; m_bNeedCalc = TRUE; m_dSpare = 0; m_dCalcFactor = 1; m_bIsVerOutLine = TRUE; } TDbLowVoltSys::~TDbLowVoltSys() { } void TDbLowVoltSys::CopyPropertiesFrom(AcDbEntity *pSrc,unsigned gMatchFlag) { assertWriteEnabled(); TDbLowVoltSys *pSect = TDbLowVoltSys::cast(pSrc); if(pSect) { } TDbEntity::CopyPropertiesFrom(pSrc, gMatchFlag); } Acad::ErrorStatus TDbLowVoltSys::subGetClassID(CLSID* pClsid) const { // *pClsid = CLSID_ComVerticalSection; return Acad::eOk; } // 取得所有的夹点 Acad::ErrorStatus TDbLowVoltSys::subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const { Acad::ErrorStatus es=Acad::eOk; assertReadEnabled(); es=TDbSheet::subGetGripPoints(gripPoints,osnapModes,geomIds); return es; } // 功能: 夹点操作 Acad::ErrorStatus TDbLowVoltSys::subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset) { // assertWriteEnabled(); // Acad::ErrorStatus es=Acad::eOk; // es=TDbSheet::subMoveGripPointsAt(indices,offset); // return es; assertWriteEnabled(); XPoint vtOffset(offset[0], offset[1]); if(indices.length()>1) { m_ptLocation += vtOffset; return Acad::eOk; } double nRotWcs=Layout2Wcs(m_nRotation); int idx = indices[0]; if(idx == 0) return TDbSheet::subMoveGripPointsAt(indices,offset); //以下修改TDbSheet部分程序,如果2夹点合并,要删除抽屉柜 XVector3D vt(cos(nRotWcs), sin(nRotWcs)); double nWidth = (vt&vtOffset); int nColNum=GetColumnNum(); int iVert=1; for(int iCol=0; iCol 3) //头2列如果被删除,会崩溃 sr 2009-4-10 RemoveDrawer(iCol); return Acad::eOk; // RemoveColumn(iCol); } else { column.SetWidth(column.GetWidth()+nWidth/GetPScale()); CalculateRowHeight(0, GetRowNum()-1); } return Acad::eOk; } } } XVector3D vt1(cos(nRotWcs-PI/2), sin(nRotWcs-PI/2)); double nHeight = (vt1&vtOffset); int nRowNum=GetRowNum(); for(int iRow=0; iRowGetRowHeight(TRUE)) row.SetHeight(h); else row.SetHeight(GetRowHeight(TRUE)); } else row.SetHeight(h); } return Acad::eOk; } } } return Acad::eOk; } Acad::ErrorStatus TDbLowVoltSys::GetGripText(int idx, CString &cs) const { Acad::ErrorStatus es=Acad::eOk; es=TDbSheet::GetGripText(idx, cs); return es; } // 从DWG读入数据: Acad::ErrorStatus TDbLowVoltSys::dwgInFields(AcDbDwgFiler* pFiler) { assertWriteEnabled(); Acad::ErrorStatus es = TDbEntity::dwgInFields(pFiler); if(es != Acad::eOk) return es; es = TDbSheet::dwgInFields(pFiler); if(es != Acad::eOk) return es; Adesk::UInt8 nVer; pFiler->readItem(&nVer); if(nVer>g_nVersion) {// Version is too new return Acad::eMakeMeProxy; } pFiler->readItem(&m_dBusWidth); pFiler->readItem(&m_dSpare); pFiler->readItem(&m_dCalcFactor); //pFiler->readItem(&m_bIsBusNull); //pFiler->readItem(&m_bNeedCalc); //pFiler->readItem(&m_bIsVerOutLine); FilerRead(pFiler, m_bIsBusNull); FilerRead(pFiler, m_bNeedCalc); FilerRead(pFiler, m_bIsVerOutLine); pFiler->readItem(&m_idBusLayer); ReadString(pFiler,m_sSpare); Adesk::UInt16 nNum=0; pFiler->readItem(&nNum); m_lstCabinet.Reset(); for(Adesk::UInt16 i=0; idwgInFields(pFiler); m_lstCabinet.Append(pData); } return pFiler->filerStatus(); } Acad::ErrorStatus TDbLowVoltSys::dwgOutFields(AcDbDwgFiler* pFiler) const { assertReadEnabled(); Acad::ErrorStatus es = TDbEntity::dwgOutFields(pFiler); if(es != Acad::eOk) return es; es = TDbSheet::dwgOutFields(pFiler); if(es != Acad::eOk) return es; pFiler->writeItem(g_nVersion); pFiler->writeItem(m_dBusWidth); pFiler->writeItem(m_dSpare); pFiler->writeItem(m_dCalcFactor); //pFiler->writeItem(m_bIsBusNull); //pFiler->writeItem(m_bNeedCalc); //pFiler->writeItem(m_bIsVerOutLine); FilerWrite(pFiler, m_bIsBusNull); FilerWrite(pFiler, m_bNeedCalc); FilerWrite(pFiler, m_bIsVerOutLine); pFiler->writeItem(m_idBusLayer); pFiler->writeItem((const TCHAR *)m_sSpare); Adesk::UInt16 nCount=(Adesk::UInt16)m_lstCabinet.Length(); pFiler->writeItem(nCount); for(Adesk::UInt16 i=0; ifilerStatus(); } Acad::ErrorStatus TDbLowVoltSys::dxfInFields(AcDbDxfFiler* pFiler) { assertWriteEnabled(); Acad::ErrorStatus es=Acad::eOk; es=TDbSheet::dxfInFields(pFiler); return es; } Acad::ErrorStatus TDbLowVoltSys::dxfOutFields(AcDbDxfFiler* pFiler) const { Acad::ErrorStatus es=Acad::eOk; es=TDbSheet::dxfOutFields(pFiler); pFiler->writeUInt8(AcDb::kDxfInt8, 1); return es; } Acad::ErrorStatus TDbLowVoltSys::subTransformBy(const AcGeMatrix3d& xform) { assertWriteEnabled(); Acad::ErrorStatus es=Acad::eOk; es=TDbSheet::subTransformBy(xform); // int nCount = m_lstCabinet.Length(); // for(int i=0; im_lstDrawer.Length(); // for(int j=0;jm_lstDrawer[j]->m_ptIns; // pt.TransformBy(xform); // m_lstCabinet[i]->m_lstDrawer[j]->m_ptIns = pt; // } // } return es; } //在位编辑 如果是第一行,执行对象编辑 TSubText* TDbLowVoltSys::GetSubText(long iText)const { long i = iText; if(i > 0) { i--; if(iGetCoord(TRUE) == 0) return NULL; } } return TDbSheet::GetSubText(iText); } int GetDrawerInsPoint(AcDbHardPointerId id, XPoint &ptCir, XPoint &ptCir2) { int idx2(0); OPENOBJ_BEGIN(id, AcDb::kForRead, AcDbBlockTableRecord, pBlock); if(pBlock) { AcDbBlockTableRecordIterator *pIterator = NULL; pBlock->newIterator(pIterator); for(pIterator->start(); !pIterator->done(); pIterator->step()){ AcDbEntity *pEnt = NULL; pIterator->getEntity(pEnt, AcDb::kForRead); if(pEnt){ AcDbPoint *pll = NULL; if(pll = AcDbPoint::cast(pEnt)){ idx2++; if(idx2 == 1) ptCir = pll->position(); else ptCir2 = pll->position(); } pEnt->close(); } } delete pIterator; } OPENOBJ_END(); return idx2; } XPoint TDbLowVoltSys::GetCellLeftUpPoint(int nRow, int nCol) const { const TGridCell *pCell=(*this)(nRow, nCol); double x=GetColumnsWidth(0, nCol-1, FALSE); double y=GetRowsHeight(0, nRow-1, FALSE); XPoint ptTopLeft=GetTopLeft(FALSE); XPoint ptDest; ads_polar(ptTopLeft, Layout2Wcs(m_nRotation), x, ptDest); ads_polar(XPoint(ptDest), Layout2Wcs(m_nRotation)-PI/2, y, ptDest); return ptDest; } XPoint TDbLowVoltSys::GetDrawerCellSize(int nRow, int nCol) const { const TGridCell &cell=*(*this)(nRow, nCol); double w, h; w=GetColumnWidth(nCol, FALSE); h=GetRowHeight(nRow, FALSE); return XPoint(w, h); } void TDbLowVoltSys::DrawPLine(XPoint ptStart, XPoint ptEnd, XExplodeDraw &dc) const { AcDbObjectId idLayerOld=dc.GetLayerId(); dc.SetLayer(m_idBusLayer); XLine pLine(ptStart, ptEnd, 1); XCurveSegment seg; seg = pLine; XPoly2D poly; seg.AsPoly2D(poly); double nWeight = m_dBusWidth*GetPScale(); AcDbPolyline pline; PolyConvert(poly, pline); XAcGiViewDraw &viewDraw = (XAcGiViewDraw &)dc; int nNum = pline.numVerts(); if (nNum > 0) { for (int k=0;k 0)//三相电流互感器 进线 dScale = 1.1; AcDbExtents extents; AcDbBlockReference insert(AcGePoint3d(0,0,0), id); if(insert.geomExtentsBestFit(extents)==Acad::eOk) { XPoint ptMax = extents.maxPoint(); XPoint ptMin = extents.minPoint(); dWidth = (ptMax.x-ptMin.x) * dScale;// 第一次求得的宽度值 //dHeight = ptMax.y-ptMin.y; dHeight = abs(ptMin.y); //高度只取从插入点到块底部的距离 } //if(csDesName.Find(_T("进线")) > 0) // dHeight = dHeight/1.5; } Acad::ErrorStatus TDbLowVoltSys::ExplodeOrDraw2d(XExplodeDraw &dc) const { // cet 2016.10.17 add 图层关闭时,实体不显示,不进行绘制(打印时,也不会绘制) AcDbLayerTableRecordPointer player(this->layerId(), AcDb::kForRead); if (player.openStatus() == Acad::eOk && player->isOff()) { return Acad::eOk; } assertReadEnabled(); TDbSheet::ExplodeOrDraw2d(dc); if(!objectId()) return Acad::eOk; if(g_bOsnapExpl && !g_bGetExtents)//不支持求交,速度太慢 return Acad::eOk; double dBusWidth = m_dBusWidth*GetPScale(); int nCount = m_lstCabinet.Length(); // int nSheetColNum = GetColumnNum(); // return Acad::eOk; int idx = 0; for(int i=0; i 0){ //返回多个点 AcDbBlockReference blkRef; blkRef.setBlockTableRecord(id); blkRef.setPosition(pt); blkRef.setRotation(m_nLayoutRotation); blkRef.setScaleFactors(AcGeScale3d(1,1,1)); AcGeMatrix3d matrixRef = blkRef.blockTransform();//得到图块那2个点的矩阵 ptCir.TransformBy(matrixRef); ads_polar(ptCir, m_nLayoutRotation+PI/2, dBusWidth/2, ptCir); if(!!ptCir2){ ptCir2.TransformBy(matrixRef); ads_polar(ptCir2, m_nLayoutRotation+PI/2, dBusWidth/2, ptCir2); if(m_bIsBusNull) dc << XCircle(ptCir2, dBusWidth/2); } } ads_polar(ptLeft, m_nLayoutRotation, szCell.x, ptRight); ads_polar(ptLeft, m_nLayoutRotation+PI/2, dBusWidth, ptLeft2); ads_polar(ptRight, m_nLayoutRotation+PI/2, dBusWidth, ptRight2); if(i == 0 && j == 0){ ads_polar(ptLeft, m_nLayoutRotation, GetPScale()*2, ptLeft); } if(i == nCount - 1 && j == num - 1){ ads_polar(ptRight, m_nLayoutRotation+PI, GetPScale()*2, ptRight); } XPoint ptMid, ptMid2, ptCirLeft, ptCirRight; if(!!ptCir2){//母联 if(ptCir.x < ptCir2.x){ ptCirLeft = ptCir; ptCirRight = ptCir2; } else{ ptCirLeft = ptCir2; ptCirRight = ptCir; } ads_polar(ptCirLeft, m_nLayoutRotation, GetPScale()*2, ptCirLeft); ads_polar(ptCirRight, m_nLayoutRotation+PI, GetPScale()*2, ptCirRight); } //绘制母线 if(!m_bIsBusNull){//实心 ads_polar(ptLeft, m_nLayoutRotation+PI/2, dBusWidth/2, ptLeft); ads_polar(ptRight, m_nLayoutRotation+PI/2, dBusWidth/2, ptRight); if(!!ptCir2){//母联 DrawPLine(ptLeft, ptCirLeft, dc); DrawPLine(ptCirRight, ptRight, dc); } else DrawPLine(ptLeft, ptRight, dc); } else{ //空心 // if(!bIsOutLine) dc << XCircle(ptCir, dBusWidth/2); if(i == 0 && j == 0){ ads_polar(ptLeft2, m_nLayoutRotation, GetPScale()*2, ptLeft2); dc << XLine(ptLeft, ptLeft2); } if(i == nCount - 1 && j == num - 1){ ads_polar(ptRight2, m_nLayoutRotation+PI, GetPScale()*2, ptRight2); dc << XLine(ptRight, ptRight2); } if(!!ptCir2){//母联 ads_polar(ptCirLeft, m_nLayoutRotation+PI/2*3, dBusWidth/2, ptMid); ads_polar(ptCirLeft, m_nLayoutRotation+PI/2, dBusWidth/2, ptMid2); dc << XLine(ptLeft, ptMid); dc << XLine(ptLeft2, ptMid2); dc << XLine(ptMid, ptMid2); ads_polar(ptCirRight, m_nLayoutRotation+PI/2*3, dBusWidth/2, ptMid); ads_polar(ptCirRight, m_nLayoutRotation+PI/2, dBusWidth/2, ptMid2); dc << XLine(ptRight, ptMid); dc << XLine(ptRight2, ptMid2); dc << XLine(ptMid, ptMid2); } else{ dc << XLine(ptLeft, ptRight); dc << XLine(ptLeft2, ptRight2); } } idx++; // dc.SetLayer(idLayerOld); } ads_polar(ptTopLeft0, m_nLayoutRotation+PI/2*3, 10*GetPScale(), ptTopLeft0); if(bIsOutLine){ if(!m_bIsBusNull){//实心 DrawPLine(ptTopLeft1, ptTopLeft0, dc); } else{ XPoint ptUpLeft, ptLowLeft; ads_polar(ptTopLeft1, m_nLayoutRotation+PI, dBusWidth, ptUpLeft); ads_polar(ptTopLeft0, m_nLayoutRotation+PI, dBusWidth, ptLowLeft); dc << XLine(ptUpLeft, ptLowLeft); dc << XLine(ptTopLeft1, ptTopLeft0); dc << XLine(ptLowLeft, ptTopLeft0); } } dc.SetLayer(idLayerOld); } return Acad::eOk; } void TDbLowVoltSys::GetDatas(DList& lstCabinet) const { int nCount = m_lstCabinet.Length(); for(int i=0; im_lstDrawer.Length(); if(num > 1){//合并单元 MergeCells(0, idx+2, 0, idx+num+1); } if(m_lstCabinet[i]->m_iType == 4 && !m_bIsVerOutLine){ double dWidth(0), dLength(0); AcDbHardPointerId id = m_lstCabinet[i]->m_lstDrawer[0]->m_ID; GetBlkWidthHeight(id, dWidth, dLength); dLength += 20*GetPScale(); for(int j=0;jm_lstDrawer[j]->m_ID; GetBlkWidthHeight(id, dWidth, dLength); if(dLength > nLongLength) nLongLength = dLength; TSheetColumn column; column.SetWidth(dWidth/GetPScale()); //序号 SetColumnAt(idx+1, column); } } } TSheetRow *row = GetRow(0); row->SetRowHeightStyle(TSheetRow::kFree); row->SetHeight(nLongLength/GetPScale()*1.2); //表头 TSheetColumn column1; column1.SetWidth(5); SetColumnAt(0, column1); TSheetColumn column2; column2.SetWidth(25); SetColumnAt(1, column2); TGridCell &Cell1=*(*this)(0, 0); Cell1.SetText(_T("低压单线图 额定电压~380 ")); MergeCells(0, 0, 0, 1); } int TDbLowVoltSys::GetDrawerNum() { int nCount = m_lstCabinet.Length(); int nColNum(0); for(int i=0; im_lstDrawer.Length(); nColNum += num; } return nColNum; } void TDbLowVoltSys::ModifyDrawer(int iCol, AcDbObjectId idBlk) { assertWriteEnabled(); iCol = iCol - 2; int nCount = m_lstCabinet.Length(); int idx(0); BOOL bFlag = FALSE; for(int i=0; im_lstDrawer.Length(); for(int j=0;jm_lstDrawer[j]->m_ID = idBlk; bFlag = TRUE; break; } idx++; } if(bFlag) break; } } void TDbLowVoltSys::InsertDrawer(int iCol, AcDbObjectId idBlk, int iType, BOOL bNewCabinet) { assertWriteEnabled(); AddColumnAt(iCol); double dWidth(0), dLength(0); GetBlkWidthHeight(idBlk, dWidth, dLength); TSheetColumn column; column.SetWidth(dWidth/GetPScale()); //序号 SetColumnAt(iCol, column); iCol = iCol - 2; int nCount = m_lstCabinet.Length(); int idx(0); BOOL bFlag = FALSE; for(int i=0; im_lstDrawer.Length(); for(int j=0;jm_iType = iType; TDrawerData *pDrawer = new TDrawerData; pDrawer->m_ID = idBlk; pCabinet->m_lstDrawer.Append(pDrawer); m_lstCabinet[i]; m_lstCabinet.Insert(pCabinet); } else{ TDrawerData *pDrawer = new TDrawerData; pDrawer->m_ID = idBlk; m_lstCabinet[i]->m_lstDrawer[j]; m_lstCabinet[i]->m_lstDrawer.Insert(pDrawer); } bFlag = TRUE; break; } idx++; } if(bFlag) break; } } void TDbLowVoltSys::RemoveDrawer(int iCol) { assertWriteEnabled(); RemoveColumn(iCol); iCol = iCol - 2; int nCount = m_lstCabinet.Length(); int idx(0); BOOL bFlag = FALSE; for(int i=0; im_lstDrawer.Length(); for(int j=0;jm_lstDrawer.Remove(j); if(num == 1) m_lstCabinet.Remove(i); bFlag = TRUE; break; } idx++; } if(bFlag) break; } } //初始化表头 void TDbLowVoltSys::SetSheetHead(XStringList &lstHead) { assertWriteEnabled(); int nRow = GetRowNum(); int len = lstHead.Length(); int n = len - nRow + 1; if(n > 0){ for(int j=0;j= 0){ CString csTmp1, csTmp2; SplitBlkStr(csHead, csTmp1, csTmp2); if(iStart < 0){ csOldTmp = csTmp1; iStart = i+1; } else if(csOldTmp != csTmp1){ MergeCells(iStart, 0, iEnd, 0); iStart = i+1; iEnd = -1; csOldTmp = csTmp1; } else iEnd = i+1; TGridCell &Cell1=*(*this)(i+1, 0); Cell1.SetText(csTmp1); TGridCell &Cell0=*(*this)(i+1, 1); Cell0.SetText(csTmp2); continue; } else if(iStart>0 && iEnd>0){ MergeCells(iStart, 0, iEnd, 0); iStart = -1; iEnd = -1; } TGridCell &Cell2=*(*this)(i+1, 0); Cell2.SetText(csHead); MergeCells(i+1, 0, i+1, 1); if(csHead.Find(_T("开关柜编号")) > -1 || csHead.Find(_T("外形尺寸")) > -1){ int nCount = m_lstCabinet.Length(); int idx(0); for(int j=0; jm_lstDrawer.Length(); if(num > 1){//合并单元 MergeCells(i+1, idx+2, i+1, idx+num+1); } idx = idx+num; } } } if(iStart > 0 && iEnd > 0){ MergeCells(iStart, 0, iEnd, 0);//主要设备 } } void TDbLowVoltSys::SetDatas(DList& lstCabinet) { assertWriteEnabled(); m_lstCabinet.Reset(); int nCount = lstCabinet.Length(); int nColNum(0); for(int i=0; im_lstDrawer.Length(); m_lstCabinet.Append(pData); nColNum += num; } Reset(); } void TDbLowVoltSys::Calc() { assertWriteEnabled(); int nRow = GetRowNum(); int nPowerRow(-1), nKxRow(-1), nCosRow(-1), nCurrentRow(-1); for(int n=0;n -1) nPowerRow = n; if(csText.Find(_T("需用系数")) > -1) nKxRow = n; if(csText.Find(_T("功率因数")) > -1) nCosRow = n; if(csText.Find(_T("计算电流")) > -1) nCurrentRow = n; } if(nPowerRow < 0 || nKxRow < 0 || nCosRow < 0 || nCurrentRow < 0)//不需要计算 return; int idx(2); int nCount = m_lstCabinet.Length(); double nAllPower(0), nAllCalaPower(0), nAllNoPower(0); for(int i=0; im_lstDrawer.Length(); if(m_lstCabinet[i]->m_iType == 4){ for(int j=0;jm_lstDrawer.Length(); if(m_lstCabinet[i]->m_iType == 1 || m_lstCabinet[i]->m_iType == 5){ //进线 TGridCell &Cell1=*(*this)(nPowerRow, idx); Cell1.SetText(XString(_T("%.0f"), nAllPower)); TGridCell &Cell2=*(*this)(nCurrentRow, idx); Cell2.SetText(XString(_T("%.1f"), nAllCalcCurrent)); TGridCell &Cell3=*(*this)(nCosRow, idx); Cell3.SetText(XString(_T("%.2f"), nAllCos)); TGridCell &Cell4=*(*this)(nKxRow, idx); Cell4.SetText(XString(_T("%.2f"), nAllKx)); } idx += num; } } Acad::ErrorStatus TDbLowVoltSys::subClose() { Acad::ErrorStatus es = TDbSheet::subClose(); if(es==Acad::eOk && g_nCmdReactor!=CMD_UPDATE && isModified() && database()==acdbCurDwg() && m_bNeedCalc) { Calc(); } return es; } //取动态属性显示数据 void TDbLowVoltSys::GetTips(DList &info) const { info.Append(new TObjInfoUnit(_T("对象类型"), _T("低压单选系统图"))); } void InitDbLowVoltSys(BOOL bTrue) { if(bTrue) { TDbLowVoltSys::rxInit(); TDbLowVoltSys::InitMatchProtocol(TRUE); } else { TDbLowVoltSys::InitMatchProtocol(FALSE); deleteAcRxClass(TDbLowVoltSys::desc()); } }