2480 lines
60 KiB
C++
2480 lines
60 KiB
C++
#include "stdafx.h"
|
|
#include "NewSanitaryDefineDlg.h"
|
|
#include "SelectBlkDlg.h"
|
|
#include "SanitaryDangDlg.h"
|
|
#include "NewSanitaryTypeDlg.h"
|
|
#include "SanitaryPicDlg.h"
|
|
|
|
//#ifdef _WIN64
|
|
#include"TGAs.h"
|
|
//#endif
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// 返回值 1: 洁具本身获取数据 2:本地获取数据 0:无数据可获取
|
|
int GetSanitaryDataSourceType(Entity ent);
|
|
|
|
bool GetLocSanitaryData(Entity ent, CSanitaryInfo &data, AcGePoint3d &ptFeed, AcGePoint3d &ptHeatFeed, AcGePoint3d &ptDrain, AcGePoint3d &ptDir);
|
|
|
|
//根据图集号识别洁具类型
|
|
void GetDwbInfo(CString sPicName, int &iCurType)
|
|
{
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("Sanitary.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取Sanitary.dbf文件错误!"));
|
|
return;
|
|
}
|
|
CString sName;
|
|
CString sFeedBlk, sFeedSys, sFeedPtEle, sFeedPipe, sHeatPipe, sDrainBlk, sFeedNG, sFeedQ, sDrainNG, sDrainQ;
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CString sType;
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext())
|
|
{
|
|
|
|
GET_FIELD(pTable, _T("Type"), sType);
|
|
double dTypeTmp = _tstof(sType);
|
|
|
|
GET_FIELD(pTable, _T("Page"), sName);
|
|
if(sName.Compare(sPicName) == 0)
|
|
{
|
|
iCurType = dTypeTmp;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
bool GetSanitaryInfo(Entity ent, XPoint &ptRet, CString &csBlk, CString &csSysBlk, double &nRadius,
|
|
double &nDang, double &nBigQ, double &dEle, int iType, CString &sDwbName, CString &sFeedElev, CString &sHotElev/*, double &dSanitaryDriec*/)
|
|
{
|
|
double xscale;
|
|
ent.GetData(41, &xscale);
|
|
xscale = fabs(xscale);
|
|
|
|
CString csApp;
|
|
if(iType == 0)
|
|
csApp = _T("SANITARYFEED");
|
|
else if(iType == 1)
|
|
csApp = _T("SANITARYHEADFEED");
|
|
else if(iType == 2)
|
|
csApp = _T("SANITARYDRAIN");
|
|
|
|
bool bRet(false);
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
pBlkRef->close();
|
|
|
|
TCHAR szBlkName[256];
|
|
ent.GetData(2, szBlkName);
|
|
AcDbBlockTableRecord *pRecord = NULL;
|
|
AcDbBlockTable* pBlockTable = NULL;
|
|
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
|
|
if(pBlockTable == NULL)
|
|
return false;
|
|
if(Acad::eOk != pBlockTable->getAt(szBlkName, pRecord, AcDb::kForRead))
|
|
{
|
|
pBlockTable->close();
|
|
return false;
|
|
}
|
|
pBlockTable->close();
|
|
if(pRecord == NULL)
|
|
return false;
|
|
|
|
AcDbBlockTableRecordIterator *pIterator;
|
|
pRecord->newIterator(pIterator);
|
|
pRecord->close();
|
|
if(pIterator == NULL)
|
|
return false;
|
|
for(pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
pIterator->getEntity(pEnt, AcDb::kForRead);
|
|
if(pEnt != NULL)
|
|
{
|
|
AcDbPoint *pll = NULL;
|
|
AcDbCircle *pCir = NULL;
|
|
if(pCir = AcDbCircle::cast(pEnt))
|
|
{
|
|
if(iType == 2){
|
|
resbuf *pRb = pEnt->xData(csApp);
|
|
if(pRb != NULL) {
|
|
resbuf *pNext = pRb->rbnext;
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
csBlk = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
csSysBlk = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
nDang = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
nBigQ = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sFeedElev = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sHotElev = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sDwbName = pNext->resval.rstring;
|
|
bRet = true;
|
|
}
|
|
}
|
|
ads_relrb(pRb);
|
|
AcGePoint3d ptIns = pCir->center();
|
|
nRadius = pCir->radius()*xscale;
|
|
ptIns = ptIns.transformBy(matrix);
|
|
ptRet = ptIns;
|
|
pEnt->close();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if(pll = AcDbPoint::cast(pEnt))
|
|
{
|
|
resbuf *pRb = pEnt->xData(csApp);
|
|
if(pRb != NULL)
|
|
{
|
|
resbuf *pNext = pRb->rbnext;
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
csBlk = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
csSysBlk = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
nDang = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
nBigQ = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
dEle = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sFeedElev = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sHotElev = pNext->resval.rstring;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
sDwbName = pNext->resval.rstring;
|
|
bRet = true;
|
|
}
|
|
}
|
|
ads_relrb(pRb);
|
|
nDang = fabs(nDang);
|
|
AcGePoint3d ptIns = pll->position();
|
|
ptIns = ptIns.transformBy(matrix);
|
|
ptRet = ptIns;
|
|
pEnt->close();
|
|
break;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIterator;
|
|
return bRet;
|
|
}
|
|
|
|
|
|
bool AddPointInBlk(Entity entBlk, AcGePoint3d ptIns, const TCHAR* szBlk, const TCHAR* szSysBlk,
|
|
double nDang, double nBigQ, int iType, CString sDwbName, CString sFeedElev, CString sHotElev/*, double dSanitaryDriec*/)
|
|
{
|
|
if(fabs(ptIns.x) < 0.001 && fabs(ptIns.y) < 0.001)
|
|
return false;
|
|
double dEle = ptIns.z;
|
|
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, entBlk);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
pBlkRef->close();
|
|
|
|
matrix = matrix.inverse();
|
|
TCHAR szBlkName[256];
|
|
entBlk.GetData(2, szBlkName);
|
|
AcDbBlockTable* pBlockTable = NULL;
|
|
AcDbBlockTableRecord* pRecord = NULL;
|
|
AcDbObjectId objId = NULL;
|
|
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
|
|
if(pBlockTable == NULL)
|
|
return false;
|
|
pBlockTable->getAt(szBlkName, pRecord, AcDb::kForWrite);
|
|
pBlockTable->close();
|
|
if(pRecord == NULL)
|
|
return false;
|
|
|
|
ptIns = ptIns.transformBy(matrix);
|
|
AcDbPoint *pNewPt = new AcDbPoint();
|
|
pNewPt->setPosition(ptIns);
|
|
|
|
CString csApp;
|
|
if(iType == 0)
|
|
{
|
|
csApp = _T("SANITARYFEED");
|
|
}
|
|
else if(iType == 1)
|
|
{
|
|
csApp = _T("SANITARYHEADFEED");
|
|
}
|
|
else if(iType == 2)
|
|
{
|
|
csApp = _T("SANITARYDRAIN");
|
|
}
|
|
|
|
if(!XSymbolTable(_T("APPID"), csApp))
|
|
ads_regapp(csApp);
|
|
|
|
resbuf *pXData = ads_buildlist(1001, csApp, 1000, szBlk, 1000, szSysBlk, 1040, nDang, 1040, nBigQ, 1040, dEle,
|
|
1000, sFeedElev, 1000 , sHotElev, 1000, sDwbName, NULL);
|
|
if (Acad::eOk != pNewPt->setXData(pXData))
|
|
{
|
|
return false;
|
|
}
|
|
ads_relrb(pXData);
|
|
|
|
pRecord->appendAcDbEntity(objId, pNewPt);
|
|
pRecord->close();
|
|
pNewPt->close();
|
|
return true;
|
|
}
|
|
|
|
// 洁具方向相对X轴的夹角
|
|
double GetEntDriection(const XPoint &ptStart, const XPoint &ptEnd)
|
|
{
|
|
double dAngle = 0.0;
|
|
AcGeVector3d vtX = AcGeVector3d::kXAxis;
|
|
// vtX.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis);
|
|
AcGeVector3d vtDir = ptEnd - ptStart;
|
|
vtDir.z = 0.0;
|
|
dAngle = vtX.angleTo(vtDir, AcGeVector3d::kZAxis);
|
|
if (fabs(dAngle - 2 * PI) < 0.001)
|
|
{
|
|
dAngle = 0.0;
|
|
}
|
|
return dAngle;
|
|
}
|
|
|
|
|
|
bool SetSanitaryDirPt(Entity entBlk, AcGePoint3d ptIns, AcGePoint3d ptBlck)
|
|
{
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, entBlk);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
double dBlkAng = pBlkRef->rotation();
|
|
double xscale;
|
|
double dMirror = -1;
|
|
entBlk.GetData(41, &xscale);
|
|
xscale = fabs(xscale);
|
|
if (xscale < 0)
|
|
{
|
|
dMirror = 1;
|
|
}
|
|
pBlkRef->close();
|
|
|
|
matrix = matrix.inverse();
|
|
TCHAR szBlkName[256];
|
|
entBlk.GetData(2, szBlkName);
|
|
AcDbBlockTable* pBlockTable = NULL;
|
|
AcDbBlockTableRecord* pRecord = NULL;
|
|
AcDbObjectId objId = NULL, blkId = NULL;
|
|
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
|
|
if(pBlockTable == NULL)
|
|
return false;
|
|
pBlockTable->getAt(szBlkName, pRecord, AcDb::kForWrite);
|
|
pBlockTable->close();
|
|
if(pRecord == NULL)
|
|
return false;
|
|
|
|
ptIns = ptIns.transformBy(matrix);
|
|
ptBlck = ptBlck.transformBy(matrix);
|
|
|
|
AcDbPoint *pNewPt = new AcDbPoint();
|
|
//pNewPt->setVisibility(AcDb::kInvisible);
|
|
pNewPt->setPosition(ptIns);
|
|
|
|
AcDbPoint *ptNewBlk = new AcDbPoint();
|
|
//ptNewBlk->setVisibility(AcDb::kInvisible);
|
|
ptNewBlk->setPosition(ptBlck);
|
|
|
|
CString csApp, csAppBlk;
|
|
csApp = _T("SANITARYDIRPT");
|
|
csAppBlk = _T("SANITARYPOS");
|
|
|
|
if(!XSymbolTable(_T("APPID"), csApp))
|
|
ads_regapp(csApp);
|
|
|
|
double dAngle = GetEntDriection(ptBlck, ptIns);
|
|
resbuf *pXData = ads_buildlist(1001, csApp, 1000, _T("ptDriction"), 1040, dBlkAng, 1040, dMirror, 1040, dAngle, NULL);
|
|
if (Acad::eOk != pNewPt->setXData(pXData))
|
|
{
|
|
return false;
|
|
}
|
|
ads_relrb(pXData);
|
|
|
|
if(!XSymbolTable(_T("APPID"), csAppBlk))
|
|
ads_regapp(csAppBlk);
|
|
|
|
resbuf *pXPosData = ads_buildlist(1001, csAppBlk, 1000, _T("ptPos"), NULL);
|
|
if (Acad::eOk != ptNewBlk->setXData(pXPosData))
|
|
{
|
|
return false;
|
|
}
|
|
ads_relrb(pXPosData);
|
|
|
|
pRecord->appendAcDbEntity(objId, pNewPt);
|
|
pRecord->appendAcDbEntity(blkId, ptNewBlk);
|
|
pRecord->close();
|
|
pNewPt->close();
|
|
ptNewBlk->close();
|
|
return true;
|
|
}
|
|
|
|
bool GetSanitaryDirPt(Entity ent, XPoint &ptRet, XPoint &ptBlk, double &dBlkAngle, bool &bIsMirror, double &dAngle)
|
|
{
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
pBlkRef->close();
|
|
|
|
CString csApp = _T("SANITARYDIRPT");
|
|
CString csAppBlk = _T("SANITARYPOS");
|
|
|
|
TCHAR szBlkName[256];
|
|
ent.GetData(2, szBlkName);
|
|
AcDbBlockTableRecord *pRecord = NULL;
|
|
AcDbBlockTable* pBlockTable = NULL;
|
|
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
|
|
if(pBlockTable == NULL)
|
|
return false;
|
|
if(Acad::eOk != pBlockTable->getAt(szBlkName, pRecord, AcDb::kForRead))
|
|
{
|
|
pBlockTable->close();
|
|
return false;
|
|
}
|
|
pBlockTable->close();
|
|
if(pRecord == NULL)
|
|
return false;
|
|
|
|
AcDbBlockTableRecordIterator *pIterator;
|
|
pRecord->newIterator(pIterator);
|
|
pRecord->close();
|
|
if(pIterator == NULL)
|
|
return false;
|
|
for(pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
pIterator->getEntity(pEnt, AcDb::kForRead);
|
|
if(pEnt != NULL)
|
|
{
|
|
CString name = pEnt->desc()->name();
|
|
AcDbPoint *pll = NULL;
|
|
if(pll = AcDbPoint::cast(pEnt))
|
|
{
|
|
resbuf *pRb = pEnt->xData(csApp);
|
|
if(pRb != NULL)
|
|
{
|
|
resbuf *pNext = pRb->rbnext;
|
|
if(pNext && pNext->restype == 1000)
|
|
{
|
|
pNext = pNext->rbnext;
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
dBlkAngle = pNext->resval.rreal;
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if(pNext && pNext->restype == 1040)
|
|
{
|
|
double dMirror = pNext->resval.rreal;
|
|
if (dMirror > 0)
|
|
{
|
|
bIsMirror = true;
|
|
}
|
|
else
|
|
{
|
|
bIsMirror = false;
|
|
}
|
|
pNext = pNext->rbnext;
|
|
}
|
|
if (pNext && pNext->restype == 1040)
|
|
{
|
|
dAngle = pNext->resval.rreal;
|
|
}
|
|
}
|
|
AcGePoint3d ptIns = pll->position();
|
|
ptIns = ptIns.transformBy(matrix);
|
|
ptRet = ptIns;
|
|
pEnt->close();
|
|
continue;
|
|
}
|
|
ads_relrb(pRb);
|
|
|
|
resbuf *pRbBlk = pEnt->xData(csAppBlk);
|
|
if(pRbBlk != NULL)
|
|
{
|
|
AcGePoint3d ptIns = pll->position();
|
|
ptIns = ptIns.transformBy(matrix);
|
|
ptBlk = ptIns;
|
|
pEnt->close();
|
|
continue;
|
|
}
|
|
ads_relrb(pRbBlk);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIterator;
|
|
if (!ptRet)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool GetSanitaryDriection(Entity ent, double &dSanitaryDriec)
|
|
{
|
|
XPoint ptTmp, ptBlk;
|
|
double dBlkAng = 0.0, dAngle = 0.0;
|
|
bool bIsMirror = false;
|
|
int nDataSource = GetSanitaryDataSourceType(ent);
|
|
if (nDataSource == 1 || nDataSource == 0)
|
|
{
|
|
if (!GetSanitaryDirPt(ent, ptTmp, ptBlk, dBlkAng, bIsMirror, dAngle))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AcDbObjectId Id = NULL;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(!pBlkRef)
|
|
return false;
|
|
ptBlk = pBlkRef->position();
|
|
pBlkRef->close();
|
|
|
|
CSanitaryInfo data;
|
|
XPoint ptFeed, ptHeat, ptDrain;
|
|
GetLocSanitaryData(ent, data, ptFeed, ptHeat, ptDrain, ptTmp);
|
|
}
|
|
|
|
dSanitaryDriec = GetEntDriection(ptBlk, ptTmp);
|
|
return true;
|
|
}
|
|
|
|
bool GetSanitaryDwbSerial(Entity ent,CString &sDwbName)
|
|
{
|
|
XPoint ptTmp;
|
|
CString csTmp1, csTmp2;
|
|
double nTmp(0), nDang(0), nBigQ(0), dEle(0), dAngle(0);
|
|
|
|
CString sHotElev, sFeedElev;
|
|
GetSanitaryInfo(ent, ptTmp, csTmp1, csTmp2, nTmp, nDang, nBigQ, dEle,0, sDwbName, sFeedElev, sHotElev);
|
|
GetSanitaryInfo(ent, ptTmp, csTmp1, csTmp2, nTmp, nDang, nBigQ, dEle,1, sDwbName, sFeedElev, sHotElev);
|
|
GetSanitaryInfo(ent, ptTmp, csTmp1, csTmp2, nTmp, nDang, nBigQ, dEle,2, sDwbName, sFeedElev, sHotElev);
|
|
if (!sDwbName.IsEmpty())
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//****************************************************************************************************
|
|
// 新定义洁具
|
|
//****************************************************************************************************
|
|
extern AcDbObjectId GetPickCirByBlk(Entity ent, XPoint ptPick);
|
|
extern void ClearSanitaryInfo(Entity ent);
|
|
extern BOOL SetDrainCirInBlk(Entity entBlk, AcDbObjectId IdCir, const TCHAR* szBlk,
|
|
const TCHAR* szSysBlk, double nDang, double nBigQ);
|
|
extern void ChangeBlkColor(PickSet &ss, int iCol);
|
|
|
|
|
|
class TArrowJig : public AcEdJig
|
|
{
|
|
protected:
|
|
//AcDbPolyline *m_pDrawEnt;
|
|
AcDbLine *m_pDrawEnt;
|
|
public:
|
|
TArrowJig(XPoint ptStart);
|
|
~TArrowJig();
|
|
int DoIt();
|
|
virtual DragStatus sampler();
|
|
XPoint m_ptStart, m_ptEnd;
|
|
protected:
|
|
virtual Adesk::Boolean update();
|
|
virtual AcDbEntity* entity() const;
|
|
};
|
|
|
|
TArrowJig::TArrowJig(XPoint ptStart)
|
|
{
|
|
m_ptStart = ptStart;
|
|
}
|
|
|
|
// 开始执行拖动
|
|
int TArrowJig::DoIt()
|
|
{
|
|
m_pDrawEnt = new AcDbLine;
|
|
XPushVar<int> vOrthoMode(_T("ORTHOMODE"), 1);//默认正交开
|
|
XPushVar<int> OsMode(_T("OSMODE"), 0); //关闭对象捕捉
|
|
setDispPrompt(_T("\n请选择洁具方向(给水点指向排水点方向):"));
|
|
|
|
AcEdJig::DragStatus stat = drag();
|
|
if (stat == kNormal)
|
|
{
|
|
return RTNORM;
|
|
}
|
|
return RTNONE;
|
|
}
|
|
|
|
AcEdJig::DragStatus TArrowJig::sampler()
|
|
{
|
|
return acquirePoint(m_ptEnd, m_ptStart);
|
|
}
|
|
|
|
// 更新实体数据
|
|
Adesk::Boolean TArrowJig::update()
|
|
{
|
|
Adesk::Boolean bRet=Adesk::kTrue;
|
|
|
|
AcGeVector3d vec = m_ptEnd - m_ptStart;
|
|
vec.normalize();
|
|
XPoint ptInLine = m_ptEnd - vec * 100;
|
|
vec.rotateBy(PI / 2, AcGeVector3d::kZAxis);
|
|
ptInLine = ptInLine - vec * 20;
|
|
|
|
m_pDrawEnt->setStartPoint(m_ptEnd);
|
|
m_pDrawEnt->setEndPoint(ptInLine);
|
|
// m_pDrawEnt->addVertexAt(1, ptInLine);
|
|
|
|
return bRet;
|
|
}
|
|
|
|
AcDbEntity* TArrowJig::entity() const
|
|
{
|
|
return (AcDbEntity *)m_pDrawEnt;
|
|
}
|
|
|
|
TArrowJig::~TArrowJig()
|
|
{
|
|
if(m_pDrawEnt)
|
|
delete m_pDrawEnt;
|
|
}
|
|
|
|
void Add2CurrentSpace(XPoint ptStart, XPoint ptEnd)
|
|
{
|
|
AcDbPolyline *pPolyLine = new AcDbPolyline;
|
|
pPolyLine->setColorIndex(4);
|
|
|
|
pPolyLine->addVertexAt(0, ptEnd,0, 0, 40);
|
|
AcGeVector3d vec = ptEnd - ptStart;
|
|
vec.normalize();
|
|
XPoint ptInLine = ptEnd - vec * 100;
|
|
|
|
pPolyLine->addVertexAt(1, ptInLine, 0, 0, 0);
|
|
pPolyLine->addVertexAt(2, ptStart);
|
|
|
|
AddToCurrentSpace(pPolyLine, Adesk::kTrue);
|
|
}
|
|
|
|
bool HasLocData(Entity ent)
|
|
{
|
|
TCHAR sCurBlkName[256];
|
|
ent.GetData(2, sCurBlkName);
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("SanitaryLocal.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取SanitaryLocal.dbf文件错误!"));
|
|
return false;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
CString sBlkName;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
|
|
GET_FIELD(pTable, _T("Name"), sBlkName);
|
|
if(sBlkName.Compare(sCurBlkName) == 0)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void GetPtByStr(const CString sText, AcGePoint3d &pt)
|
|
{
|
|
CString sX, sY, sZ;
|
|
int nIndex = 0;
|
|
nIndex = sText.Find(_T(","), 0);
|
|
if (nIndex > 0)
|
|
{
|
|
sX = sText.Left(nIndex);
|
|
}
|
|
CString sTmp = sText.Right(sText.GetLength() - nIndex - 1);
|
|
nIndex = sTmp.Find(_T(","), 0);
|
|
if (nIndex > 0)
|
|
{
|
|
sY = sTmp.Left(nIndex);
|
|
}
|
|
sTmp = sTmp.Right(sTmp.GetLength() - nIndex - 1);
|
|
sZ = sTmp;
|
|
pt.x = _tstof(sX);
|
|
pt.y = _tstof(sY);
|
|
pt.z = _tstof(sZ);
|
|
}
|
|
|
|
// 获取本地定义的洁具数据
|
|
bool GetLocSanitaryData(Entity ent, CSanitaryInfo &data, AcGePoint3d &ptFeed, AcGePoint3d &ptHeatFeed, AcGePoint3d &ptDrain, AcGePoint3d &ptDir)
|
|
{
|
|
TCHAR sCurBlkName[256];
|
|
ent.GetData(2, sCurBlkName);
|
|
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
pBlkRef->close();
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("SanitaryLocal.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取SanitaryLocal.dbf文件错误!"));
|
|
return false;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
CString sBlkName;
|
|
CString sFeedBlk, sFeedSys, sFeedPtXYZ, sHeatPtXYZ, sDrainXYZ, sDrainBlk, sPage, sDirection;
|
|
double dFeedPipe = 0.0, dHeatPipe = 0.0, dFeedng = 0.0, dFeeddq = 0.0, dDrainng = 0.0, dDrainnq = 0.0;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
|
|
GET_FIELD(pTable, _T("Name"), sBlkName);
|
|
if(sBlkName.Compare(sCurBlkName) == 0)
|
|
{
|
|
GET_FIELD(pTable, _T("Feedsys"), sFeedSys);
|
|
data.sSysBlk1 = sFeedSys;
|
|
GET_FIELD(pTable, _T("Feedblk"), sFeedBlk);
|
|
data.sFeedSys = sFeedBlk;
|
|
|
|
GET_FIELD(pTable, _T("Feedpipe"), dFeedPipe);
|
|
data.sFeedElev.Format(_T("%.3f"), dFeedPipe);
|
|
GET_FIELD(pTable, _T("Heatpipe"), dHeatPipe);
|
|
data.sHotElev.Format(_T("%.3f"), dHeatPipe);
|
|
if (dHeatPipe + 999 < 0.001)
|
|
{
|
|
data.sHotElev = _T("");
|
|
}
|
|
GET_FIELD(pTable, _T("Feedxyz"), sFeedPtXYZ);
|
|
GetPtByStr(sFeedPtXYZ, ptFeed);
|
|
data.dPtFeedElev = ptFeed.z;
|
|
GET_FIELD(pTable, _T("Heatxyz"), sHeatPtXYZ);
|
|
GetPtByStr(sHeatPtXYZ, ptHeatFeed);
|
|
GET_FIELD(pTable, _T("Drainblk"), sDrainBlk);
|
|
data.sSysBlk2 = sDrainBlk;
|
|
GET_FIELD(pTable, _T("Drainxyz"), sDrainXYZ);
|
|
GetPtByStr(sDrainXYZ, ptDrain);
|
|
GET_FIELD(pTable, _T("Drainng"), dDrainng);
|
|
data.dNg = dDrainng;
|
|
GET_FIELD(pTable, _T("Feedq"), dFeeddq);
|
|
data.dRateQ = dFeeddq;
|
|
GET_FIELD(pTable, _T("Feedng"), dFeedng);
|
|
data.dDang = dFeedng;
|
|
GET_FIELD(pTable, _T("Drainq"), dDrainnq);
|
|
data.dBigQ = dDrainnq;
|
|
GET_FIELD(pTable, _T("Directionx"), sDirection);
|
|
GetPtByStr(sDirection, ptDir);
|
|
GET_FIELD(pTable, _T("Page"), sPage);
|
|
data.sDwbName = sPage;
|
|
|
|
ptFeed = ptFeed.transformBy(matrix);
|
|
XPoint ptHeat = ptHeatFeed;
|
|
if (!!ptHeat)
|
|
{
|
|
ptHeatFeed = ptHeatFeed.transformBy(matrix);
|
|
}
|
|
ptDrain = ptDrain.transformBy(matrix);
|
|
ptDir = ptDir.transformBy(matrix);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool SetLocSanitaryData(Entity ent, const CSanitaryInfo &data, AcGePoint3d ptFeed, AcGePoint3d ptHeatFeed, AcGePoint3d ptDrain, AcGePoint3d ptDir)
|
|
{
|
|
TCHAR sCurBlkName[256];
|
|
ent.GetData(2, sCurBlkName);
|
|
AcDbObjectId Id;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(pBlkRef == NULL)
|
|
return false;
|
|
AcGeMatrix3d matrix = pBlkRef->blockTransform();
|
|
pBlkRef->close();
|
|
|
|
XPoint ptHeat = ptHeatFeed;
|
|
matrix = matrix.inverse();
|
|
ptFeed = ptFeed.transformBy(matrix);
|
|
if (!!ptHeat)
|
|
{
|
|
ptHeatFeed = ptHeatFeed.transformBy(matrix);
|
|
}
|
|
ptDrain = ptDrain.transformBy(matrix);
|
|
ptDir = ptDir.transformBy(matrix);
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("SanitaryLocal.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取SanitaryLocal.dbf文件错误!"));
|
|
return false;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
CString sBlkName;
|
|
CString sFeedPtXYZ, sHeatPtXYZ, sDrainXYZ, sDirection;
|
|
bool bFind = false;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("Name"), sBlkName);
|
|
if(sBlkName.Compare(sCurBlkName) == 0)
|
|
{
|
|
bFind = true;
|
|
SET_FIELD(pTable, _T("Feedsys"), data.sSysBlk1);
|
|
SET_FIELD(pTable, _T("Feedblk"), data.sFeedSys);
|
|
if (!data.sFeedElev.IsEmpty())
|
|
{
|
|
SET_FIELD(pTable, _T("Feedpipe"), data.sFeedElev);
|
|
}
|
|
|
|
if (!data.sHotElev.IsEmpty())
|
|
{
|
|
SET_FIELD(pTable, _T("Heatpipe"), data.sHotElev);
|
|
}
|
|
else
|
|
{
|
|
SET_FIELD(pTable, _T("Heatpipe"), _T("-999"));
|
|
}
|
|
|
|
sFeedPtXYZ.Format(_T("%f,%f,%f"), ptFeed.x, ptFeed.y, ptFeed.z);
|
|
SET_FIELD(pTable, _T("Feedxyz"), (const TCHAR*)sFeedPtXYZ);
|
|
|
|
if (!!ptHeat)
|
|
{
|
|
sHeatPtXYZ.Format(_T("%f,%f,%f"), ptHeatFeed.x, ptHeatFeed.y, ptHeatFeed.z);
|
|
SET_FIELD(pTable, _T("Heatxyz"), (const TCHAR*)sHeatPtXYZ);
|
|
}
|
|
else
|
|
{
|
|
SET_FIELD(pTable, _T("Heatxyz"), (const TCHAR*)_T(""));
|
|
}
|
|
|
|
SET_FIELD(pTable, _T("Drainblk"), data.sSysBlk2);
|
|
|
|
sDrainXYZ.Format(_T("%f,%f,%f"), ptDrain.x, ptDrain.y, ptDrain.z);
|
|
SET_FIELD(pTable, _T("Drainxyz"), (const TCHAR*)sDrainXYZ);
|
|
|
|
SET_FIELD(pTable, _T("Drainng"), data.dNg);
|
|
SET_FIELD(pTable, _T("Feedq"), data.dRateQ);
|
|
SET_FIELD(pTable, _T("Feedng"), data.dDang);
|
|
SET_FIELD(pTable, _T("Drainq"), data.dBigQ);
|
|
|
|
sDirection.Format(_T("%f,%f,%f"), ptDir.x, ptDir.y, ptDir.z);
|
|
SET_FIELD(pTable, _T("Directionx"), (const TCHAR*)sDirection);
|
|
|
|
SET_FIELD(pTable, _T("Page"), data.sDwbName);
|
|
return true;
|
|
}
|
|
}
|
|
if (!bFind)
|
|
{
|
|
if (pTable != NULL)
|
|
{
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("Name"), (const TCHAR*)sCurBlkName);
|
|
SET_FIELD(pTable, _T("Feedsys"), data.sSysBlk1);
|
|
SET_FIELD(pTable, _T("Feedblk"), data.sFeedSys);
|
|
if (!data.sFeedElev.IsEmpty())
|
|
{
|
|
SET_FIELD(pTable, _T("Feedpipe"), data.sFeedElev);
|
|
}
|
|
|
|
if (!data.sHotElev.IsEmpty())
|
|
{
|
|
SET_FIELD(pTable, _T("Heatpipe"), data.sHotElev);
|
|
}
|
|
else
|
|
{
|
|
SET_FIELD(pTable, _T("Heatpipe"), _T("-999"));
|
|
}
|
|
|
|
sFeedPtXYZ.Format(_T("%f,%f,%f"), ptFeed.x, ptFeed.y, ptFeed.z);
|
|
SET_FIELD(pTable, _T("Feedxyz"), (const TCHAR*)sFeedPtXYZ);
|
|
|
|
if (!!ptHeat)
|
|
{
|
|
sHeatPtXYZ.Format(_T("%f,%f,%f"), ptHeatFeed.x, ptHeatFeed.y, ptHeatFeed.z);
|
|
SET_FIELD(pTable, _T("Heatxyz"), (const TCHAR*)sHeatPtXYZ);
|
|
}
|
|
else
|
|
{
|
|
SET_FIELD(pTable, _T("Heatxyz"), (const TCHAR*)_T(""));
|
|
}
|
|
|
|
SET_FIELD(pTable, _T("Drainblk"), data.sSysBlk2);
|
|
|
|
sDrainXYZ.Format(_T("%f,%f,%f"), ptDrain.x, ptDrain.y, ptDrain.z);
|
|
SET_FIELD(pTable, _T("Drainxyz"), (const TCHAR*)sDrainXYZ);
|
|
|
|
SET_FIELD(pTable, _T("Drainng"), data.dNg);
|
|
SET_FIELD(pTable, _T("Feedq"), data.dRateQ);
|
|
SET_FIELD(pTable, _T("Feedng"), data.dDang);
|
|
SET_FIELD(pTable, _T("Drainq"), data.dBigQ);
|
|
|
|
sDirection.Format(_T("%f,%f,%f"), ptDir.x, ptDir.y, ptDir.z);
|
|
SET_FIELD(pTable, _T("Directionx"), (const TCHAR*)sDirection);
|
|
|
|
SET_FIELD(pTable, _T("Page"), data.sDwbName);
|
|
pTable->AppendEnd();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool HasEntData(Entity ent)
|
|
{
|
|
CSanitaryInfo CurInfo;
|
|
CString csTmp1, csTmp2, sDwbName, sHotElev, sFeedElev;
|
|
double nTmp, dEle(0);
|
|
XPoint ptHeatFeed, ptFeed, ptDrain;
|
|
GetSanitaryInfo(ent, ptHeatFeed, csTmp1, csTmp2, nTmp, CurInfo.dDang, CurInfo.dBigQ, dEle, 1,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
CurInfo.sHotElev = sHotElev;
|
|
|
|
GetSanitaryInfo(ent, ptFeed, csTmp1, csTmp2, nTmp, CurInfo.dDang, CurInfo.dRateQ, CurInfo.dPtFeedElev, 0,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
{
|
|
CurInfo.sSysBlk1 = csTmp2;
|
|
}
|
|
CurInfo.sFeedElev = sFeedElev;
|
|
|
|
GetSanitaryInfo(ent, ptDrain, csTmp1, csTmp2, nTmp, CurInfo.dNg, CurInfo.dBigQ, dEle, 2,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
{
|
|
CurInfo.sSysBlk2 = csTmp2;
|
|
}
|
|
CurInfo.sDwbName = sDwbName;
|
|
|
|
int iRet = CurInfo.CheckEntInfo();
|
|
if (iRet == 0)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// 判断洁具数据源
|
|
// 返回值 0:无数据可获取 1: 洁具本身获取数据 2:本地获取数据
|
|
int GetSanitaryDataSourceType(Entity ent)
|
|
{
|
|
bool bHasLocData = false, bHasEntData = false;
|
|
bHasEntData = HasEntData(ent);
|
|
bHasLocData = HasLocData(ent);
|
|
int nDataSource = -1;
|
|
if (bHasEntData && bHasLocData)
|
|
{
|
|
// zxl 2012.12.05 add 从注册表获取数据
|
|
CRegProperty regProp(GetRegLocation(), _T("TWTConfig"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
bool bRet = regProp.GetValue(_T("SanitaryDataType"), g_nSinataryDataType);
|
|
if (!bRet)
|
|
{
|
|
g_nSinataryDataType = 0;
|
|
}
|
|
|
|
if (g_nSinataryDataType == 0)
|
|
{
|
|
nDataSource = 1;
|
|
}
|
|
else
|
|
{
|
|
nDataSource = 2;
|
|
}
|
|
}
|
|
else if (bHasEntData)
|
|
{
|
|
nDataSource = 1;
|
|
}
|
|
else if (bHasLocData)
|
|
{
|
|
nDataSource = 2;
|
|
}
|
|
else
|
|
{
|
|
nDataSource = 0;
|
|
}
|
|
|
|
return nDataSource;
|
|
}
|
|
|
|
void NewDefineSanitary()
|
|
{
|
|
Entity ent;
|
|
RBList rbMask = ads_buildlist( -4, _T("<or"),
|
|
-4, _T("<and"), RTDXF0, _T("INSERT"), -4, _T("and>"),
|
|
-4, _T("<and"), RTDXF0, _T("AEC_BLOCK_INSERT"), -4, _T("and>"),
|
|
-4, _T("or>"), NULL);
|
|
if(SelectEntity(_T("\n请选择要定义的洁具图块(本图每种洁具只需定义一次):<退出>"), ent, rbMask) != RTNORM)
|
|
return;
|
|
CTemporaryResourceOverride vTemp;
|
|
CNewSanitaryDefineDlg dlg;
|
|
dlg.m_ent = ent;
|
|
|
|
CString sDwbName;
|
|
int iSanitaryType = 0;
|
|
int nDataSource = GetSanitaryDataSourceType(ent);
|
|
dlg.SetDataSourceType(nDataSource);
|
|
|
|
if (nDataSource == 2 || nDataSource == 0 || (!GetSanitaryDwbSerial(ent, sDwbName) && nDataSource == 1))//未定义过de洁具
|
|
{
|
|
CTemporaryResourceOverride vTemp2;
|
|
CNewSanitaryTypeDlg dlg2;
|
|
if(dlg2.DoModal() != IDOK)
|
|
return;
|
|
iSanitaryType = dlg2.GetSanitaryType();
|
|
dlg.SetSanitaryType(iSanitaryType);
|
|
}
|
|
else//定义过de洁具
|
|
{
|
|
int iCurType = 0;
|
|
GetDwbInfo(sDwbName, iCurType);
|
|
iSanitaryType = iCurType;
|
|
dlg.SetSanitaryType(iCurType);
|
|
dlg.SetPic(sDwbName);
|
|
}
|
|
|
|
if(dlg.DoModal() != IDOK)
|
|
return;
|
|
if (iSanitaryType == 12)//自定义洁具
|
|
{
|
|
if (!dlg.m_ptFeed && !dlg.m_ptDrain && !dlg.m_ptHeatFeed)
|
|
{
|
|
adsout << _T("\n没有指定给水点或排水点!");
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!dlg.m_ptFeed)
|
|
{
|
|
adsout << _T("\n没有指定给水点!");
|
|
return;
|
|
}
|
|
if(!dlg.m_id && !dlg.m_ptDrain)
|
|
{
|
|
adsout << _T("\n没有指定排水点或排水圆圈!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(dlg.m_iFeedElev == 1 && !!dlg.m_ptFeed)
|
|
{
|
|
dlg.m_ptFeed.z = dlg.m_CurInfo.dPtFeedElev;
|
|
if (!!dlg.m_ptHeatFeed && !dlg.m_CurInfo.sHotElev.IsEmpty())
|
|
{
|
|
dlg.m_ptHeatFeed.z = dlg.m_CurInfo.dPtFeedElev;
|
|
}
|
|
}
|
|
else if (!!dlg.m_ptFeed)
|
|
{
|
|
dlg.m_ptFeed.z = -1;
|
|
dlg.m_ptHeatFeed.z = 0;
|
|
}
|
|
|
|
double xscale, yscale;
|
|
ent.GetData(41, &xscale);
|
|
ent.GetData(42, &yscale);
|
|
BOOL bMirror = FALSE;
|
|
if(ent.Is(_T("INSERT")))
|
|
{
|
|
if(xscale < 0)
|
|
bMirror = TRUE;
|
|
}
|
|
else if(ent.Is(_T("AEC_BLOCK_INSERT")))
|
|
{
|
|
if(yscale < 0)
|
|
bMirror = TRUE;
|
|
}
|
|
|
|
CString sDwbSerial;
|
|
double dAngle = -1;
|
|
sDwbSerial = dlg.m_CurInfo.sDwbName;
|
|
bool bReDriection = false;
|
|
if (nDataSource == 1)
|
|
{
|
|
bReDriection = GetSanitaryDriection(ent, dAngle);
|
|
}
|
|
else if (nDataSource == 2 && !!dlg.m_ptDriection)
|
|
{
|
|
bReDriection = true;
|
|
}
|
|
|
|
if (bReDriection)
|
|
{
|
|
TCHAR szTmp[10];
|
|
INITGET_BEG(0, _T("Y N"));
|
|
if (acedGetKword(_T("\n洁具方向已存在,是否重新定义[Y/N]:<N>"), szTmp) == RTNORM)
|
|
{
|
|
INITGET_END();
|
|
if (szTmp[0] == 'Y' || szTmp[0] == 'y')
|
|
{
|
|
ClearSanitaryInfo(ent);
|
|
dlg.SetSanitaryDriection(ent);
|
|
}
|
|
else// 继续使用上次定义方向 zxl 2012.04.23 add
|
|
{
|
|
XPoint ptDir, ptBlk;
|
|
double dBlkAng = 0.0, dAngle = 0.0;
|
|
bool bIsMirror = false;
|
|
if (nDataSource != 1)// 从本地数据获取洁具方向
|
|
{
|
|
ptDir = dlg.m_ptDriection;
|
|
|
|
AcDbObjectId Id = NULL;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(!pBlkRef)
|
|
return;
|
|
ptBlk = pBlkRef->position();
|
|
pBlkRef->close();
|
|
}
|
|
else// 从洁具本身获取数据
|
|
{
|
|
GetSanitaryDirPt(ent, ptDir, ptBlk, dBlkAng, bIsMirror, dAngle);
|
|
}
|
|
|
|
ClearSanitaryInfo(ent);
|
|
dlg.m_ptDriection = ptDir;
|
|
SetSanitaryDirPt(ent, ptDir, ptBlk);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ClearSanitaryInfo(ent);
|
|
dlg.SetSanitaryDriection(ent);
|
|
}
|
|
|
|
if(!!dlg.m_ptFeed)
|
|
{
|
|
double dNg = dlg.m_CurInfo.dDang;
|
|
if(bMirror)
|
|
dNg = dNg * -1;
|
|
AddPointInBlk(ent, asPnt3d(dlg.m_ptFeed), dlg.m_csBlkName, dlg.m_CurInfo.sSysBlk1, dNg, dlg.m_CurInfo.dRateQ, 0, sDwbSerial, dlg.m_CurInfo.sFeedElev, _T(""));
|
|
}
|
|
if(!!dlg.m_ptHeatFeed)
|
|
{
|
|
dlg.m_ptHeatFeed.z = dlg.m_ptFeed.z;
|
|
//对于混水龙头, 不需要热水再绘制一遍
|
|
CString csSysBlk = dlg.m_CurInfo.sSysBlk1;
|
|
if(csSysBlk == _T("TWTSYS(00000016)") || csSysBlk == _T("TWTSYS(00000200)")
|
|
|| csSysBlk == _T("TWTSYS(00000467)")|| csSysBlk == _T("TWTSYS(00000471)")
|
|
|| csSysBlk == _T("TWTSYS(00000204)")|| csSysBlk == _T("TWTSYS(00000208)")
|
|
|| csSysBlk == _T("TWTSYS(00000344)")|| csSysBlk == _T("TWTSYS(00000463)"))
|
|
csSysBlk = _T("");
|
|
AddPointInBlk(ent, asPnt3d(dlg.m_ptHeatFeed), dlg.m_csBlkName, csSysBlk, dlg.m_CurInfo.dDang, 0, 1, sDwbSerial, _T(""), dlg.m_CurInfo.sHotElev);
|
|
}
|
|
if(dlg.m_id)
|
|
{
|
|
SetDrainCirInBlk(ent, dlg.m_id, dlg.m_csDrainBlk, dlg.m_CurInfo.sSysBlk2, dlg.m_CurInfo.dNg, dlg.m_CurInfo.dBigQ);
|
|
}
|
|
else if(!!dlg.m_ptDrain)
|
|
{
|
|
AddPointInBlk(ent, asPnt3d(dlg.m_ptDrain), dlg.m_csDrainBlk, dlg.m_CurInfo.sSysBlk2, dlg.m_CurInfo.dNg, dlg.m_CurInfo.dBigQ, 2, sDwbSerial, _T(""), _T(""));
|
|
}
|
|
SetLocSanitaryData(ent, dlg.m_CurInfo, dlg.m_ptFeed, dlg.m_ptHeatFeed, dlg.m_ptDrain, dlg.m_ptDriection);
|
|
|
|
TCHAR szBlkName[256];
|
|
ent.GetData(2, szBlkName);
|
|
|
|
RBList rbMask2 = ads_buildlist( -4, _T("<or"),
|
|
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, _T("*"), 2, szBlkName, -4, _T("and>"),
|
|
-4, _T("<and"), RTDXF0, _T("AEC_BLOCK_INSERT"), 8, _T("*"), 2, szBlkName, -4, _T("and>"),
|
|
-4, _T("or>"), NULL);
|
|
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"), NULL, NULL, rbMask2);
|
|
long len = ssAll.Length();
|
|
for(long i=0;i<len;i++)
|
|
{
|
|
Entity entBlk = ssAll[i];
|
|
OPENOBJ_BEGIN(entBlk, AcDb::kForWrite, AcDbBlockReference, pBlk);
|
|
if(pBlk)
|
|
{
|
|
pBlk->setColorIndex(4);
|
|
}
|
|
OPENOBJ_END();
|
|
}
|
|
|
|
ChangeBlkColor(ssAll, 0);//随块
|
|
}
|
|
|
|
//从注册表读取数据
|
|
bool ReadRegData(const CString &strKey, int& iVal)
|
|
{
|
|
CRegProperty regProp(GetRegLocation(), _T("SanitaryLinkType"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
return regProp.GetValue(strKey, iVal);
|
|
}
|
|
|
|
//将数据写入注册表
|
|
bool WriteRegData(const CString &strKey, int iVal)
|
|
{
|
|
CRegProperty regProp(GetRegLocation(), _T("SanitaryLinkType"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
return regProp.SetValue(strKey, iVal);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNewSanitaryDefineDlg dialog
|
|
|
|
CNewSanitaryDefineDlg::CNewSanitaryDefineDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CNewSanitaryDefineDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CNewSanitaryDefineDlg)
|
|
m_iType = 0;
|
|
m_iFeedElev = 1;
|
|
m_iCurPic = 0;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_iCurPos = 1;
|
|
m_iSelPos = 1;
|
|
m_iSanitaryType = 1;
|
|
m_bIsInitDlg = false;
|
|
m_nDataSourceType = -1;
|
|
|
|
CString csDwb = g_csDwbPath + _T("TwtSys");
|
|
XString xsTmp;
|
|
if(LoadDwbBlock(csDwb, _T("00000147"), xsTmp) != RTNORM) //排水点
|
|
return;
|
|
m_csDrainBlk = (const TCHAR*)xsTmp;
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::SetSanitaryType(int iType)
|
|
{
|
|
m_iSanitaryType = iType;
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CNewSanitaryDefineDlg)
|
|
DDX_Control(pDX, IDC_EDIT_HOT, m_wndHeatPipe);
|
|
DDX_Control(pDX, IDC_SCROLLBAR1, m_wndScroll);
|
|
DDX_Radio(pDX, IDC_RADIO_TYPE3, m_iType);
|
|
DDX_Text(pDX, IDC_EDIT_DANG, m_CurInfo.dDang);
|
|
DDX_Text(pDX, IDC_EDIT_BIGQ, m_CurInfo.dBigQ);
|
|
DDX_Text(pDX, IDC_EDIT_NG, m_CurInfo.dNg);
|
|
DDX_Text(pDX, IDC_EDIT_RATEQ, m_CurInfo.dRateQ);
|
|
DDX_Text(pDX, IDC_EDIT_FEED_ELEV, m_CurInfo.dPtFeedElev);
|
|
DDX_Radio(pDX, IDC_RADIO_FEEDELE1, m_iFeedElev);
|
|
DDX_Text(pDX, IDC_EDIT_FEED, m_CurInfo.sFeedElev);
|
|
DDX_Text(pDX, IDC_EDIT_HOT, m_CurInfo.sHotElev);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CNewSanitaryDefineDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CNewSanitaryDefineDlg)
|
|
ON_WM_PAINT()
|
|
ON_BN_CLICKED(IDC_PREVIEW2, OnPreview2)
|
|
ON_BN_CLICKED(IDC_PREVIEW3, OnPreview3)
|
|
ON_BN_CLICKED(IDC_RADIO_TYPE1, OnRadioType1)
|
|
ON_BN_CLICKED(IDC_BUTTON_PICK1, OnButtonPick1)
|
|
ON_BN_CLICKED(IDC_BUTTON_PICK2, OnButtonPick2)
|
|
ON_BN_CLICKED(IDC_BUTTON_PICK3, OnButtonPick3)
|
|
ON_BN_CLICKED(IDC_BUTTON_DANG, OnButtonDang)
|
|
ON_BN_CLICKED(IDC_RADIO_TYPE3, OnRadioType3)
|
|
ON_BN_CLICKED(IDC_BUTTON_PICK4, OnButtonPick4)
|
|
ON_BN_CLICKED(IDC_BUTTON_NG, OnButtonNg)
|
|
ON_BN_CLICKED(IDC_RADIO_TYPE4, OnRadioType4)
|
|
ON_BN_CLICKED(IDC_RADIO_FEEDELE1, OnRadioFeedele1)
|
|
ON_BN_CLICKED(IDC_RADIO_FEEDELE2, OnRadioFeedele2)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC1, OnPreviewPic1)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC2, OnPreviewPic2)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC3, OnPreviewPic3)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC4, OnPreviewPic4)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC5, OnPreviewPic5)
|
|
ON_BN_CLICKED(IDC_PREVIEW_PIC6, OnPreviewPic6)
|
|
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
|
|
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
|
|
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
|
|
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
|
|
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
|
|
ON_BN_CLICKED(IDC_BTN_SEL_TYPE, OnBtnSelType)
|
|
ON_WM_VSCROLL()
|
|
ON_WM_MOVE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//幻灯片数组
|
|
UINT pic[6] = {
|
|
IDC_PREVIEW_PIC1,
|
|
IDC_PREVIEW_PIC2,
|
|
IDC_PREVIEW_PIC3,
|
|
IDC_PREVIEW_PIC4,
|
|
IDC_PREVIEW_PIC5,
|
|
IDC_PREVIEW_PIC6,
|
|
};
|
|
|
|
//幻灯片按钮数组
|
|
UINT btn[6] = {
|
|
IDC_BUTTON1,
|
|
IDC_BUTTON2,
|
|
IDC_BUTTON3,
|
|
IDC_BUTTON4,
|
|
IDC_BUTTON5,
|
|
IDC_BUTTON6,
|
|
};
|
|
|
|
BOOL CNewSanitaryDefineDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_CurInfo.Clear();
|
|
m_entInfo.Clear();
|
|
m_DbInfo.Clear();
|
|
m_bIsInitDlg = true;
|
|
|
|
GetPicFromDB();
|
|
SetPreviewPic();
|
|
|
|
m_pDlgPic = new CSanitaryPicDlg;
|
|
|
|
pDXSave = new CDataExchange(this, TRUE);
|
|
pDXLoad = new CDataExchange(this, FALSE);
|
|
|
|
//获取实体本身扩展数据
|
|
CString csTmp1, csTmp2, sDwbName, sHotElev, sFeedElev;
|
|
double nTmp, dEle(0);
|
|
if (m_nDataSourceType == 1 || m_nDataSourceType == 0)
|
|
{
|
|
//从注册表读取大类连接方式
|
|
CString sSanitaryType;
|
|
sSanitaryType.Format(_T("SanitaryType%.0d"), m_iSanitaryType);
|
|
if (!ReadRegData(sSanitaryType, m_iType))
|
|
{
|
|
m_iType = 0;
|
|
}
|
|
|
|
GetSanitaryInfo(m_ent, m_ptHeatFeed, csTmp1, csTmp2, nTmp, m_CurInfo.dDang, m_CurInfo.dBigQ, dEle, 1,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
m_CurInfo.sHotElev = sHotElev;
|
|
|
|
GetSanitaryInfo(m_ent, m_ptFeed, csTmp1, csTmp2, nTmp, m_CurInfo.dDang, m_CurInfo.dRateQ, m_CurInfo.dPtFeedElev, 0,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
{
|
|
m_CurInfo.sSysBlk1 = csTmp2;
|
|
}
|
|
m_CurInfo.sFeedElev = sFeedElev;
|
|
|
|
GetSanitaryInfo(m_ent, m_ptDrain, csTmp1, csTmp2, nTmp, m_CurInfo.dNg, m_CurInfo.dBigQ, dEle, 2,
|
|
sDwbName, sFeedElev, sHotElev);
|
|
{
|
|
m_CurInfo.sSysBlk2 = csTmp2;
|
|
}
|
|
m_CurInfo.sDwbName = sDwbName;
|
|
}
|
|
else// 读取本地数据
|
|
{
|
|
GetLocSanitaryData(m_ent, m_CurInfo, m_ptFeed, m_ptHeatFeed, m_ptDrain, m_ptDriection);
|
|
m_csBlkName = m_CurInfo.sFeedSys;
|
|
if(m_csBlkName == _T("$TWTSYS$00000225"))
|
|
{
|
|
m_iType = 0;
|
|
}
|
|
else if(m_csBlkName == _T("$TWTSYS$00000519"))
|
|
{
|
|
m_iType = 1;
|
|
}
|
|
else if(m_csBlkName == _T("$TWTSYS$00000320"))
|
|
{
|
|
m_iType = 2;
|
|
}
|
|
|
|
m_CurInfo.sDwbName = _T("");
|
|
}
|
|
|
|
SetEntInfo();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
int iRet = m_entInfo.CheckEntInfo();
|
|
if (iRet == 0)
|
|
{
|
|
m_iCurPos = 1;
|
|
m_iCurPic = 0;
|
|
GetDataFromDB(m_iCurPic);
|
|
m_CurInfo = m_DbInfo;
|
|
}
|
|
else if (iRet == 1)
|
|
{
|
|
m_iCurPos = 1;
|
|
m_iCurPic = -1;
|
|
}
|
|
else
|
|
{
|
|
SetSelPic();
|
|
GetDataFromDB(m_iCurPic);
|
|
}
|
|
|
|
if (!m_ptHeatFeed || m_CurInfo.sHotElev.IsEmpty())//无热给水点,设定热给水管标高显示框为灰
|
|
{
|
|
m_CurInfo.sHotElev = _T("");
|
|
m_wndHeatPipe.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_wndHeatPipe.EnableWindow(TRUE);
|
|
}
|
|
|
|
//初始化滚动条
|
|
CWnd *pScroll = GetDlgItem(IDC_SCROLLBAR1);
|
|
if (m_vecPic.size() <= 6)
|
|
{
|
|
pScroll->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
pScroll->ShowWindow(SW_SHOW);
|
|
m_wndScroll.SetScrollRange(1, (m_vecPic.size() / 6) + 1, TRUE);
|
|
m_wndScroll.SetScrollPos(m_iCurPos);
|
|
}
|
|
UpdateData(FALSE);
|
|
OpenSlide();
|
|
|
|
if (m_CurInfo.dPtFeedElev > 0.001)
|
|
{
|
|
m_iFeedElev = 1;
|
|
}
|
|
else
|
|
{
|
|
m_CurInfo.dPtFeedElev = -1;
|
|
m_iFeedElev = 0;
|
|
}
|
|
CWnd *pWnd = GetDlgItem(IDC_EDIT_FEED_ELEV);
|
|
if(m_iFeedElev == 0)
|
|
pWnd->EnableWindow(FALSE);
|
|
else
|
|
pWnd->EnableWindow(TRUE);
|
|
|
|
UpdateData(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::SetDataSourceType(int nDataSource)
|
|
{
|
|
m_nDataSourceType = nDataSource;
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::SetEntInfo()
|
|
{
|
|
m_entInfo = m_CurInfo;
|
|
}
|
|
|
|
//设定选中图片名
|
|
void CNewSanitaryDefineDlg::SetPic(CString &sPic)
|
|
{
|
|
m_CurInfo.sDwbName = sPic;
|
|
}
|
|
|
|
//对幻灯片按照名字进行排序
|
|
bool SortPicSerial(CString str1, CString str2)
|
|
{
|
|
int iIndex = str1.Find(_T("-"));
|
|
str1 = str1.Right(str1.GetLength() - iIndex - 1);
|
|
double dSerial1 = _tstof(str1);
|
|
|
|
iIndex = str2.Find(_T("-"));
|
|
str2 = str2.Right(str2.GetLength() - iIndex - 1);
|
|
double dSerial2 = _tstof(str2);
|
|
|
|
if (dSerial1 - dSerial2 > 0.0)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//从数据库读取大类的所有小类
|
|
void CNewSanitaryDefineDlg::GetPicFromDB()
|
|
{
|
|
m_vecPic.clear();
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("Sanitary.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取Sanitary.dbf文件错误!"));
|
|
return;
|
|
}
|
|
CString sName;
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CString sType;
|
|
double dType = 0.0;
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext())
|
|
{
|
|
|
|
GET_FIELD(pTable, _T("Type"), sType);
|
|
dType = _tstof(sType);
|
|
if (fabs(dType - m_iSanitaryType) == 0)
|
|
{
|
|
GET_FIELD(pTable, _T("Page"), sName);
|
|
m_vecPic.push_back(sName);
|
|
}
|
|
}
|
|
|
|
sort(m_vecPic.begin(), m_vecPic.end(), SortPicSerial);
|
|
}
|
|
|
|
//设定选定图片的位置,设置该类型为当前选中状态
|
|
void CNewSanitaryDefineDlg::SetSelPic()
|
|
{
|
|
std::vector<CString>::iterator it = m_vecPic.begin();
|
|
int iPos = 0;
|
|
for (; it != m_vecPic.end(); it ++)
|
|
{
|
|
if (m_CurInfo.sDwbName.Compare(*it) == 0)
|
|
{
|
|
if (iPos < 6)
|
|
{
|
|
m_iSelPos = 1;
|
|
m_iCurPic = iPos;
|
|
}
|
|
else if (iPos >= 6 && iPos < 12)
|
|
{
|
|
m_iSelPos = 2;
|
|
m_iCurPic = iPos - 6;
|
|
}
|
|
else if (iPos >= 12 )
|
|
{
|
|
m_iSelPos = 3;
|
|
m_iCurPic = iPos - 12;
|
|
}
|
|
m_iCurPos = m_iSelPos;
|
|
break;
|
|
}
|
|
iPos ++;
|
|
}
|
|
SetPreviewPic();
|
|
}
|
|
|
|
//初始化幻灯片和按钮内容
|
|
void CNewSanitaryDefineDlg::SetPreviewPic()
|
|
{
|
|
//根据当前的滚动条位置和大类类型 设定相应的幻灯片
|
|
SetSanitaryPos();
|
|
SetBtnText();
|
|
}
|
|
|
|
//设置当前显示的幻灯片
|
|
void CNewSanitaryDefineDlg::SetSanitaryPos()
|
|
{
|
|
int iPos = (m_iCurPos - 1) * 6;
|
|
int iNum = m_vecPic.size();
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
if (iPos < iNum)
|
|
{
|
|
m_sPic[i] = m_vecPic[iPos];
|
|
iPos++;
|
|
}
|
|
else
|
|
{
|
|
m_sPic[i] = _T("");
|
|
}
|
|
}
|
|
}
|
|
|
|
//设置按钮文字
|
|
void CNewSanitaryDefineDlg::SetBtnText()
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
CWnd *pWnd = GetDlgItem(btn[i]);
|
|
pWnd->SetWindowText(m_sPic[i]);
|
|
|
|
CString sName;
|
|
CWnd *pImageBox = GetDlgItem(pic[i]);
|
|
sName.Format(_T("SanitaryAtlas("));
|
|
sName += m_sPic[i];
|
|
sName += _T(")");
|
|
m_sPicName[i] = sName;
|
|
|
|
DrawSlide(sName, pImageBox);
|
|
if (m_sPic[i].IsEmpty())
|
|
{
|
|
m_sPicName[i] = _T("");
|
|
pWnd->ShowWindow(SW_HIDE);
|
|
pImageBox->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
pWnd->ShowWindow(SW_SHOW);
|
|
pImageBox->ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
m_iCurPos = pScrollBar->GetScrollPos();
|
|
switch(nSBCode) //处理滚动信息
|
|
{
|
|
case SB_LINEUP: //向上的箭头被按下
|
|
{
|
|
if (m_iCurPos > 1)
|
|
{
|
|
m_iCurPos--;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case SB_LINEDOWN: //向下的箭头被按下
|
|
{
|
|
if (m_iCurPos < 3)
|
|
{
|
|
m_iCurPos++;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case SB_THUMBTRACK: //鼠标拖动
|
|
{
|
|
m_iCurPos = nPos;
|
|
break;
|
|
}
|
|
}
|
|
|
|
pScrollBar->SetScrollPos(m_iCurPos); //更新信息
|
|
|
|
SetPreviewPic();
|
|
SetPicSelBColor();
|
|
|
|
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this);
|
|
OpenSlide();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OpenSlide()
|
|
{
|
|
SetPreviewPic();
|
|
CWnd *pImageBox1 = GetDlgItem(IDC_PREVIEW2);
|
|
CWnd *pImageBox2 = GetDlgItem(IDC_PREVIEW3);
|
|
CWnd *pImageBox3 = GetDlgItem(IDC_PREVIEW1);
|
|
DrawSlide((const TCHAR*)m_CurInfo.sSysBlk1, pImageBox1);
|
|
DrawSlide((const TCHAR*)m_CurInfo.sSysBlk2, pImageBox2);
|
|
|
|
CString csTmp;
|
|
if(m_iType == 0)
|
|
{
|
|
m_csBlkName = _T("$TWTSYS$00000225");
|
|
csTmp = _T("TWTSYS(00000225)");
|
|
}
|
|
else if(m_iType == 1)
|
|
{
|
|
m_csBlkName = _T("$TWTSYS$00000519");
|
|
csTmp = _T("TWTSYS(00000519)");
|
|
}
|
|
else if(m_iType == 2)
|
|
{
|
|
m_csBlkName = _T("$TWTSYS$00000320");
|
|
csTmp = _T("TWTSYS(00000320)");
|
|
}
|
|
m_CurInfo.sFeedSys = m_csBlkName;
|
|
DrawSlide((const TCHAR*)csTmp, pImageBox3);
|
|
|
|
SetPicSelBColor();
|
|
}
|
|
|
|
//设置选定幻灯片背景色
|
|
void CNewSanitaryDefineDlg::SetPicSelBColor()
|
|
{
|
|
CWnd *pBtn = GetDlgItem(btn[m_iCurPic]);
|
|
CWnd *pOk = GetDlgItem(IDOK);
|
|
if (m_iCurPos == m_iSelPos)
|
|
{
|
|
pBtn->SetFocus();
|
|
}
|
|
else
|
|
{
|
|
pOk->SetFocus();
|
|
}
|
|
|
|
CWnd *pImageBox = GetDlgItem(pic[m_iCurPic]);
|
|
if (pImageBox != NULL)
|
|
{
|
|
CDC* pDC = pImageBox->GetDC();
|
|
CRect rc;
|
|
pImageBox->GetClientRect(&rc);
|
|
CImageDC* pImageDC = new CImageDC;
|
|
if (m_iCurPos == m_iSelPos)
|
|
{
|
|
pImageDC->InitDC(pDC, rc, RGB(24, 116, 205));
|
|
}
|
|
else
|
|
{
|
|
pImageDC->InitDC(pDC, rc, GetAcadBackColor());
|
|
}
|
|
|
|
pImageDC->PaintSlide(m_sPicName[m_iCurPic]);
|
|
pImageDC->SetDC(pDC);
|
|
pImageBox->ReleaseDC(pDC);
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreview3()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CSelectBlkDlg dlg;
|
|
dlg.m_csTkName = _T("TWTSYS");
|
|
dlg.m_csType = _T("排水点\\90度");
|
|
CWnd *pWnd = GetDlgItem(IDC_PREVIEW3);
|
|
CRect rect;
|
|
dlg.m_staticSlide.m_csCurRecord = m_CurInfo.sSysBlk2;
|
|
pWnd->GetWindowRect(&rect);
|
|
dlg.m_ptBase = rect.TopLeft();
|
|
if(dlg.DoModal() == IDOK){
|
|
CString csRet = dlg.m_staticSlide.m_csCurRecord;
|
|
XString xsTKName, xsRocord;
|
|
SplitSlbName(csRet, xsTKName, xsRocord);
|
|
csRet.Format(_T("%s(%s)"), dlg.m_csTkName, xsRocord);
|
|
|
|
m_CurInfo.sSysBlk2 = csRet;
|
|
OpenSlide();
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreview2()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CSelectBlkDlg dlg;
|
|
dlg.m_staticSlide.m_iRowNum = 4;
|
|
dlg.m_staticSlide.m_iColNum = 4;
|
|
dlg.m_csTkName = _T("TWTSYS");
|
|
dlg.m_csType = _T("给水点\\90度");
|
|
|
|
CWnd *pWnd = GetDlgItem(IDC_PREVIEW2);
|
|
CRect rect;
|
|
dlg.m_staticSlide.m_csCurRecord = m_CurInfo.sSysBlk1;
|
|
pWnd->GetWindowRect(&rect);
|
|
dlg.m_ptBase = rect.TopLeft();
|
|
if(dlg.DoModal() == IDOK){
|
|
CString csRet = dlg.m_staticSlide.m_csCurRecord;
|
|
XString xsTKName, xsRocord;
|
|
SplitSlbName(csRet, xsTKName, xsRocord);
|
|
csRet.Format(_T("%s(%s)"), dlg.m_csTkName, xsRocord);
|
|
|
|
m_CurInfo.sSysBlk1 = csRet;
|
|
OpenSlide();
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnRadioType1()
|
|
{
|
|
m_iType = 2;
|
|
OpenSlide();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnRadioType3()
|
|
{
|
|
m_iType = 0;
|
|
OpenSlide();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnRadioType4()
|
|
{
|
|
m_iType = 1;
|
|
OpenSlide();
|
|
}
|
|
|
|
//获取冷水给水点位置
|
|
void CNewSanitaryDefineDlg::OnButtonPick1()
|
|
{
|
|
HideDialog(this, TRUE);
|
|
bool bIsBig = false;
|
|
if (m_pDlgPic->m_hWnd)//判断当前幻灯片是否处于放大状态
|
|
{
|
|
bIsBig = true;
|
|
m_pDlgPic->DestroyWindow();
|
|
}
|
|
|
|
XPoint ptCen, pt1, pt2;
|
|
m_ent.GetExtend(pt1, pt2);
|
|
XLine line(pt1, pt2, 1);
|
|
line.MidPoint(ptCen);
|
|
if(!!m_ptFeed){
|
|
ptCen = m_ptFeed;
|
|
m_ptFeed = XPoint();
|
|
}
|
|
while(!m_ptFeed){
|
|
int ret = ads_getpoint(Wcs2Ucs(ptCen), _T("\n请点取冷水给水点位置:<中心>"), m_ptFeed);
|
|
m_ptFeed = Ucs2Wcs(m_ptFeed);
|
|
if(ret == RTNONE)
|
|
m_ptFeed = ptCen;
|
|
}
|
|
|
|
HideDialog(this, FALSE);
|
|
if (bIsBig)
|
|
{
|
|
m_pDlgPic->Create(IDD_SANITARY_PIC, this);
|
|
m_pDlgPic->ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
//获取热水给水点位置
|
|
void CNewSanitaryDefineDlg::OnButtonPick4()
|
|
{
|
|
HideDialog(this, TRUE);
|
|
bool bIsBig = false;
|
|
if (m_pDlgPic->m_hWnd)
|
|
{
|
|
bIsBig = true;
|
|
m_pDlgPic->DestroyWindow();
|
|
}
|
|
|
|
XPoint ptCen, pt1, pt2;
|
|
m_ent.GetExtend(pt1, pt2);
|
|
XLine line(pt1, pt2, 1);
|
|
line.MidPoint(ptCen);
|
|
if(!!m_ptHeatFeed){
|
|
ptCen = m_ptHeatFeed;
|
|
m_ptHeatFeed = XPoint();
|
|
}
|
|
while(!m_ptHeatFeed){
|
|
int ret = ads_getpoint(Wcs2Ucs(ptCen), _T("\n请点取热水给水点位置:<中心>"), m_ptHeatFeed);
|
|
m_ptHeatFeed = Ucs2Wcs(m_ptHeatFeed);
|
|
if(ret == RTNONE)
|
|
m_ptHeatFeed = ptCen;
|
|
if (ret == RTNORM)
|
|
{
|
|
if (m_iCurPic >= 0)
|
|
{
|
|
GetDataFromDB(m_iCurPic);
|
|
}
|
|
m_CurInfo.sHotElev = m_DbInfo.sHotElev;
|
|
m_wndHeatPipe.EnableWindow(TRUE);
|
|
DDX_Text(pDXLoad, IDC_EDIT_HOT, m_CurInfo.sHotElev);
|
|
|
|
if (m_iSanitaryType == 1)
|
|
{
|
|
m_CurInfo.dDang = 0.5;
|
|
m_CurInfo.dRateQ = 0.1;
|
|
}
|
|
else if (m_iSanitaryType == 8)
|
|
{
|
|
m_CurInfo.dDang = 0.7;
|
|
m_CurInfo.dRateQ = 0.14;
|
|
}
|
|
else if (m_iSanitaryType == 10)
|
|
{
|
|
m_CurInfo.dDang = 0.35;
|
|
m_CurInfo.dRateQ = 0.07;
|
|
}
|
|
DDX_Text(pDXLoad, IDC_EDIT_DANG, m_CurInfo.dDang);
|
|
DDX_Text(pDXLoad, IDC_EDIT_RATEQ, m_CurInfo.dRateQ);
|
|
}
|
|
}
|
|
|
|
HideDialog(this, FALSE);
|
|
if (bIsBig)
|
|
{
|
|
m_pDlgPic->Create(IDD_SANITARY_PIC, this);
|
|
m_pDlgPic->ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
//获取排水点位置
|
|
void CNewSanitaryDefineDlg::OnButtonPick2()
|
|
{
|
|
HideDialog(this, TRUE);
|
|
bool bIsBig = false;
|
|
if (m_pDlgPic->m_hWnd)
|
|
{
|
|
bIsBig = true;
|
|
m_pDlgPic->DestroyWindow();
|
|
}
|
|
|
|
XPoint ptCen, pt1, pt2;
|
|
m_ent.GetExtend(pt1, pt2);
|
|
XLine line(pt1, pt2, 1);
|
|
line.MidPoint(ptCen);
|
|
if(!!m_ptDrain){
|
|
ptCen = m_ptDrain;
|
|
m_ptDrain = XPoint();
|
|
}
|
|
|
|
while(!m_ptDrain){
|
|
int ret = ads_getpoint(Wcs2Ucs(ptCen), _T("\n请点取排水点位置:<中心>"), m_ptDrain);
|
|
m_ptDrain = Ucs2Wcs(m_ptDrain);
|
|
if(ret == RTNONE)
|
|
m_ptDrain = ptCen;
|
|
}
|
|
HideDialog(this, FALSE);
|
|
if (bIsBig)
|
|
{
|
|
m_pDlgPic->Create(IDD_SANITARY_PIC, this);
|
|
m_pDlgPic->ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButtonPick3()
|
|
{
|
|
HideDialog(this, TRUE);
|
|
bool bIsBig = false;
|
|
if (m_pDlgPic->m_hWnd)
|
|
{
|
|
bIsBig = true;
|
|
m_pDlgPic->DestroyWindow();
|
|
}
|
|
|
|
TCHAR szBlkName[256];
|
|
m_ent.GetData(2, szBlkName);
|
|
|
|
RBList rbMask = ads_buildlist( -4, _T("<or"),
|
|
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, _T("*"), 2, szBlkName, -4, _T("and>"),
|
|
-4, _T("<and"), RTDXF0, _T("AEC_BLOCK_INSERT"), 8, _T("*"), 2, szBlkName, -4, _T("and>"),
|
|
-4, _T("or>"), NULL);
|
|
XPoint ptPick1;
|
|
Entity ent;
|
|
if(SelectEntity1(_T("\n请选择洁具图块上的排水圆圈:<退出>"), ent, ptPick1, rbMask) == RTNORM){
|
|
if(ent == m_ent){
|
|
m_id = GetPickCirByBlk(ent, ptPick1);
|
|
}
|
|
}
|
|
HideDialog(this, FALSE);
|
|
if (bIsBig)
|
|
{
|
|
m_pDlgPic->Create(IDD_SANITARY_PIC, this);
|
|
m_pDlgPic->ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButtonDang()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CSanitaryDangDlg dlg;
|
|
if(dlg.DoModal() == IDOK && dlg.m_nRet > 0){
|
|
m_CurInfo.dDang = dlg.m_nRet;
|
|
m_CurInfo.dRateQ = dlg.m_nRet2;
|
|
DDX_Text(pDXLoad, IDC_EDIT_DANG, m_CurInfo.dDang);
|
|
DDX_Text(pDXLoad, IDC_EDIT_RATEQ, m_CurInfo.dRateQ);
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButtonNg()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CSanitaryDangDlg dlg;
|
|
dlg.m_iMode = 1;
|
|
if(dlg.DoModal() == IDOK){
|
|
m_CurInfo.dNg = dlg.m_nRet;
|
|
m_CurInfo.dBigQ = dlg.m_nRet2;
|
|
DDX_Text(pDXLoad, IDC_EDIT_NG, m_CurInfo.dNg);
|
|
DDX_Text(pDXLoad, IDC_EDIT_BIGQ, m_CurInfo.dBigQ);
|
|
}
|
|
}
|
|
|
|
|
|
void CNewSanitaryDefineDlg::OnRadioFeedele1()
|
|
{
|
|
DDX_Text(pDXSave, IDC_EDIT_FEED_ELEV, m_CurInfo.dPtFeedElev);//更新给水点标高编辑框数据
|
|
CWnd *pWnd = GetDlgItem(IDC_EDIT_FEED_ELEV);
|
|
m_CurInfo.dPtFeedElev = -1;
|
|
pWnd->EnableWindow(FALSE);
|
|
DDX_Text(pDXLoad, IDC_EDIT_FEED_ELEV, m_CurInfo.dPtFeedElev);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnRadioFeedele2()
|
|
{
|
|
DDX_Text(pDXSave, IDC_EDIT_FEED_ELEV, m_CurInfo.dPtFeedElev);
|
|
CWnd *pWnd = GetDlgItem(IDC_EDIT_FEED_ELEV);
|
|
pWnd->EnableWindow(TRUE);
|
|
|
|
if (m_iCurPic >= 0)
|
|
{
|
|
m_CurInfo.dPtFeedElev = m_DbInfo.dPtFeedElev;
|
|
}
|
|
DDX_Text(pDXLoad, IDC_EDIT_FEED_ELEV, m_CurInfo.dPtFeedElev);
|
|
}
|
|
|
|
//放大幻灯片
|
|
void CNewSanitaryDefineDlg::OnPreviewPic(const int iIndex)
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CRect rect;
|
|
CWnd *pWndPic = GetDlgItem(IDC_STATIC_SEL);
|
|
pWndPic->GetWindowRect(&rect);
|
|
m_pDlgPic->SetDlgPos(rect);
|
|
m_pDlgPic->SetBlkName(m_sPicName[iIndex]);
|
|
m_pDlgPic->Create(IDD_SANITARY_PIC, this);
|
|
::SetWindowPos(m_pDlgPic->m_hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);//设定本窗口在程序主窗口中置顶
|
|
m_pDlgPic->ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
BOOL CNewSanitaryDefineDlg::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if(WM_LBUTTONDBLCLK == pMsg->message)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
CStatic* pStatic = (CStatic*)GetDlgItem(pic[i]);
|
|
ASSERT(pStatic);
|
|
CRect rect;
|
|
pStatic->GetWindowRect(&rect);
|
|
if(rect.PtInRect(pMsg->pt))
|
|
{
|
|
OnPreviewPic(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic1()
|
|
{
|
|
TranslateData(0);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic2()
|
|
{
|
|
TranslateData(1);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic3()
|
|
{
|
|
TranslateData(2);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic4()
|
|
{
|
|
TranslateData(3);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic5()
|
|
{
|
|
TranslateData(4);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnPreviewPic6()
|
|
{
|
|
TranslateData(5);
|
|
}
|
|
|
|
//从数据库读取数据
|
|
void CNewSanitaryDefineDlg::GetDataFromDB(const int iIndex)
|
|
{
|
|
if (iIndex < 0)
|
|
{
|
|
return;
|
|
}
|
|
CString sPicName = m_sPic[iIndex];
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("Sanitary.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取Sanitary.dbf文件错误!"));
|
|
return;
|
|
}
|
|
CString sName;
|
|
CString sFeedBlk, sFeedSys, sFeedPtEle, sFeedPipe, sHeatPipe, sDrainBlk, sFeedNG, sFeedQ, sDrainNG, sDrainQ;
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("Page"), sName);
|
|
if(sName.Compare(sPicName) == 0)
|
|
{
|
|
m_DbInfo.sDwbName = sPicName;
|
|
GET_FIELD(pTable, _T("Feedsys"), sFeedSys);
|
|
CString csTK, csRecord;
|
|
SplitBlkStr(sFeedSys, csTK, csRecord);
|
|
m_DbInfo.sSysBlk1.Format(_T("TWTSYS(%s)"), csRecord);
|
|
|
|
GET_FIELD(pTable, _T("Feedptele"), sFeedPtEle);
|
|
m_DbInfo.dPtFeedElev = _tstof(sFeedPtEle);
|
|
if (m_DbInfo.dPtFeedElev == -1)
|
|
{
|
|
m_iFeedElev = 0;
|
|
}
|
|
else
|
|
{
|
|
m_iFeedElev = 1;
|
|
}
|
|
CWnd *pWnd = GetDlgItem(IDC_EDIT_FEED_ELEV);
|
|
if(m_iFeedElev == 0)
|
|
pWnd->EnableWindow(FALSE);
|
|
else
|
|
pWnd->EnableWindow(TRUE);
|
|
|
|
GET_FIELD(pTable, _T("Feedpipe"), sFeedPipe);
|
|
m_DbInfo.sFeedElev = sFeedPipe;
|
|
|
|
GET_FIELD(pTable, _T("Heatpipe"), sHeatPipe);
|
|
if (sHeatPipe.Compare(_T("-999")) == 0)
|
|
{
|
|
sHeatPipe = _T("");
|
|
m_wndHeatPipe.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_wndHeatPipe.EnableWindow(TRUE);
|
|
}
|
|
m_DbInfo.sHotElev = sHeatPipe;
|
|
|
|
GET_FIELD(pTable, _T("Drainblk"), sDrainBlk);
|
|
SplitBlkStr(sDrainBlk, csTK, csRecord);
|
|
m_DbInfo.sSysBlk2.Format(_T("TWTSYS(%s)"), csRecord);
|
|
|
|
GET_FIELD(pTable, _T("Feedng"), sFeedNG);
|
|
m_DbInfo.dDang = _tstof(sFeedNG);
|
|
|
|
GET_FIELD(pTable, _T("Feedq"), sFeedQ);
|
|
m_DbInfo.dRateQ = _tstof(sFeedQ);
|
|
|
|
GET_FIELD(pTable, _T("Drainng"), sDrainNG);
|
|
m_DbInfo.dNg = _tstof(sDrainNG);
|
|
|
|
GET_FIELD(pTable, _T("Drainq"), sDrainQ);
|
|
m_DbInfo.dBigQ = _tstof(sDrainQ);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//更新当前幻灯片对应的数据
|
|
void CNewSanitaryDefineDlg::TranslateData(const int iIndex)
|
|
{
|
|
if (iIndex < 0)
|
|
{
|
|
return;
|
|
}
|
|
m_iSelPos2 = m_iSelPos;//记忆当前滚动条位置
|
|
m_iSelPos = m_iCurPos;
|
|
|
|
m_iCurPic2 = m_iCurPic;//记忆当前选中的图片
|
|
m_iCurPic = iIndex;
|
|
|
|
//记忆当前对话框数据
|
|
m_CurInfo2 = m_CurInfo;
|
|
|
|
if (m_iSelPos2 == m_iSelPos && m_iCurPic2 == m_iCurPic)//选中图片未改变
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
GetDataFromDB(iIndex);
|
|
m_CurInfo = m_DbInfo;
|
|
UpdateData(FALSE);
|
|
OpenSlide();
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton1()
|
|
{
|
|
OnPreviewPic1();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton2()
|
|
{
|
|
OnPreviewPic2();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton3()
|
|
{
|
|
OnPreviewPic3();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton4()
|
|
{
|
|
OnPreviewPic4();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton5()
|
|
{
|
|
OnPreviewPic5();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnButton6()
|
|
{
|
|
OnPreviewPic6();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnCancel()
|
|
{
|
|
m_pDlgPic->DestroyWindow();
|
|
delete m_pDlgPic;
|
|
m_pDlgPic = NULL;
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnBtnSelType()
|
|
{
|
|
this->ShowWindow(SW_HIDE);
|
|
m_pDlgPic->DestroyWindow();
|
|
CTemporaryResourceOverride vTemp;
|
|
CNewSanitaryTypeDlg dlg;
|
|
if (dlg.DoModal() != IDOK)
|
|
{
|
|
CDialog::OnCancel();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
SetSanitaryType(dlg.GetSanitaryType());
|
|
m_iCurPos = 1;
|
|
m_iCurPic = -1;
|
|
OnInitDialog();
|
|
m_CurInfo.sDwbName = _T(""); // 对话框处于空选状态,图集号设定为空
|
|
UpdateData(FALSE);
|
|
}
|
|
this->ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnOK()
|
|
{
|
|
|
|
if (!UpdateData())
|
|
{
|
|
return;
|
|
}
|
|
//大类连接方式写入注册表
|
|
CString sSanitaryType;
|
|
sSanitaryType.Format(_T("SanitaryType%.0d"), m_iSanitaryType);
|
|
WriteRegData(sSanitaryType, m_iType);
|
|
|
|
if (IsChanged())
|
|
{
|
|
CString sTmp = _T("是否修改");
|
|
sTmp += m_sPic[m_iCurPic];
|
|
sTmp += _T("卫生设备安装图集参数?");
|
|
int iRet = AfxMessageBox(sTmp, MB_YESNO);
|
|
if (iRet == IDYES)
|
|
{
|
|
UpdateDBdata();
|
|
}
|
|
}
|
|
|
|
m_pDlgPic->DestroyWindow();
|
|
delete m_pDlgPic;
|
|
m_pDlgPic = NULL;
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
bool CNewSanitaryDefineDlg::IsChanged()//对比当前洁具数据和数据库数据是否相同,判定数据库是否需要更新
|
|
{
|
|
SetSelPic();
|
|
if (m_iCurPic < 0)
|
|
{
|
|
return false;
|
|
}
|
|
GetDataFromDB(m_iCurPic);
|
|
if (m_CurInfo.sDwbName == m_DbInfo.sDwbName
|
|
&& m_CurInfo.sSysBlk1 == m_DbInfo.sSysBlk1
|
|
&& m_CurInfo.sSysBlk2 ==m_DbInfo.sSysBlk2
|
|
&& fabs(m_CurInfo.dBigQ - m_DbInfo.dBigQ) <0.001
|
|
&& fabs(m_CurInfo.dDang - m_DbInfo.dDang) < 0.001
|
|
&& m_CurInfo.sFeedElev == m_DbInfo.sFeedElev
|
|
&& fabs(m_CurInfo.dNg - m_DbInfo.dNg) < 0.001
|
|
&& fabs(m_CurInfo.dPtFeedElev - m_DbInfo.dPtFeedElev) < 0.001
|
|
&& fabs(m_CurInfo.dRateQ - m_DbInfo.dRateQ) < 0.001)
|
|
{
|
|
if (!!m_ptHeatFeed)//若存在热给水点 判断热给水管标高
|
|
{
|
|
if (m_CurInfo.sHotElev == m_DbInfo.sHotElev)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
void GetDwbSerial(CString &csBlk, CString &csRecord)
|
|
{
|
|
int iIndex = csBlk.Find(_T("("));
|
|
CString sTmp;
|
|
if (iIndex > 0)
|
|
{
|
|
sTmp = csBlk.Right(csBlk.GetLength() - iIndex - 1);
|
|
}
|
|
iIndex = 0;
|
|
iIndex = sTmp.Find(_T(")"));
|
|
if (iIndex > 0)
|
|
{
|
|
csRecord = sTmp.Left(iIndex);
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::UpdateDBdata()
|
|
{
|
|
if (m_iCurPic < 0)
|
|
{
|
|
return;
|
|
}
|
|
CString sPicName = m_sPic[m_iCurPic];
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("Sanitary.dbf"), fullFile))
|
|
{
|
|
AfxMessageBox(_T("读取Sanitary.dbf文件错误!"));
|
|
return;
|
|
}
|
|
CString sName;
|
|
CString sFeedSys, sFeedPtEle, sFeedPipe, sHeatPipe, sDrainBlk, sFeedNG, sFeedQ, sDrainNG, sDrainQ;
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("Page"), sName);
|
|
if(sName.Compare(sPicName) == 0)
|
|
{
|
|
CString csRecord;
|
|
GetDwbSerial(m_CurInfo.sSysBlk1, csRecord);
|
|
sFeedSys.Format(_T("$TWTSYS$%s"), csRecord);
|
|
SET_FIELD(pTable, _T("Feedsys"), (const TCHAR*)sFeedSys);
|
|
|
|
sFeedPtEle.Format(_T("%.3f"), m_CurInfo.dPtFeedElev);
|
|
SET_FIELD(pTable, _T("Feedptele"), (const TCHAR*)sFeedPtEle);
|
|
|
|
SET_FIELD(pTable, _T("Feedpipe"), (const TCHAR*)m_CurInfo.sFeedElev);
|
|
|
|
sHeatPipe = m_CurInfo.sHotElev;
|
|
if (sHeatPipe.IsEmpty())
|
|
{
|
|
sHeatPipe.Format(_T("-999"));
|
|
}
|
|
SET_FIELD(pTable, _T("Heatpipe"), (const TCHAR*)sHeatPipe);
|
|
|
|
GetDwbSerial(m_CurInfo.sSysBlk2, csRecord);
|
|
sDrainBlk.Format(_T("$TWTSYS$%s"), csRecord);
|
|
SET_FIELD(pTable, _T("Drainblk"), (const TCHAR*)sDrainBlk);
|
|
|
|
sFeedNG.Format(_T("%.3f"), m_CurInfo.dDang);
|
|
SET_FIELD(pTable, _T("Feedng"), (const TCHAR*)sFeedNG);
|
|
|
|
sFeedQ.Format(_T("%.3f"), m_CurInfo.dRateQ);
|
|
SET_FIELD(pTable, _T("Feedq"), (const TCHAR*)sFeedQ);
|
|
|
|
sDrainNG.Format(_T("%.3f"), m_CurInfo.dNg);
|
|
SET_FIELD(pTable, _T("Drainng"), (const TCHAR*)sDrainNG);
|
|
|
|
sDrainQ.Format(_T("%.3f"), m_CurInfo.dBigQ);
|
|
SET_FIELD(pTable, _T("Drainq"), (const TCHAR*)sDrainQ);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CNewSanitaryDefineDlg::OnMove(int x, int y)
|
|
{
|
|
CDialog::OnMove(x, y);
|
|
if (m_pDlgPic && m_bIsInitDlg)
|
|
{
|
|
CRect rect;
|
|
CWnd *pWndPic = GetDlgItem(IDC_STATIC_SEL);
|
|
pWndPic->GetWindowRect(&rect);
|
|
m_pDlgPic->MoveWindow(rect);
|
|
}
|
|
}
|
|
|
|
double CNewSanitaryDefineDlg::SetSanitaryDriection(Entity ent)//设置洁具方向
|
|
{
|
|
AcDbObjectId Id = NULL;
|
|
acdbGetObjectId(Id, ent);
|
|
AcDbBlockReference *pBlkRef = NULL;
|
|
acdbOpenObject(pBlkRef, Id, AcDb::kForRead);
|
|
if(!pBlkRef)
|
|
return -1;
|
|
XPoint ptIns;
|
|
ptIns = pBlkRef->position();
|
|
pBlkRef->close();
|
|
|
|
XPoint ptDriection;
|
|
while (1)//重新定义方向
|
|
{
|
|
TArrowJig jig(ptIns);
|
|
if(jig.DoIt()==RTNORM)
|
|
{
|
|
acutPrintf(_T("\n洁具方向定义成功!"));
|
|
ptDriection = jig.m_ptEnd;
|
|
AcGeVector3d vt = ptDriection - ptIns;
|
|
vt.normalize();
|
|
m_ptDriection = ptIns + vt * 30;
|
|
SetSanitaryDirPt(ent, m_ptDriection, ptIns);
|
|
return GetEntDriection(ptIns, m_ptDriection);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
// 洁具携带数据类
|
|
CSanitaryInfo::CSanitaryInfo()
|
|
{
|
|
dDang = 0.0;
|
|
dBigQ = 0.0;
|
|
dPtFeedElev = 0.0;
|
|
dNg = 0.0;
|
|
dRateQ = 0.0;
|
|
}
|
|
|
|
void CSanitaryInfo::Clear()
|
|
{
|
|
dDang = 0.0;
|
|
dBigQ = 0.0;
|
|
dPtFeedElev = 0.0;
|
|
dNg = 0.0;
|
|
dRateQ = 0.0;
|
|
sDwbName = _T("");
|
|
sSysBlk1 = _T("");
|
|
sSysBlk2 = _T("");
|
|
sFeedElev = _T("");
|
|
sHotElev = _T("");
|
|
}
|
|
|
|
// 0 无扩展数据 1 有扩展数据但无图集号 2 有扩展数据也有图集号
|
|
int CSanitaryInfo::CheckEntInfo()
|
|
{
|
|
|
|
if (sSysBlk1.Compare(_T("")) == 0
|
|
&& sSysBlk2.Compare(_T("")) == 0
|
|
&& fabs(dBigQ - 0.0) < 0.001
|
|
&& fabs(dDang - 0.0) < 0.001
|
|
&& sFeedElev.Compare(_T("")) == 0
|
|
&& fabs(dNg - 0.0) < 0.001
|
|
&& fabs(dPtFeedElev - 0.0) < 0.001
|
|
&& fabs(dRateQ - 0.0) < 0.001
|
|
&& sDwbName.Compare(_T("")) == 0
|
|
&& sHotElev.Compare(_T("")) == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
else if (sDwbName.IsEmpty())
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 2;
|
|
}
|
|
} |