2135 lines
60 KiB
C++
2135 lines
60 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "THImpHvacFan.h"
|
|
|
|
#include "TDbInterfaceRecord.h"
|
|
#include "TDbXDataMap.h"
|
|
#include "TDbInterfaceMsgWrite.h"
|
|
#include "math.h"
|
|
#include "dbxutil.h"
|
|
|
|
using namespace TDb;
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
|
|
THImpHvacFan::THImpHvacFan()
|
|
{
|
|
}
|
|
|
|
THImpHvacFan::~THImpHvacFan()
|
|
{
|
|
}
|
|
|
|
BOOL THImpHvacFan::GetInterfaceSizeData(int nIndex, TInterface& pipeInterface) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
|
|
// 获取截面类型
|
|
TDb::HvacSectType eSectType = TDb::eRectangular;
|
|
m_pXDataMap->GetAt(HVAC_SectType, (int&)eSectType);
|
|
|
|
// 获取接口截面、宽度、厚度数据key值
|
|
LPCTSTR pszWidthKey, pszThickKey;
|
|
switch (nIndex)
|
|
{
|
|
case 0:
|
|
pszWidthKey = ((TDb::eCircular == eSectType) ? HFAN_Diameter : HFAN_Width);
|
|
pszThickKey = HFAN_Length;
|
|
break;
|
|
case 1:
|
|
pszWidthKey = ((TDb::eCircular == eSectType) ? HFAN_Diameter : HFAN_Width);
|
|
pszThickKey = HFAN_Length;
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
// 获取尺寸
|
|
double dWidth = 0.0, dThick = 0.0;
|
|
m_pXDataMap->GetAt(pszWidthKey, dWidth);
|
|
m_pXDataMap->GetAt(pszThickKey, dThick);
|
|
|
|
// 设置接口数据
|
|
pipeInterface.SetType(eSectType);
|
|
pipeInterface.SetSize(dWidth, dThick);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::GetInterface(int nIndex,TInterface& pipeInterface) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 获取各点位置
|
|
AcGePoint3d ptStart, ptCorner, ptEnd;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCorner);
|
|
ptStart = GetStartPt();
|
|
ptEnd = GetEndPt();
|
|
|
|
// 求两端方向
|
|
AcGeVector3d vtStart, vtEnd;
|
|
vtStart = ptStart - ptCorner;
|
|
vtEnd = ptEnd - ptCorner;
|
|
|
|
AcDbObjectId id;
|
|
switch(nIndex)
|
|
{
|
|
case 0:
|
|
// 如果起始接口和第一个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT1, id) && MakesureInterfaceValidate(id, ptStart, vtStart, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 如果起始接口和第二个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT2, id) && MakesureInterfaceValidate(id, ptStart, vtStart, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 没有管件连接
|
|
pipeInterface.SetOutDir(vtStart);
|
|
pipeInterface.SetOwnerId(m_pOwnerEnt->objectId());
|
|
pipeInterface.SetPosition(ptStart);
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
case 1:
|
|
// 如果末尾接口和第一个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT1, id) && MakesureInterfaceValidate(id, ptEnd, vtEnd, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 如果末尾接口和第二个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT2, id) && MakesureInterfaceValidate(id, ptEnd, vtEnd, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 没有管件连接
|
|
pipeInterface.SetOutDir(vtEnd);
|
|
pipeInterface.SetOwnerId(m_pOwnerEnt->objectId());
|
|
pipeInterface.SetPosition(ptEnd);
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::GetInterface(const AcGePoint3d& ptCon,TInterface& pipeInterface) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 获取各点位置
|
|
AcGePoint3d ptStart, ptCorner, ptEnd;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCorner);
|
|
ptStart = GetStartPt();
|
|
ptEnd = GetEndPt();
|
|
|
|
// 求两端方向
|
|
AcGeVector3d vtStart, vtEnd;
|
|
vtStart = ptStart - ptCorner;
|
|
vtEnd = ptEnd - ptCorner;
|
|
|
|
// 计算测试点到始末点的距离
|
|
double dDist1 = ptCon.distanceTo(ptStart);
|
|
double dDist2 = ptCon.distanceTo(ptEnd);
|
|
AcDbObjectId id;
|
|
|
|
// 位于起始点
|
|
if (dDist1 < 1.e-3)
|
|
{
|
|
// 如果起始接口和第一个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT1, id) && MakesureInterfaceValidate(id, ptStart, vtStart, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 如果起始接口和第二个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT2, id) && MakesureInterfaceValidate(id, ptStart, vtStart, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 没有管件连接
|
|
pipeInterface.SetOutDir(vtStart);
|
|
pipeInterface.SetOwnerId(m_pOwnerEnt->objectId());
|
|
pipeInterface.SetPosition(ptStart);
|
|
GetInterfaceSizeData(0,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
|
|
// 位于末尾点
|
|
if (dDist2 < 1.e-3)
|
|
{
|
|
// 如果末尾接口和第一个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT1, id) && MakesureInterfaceValidate(id, ptEnd, vtEnd, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 如果末尾接口和第二个管件连接
|
|
if (m_pXDataMap->GetAt(KEY_IDCNT2, id) && MakesureInterfaceValidate(id, ptEnd, vtEnd, pipeInterface))
|
|
{
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
// 没有管件连接
|
|
pipeInterface.SetOutDir(vtEnd);
|
|
pipeInterface.SetOwnerId(m_pOwnerEnt->objectId());
|
|
pipeInterface.SetPosition(ptEnd);
|
|
GetInterfaceSizeData(1,pipeInterface);
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::HasInterface(const AcGePoint3d& ptCon,const AcGeVector3d& vtDir)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 获取各点位置
|
|
AcGePoint3d ptStart, ptCorner, ptEnd;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCorner);
|
|
ptStart = GetStartPt();
|
|
ptEnd = GetEndPt();
|
|
|
|
// 求两端方向
|
|
AcGeVector3d vtStart, vtEnd;
|
|
vtStart = ptStart - ptCorner;
|
|
vtEnd = ptEnd - ptCorner;
|
|
|
|
// 计算测试点到始末点的距离
|
|
double dDist1 = ptCon.distanceTo(ptStart);
|
|
double dDist2 = ptCon.distanceTo(ptEnd);
|
|
|
|
// 位于起始点
|
|
if (dDist1 < 1.e-3)
|
|
return (vtDir.isParallelTo(vtStart));
|
|
|
|
// 位于末尾点
|
|
if (dDist2 < 1.e-3)
|
|
return (vtDir.isParallelTo(vtEnd));
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
int THImpHvacFan::GetInterfaceCount() const
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
BOOL THImpHvacFan::SetInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 打开对象
|
|
AcDbEntity* pEnt;
|
|
if (Acad::eOk != acdbOpenObject(pEnt, idConnect, AcDb::kForRead))
|
|
return FALSE;
|
|
|
|
// 检查对象类型,是否是暖通管件
|
|
if (!(pEnt->isKindOf(TDbHvacDuct::desc()) || pEnt->isKindOf(TDbHvacFitting::desc())
|
|
|| pEnt->isKindOf(TDbHvacEquipment::desc())))
|
|
{
|
|
pEnt->close();
|
|
return FALSE;
|
|
}
|
|
|
|
// 获取各点位置
|
|
AcGePoint3d ptStart, ptCorner, ptEnd;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCorner);
|
|
ptStart = GetStartPt();
|
|
ptEnd = GetEndPt();
|
|
|
|
// 求两端方向
|
|
AcGeVector3d vtStart, vtEnd;
|
|
vtStart = ptStart - ptCorner;
|
|
vtEnd = ptEnd - ptCorner;
|
|
|
|
// 计算测试点到始末点的距离
|
|
double dDist1 = ptConnect.distanceTo(ptStart);
|
|
double dDist2 = ptConnect.distanceTo(ptEnd);
|
|
|
|
// 基类指针
|
|
TDbInterfacesObj* pInterfaceObj = TDbInterfacesObj::cast(pEnt);
|
|
ASSERT(NULL != pInterfaceObj);
|
|
|
|
// 位于起始点
|
|
if (dDist1 < 1.e-3 && pInterfaceObj->HasInterface(ptStart, vtStart))
|
|
{
|
|
m_pXDataMap->SetAt(KEY_IDCNT1, idConnect);
|
|
pEnt->close();
|
|
return TRUE;
|
|
}
|
|
|
|
// 位于末尾点
|
|
if (dDist2 < 1.e-3 && pInterfaceObj->HasInterface(ptEnd, vtEnd))
|
|
{
|
|
m_pXDataMap->SetAt(KEY_IDCNT2, idConnect);
|
|
pEnt->close();
|
|
return TRUE;
|
|
}
|
|
|
|
pEnt->close();
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::RemoveInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 浅层次删除; 命名字典中的关系,需要外面移除关系,只移除内部关系
|
|
AcDbObjectId id;
|
|
m_pXDataMap->GetAt(KEY_IDCNT1, id);
|
|
if (id == idConnect)
|
|
{
|
|
m_pXDataMap->SetAt(KEY_IDCNT1, AcDbObjectId::kNull);
|
|
return TRUE;
|
|
}
|
|
|
|
m_pXDataMap->GetAt(KEY_IDCNT2, id);
|
|
if (id == idConnect)
|
|
{
|
|
m_pXDataMap->SetAt(KEY_IDCNT2, AcDbObjectId::kNull);
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::NotifyInterfaceToModify(const TInterfaceModifyMsg& iModiMsg,
|
|
TInterfaceModifyMsgs& iModiMsgs)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return FALSE;
|
|
|
|
// 获得消息传递设置, 确定是否传递消息
|
|
CString sDispatch = _T("0");
|
|
GetGlobalContext(KEY_DISPATCHMSG, sDispatch);
|
|
BOOL bDispatch = (_ttoi(sDispatch) != 0);
|
|
|
|
BOOL bMsgTranslate = FALSE;
|
|
// 获得消息类型, 根据消息类型处理
|
|
TDb::InterfaceOper eOper = iModiMsg.GetInterfaceOper();
|
|
switch (eOper)
|
|
{
|
|
case TDb::eMoveGripPoint:
|
|
// 夹点移动消息处理
|
|
bMsgTranslate = OnMoveGripPointMsgNotify(iModiMsg, iModiMsgs);
|
|
break;
|
|
default:
|
|
return bMsgTranslate;
|
|
}
|
|
|
|
// 记录修改标识
|
|
if (m_pOwnerEnt != NULL)
|
|
m_pOwnerEnt->recordGraphicsModified();
|
|
|
|
return bMsgTranslate;
|
|
}
|
|
|
|
BOOL THImpHvacFan::OnMoveGripPointMsgNotify( const TInterfaceModifyMsg& iModiMsg,
|
|
TInterfaceModifyMsgs& iModiMsgs )
|
|
{
|
|
if (!TAuxTools::IsAutoWorkOffset())
|
|
return FALSE;
|
|
|
|
ASSERT(NULL != m_pXDataMap);
|
|
|
|
AcDbObjectId id = iModiMsg.GetMsgOperateOn();
|
|
AcDbObjectId idOwner = m_pOwnerEnt->objectId();
|
|
if (id != idOwner) // 消息发送目标正确
|
|
return FALSE;
|
|
|
|
AcGeVector3d vtOffset = iModiMsg.GetMoveGripOffset();
|
|
if (vtOffset.isZeroLength())
|
|
return FALSE;
|
|
|
|
BOOL bMsgTranslate = FALSE;
|
|
|
|
int nPos = iModiMsg.GetGripPosition();
|
|
if (nPos == eStart || nPos == eMid || nPos == eEnd || nPos == eBr1 || nPos == eBr2)
|
|
{
|
|
// 设备接口消息传递
|
|
TInterface tIf;
|
|
AcDbObjectId idT(AcDbObjectId::kNull);
|
|
AcGePoint3d ptIf;
|
|
AcGeVector3d vtIf;
|
|
int i(0);
|
|
for (i = 0; i < GetInterfaceCount(); i++)
|
|
{
|
|
tIf.Reset();
|
|
if (!GetInterface(i, tIf))
|
|
continue;
|
|
|
|
ptIf = tIf.GetPosition();
|
|
vtIf = tIf.GetOutDir();
|
|
if (FindConnect(ptIf, vtIf, idOwner, idT))
|
|
{
|
|
if (vtOffset.isParallelTo(vtIf) || vtOffset.isPerpendicularTo(vtIf))
|
|
{
|
|
TInterfaceModifyMsg msg;
|
|
msg.SetMsgPoint(ptIf);
|
|
msg.SetMoveGripOffset(vtOffset);
|
|
msg.SetMsgOperateOn(idT);
|
|
msg.SetGripPosition(eStart);
|
|
iModiMsgs.append(msg);
|
|
bMsgTranslate = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
ptCenter += vtOffset;
|
|
m_pXDataMap->SetAt(HEQU_CenterPoint, ptCenter);
|
|
|
|
// 更新模型空间的扩展字典的注册的接口数据
|
|
AcGeMatrix3d xform;
|
|
xform.setToTranslation(vtOffset);
|
|
UpdateInterfaceRec(m_pOwnerEnt->objectId(), xform);
|
|
}
|
|
|
|
return bMsgTranslate;
|
|
}
|
|
|
|
double THImpHvacFan::GetEdgeLineWidth() const
|
|
{
|
|
BOOL bShow(FALSE);
|
|
GetGlobalContext(HVAC_SHOWWIDTH, bShow);
|
|
// 从图纸中读取加粗标识 避免全局参数对不同的图纸间的影响
|
|
TAuxTools::GetTHvacDataFromDwg(HVAC_SHOWWIDTH, bShow);
|
|
|
|
if (!bShow)
|
|
return 0.0;
|
|
|
|
ASSERT(NULL != m_pXDataMap);
|
|
double dWidth(0.0);
|
|
m_pXDataMap->GetAt(HFAN_EdgeWidth, dWidth);
|
|
|
|
return dWidth;
|
|
}
|
|
|
|
BOOL THImpHvacFan::MakeCurves(TComplexCurve& cplCurve) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
BOOL bHEdgeWeight(FALSE);
|
|
m_pXDataMap->GetAt(HFAN_EdgeWeight, bHEdgeWeight);
|
|
if (bHEdgeWeight)
|
|
{
|
|
AcGePoint3dArray arPts;
|
|
if (!GetBoxPts(arPts))
|
|
return FALSE;
|
|
|
|
TDb::TCurveElement el;
|
|
memset(&el,0,sizeof(TDb::TCurveElement));
|
|
el.bHided = FALSE;
|
|
el.dWidth = 0.0;
|
|
el.gsMark = 0;
|
|
el.dWidth = GetEdgeLineWidth();
|
|
AcDbObjectId idEdgeLine;
|
|
m_pXDataMap->GetAt(HFAN_EdgeLayer, idEdgeLine);
|
|
el.idSubLay = idEdgeLine;
|
|
|
|
el.ptGe[0] = arPts[1];
|
|
el.ptGe[1] = arPts[2];
|
|
el.ptGe[2] = arPts[2];
|
|
cplCurve.append(el);
|
|
el.ptGe[0] = arPts[3];
|
|
el.ptGe[1] = arPts[4];
|
|
el.ptGe[2] = arPts[4];
|
|
cplCurve.append(el);
|
|
// el.ptGe[0] = arPts[1];
|
|
// el.ptGe[1] = arPts[4];
|
|
// el.ptGe[2] = arPts[4];
|
|
// cplCurve.append(el);
|
|
// el.ptGe[0] = arPts[2];
|
|
// el.ptGe[1] = arPts[3];
|
|
// el.ptGe[2] = arPts[3];
|
|
// cplCurve.append(el);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::GetCurvesInSide(TComplexCurve& compCurve) const
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
AcDbPolyline* THImpHvacFan::MakePolyCurve() const
|
|
{
|
|
//
|
|
//
|
|
// 1 ┃━━━━━┃ 3
|
|
// ┃ ┃
|
|
// ┃ 0 ┃
|
|
// ┃ ┃
|
|
// 2 ┃━━━━━┃ 4
|
|
//
|
|
//
|
|
// 获取各点位置
|
|
AcDbPolyline* pPolyLine = NULL;
|
|
AcGePoint3d pt1, pt2, pt3, pt4, ptCenter;
|
|
AcGePoint3d ptU1, ptU2, ptU3, ptU4;
|
|
AcGeVector3d vtMain, vtNor, vtMainv;
|
|
double dLength(50.0), dDia(50.0);
|
|
AcDbDatabase* pDb = acdbCurDwg();
|
|
AcGeVector3d vtZAxis(pDb->ucsxdir().crossProduct(pDb->ucsydir()));
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNor);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_Diameter, dDia);
|
|
|
|
if (dLength < 1)
|
|
dLength = 1.0;
|
|
if (dDia < 1)
|
|
dDia = 1.0;
|
|
|
|
vtMainv = vtMain;
|
|
vtMainv.rotateBy(PI * 0.5, vtNor);
|
|
vtMain.normalize();
|
|
vtMainv.normalize();
|
|
|
|
pt1 = ptCenter + vtMainv * dDia * 0.5;
|
|
pt1 = pt1 - vtMain * dLength *0.5;
|
|
pt1 = pt1 - vtNor * dDia *0.5;
|
|
pt2 = ptCenter - vtMainv * dDia * 0.5;
|
|
pt2 = pt2 - vtMain * dLength *0.5;
|
|
pt2 = pt2 - vtNor * dDia *0.5;
|
|
|
|
pt3 = pt1 + vtMain * dLength;
|
|
pt4 = pt2 + vtMain * dLength;
|
|
ptU1 = pt1 + vtNor * dDia;
|
|
ptU2 = pt2 + vtNor * dDia;
|
|
ptU3 = pt3 + vtNor * dDia;
|
|
ptU4 = pt4 + vtNor * dDia;
|
|
AcGePoint3dArray arpts;
|
|
BOOL bCircle(FALSE);
|
|
|
|
// mcl changed by below 2010.07.28.纠正对于,俯视跟前后视图的错误判断
|
|
// if (vtNor.angleTo(vtZAxis) < PI*0.25 || vtNor.angleTo(-vtZAxis) < PI*0.25)
|
|
// {
|
|
// arpts.append(pt1);
|
|
// arpts.append(pt2);
|
|
// arpts.append(pt4);
|
|
// arpts.append(pt3);
|
|
// }
|
|
// else if (vtNor.angleTo(pDb->ucsxdir()) < PI*0.25 || vtNor.angleTo(-pDb->ucsxdir()) < PI*0.25)
|
|
// {
|
|
// ptU2.z = pt2.z = ptU1.z = pt1.z = ptCenter.z;
|
|
// arpts.append(ptU2);
|
|
// arpts.append(pt2);
|
|
// arpts.append(pt1);
|
|
// arpts.append(ptU1);
|
|
// bCircle = TRUE;
|
|
// }
|
|
// else if (vtNor.angleTo(pDb->ucsydir()) < PI*0.25 || vtNor.angleTo(-pDb->ucsydir()) < PI*0.25)
|
|
// {
|
|
// ptU1.z = pt1.z = ptU3.z = pt3.z = ptCenter.z;
|
|
// arpts.append(ptU1);
|
|
// arpts.append(pt1);
|
|
// arpts.append(pt3);
|
|
// arpts.append(ptU3);
|
|
// }
|
|
|
|
if (vtMain.angleTo(vtZAxis) < PI*0.25 || vtMain.angleTo(vtZAxis) > PI*0.75) // 竖向,圆形
|
|
{
|
|
ptU2.z = pt2.z = ptU1.z = pt1.z = ptCenter.z;
|
|
arpts.append(ptU2);
|
|
arpts.append(pt2);
|
|
arpts.append(pt1);
|
|
arpts.append(ptU1);
|
|
bCircle = TRUE;
|
|
}
|
|
else
|
|
{
|
|
if (vtNor.angleTo(vtZAxis) < PI*0.25 || vtNor.angleTo(-vtZAxis) < PI*0.25) // 常规俯视图
|
|
{
|
|
arpts.append(pt1);
|
|
arpts.append(pt2);
|
|
arpts.append(pt4);
|
|
arpts.append(pt3);
|
|
}
|
|
else // 前后侧视图
|
|
{
|
|
ptU1.z = pt1.z = ptU3.z = pt3.z = ptCenter.z;
|
|
arpts.append(ptU1);
|
|
arpts.append(pt1);
|
|
arpts.append(pt3);
|
|
arpts.append(ptU3);
|
|
}
|
|
}
|
|
|
|
AcGePlane plan(arpts[0], arpts[1], arpts[2]);
|
|
AcGePoint3d ptOrth = AcGePoint3d::kOrigin.orthoProject(plan);
|
|
plan.set(ptOrth, vtZAxis);
|
|
|
|
double dEl = ptOrth.asVector().length();
|
|
if (ptOrth.asVector().angleTo(plan.normal()) > PI*0.5)
|
|
dEl *= -1.0;
|
|
|
|
pPolyLine = new AcDbPolyline;
|
|
if (bCircle)
|
|
{
|
|
AcGePoint3d ptC1(TAuxTools::Mid(arpts[0], arpts[1]));
|
|
AcGePoint3d ptC2(TAuxTools::Mid(arpts[2], arpts[3]));
|
|
pPolyLine->addVertexAt(0, ptC1.convert2d(plan), 1);
|
|
pPolyLine->addVertexAt(1, ptC2.convert2d(plan), 1);
|
|
}
|
|
else
|
|
{
|
|
pPolyLine->addVertexAt(0,arpts[0].convert2d(plan));
|
|
pPolyLine->addVertexAt(1,arpts[1].convert2d(plan));
|
|
pPolyLine->addVertexAt(2,arpts[2].convert2d(plan));
|
|
pPolyLine->addVertexAt(3,arpts[3].convert2d(plan));
|
|
}
|
|
|
|
pPolyLine->setClosed(Adesk::kTrue);
|
|
pPolyLine->setElevation(dEl);
|
|
pPolyLine->setNormal(plan.normal());
|
|
|
|
return pPolyLine;}
|
|
|
|
BOOL THImpHvacFan::MakePolyCurveFaces(AcDbVoidPtrArray& arFaces)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
void THImpHvacFan::GetKindName(CString& sName)
|
|
{
|
|
sName = _T("TCH_HFAN");
|
|
}
|
|
|
|
BOOL THImpHvacFan::GetGeomExtentsEdge(TComplexCurve& crLoop)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
TDb::Position THImpHvacFan::ExplainGripIndex(int nIndex) const
|
|
{
|
|
switch(nIndex)
|
|
{
|
|
case 0:
|
|
{
|
|
return TDb::eInf1;
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
return TDb::eInf2;
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
return TDb::eCommand0;
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
return TDb::eCommand1;
|
|
break;
|
|
}
|
|
case 4:
|
|
{
|
|
return TDb::eAdjust0;
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return TDb::eInf1;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::GetGripText(int i, CString &cs) const
|
|
{
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
{
|
|
cs = _T("移动");
|
|
break;
|
|
}
|
|
case 2:
|
|
case 3:
|
|
{
|
|
cs = _T("启动绘制命令");
|
|
break;
|
|
}
|
|
case 4:
|
|
{
|
|
cs = _T("改变方向");
|
|
break;
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
void THImpHvacFan::GetTips(CMapStringToString& mapLable2Tip) const
|
|
{
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::ExplodeOrDraw3d(XExplodeDraw &mode) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
AcGePoint3d ptCenter;
|
|
AcDbObjectId idCen;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_Part3D, idCen);
|
|
ExplodeOrDraw2d(mode);
|
|
Draw3dBox(mode);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
AcGeVector3d THImpHvacFan::GetNormal() const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
AcGeVector3d vtNor;
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNor);
|
|
return vtNor.normalize();
|
|
}
|
|
|
|
AcGePoint3d THImpHvacFan::GetStartPt() const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
// 获取各点位置
|
|
AcGePoint3d ptCenter;
|
|
AcGeVector3d vtMain;
|
|
double dLength(50.0);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
vtMain.normalize();
|
|
return ptCenter - vtMain * dLength * 0.5;
|
|
}
|
|
|
|
AcGePoint3d THImpHvacFan::GetEndPt() const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
// 获取各点位置
|
|
AcGePoint3d ptCenter;
|
|
AcGeVector3d vtMain;
|
|
double dLength(50.0);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
vtMain.normalize();
|
|
return ptCenter + vtMain * dLength * 0.5;
|
|
}
|
|
|
|
AcGePoint3d THImpHvacFan::GetHandPt() const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
// 获取各点位置
|
|
AcGePoint3d ptCenter;
|
|
AcGeVector3d vtMain;
|
|
double dWidth(50.0);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_Width, dWidth);
|
|
vtMain.rotateBy(PI * 0.5,GetNormal());
|
|
vtMain.normalize();
|
|
return ptCenter + vtMain * dWidth * 0.5;
|
|
}
|
|
|
|
AcGePoint3d THImpHvacFan::GetLabelPt() const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
// 获取各点位置
|
|
AcGePoint3d ptCenter;
|
|
double dLength;
|
|
AcGeVector3d vtMain;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
ptCenter += vtMain * (dLength * 0.5 + 150);
|
|
return ptCenter;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::ExplodeOrDrawBlock2d(XExplodeDraw &mode) const
|
|
{
|
|
return ExplodeOrDraw2d(mode);
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::ExplodeOrDraw2d(XExplodeDraw &mode) const
|
|
{
|
|
if (m_pXDataMap == NULL)
|
|
{
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
AcDbObjectId idCen;
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_PartCenter, idCen);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
|
|
InserBlockCen(mode, ptCenter, idCen);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::InserBlockCen(XExplodeDraw &mode, AcGePoint3d ptCenter, AcDbObjectId idBlock) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
AcGeVector3d vtMain;
|
|
double dLength(10.0);
|
|
double dWidth(10.0);
|
|
double dThick(10.0);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_Width, dWidth);
|
|
m_pXDataMap->GetAt(HFAN_Thick, dThick);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
dLength *= 0.001;
|
|
dWidth *= 0.001;
|
|
|
|
double dAngle = AcGeVector3d::kXAxis.angleTo(vtMain,GetNormal());
|
|
// LixlAdd倾斜布置阀门,主向量须向XY平面投影,计算出来的图块旋转角度才会准确
|
|
if (!(GetNormal().isParallelTo(AcGeVector3d::kZAxis)) && !(GetNormal().isPerpendicularTo(AcGeVector3d::kZAxis)))
|
|
dAngle = AcGeVector3d::kXAxis.angleTo(vtMain.orthoProject(AcGeVector3d::kZAxis), AcGeVector3d::kZAxis);
|
|
|
|
AcGeScale3d scale(dLength, dWidth, dThick);
|
|
int bMirror(0);
|
|
m_pXDataMap->GetAt(HFAN_IsMirror, bMirror);
|
|
if (bMirror == 1)
|
|
{
|
|
scale.set(-dLength, dWidth, dThick);
|
|
}
|
|
|
|
AcDbObject * pObj;
|
|
XPoint xpoint = ptCenter;
|
|
if (acdbOpenObject(pObj, idBlock, AcDb::kForRead)!=Acad::eOk) return Acad::eNotImplementedYet;
|
|
AcDbBlockTableRecord * pBlock = AcDbBlockTableRecord::cast(pObj);
|
|
if (pBlock == NULL)
|
|
{
|
|
pObj->close();
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
mode.DrawBlock(*pBlock, xpoint, scale, dAngle, TRUE);
|
|
pObj->close();
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::InserBlockHand(XExplodeDraw &mode) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::InserBlockCen(AcGePoint3d ptCenter,XExplodeDraw &mode) const
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
AcDbObjectId idCen;
|
|
AcGeVector3d vtMain;
|
|
double dLength(10.0);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_PartCenter, idCen);
|
|
|
|
// double dAngle = AcGeVector3d::kXAxis.angleTo(vtMain,GetNormal());
|
|
|
|
double dAngle = acutAngle(asDblArray(GetStartPt()), asDblArray(GetEndPt()));
|
|
// LixlAdd倾斜布置阀门,主向量须向XY平面投影,计算出来的图块旋转角度才会准确
|
|
if (!(GetNormal().isParallelTo(AcGeVector3d::kZAxis)) && !(GetNormal().isPerpendicularTo(AcGeVector3d::kZAxis)))
|
|
dAngle = AcGeVector3d::kXAxis.angleTo(vtMain.orthoProject(AcGeVector3d::kZAxis), AcGeVector3d::kZAxis);
|
|
|
|
AcGeScale3d scale(dLength,dLength,1);
|
|
int bMirror(0);
|
|
m_pXDataMap->GetAt(HFAN_IsMirror, bMirror);
|
|
if (bMirror == 1)
|
|
{
|
|
scale.set(-dLength, dLength, 1);
|
|
}
|
|
AcDbObject * pObj;
|
|
XPoint xpoint = ptCenter;
|
|
if (acdbOpenObject(pObj, idCen, AcDb::kForRead)!=Acad::eOk) return Acad::eNotImplementedYet;
|
|
AcDbBlockTableRecord * pBlock = AcDbBlockTableRecord::cast(pObj);
|
|
if (pBlock == NULL)
|
|
{
|
|
pObj->close();
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
mode.DrawBlock(*pBlock,xpoint,scale * 0.5,dAngle,TRUE);
|
|
pObj->close();
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::Draw2dBox(XExplodeDraw &mode) const
|
|
{
|
|
AcGeVector3d vtNor;
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNor);
|
|
AcGePoint3dArray arPts;
|
|
GetBoxPts(arPts);
|
|
double dEl;
|
|
AcGePlane plane = TAuxTools::GetHidePlane(arPts[1],arPts[2],arPts[3],vtNor,dEl);
|
|
AcDbPolyline polyLine;
|
|
polyLine.addVertexAt(0,arPts[1].convert2d(plane));
|
|
polyLine.addVertexAt(1,arPts[2].convert2d(plane));
|
|
polyLine.addVertexAt(2,arPts[3].convert2d(plane));
|
|
polyLine.addVertexAt(3,arPts[4].convert2d(plane));
|
|
mode.Polyline(polyLine);
|
|
return Acad::eOk;
|
|
}
|
|
// 5 6
|
|
// ┃ ┃
|
|
// 1 ┃━━━━━┃ 2
|
|
// ┃ ┃
|
|
// ┃ 0 ┃
|
|
// ┃ ┃
|
|
// 4 ┃━━━━━┃ 3
|
|
// ┃ ┃
|
|
// 8 7
|
|
//
|
|
BOOL THImpHvacFan::GetBoxPts(AcGePoint3dArray &arPts) const
|
|
{
|
|
// 获取各点位置
|
|
AcGePoint3d ptStart, ptEnd, ptCenter;
|
|
AcGeVector3d vtMain, vtNor, vtMainv;
|
|
double dLength(50.0), dThick(50.0), dWidth(50.0), dPlusEdge(50.0);
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNor);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_Width, dWidth);
|
|
m_pXDataMap->GetAt(HFAN_Thick, dThick);
|
|
vtMainv = vtMain;
|
|
vtMainv.rotateBy(PI * 0.5, vtNor);
|
|
vtMain.normalize();
|
|
vtMainv.normalize();
|
|
dPlusEdge = dWidth * 0.1;
|
|
//0
|
|
arPts.append(ptCenter);
|
|
AcGePoint3d pt;
|
|
pt = ptCenter - vtMain * dLength * 0.5;
|
|
pt = pt + vtMainv * dWidth * 0.5;
|
|
//1
|
|
arPts.append(pt);
|
|
//2
|
|
arPts.append(arPts[1] + vtMain * dLength);
|
|
//3
|
|
arPts.append(arPts[2] - vtMainv * dWidth);
|
|
//4
|
|
arPts.append(arPts[1] - vtMainv * dWidth);
|
|
return TRUE;
|
|
}
|
|
|
|
void THImpHvacFan::list() const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
|
|
AcGePoint3d ptCenter;
|
|
AcGeVector3d vtMain;
|
|
CString sType,sName;
|
|
double dLength(50.0), dThick(50.0), dWidth(50.0), dPlusEdge(50.0);
|
|
double dairload(0);
|
|
m_pXDataMap->GetAt(HFAN_SEquipType, sType);
|
|
m_pXDataMap->GetAt(HFAN_SEquipName, sName);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_Width, dWidth);
|
|
m_pXDataMap->GetAt(HFAN_Thick, dThick);
|
|
|
|
acutPrintf(_T("\n\t\t\t\t\t\t\t\t%s"),sType);
|
|
acutPrintf(_T("\n\t\t\t\t\t型号: %s"),sName);
|
|
acutPrintf(_T("\n\t\t\t\t\t长度: %.0fmm"),dLength);
|
|
acutPrintf(_T("\n\t\t\t\t\t直径: %.0fmm"),dWidth);
|
|
acutPrintf(_T("\n\t\t\t\t\t标高: %.0fm"),ptCenter.z * 0.001);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::transformBy(const AcGeMatrix3d& xform)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return Acad::eNotApplicable;
|
|
|
|
// 取得位置点
|
|
AcGePoint3d ptCenter;
|
|
AcGeVector3d vtMain, vtNormal;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNormal);
|
|
|
|
// 变换位置
|
|
ptCenter.transformBy(xform);
|
|
vtMain.transformBy(xform);
|
|
vtNormal.transformBy(xform);
|
|
|
|
// 更新点
|
|
m_pXDataMap->SetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->SetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->SetAt(HVAC_Normal, vtNormal);
|
|
|
|
// 传递消息
|
|
if (m_pOwnerEnt != NULL && m_pOwnerEnt->objectId().isValid())
|
|
{
|
|
// 如果实体不是在当前模型空间中,不做写消息,更新接口处理
|
|
AcDbDatabase* pDb = m_pOwnerEnt->database();
|
|
if (pDb == NULL) pDb = acdbCurDwg();
|
|
|
|
AcDbObjectId idModel;
|
|
AcDbBlockTable* pTable = NULL;
|
|
pDb->getBlockTable(pTable, AcDb::kForRead);
|
|
if (pTable != NULL)
|
|
{
|
|
pTable->getAt(ACDB_MODEL_SPACE, idModel);
|
|
pTable->close();
|
|
}
|
|
|
|
// 如果实体不是在当前模型空间中,不做写消息,更新接口处理
|
|
if (idModel == m_pOwnerEnt->blockId())
|
|
{
|
|
// 写入接口更改消息
|
|
TInterfaceModifyMsg iMsg;
|
|
iMsg.SetInterfaceOper(TDb::eTransformBy);
|
|
iMsg.SetMsgValidate(TRUE);
|
|
iMsg.SetTransform(xform);
|
|
iMsg.SetMsgOperateOn(m_pOwnerEnt->objectId());
|
|
|
|
TDbInterfaceMsgWrite msgWrite;
|
|
msgWrite.WriteInterfaceMsg(iMsg);
|
|
|
|
//更新接口记录接口信息
|
|
UpdateInterfaceRec(m_pOwnerEnt->objectId(), xform);
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::getStretchPoints(AcGePoint3dArray& stretchPoints) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return Acad::eNotApplicable;
|
|
|
|
// 取得位置点
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HEQU_CenterPoint, ptCenter);
|
|
|
|
stretchPoints.append(ptCenter);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::moveStretchPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
return moveGripPointsAt(indices,offset);
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::moveGripPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
ASSERT(NULL != m_pXDataMap);
|
|
int nSize = indices.length();
|
|
if (nSize > 0)
|
|
{
|
|
// 取得位置点
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
AcGeVector3d vtMain,vtMainv;
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
double dLength;
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
// 选择多个夹点,以first为准
|
|
int nIndex = indices.first();
|
|
TDb::Position ePos = ExplainGripIndex(nIndex);
|
|
switch(ePos)
|
|
{
|
|
case TDb::eInf1:
|
|
{
|
|
TDb::InterfaceOper eOper = TDb::eMoveGripPoint;
|
|
AcGeVector3d vtMove = offset;
|
|
AcGePoint3d ptStart = GetStartPt();
|
|
ptStart += vtMove;
|
|
|
|
ptCenter = ptStart + vtMain * dLength * 0.5;
|
|
|
|
m_pXDataMap->SetAt(HFAN_CenterPoint, ptCenter);
|
|
|
|
if (m_pOwnerEnt != NULL && m_pOwnerEnt->objectId().isValid())
|
|
{
|
|
if (TAuxTools::IsEquipAutoMove(this, vtMove))
|
|
{
|
|
// 写入接口更改消息
|
|
TInterfaceModifyMsg iMsg;
|
|
iMsg.SetMsgPoint(ptStart);//new pos
|
|
iMsg.SetGripPosition(TDb::eStart);
|
|
iMsg.SetMoveGripOffset(vtMove);
|
|
if (eOper == TDb::eTransformBy)
|
|
iMsg.SetTransform(vtMove);
|
|
iMsg.SetMsgValidate(TRUE);
|
|
iMsg.SetInterfaceOper(eOper);
|
|
iMsg.SetMsgOperateOn(m_pOwnerEnt->objectId());
|
|
TDbInterfaceMsgWrite msgWrite;
|
|
msgWrite.WriteInterfaceMsg(iMsg);
|
|
}
|
|
|
|
//更新接口记录接口信息
|
|
AcGeMatrix3d xform;
|
|
xform.setToTranslation(vtMove);
|
|
UpdateInterfaceRec(m_pOwnerEnt->objectId(),xform);
|
|
}
|
|
break;
|
|
}
|
|
case TDb::eInf2:
|
|
{
|
|
TDb::InterfaceOper eOper = TDb::eMoveGripPoint;
|
|
AcGeVector3d vtMove = offset;
|
|
AcGePoint3d ptEnd = GetEndPt();
|
|
ptEnd += vtMove;
|
|
|
|
ptCenter = ptEnd - vtMain * dLength * 0.5;
|
|
|
|
m_pXDataMap->SetAt(HFAN_CenterPoint, ptCenter);
|
|
|
|
if (m_pOwnerEnt != NULL && m_pOwnerEnt->objectId().isValid())
|
|
{
|
|
if (TAuxTools::IsEquipAutoMove(this, vtMove))
|
|
{
|
|
// 写入接口更改消息
|
|
TInterfaceModifyMsg iMsg;
|
|
iMsg.SetMsgPoint(ptEnd);//new pos
|
|
iMsg.SetGripPosition(TDb::eEnd);
|
|
iMsg.SetMoveGripOffset(vtMove);
|
|
if (eOper == TDb::eTransformBy)
|
|
iMsg.SetTransform(vtMove);
|
|
iMsg.SetMsgValidate(TRUE);
|
|
iMsg.SetInterfaceOper(eOper);
|
|
iMsg.SetMsgOperateOn(m_pOwnerEnt->objectId());
|
|
TDbInterfaceMsgWrite msgWrite;
|
|
msgWrite.WriteInterfaceMsg(iMsg);
|
|
}
|
|
|
|
//更新接口记录接口信息
|
|
AcGeMatrix3d xform;
|
|
xform.setToTranslation(vtMove);
|
|
UpdateInterfaceRec(m_pOwnerEnt->objectId(),xform);
|
|
}
|
|
break;
|
|
}
|
|
case TDb::eAdjust0:
|
|
{
|
|
AcDbIntArray OsnapMode;
|
|
AcDbIntArray GeomId;
|
|
AcGePoint3dArray arPts;
|
|
getGripPoints(arPts, OsnapMode, GeomId);
|
|
AcGePoint3d ptAdust = arPts[4];
|
|
|
|
AcGePoint3d ptInter;
|
|
AcGeVector3d vtMove = offset;
|
|
ptAdust += vtMove;
|
|
AcGePoint3d pts = GetStartPt();
|
|
AcGePoint3d pte = GetEndPt();
|
|
|
|
//判断方向点移动到哪个象限
|
|
int nPos = TAuxTools::Getquadrant(ptCenter, ptAdust, vtMain);
|
|
switch(nPos)
|
|
{
|
|
case 1:
|
|
m_pXDataMap->SetAt(HFAN_IsMirror, 0);
|
|
break;
|
|
case 2:
|
|
m_pXDataMap->SetAt(HFAN_IsMirror, 1);
|
|
break;
|
|
case 3:
|
|
{
|
|
m_pXDataMap->SetAt(HFAN_IsMirror, 1);
|
|
}
|
|
break;
|
|
case 4:
|
|
{
|
|
m_pXDataMap->SetAt(HFAN_IsMirror, 0);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
case TDb::eCommand0:
|
|
{
|
|
// 获得夹点命令
|
|
CString sCmdStr;
|
|
GetGlobalContext()->GetAt(KEY_HVACGRIPCMD, sCmdStr);
|
|
if (sCmdStr.IsEmpty())
|
|
return Acad::eNotApplicable;
|
|
// 写入接口更改消息
|
|
TInterfaceModifyMsg iMsg;
|
|
iMsg.SetMsgPoint(GetStartPt());//new pos
|
|
iMsg.SetGripPosition(TDb::eCommand0);
|
|
iMsg.SetMoveGripOffset(offset);
|
|
iMsg.SetMsgValidate(TRUE);
|
|
iMsg.SetInterfaceOper(TDb::eNewCommand);
|
|
iMsg.SetPreviewObjToCreate(TDb::eFan, 0);
|
|
|
|
AcDbSoftPointerId idOwner;
|
|
m_pXDataMap->GetAt(KEY_THISID,idOwner);
|
|
iMsg.SetMsgOperateOn(idOwner);
|
|
TDbInterfaceMsgWrite msgWrite;
|
|
msgWrite.WriteInterfaceMsg(iMsg);
|
|
|
|
// 发送消息
|
|
acedPostCommand(_T("\33"));
|
|
acedPostCommand(sCmdStr + _T("\n"));
|
|
break;
|
|
}
|
|
case TDb::eCommand1:
|
|
{
|
|
// 获得夹点命令
|
|
CString sCmdStr;
|
|
GetGlobalContext()->GetAt(KEY_HVACGRIPCMD, sCmdStr);
|
|
if (sCmdStr.IsEmpty())
|
|
return Acad::eNotApplicable;
|
|
// 写入接口更改消息
|
|
TInterfaceModifyMsg iMsg;
|
|
iMsg.SetMsgPoint(GetEndPt());//new pos
|
|
iMsg.SetGripPosition(TDb::eCommand1);
|
|
iMsg.SetMoveGripOffset(offset);
|
|
iMsg.SetMsgValidate(TRUE);
|
|
iMsg.SetInterfaceOper(TDb::eNewCommand);
|
|
iMsg.SetPreviewObjToCreate(TDb::eFan, 0);
|
|
|
|
AcDbSoftPointerId idOwner;
|
|
m_pXDataMap->GetAt(KEY_THISID,idOwner);
|
|
iMsg.SetMsgOperateOn(idOwner);
|
|
TDbInterfaceMsgWrite msgWrite;
|
|
msgWrite.WriteInterfaceMsg(iMsg);
|
|
|
|
// 发送消息
|
|
acedPostCommand(_T("\33"));
|
|
acedPostCommand(sCmdStr + _T("\n"));
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::intersectWith(const AcDbEntity* pEnt,
|
|
AcDb::Intersect intType,
|
|
const AcGePlane& projPlane,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker,
|
|
INT_PTR otherGsMarker) const
|
|
{
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::intersectWith(const AcDbEntity* pEnt,
|
|
AcDb::Intersect intType,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker,
|
|
INT_PTR otherGsMarker) const
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::getOsnapPoints(AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return Acad::eNotApplicable;
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
|
|
// 根据捕捉模式处理
|
|
switch(osnapMode)
|
|
{
|
|
case AcDb::kOsModeEnd:
|
|
snapPoints.append(GetStartPt());
|
|
snapPoints.append(GetEndPt());
|
|
break;
|
|
case AcDb::kOsModeMid:
|
|
break;
|
|
case AcDb::kOsModeCen:
|
|
break;
|
|
case AcDb::kOsModePerp:
|
|
break;
|
|
case AcDb::kOsModeNear:
|
|
break;
|
|
}
|
|
// add by hh 2011-07-12 支持任意位置捕捉
|
|
TImpSpecEquipment::getOsnapPoints(osnapMode, gsSelectionMark, pickPoint, lastPoint,
|
|
viewXform, snapPoints, geomIds);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::getGripPoints(AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
return Acad::eNotApplicable;
|
|
// 取得位置点
|
|
AcGeVector3d vtMain;
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
vtMain.normalize();
|
|
//2个移动夹点
|
|
gripPoints.append(GetStartPt()); //STA
|
|
gripPoints.append(GetEndPt()); //END
|
|
|
|
//增加2个命令夹点
|
|
AcGePoint3d ptGeCmd1,ptGeCmd2; //按 10 个像素点
|
|
// double dCmd = PixelToWcs(10);
|
|
ptGeCmd1 = GetStartPt() - vtMain * g_dCmdOff;
|
|
ptGeCmd2 = GetEndPt() + vtMain * g_dCmdOff;
|
|
gripPoints.append(ptGeCmd1);
|
|
gripPoints.append(ptGeCmd2);
|
|
|
|
//增加一个方向点
|
|
int nMir = 0;
|
|
m_pXDataMap->GetAt(HFAN_IsMirror, nMir);
|
|
double dLength;
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
ptGeCmd1 = ptCenter + vtMain * dLength * 0.25;
|
|
if (nMir == 1)
|
|
{
|
|
ptGeCmd1 = ptCenter - vtMain * dLength * 0.25;
|
|
}
|
|
gripPoints.append(ptGeCmd1);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::getGeomExtents(AcDbExtents& extents) const
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::getClassID(CLSID* pClsid) const
|
|
{
|
|
// #if (ADS < 16)
|
|
// // {C7DFDF6A-A5F2-4add-ADCC-7AC0675AB6E8}
|
|
// CLSID CLSID_PipeBaseEntity = {0xC7DFDF6B, 0xA5F2, 0x4ADE, { 0xAD, 0xCC, 0x7A, 0xC0, 0x67, 0x5A, 0xB6, 0xE8 }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 16)
|
|
// // {C7DFDF6A-A5F2-4add-ADCC-7AC0675AB6E9}
|
|
// CLSID CLSID_PipeBaseEntity = {0xC7DFDF6B, 0xA5F2, 0x4ADE, { 0xAD, 0xCC, 0x7A, 0xC0, 0x67, 0x5A, 0xB6, 0xE9 }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 17)
|
|
// // {C7DFDF6A-A5F2-4add-ADCC-7AC0675AB6EA}
|
|
// CLSID CLSID_PipeBaseEntity = {0xC7DFDF6B, 0xA5F2, 0x4ADE, { 0xAD, 0xCC, 0x7A, 0xC0, 0x67, 0x5A, 0xB6, 0xEA }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 18)
|
|
// CLSID CLSID_PipeBaseEntity = {0xD7DFDF6B, 0xA5F2, 0x4ADE, { 0xAD, 0xCC, 0x7A, 0xC0, 0x67, 0x5A, 0xB6, 0xEB }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 19)
|
|
// CLSID CLSID_PipeBaseEntity = {0xD7DFDF6B, 0xA5F2, 0x4ADE, { 0xAD, 0xCC, 0x7A, 0xC0, 0x67, 0x5A, 0xB6, 0xEB }};
|
|
// #endif
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus THImpHvacFan::explode(AcDbVoidPtrArray& entitySet) const
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
//////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
// 1 ┏━━━━━┓ 2
|
|
// ┃ ┃
|
|
// ┃ ┃
|
|
// ┃ 0 ┃
|
|
// ┃ ┃
|
|
// 4 ┗━━━━━┛3
|
|
//
|
|
//
|
|
BOOL THImpHvacFan::Draw3dBox(XExplodeDraw &mode) const
|
|
{
|
|
TDb::HvacSectType eSectType = TDb::eRectangular;
|
|
m_pXDataMap->GetAt(HVAC_SectType,(int&)eSectType);
|
|
|
|
AcGePoint3d ptCenter;
|
|
AcGePoint3dArray arPts;
|
|
AcGeVector3d vtMain, vtNor, vtMainv;
|
|
double dLength(50.0), dThick(50.0), dWidth(50.0);
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNor);
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
m_pXDataMap->GetAt(HFAN_Width, dWidth);
|
|
m_pXDataMap->GetAt(HFAN_Thick, dThick);
|
|
vtMainv = vtMain;
|
|
vtMainv.rotateBy(PI * 0.5, vtNor);
|
|
vtMain.normalize();
|
|
vtMainv.normalize();
|
|
//0
|
|
arPts.append(ptCenter);
|
|
AcGePoint3d pt;
|
|
pt = ptCenter - vtMain * dLength * 0.5;
|
|
pt = pt + vtMainv * dWidth * 0.5;
|
|
//1
|
|
arPts.append(pt);
|
|
//2
|
|
arPts.append(arPts[1] + vtMain * dLength);
|
|
//3
|
|
arPts.append(arPts[2] - vtMainv * dWidth);
|
|
//4
|
|
arPts.append(arPts[1] - vtMainv * dWidth);
|
|
|
|
//方截面
|
|
if (eSectType == TDb::eRectangular)
|
|
{
|
|
AcGePoint3dArray arptSides;
|
|
arptSides.append(arPts[1] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[4] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[4] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[1] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[1] + vtNor * dThick * 0.5);
|
|
|
|
arptSides.append(arPts[2] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[3] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[3] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[2] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[2] + vtNor * dThick * 0.5);
|
|
mode.DrawMesh(2, 5, arptSides.asArrayPtr());
|
|
|
|
arptSides.setLogicalLength(0);
|
|
arptSides.append(arPts[1] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[1] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[4] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[4] - vtNor * dThick * 0.5);
|
|
mode.DrawMesh(2, 2, arptSides.asArrayPtr());
|
|
arptSides.setLogicalLength(0);
|
|
arptSides.append(arPts[2] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[2] - vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[3] + vtNor * dThick * 0.5);
|
|
arptSides.append(arPts[3] - vtNor * dThick * 0.5);
|
|
mode.DrawMesh(2, 2, arptSides.asArrayPtr());
|
|
}
|
|
//圆
|
|
else
|
|
{
|
|
double dMinDiffAng = PI/12;
|
|
GetGlobalContext()->GetAt(KEY_MINDIFFANG,dMinDiffAng);
|
|
int nSect = int(PI * 2 / dMinDiffAng) + 1;
|
|
AcGePoint3dArray arptSides,arptSidesD;
|
|
AcGePoint3d pt;
|
|
AcGePoint3d ptC;
|
|
ptC = ptCenter + vtMain * dLength * 0.5;
|
|
pt = ptC + vtNor * dWidth * 0.5;
|
|
for (int i = 0; i < nSect; i++)
|
|
{
|
|
arptSides.append(pt);
|
|
pt.rotateBy(dMinDiffAng, vtMain, ptC);
|
|
}
|
|
ptC = ptCenter - vtMain * dLength * 0.5;
|
|
pt = ptC + vtNor * dWidth * 0.5;
|
|
for (i = 0; i < nSect; i++)
|
|
{
|
|
arptSides.append(pt);
|
|
pt.rotateBy(dMinDiffAng, vtMain, ptC);
|
|
}
|
|
mode.DrawMesh(2, nSect, arptSides.asArrayPtr());
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL THImpHvacFan::OPMInfo(LPCTSTR pszName, TDb::OPMInfo* pInfo)
|
|
{
|
|
ASSERT(NULL != pszName && NULL != pInfo && NULL != m_pXDataMap);
|
|
// 暖通基本参数设置
|
|
if (0 == _tcsicmp(pszName, KEY_RUNTIME))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
|
|
// 提供数据列表和对应关系
|
|
if (NULL != pInfo->parsValues && NULL != pInfo->parlValues)
|
|
{
|
|
pInfo->parsValues->Add(_T("风机"));
|
|
pInfo->parlValues->Add(TDb::eFan);
|
|
}
|
|
|
|
// 全局属性,需要特殊处理数据获取和设置
|
|
if (NULL != pInfo->pXData)
|
|
{
|
|
// 获取数据
|
|
if (0 == pInfo->pXData->nVt)
|
|
{
|
|
pInfo->pXData->nVt = TXINT;
|
|
pInfo->pXData->nVal = TDb::eFan;
|
|
}
|
|
// 设置数据
|
|
else
|
|
{
|
|
pInfo->pXData->nVt = 0; // 设置处理完成标识
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_Name))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_Model))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_StartPoint))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_Length))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_Width))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
if (0 == _tcsicmp(pszName, KEY_Thick))
|
|
{
|
|
pInfo->bVisible = TRUE;
|
|
pInfo->bEditable = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
// 多联机样式 为了注册列表名,保证其他管件能用到此参数
|
|
if (0 == _tcsicmp(pszName, HVRV_IType))
|
|
{
|
|
pInfo->bVisible = FALSE;
|
|
pInfo->bEditable = FALSE;
|
|
|
|
// 提供数据列表和对应关系
|
|
if (NULL != pInfo->parsValues && NULL != pInfo->parlValues)
|
|
{
|
|
pInfo->parlValues->Add(0);
|
|
pInfo->parsValues->Add(_T("室内机"));
|
|
pInfo->parlValues->Add(1);
|
|
pInfo->parsValues->Add(_T("室外机"));
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
int THImpHvacFan::GetXBaseShell(TXShell& xShell)
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// 获得参数
|
|
double dLength = 0.0;
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
AcGeVector3d vtMain, vtNormal;
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNormal);
|
|
vtMain.normalize();
|
|
vtNormal.normalize();
|
|
AcGePoint3d ptStart = ptCenter + vtMain * dLength / 2.0;
|
|
AcGePoint3d ptEnd = ptCenter - vtMain * dLength / 2.0;
|
|
|
|
HvacSectType eSect = TDb::eRectangular;
|
|
m_pXDataMap->GetAt(HVAC_SectType, (int&)eSect);
|
|
if (eSect == eCircular)
|
|
{
|
|
double dDiameter = 0.0;
|
|
m_pXDataMap->GetAt(HFAN_Diameter, dDiameter);
|
|
|
|
// 构造碰撞实体
|
|
TAuxTools::BuildCirDuct(ptStart, ptEnd, dDiameter, dDiameter, xShell);
|
|
}
|
|
else
|
|
{
|
|
double dThick(0.0), dWidth(0.0);
|
|
m_pXDataMap->GetAt(HFLN_Thick, dThick);
|
|
m_pXDataMap->GetAt(HFLN_Width, dWidth);
|
|
|
|
// 构造碰撞实体
|
|
TAuxTools::BuildRectDuct(ptStart, ptEnd, vtNormal, dWidth, dThick, dWidth, dThick, xShell);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int THImpHvacFan::GetBodyBox( AcDbExtents& ext ) const
|
|
{
|
|
if (NULL == m_pXDataMap)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
HvacSectType eSect = TDb::eRectangular;
|
|
m_pXDataMap->GetAt(HVAC_SectType, (int&)eSect);
|
|
|
|
// 获得参数
|
|
AcGeVector3d vtNormal;
|
|
m_pXDataMap->GetAt(HVAC_Normal, vtNormal);
|
|
vtNormal.normalize();
|
|
AcGeVector3d vtMain;
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vtMain);
|
|
vtMain.normalize();
|
|
AcGeVector3d vtSide = vtMain;
|
|
vtSide.rotateBy(PI / 2.0, vtNormal);
|
|
vtSide.normalize();
|
|
double dLength = 0.0;
|
|
m_pXDataMap->GetAt(HFAN_Length, dLength);
|
|
AcGePoint3d ptCenter;
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, ptCenter);
|
|
AcGePoint3d ptStart = ptCenter + vtMain * dLength / 2.0;
|
|
AcGePoint3d ptEnd = ptCenter - vtMain * dLength / 2.0;
|
|
|
|
if (eSect == eCircular)
|
|
{
|
|
double dDiameter = 0.0;
|
|
m_pXDataMap->GetAt(HFAN_Diameter, dDiameter);
|
|
double dRadius = dDiameter / 2.0;
|
|
|
|
// 计算端点
|
|
AcGePoint3dArray arpt;
|
|
arpt.append(ptStart + vtSide * dRadius + vtNormal * dRadius);
|
|
arpt.append(ptStart + vtSide * dRadius - vtNormal * dRadius);
|
|
arpt.append(ptStart - vtSide * dRadius - vtNormal * dRadius);
|
|
arpt.append(ptStart - vtSide * dRadius + vtNormal * dRadius);
|
|
arpt.append(ptEnd + vtSide * dRadius + vtNormal * dRadius);
|
|
arpt.append(ptEnd + vtSide * dRadius - vtNormal * dRadius);
|
|
arpt.append(ptEnd - vtSide * dRadius - vtNormal * dRadius);
|
|
arpt.append(ptEnd - vtSide * dRadius + vtNormal * dRadius);
|
|
TAuxTools::BuildMinRectangle(arpt, ext); // 构造最小包含体
|
|
}
|
|
else
|
|
{
|
|
double dThick(0.0), dWidth(0.0);
|
|
m_pXDataMap->GetAt(HFLN_Thick, dThick);
|
|
m_pXDataMap->GetAt(HFLN_Width, dWidth);
|
|
dThick *= 0.5;
|
|
dWidth *= 0.5;
|
|
|
|
AcGePoint3dArray arpt;
|
|
arpt.append(ptStart + vtSide*dWidth - vtNormal*dThick);
|
|
arpt.append(ptStart + vtSide*dWidth + vtNormal*dThick);
|
|
arpt.append(ptStart - vtSide*dWidth - vtNormal*dThick);
|
|
arpt.append(ptStart - vtSide*dWidth + vtNormal*dThick);
|
|
|
|
arpt.append(ptEnd + vtSide*dWidth - vtNormal*dThick);
|
|
arpt.append(ptEnd + vtSide*dWidth + vtNormal*dThick);
|
|
arpt.append(ptEnd - vtSide*dWidth - vtNormal*dThick);
|
|
arpt.append(ptEnd - vtSide*dWidth + vtNormal*dThick);
|
|
TAuxTools::BuildMinRectangle(arpt, ext); // 构造最小包含体
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
// 导出XML
|
|
// CString THImpHvacFan::GetXml() const
|
|
// {
|
|
// if (NULL == m_pXDataMap || NULL == m_pOwnerEnt)
|
|
// return _T("");
|
|
//
|
|
// int nValue(0);
|
|
// double dValue(0.0);
|
|
// int nPtPreci = 6; // 位置精度
|
|
// int nWhPreci = 0; // 宽度、高度精度
|
|
//
|
|
// TXmlTree xmlTree;
|
|
// CString csText;
|
|
// CString csX, csY, csZ;
|
|
// AcGePoint3d pt;
|
|
// AcGeVector3d vt;
|
|
// AcDbObjectId id;
|
|
// POSITION posRoot = xmlTree.Insert(_T("ATS_DBHEQUIPMENT"), NULL, NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(posRoot, _T("name"), _T("管道风机"));
|
|
// xmlTree.SetAttribute(posRoot, _T("comment"), _T("上华对象名称"));
|
|
// }
|
|
//
|
|
// POSITION posItemEquipType = xmlTree.Insert(_T("EquipType"), posRoot, NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemEquipType, _T("name"), _T("设备型号"));
|
|
// xmlTree.SetAttribute(posItemEquipType, _T("comment"), _T("设备型号"));
|
|
// m_pXDataMap->GetAt(HFAN_SEquipType, csText);
|
|
// xmlTree.SetItemText(posItemEquipType, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemEquipName = xmlTree.Insert(_T("EquipName"), posRoot, posItemEquipType);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemEquipName, _T("name"), _T("设备名称"));
|
|
// xmlTree.SetAttribute(posItemEquipName, _T("comment"), _T("对应图库中的管道风机名称"));
|
|
// m_pXDataMap->GetAt(HFAN_SEquipName, csText);
|
|
// xmlTree.SetItemText(posItemEquipName, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemNorDir = xmlTree.Insert(_T("NormalDir"),posRoot, posItemEquipName);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemNorDir, _T("name"), _T("法向量"));
|
|
// m_pXDataMap->GetAt(HVAC_Normal, vt);
|
|
// TAuxTools::DoubleToString(vt.x, nPtPreci, csX);
|
|
// TAuxTools::DoubleToString(vt.y, nPtPreci, csY);
|
|
// TAuxTools::DoubleToString(vt.z, nPtPreci, csZ);
|
|
// csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
// xmlTree.SetItemText(posItemNorDir, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemCentPt = xmlTree.Insert(_T("CenterPoint"), posRoot, posItemNorDir);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemCentPt, _T("name"), _T("中心点"));
|
|
// xmlTree.SetAttribute(posItemCentPt, _T("comment"), _T("布置点"));
|
|
// m_pXDataMap->GetAt(HFAN_CenterPoint, pt);
|
|
// TAuxTools::DoubleToString(pt.x, nPtPreci, csX);
|
|
// TAuxTools::DoubleToString(pt.y, nPtPreci, csY);
|
|
// TAuxTools::DoubleToString(pt.z, nPtPreci, csZ);
|
|
// csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
// xmlTree.SetItemText(posItemCentPt, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemMainDir = xmlTree.Insert(_T("MainDir"), posRoot, posItemCentPt);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemMainDir, _T("name"), _T("主矢量"));
|
|
// xmlTree.SetAttribute(posItemMainDir, _T("comment"), _T("布置角度"));
|
|
// m_pXDataMap->GetAt(HFAN_MainDir, vt);
|
|
// TAuxTools::DoubleToString(vt.x, nPtPreci, csX);
|
|
// TAuxTools::DoubleToString(vt.y, nPtPreci, csY);
|
|
// TAuxTools::DoubleToString(vt.z, nPtPreci, csZ);
|
|
// csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
// xmlTree.SetItemText(posItemMainDir, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemPart2D = xmlTree.Insert(_T("Part2D"), posRoot, posItemMainDir);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemPart2D, _T("name"), _T("2D块ID"));
|
|
// xmlTree.SetAttribute(posItemPart2D, _T("comment"), _T("平面图块"));
|
|
// m_pXDataMap->GetAt(HFAN_PartCenter, id);
|
|
// csText.Format(_T("%d"), id.asOldId());
|
|
// xmlTree.SetItemText(posItemPart2D, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemPart3D = xmlTree.Insert(_T("Part3D"), posRoot, posItemPart2D);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemPart3D, _T("name"), _T("3D块ID"));
|
|
// xmlTree.SetAttribute(posItemPart3D, _T("comment"), _T("三维图块"));
|
|
// m_pXDataMap->GetAt(HFAN_Part3D, id);
|
|
// csText.Format(_T("%d"), id.asOldId());
|
|
// xmlTree.SetItemText(posItemPart3D, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemMirror = xmlTree.Insert(_T("IsMirror"), posRoot, posItemPart3D);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemMirror, _T("name"), _T("是否镜像"));
|
|
// xmlTree.SetAttribute(posItemMirror, _T("comment"), _T("用于辅助绘制0:否,1:是"));
|
|
// m_pXDataMap->GetAt(HFAN_IsMirror, nValue);
|
|
// csText.Format(_T("%d"), nValue);
|
|
// xmlTree.SetItemText(posItemMirror, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemLength = xmlTree.Insert(_T("Length"), posRoot, posItemMirror);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemLength, _T("name"), _T("长度"));
|
|
// xmlTree.SetAttribute(posItemLength, _T("comment"), _T("风机长度"));
|
|
// m_pXDataMap->GetAt(HFAN_Length, dValue);
|
|
// TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
// xmlTree.SetItemText(posItemLength, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemWidth = xmlTree.Insert(_T("Width"), posRoot, posItemLength);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemWidth, _T("name"), _T("宽度"));
|
|
// xmlTree.SetAttribute(posItemWidth, _T("comment"), _T("风机宽度"));
|
|
// m_pXDataMap->GetAt(HFAN_Width, dValue);
|
|
// TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
// xmlTree.SetItemText(posItemWidth, csText);
|
|
// }
|
|
//
|
|
// POSITION posItemThick = xmlTree.Insert(_T("Thick"), posRoot, posItemWidth);
|
|
// {
|
|
// xmlTree.SetAttribute(posItemThick, _T("name"), _T("厚度"));
|
|
// xmlTree.SetAttribute(posItemThick, _T("comment"), _T("风机高度"));
|
|
// m_pXDataMap->GetAt(HFAN_Thick, dValue);
|
|
// TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
// xmlTree.SetItemText(posItemThick, csText);
|
|
// }
|
|
//
|
|
// CString csXml = xmlTree.GetXml();
|
|
//
|
|
// return csXml;
|
|
// }
|
|
|
|
CString THImpHvacFan::GetXml(const AcGeMatrix3d& mat) const
|
|
{
|
|
if (NULL == m_pXDataMap || NULL == m_pOwnerEnt)
|
|
return _T("");
|
|
|
|
int nValue(0);
|
|
double dValue(0.0);
|
|
int nPtPreci = 6; // 位置精度
|
|
int nWhPreci = 0; // 宽度、高度精度
|
|
|
|
TXmlTree xmlTree;
|
|
CString csText;
|
|
CString csX, csY, csZ;
|
|
AcGePoint3d pt;
|
|
AcGeVector3d vt;
|
|
AcDbObjectId id;
|
|
POSITION posRoot = xmlTree.Insert(_T("ATS_DBHEQUIPMENT"), NULL, NULL);
|
|
{
|
|
xmlTree.SetAttribute(posRoot, _T("name"), _T("管道风机"));
|
|
xmlTree.SetAttribute(posRoot, _T("comment"), _T("上华对象名称"));
|
|
}
|
|
|
|
POSITION posItemEquipType = xmlTree.Insert(_T("EquipType"), posRoot, NULL);
|
|
{
|
|
xmlTree.SetAttribute(posItemEquipType, _T("name"), _T("设备型号"));
|
|
xmlTree.SetAttribute(posItemEquipType, _T("comment"), _T("设备型号"));
|
|
m_pXDataMap->GetAt(HFAN_SEquipType, csText);
|
|
xmlTree.SetItemText(posItemEquipType, csText);
|
|
}
|
|
|
|
POSITION posItemEquipName = xmlTree.Insert(_T("EquipName"), posRoot, posItemEquipType);
|
|
{
|
|
xmlTree.SetAttribute(posItemEquipName, _T("name"), _T("设备名称"));
|
|
xmlTree.SetAttribute(posItemEquipName, _T("comment"), _T("对应图库中的管道风机名称"));
|
|
m_pXDataMap->GetAt(HFAN_SEquipName, csText);
|
|
xmlTree.SetItemText(posItemEquipName, csText);
|
|
}
|
|
|
|
POSITION posItemNorDir = xmlTree.Insert(_T("NormalDir"),posRoot, posItemEquipName);
|
|
{
|
|
xmlTree.SetAttribute(posItemNorDir, _T("name"), _T("法向量"));
|
|
m_pXDataMap->GetAt(HVAC_Normal, vt);
|
|
TAuxTools::DoubleToString(vt.x, nPtPreci, csX);
|
|
TAuxTools::DoubleToString(vt.y, nPtPreci, csY);
|
|
TAuxTools::DoubleToString(vt.z, nPtPreci, csZ);
|
|
csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
xmlTree.SetItemText(posItemNorDir, csText);
|
|
}
|
|
|
|
POSITION posItemCentPt = xmlTree.Insert(_T("CenterPoint"), posRoot, posItemNorDir);
|
|
{
|
|
xmlTree.SetAttribute(posItemCentPt, _T("name"), _T("中心点"));
|
|
xmlTree.SetAttribute(posItemCentPt, _T("comment"), _T("布置点"));
|
|
m_pXDataMap->GetAt(HFAN_CenterPoint, pt);
|
|
pt.transformBy(mat);
|
|
TAuxTools::DoubleToString(pt.x, nPtPreci, csX);
|
|
TAuxTools::DoubleToString(pt.y, nPtPreci, csY);
|
|
TAuxTools::DoubleToString(pt.z, nPtPreci, csZ);
|
|
csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
xmlTree.SetItemText(posItemCentPt, csText);
|
|
}
|
|
|
|
POSITION posItemMainDir = xmlTree.Insert(_T("MainDir"), posRoot, posItemCentPt);
|
|
{
|
|
xmlTree.SetAttribute(posItemMainDir, _T("name"), _T("主矢量"));
|
|
xmlTree.SetAttribute(posItemMainDir, _T("comment"), _T("布置角度"));
|
|
m_pXDataMap->GetAt(HFAN_MainDir, vt);
|
|
TAuxTools::DoubleToString(vt.x, nPtPreci, csX);
|
|
TAuxTools::DoubleToString(vt.y, nPtPreci, csY);
|
|
TAuxTools::DoubleToString(vt.z, nPtPreci, csZ);
|
|
csText.Format(_T("%s,%s,%s"), csX, csY, csZ);
|
|
xmlTree.SetItemText(posItemMainDir, csText);
|
|
}
|
|
|
|
// begin ////
|
|
// mod by wc 13-12-16
|
|
// 原因:id值可能会变,需要保存图块名称
|
|
|
|
POSITION posItemPart2D = xmlTree.Insert(_T("Part2D"), posRoot, posItemMainDir);
|
|
{
|
|
xmlTree.SetAttribute(posItemPart2D, _T("name"), _T("2D块名称"));
|
|
xmlTree.SetAttribute(posItemPart2D, _T("comment"), _T("平面图块"));
|
|
m_pXDataMap->GetAt(HFAN_PartCenter, id);
|
|
csText = TAuxTools::GetBlkNameById(id);
|
|
//csText.Format(_T("%d"), id.asOldId());
|
|
xmlTree.SetItemText(posItemPart2D, csText);
|
|
}
|
|
|
|
POSITION posItemPart3D = xmlTree.Insert(_T("Part3D"), posRoot, posItemPart2D);
|
|
{
|
|
xmlTree.SetAttribute(posItemPart3D, _T("name"), _T("3D块名称"));
|
|
xmlTree.SetAttribute(posItemPart3D, _T("comment"), _T("三维图块"));
|
|
m_pXDataMap->GetAt(HFAN_Part3D, id);
|
|
csText = TAuxTools::GetBlkNameById(id);
|
|
//csText.Format(_T("%d"), id.asOldId());
|
|
xmlTree.SetItemText(posItemPart3D, csText);
|
|
}
|
|
// end //
|
|
|
|
// add by wc 13-12-17 系统图块//
|
|
POSITION posItemPartSys = xmlTree.Insert(_T("PartSys"), posRoot, posItemPart3D);
|
|
{
|
|
xmlTree.SetAttribute(posItemPartSys, _T("name"), _T("系统块名称"));
|
|
xmlTree.SetAttribute(posItemPartSys, _T("comment"), _T("三维图块"));
|
|
m_pXDataMap->GetAt(HFAN_PartSys, id);
|
|
csText = TAuxTools::GetBlkNameById(id);
|
|
xmlTree.SetItemText(posItemPartSys, csText);
|
|
}
|
|
|
|
POSITION posItemMirror = xmlTree.Insert(_T("IsMirror"), posRoot, posItemPartSys);
|
|
{
|
|
xmlTree.SetAttribute(posItemMirror, _T("name"), _T("是否镜像"));
|
|
xmlTree.SetAttribute(posItemMirror, _T("comment"), _T("用于辅助绘制0:否,1:是"));
|
|
m_pXDataMap->GetAt(HFAN_IsMirror, nValue);
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemMirror, csText);
|
|
}
|
|
|
|
POSITION posItemLength = xmlTree.Insert(_T("Length"), posRoot, posItemMirror);
|
|
{
|
|
xmlTree.SetAttribute(posItemLength, _T("name"), _T("长度"));
|
|
xmlTree.SetAttribute(posItemLength, _T("comment"), _T("风机长度"));
|
|
m_pXDataMap->GetAt(HFAN_Length, dValue);
|
|
TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
xmlTree.SetItemText(posItemLength, csText);
|
|
}
|
|
|
|
POSITION posItemWidth = xmlTree.Insert(_T("Width"), posRoot, posItemLength);
|
|
{
|
|
xmlTree.SetAttribute(posItemWidth, _T("name"), _T("宽度"));
|
|
xmlTree.SetAttribute(posItemWidth, _T("comment"), _T("风机宽度"));
|
|
m_pXDataMap->GetAt(HFAN_Width, dValue);
|
|
TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
xmlTree.SetItemText(posItemWidth, csText);
|
|
}
|
|
|
|
POSITION posItemThick = xmlTree.Insert(_T("Thick"), posRoot, posItemWidth);
|
|
{
|
|
xmlTree.SetAttribute(posItemThick, _T("name"), _T("厚度"));
|
|
xmlTree.SetAttribute(posItemThick, _T("comment"), _T("风机高度"));
|
|
m_pXDataMap->GetAt(HFAN_Thick, dValue);
|
|
TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
xmlTree.SetItemText(posItemThick, csText);
|
|
}
|
|
//add by wc 13-12-12
|
|
|
|
POSITION posItemAirCap = xmlTree.Insert(_T("AirCap"), posRoot, posItemThick);
|
|
{
|
|
xmlTree.SetAttribute(posItemAirCap, _T("name"), _T("风量"));
|
|
xmlTree.SetAttribute(posItemAirCap, _T("comment"), _T("风机风量"));
|
|
if (!m_pXDataMap->GetAt(HFAN_AirCap, dValue))
|
|
{
|
|
dValue = 0.0;
|
|
}
|
|
TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
xmlTree.SetItemText(posItemAirCap, csText);
|
|
}
|
|
|
|
POSITION posItemPress = xmlTree.Insert(_T("Press"), posRoot, posItemAirCap);
|
|
{
|
|
xmlTree.SetAttribute(posItemPress, _T("name"), _T("风机全压"));
|
|
xmlTree.SetAttribute(posItemPress, _T("comment"), _T("风机全压"));
|
|
if (!m_pXDataMap->GetAt(HFAN_Press, csText))
|
|
csText.Empty();
|
|
xmlTree.SetItemText(posItemPress, csText);
|
|
}
|
|
|
|
POSITION posItemPower = xmlTree.Insert(_T("Power"), posRoot, posItemAirCap);
|
|
{
|
|
xmlTree.SetAttribute(posItemPower, _T("name"), _T("风机功率"));
|
|
xmlTree.SetAttribute(posItemPower, _T("comment"), _T("风机功率"));
|
|
if (!m_pXDataMap->GetAt(HFAN_Power, csText))
|
|
csText.Empty();
|
|
xmlTree.SetItemText(posItemPower, csText);
|
|
}
|
|
|
|
POSITION posItemEdgeWeight = xmlTree.Insert(_T("EdgeWeight"), posRoot, posItemPower);
|
|
{
|
|
xmlTree.SetAttribute(posItemEdgeWeight, _T("name"), _T("边线加粗"));
|
|
xmlTree.SetAttribute(posItemEdgeWeight, _T("comment"), _T("风机是否边线加粗0/否、1/是"));
|
|
if (!m_pXDataMap->GetAt(HFAN_EdgeWeight, nValue))
|
|
nValue = 0;
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemEdgeWeight, csText);
|
|
}
|
|
|
|
POSITION posItemEdgeWidth = xmlTree.Insert(_T("EdgeWidth"), posRoot, posItemEdgeWeight);
|
|
{
|
|
xmlTree.SetAttribute(posItemEdgeWidth, _T("name"), _T("加粗值"));
|
|
xmlTree.SetAttribute(posItemEdgeWidth, _T("comment"), _T("风机边线加粗值"));
|
|
if (!m_pXDataMap->GetAt(HFAN_EdgeWidth, dValue))
|
|
dValue = 0.0;
|
|
TAuxTools::DoubleToString(dValue, nWhPreci, csText);
|
|
xmlTree.SetItemText(posItemEdgeWidth, csText);
|
|
}
|
|
|
|
POSITION posItemForm = xmlTree.Insert(_T("Form"), posRoot, posItemEdgeWidth);
|
|
{
|
|
xmlTree.SetAttribute(posItemForm, _T("name"), _T("结构形式"));
|
|
xmlTree.SetAttribute(posItemForm, _T("comment"), _T("明暗装等"));
|
|
if (!m_pXDataMap->GetAt(HEQU_Form, csText))
|
|
{
|
|
csText.Empty();
|
|
}
|
|
xmlTree.SetItemText(posItemForm, csText);
|
|
}
|
|
//
|
|
// POSITION posItemEdgeLayer = xmlTree.Insert(_T("EdgeLayer"), posRoot, posItemEdgeWidth);
|
|
// {
|
|
// id.setNull();
|
|
// xmlTree.SetAttribute(posItemEdgeLayer, _T("name"), _T("风机边线图层"));
|
|
// xmlTree.SetAttribute(posItemEdgeLayer, _T("comment"), _T("风机边线图层的名字"));
|
|
// if (!m_pXDataMap->GetAt(HFAN_EdgeLayer, id))
|
|
// csText.Empty();
|
|
// else
|
|
// {
|
|
// ACHAR* pChar = NULL;
|
|
// AcDbObject *pObj = NULL;
|
|
// if (Acad::eOk == acdbOpenObject(pObj, id, AcDb::kForRead))
|
|
// {
|
|
// AcDbLayerTableRecord *pRec = AcDbLayerTableRecord::cast(pObj);
|
|
// if (pRec != NULL)
|
|
// {
|
|
// pRec->getName(pChar);
|
|
// csText.Format(_T("%s"), pChar);
|
|
// pRec->close();
|
|
// }
|
|
// pObj->close();
|
|
// }
|
|
// }
|
|
// xmlTree.SetItemText(posItemEdgeLayer, csText);
|
|
// }
|
|
|
|
POSITION posItemSysName = xmlTree.Insert(_T("System"), posRoot, posItemForm);
|
|
{
|
|
xmlTree.SetAttribute(posItemSysName, _T("name"), _T("管线类型"));
|
|
xmlTree.SetAttribute(posItemSysName, _T("comment"), _T("回风/送风/通风..."));
|
|
m_pXDataMap->GetAt(HVAC_System, csText);
|
|
xmlTree.SetItemText(posItemSysName, csText);
|
|
}
|
|
|
|
POSITION posItemHasText = xmlTree.Insert(_T("HasText"), posRoot, posItemSysName);
|
|
{
|
|
xmlTree.SetAttribute(posItemHasText, _T("name"), _T("是否有文字"));
|
|
xmlTree.SetAttribute(posItemHasText, _T("comment"), _T("0/不是、1/是"));
|
|
if (!m_pXDataMap->GetAt(HEQU_HasText, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemHasText, csText);
|
|
}
|
|
|
|
POSITION posItemTextPoint = xmlTree.Insert(_T("TextPoint"), posRoot, posItemHasText);
|
|
{
|
|
xmlTree.SetAttribute(posItemTextPoint, _T("name"), _T("文字基点"));
|
|
xmlTree.SetAttribute(posItemTextPoint, _T("comment"), _T("文字基点"));
|
|
if (m_pXDataMap->GetAt(HEQU_TextPoint, pt))
|
|
{
|
|
TAuxTools::DoubleToString(pt.x, nPtPreci, csX);
|
|
TAuxTools::DoubleToString(pt.y, nPtPreci, csY);
|
|
TAuxTools::DoubleToString(pt.z, nPtPreci, csZ);
|
|
csText.Format(_T("%s, %s, %s"), csX, csY, csZ);
|
|
}
|
|
else
|
|
{
|
|
csText.Format(_T("文字基点读取失败"));
|
|
}
|
|
xmlTree.SetItemText(posItemTextPoint, csText);
|
|
}
|
|
|
|
POSITION posItemTextShade = xmlTree.Insert(_T("TextShadeBg"), posRoot, posItemTextPoint);
|
|
{
|
|
xmlTree.SetAttribute(posItemTextShade, _T("name"), _T("遮蔽背景"));
|
|
xmlTree.SetAttribute(posItemTextShade, _T("comment"), _T("文字是否遮蔽背景0/不是、1/是"));
|
|
if (!m_pXDataMap->GetAt(HEQU_TextShadeBg, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemTextShade, csText);
|
|
}
|
|
|
|
POSITION posItemTextLoc = xmlTree.Insert(_T("TextLoc"), posRoot, posItemTextShade);
|
|
{
|
|
xmlTree.SetAttribute(posItemTextLoc, _T("name"), _T("标注文字位置"));
|
|
xmlTree.SetAttribute(posItemTextLoc, _T("comment"), _T("标注文字的位置:enum HvacEquipDimLoc"));
|
|
if (!m_pXDataMap->GetAt(HEQU_TextLoc, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemTextLoc, csText);
|
|
}
|
|
|
|
POSITION posItemReversalX = xmlTree.Insert(_T("ReversalX"), posRoot, posItemTextLoc);
|
|
{
|
|
xmlTree.SetAttribute(posItemReversalX, _T("name"), _T("是否左右旋转"));
|
|
xmlTree.SetAttribute(posItemReversalX, _T("comment"), _T("0/不是、1/是"));
|
|
if (!m_pXDataMap->GetAt(HEQU_ReversalX, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemReversalX, csText);
|
|
}
|
|
|
|
POSITION posItemReversalY = xmlTree.Insert(_T("ReversalY"), posRoot, posItemReversalX);
|
|
{
|
|
xmlTree.SetAttribute(posItemReversalY, _T("name"), _T("是否上下旋转"));
|
|
xmlTree.SetAttribute(posItemReversalY, _T("comment"), _T("0/不是、1/是"));
|
|
if (!m_pXDataMap->GetAt(HEQU_ReversalY, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemReversalY, csText);
|
|
}
|
|
|
|
POSITION posItemSectType = xmlTree.Insert(_T("SectType"), posRoot, posItemReversalY);
|
|
{
|
|
xmlTree.SetAttribute(posItemSectType, _T("name"), _T("截面类型"));
|
|
xmlTree.SetAttribute(posItemSectType, _T("comment"), _T("0/矩形、1/圆形、2/扁圆"));
|
|
if (!m_pXDataMap->GetAt(HVAC_SectType, nValue))
|
|
{
|
|
nValue = 0;
|
|
}
|
|
csText.Format(_T("%d"), nValue);
|
|
xmlTree.SetItemText(posItemSectType, csText);
|
|
}
|
|
|
|
|
|
CString csXml = xmlTree.GetXml();
|
|
|
|
return csXml;
|
|
} |