1612 lines
47 KiB
C++
1612 lines
47 KiB
C++
#include "stdafx.h"
|
|
#include "TEImpBracket.h"
|
|
|
|
TEImpBracket::TEImpBracket()
|
|
{
|
|
|
|
}
|
|
|
|
TEImpBracket::~TEImpBracket()
|
|
{
|
|
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::getClassID(CLSID* pClsid) const
|
|
{
|
|
// #if (ADS < 16)
|
|
// CLSID CLSID_BracketEntity = {0x4A8F86A3, 0xCAB9, 0x4342, { 0xB6, 0x53, 0x90, 0x00, 0xB0, 0xA6, 0x52, 0xD7 }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 16)
|
|
// CLSID CLSID_BracketEntity = {0x4A8F86A3, 0xCAB9, 0x4342, { 0xB6, 0x53, 0x90, 0x00, 0xB0, 0xA6, 0x52, 0xD8 }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 17)
|
|
// CLSID CLSID_BracketEntity = {0x4A8F86A3, 0xCAB9, 0x4342, { 0xB6, 0x53, 0x90, 0x00, 0xB0, 0xA6, 0x52, 0xD9 }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 18)
|
|
// CLSID CLSID_BracketEntity = {0x4A8F86A3, 0xCAB9, 0x4342, { 0xB6, 0x53, 0x90, 0x00, 0xB0, 0xA6, 0x52, 0xDA }};
|
|
// #endif
|
|
//
|
|
// #if (ADS == 19)
|
|
// CLSID CLSID_BracketEntity = {0x4A8F86A3, 0xCAB9, 0x4342, { 0xB6, 0x53, 0x90, 0x00, 0xB0, 0xA6, 0x52, 0xDA }};
|
|
// #endif
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
void TEImpBracket::GetKindName(CString& sName)
|
|
{
|
|
sName = _T("TCH_BRACKET");
|
|
}
|
|
|
|
// 夹点提示
|
|
Acad::ErrorStatus TEImpBracket::GetGripText(int i, CString &cs) const
|
|
{
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
{
|
|
cs = _T("移动");
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::getOsnapPoints(AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
switch(osnapMode)
|
|
{
|
|
case AcDb::kOsModeNear:
|
|
{
|
|
AcGePoint3d ptNear;
|
|
if (GetNearestPoint(pickPoint, ptNear))
|
|
{
|
|
snapPoints.append(ptNear);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case AcDb::kOsModeNode:
|
|
break;
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
// 获取最近点
|
|
BOOL TEImpBracket::GetNearestPoint(const AcGePoint3d& pickPoint,AcGePoint3d& ptNear) const
|
|
{
|
|
BOOL bIsFind = FALSE;
|
|
|
|
TComplexCurve cplCurve;
|
|
if (GetCurves(cplCurve))
|
|
{
|
|
TSupportFunc spFun;
|
|
bIsFind = spFun.GetNearestPoint(cplCurve, pickPoint, ptNear);
|
|
}
|
|
|
|
return bIsFind;
|
|
}
|
|
|
|
BOOL TEImpBracket::GetCurves(TComplexCurve& cplCurve) const
|
|
{
|
|
AcDbObjectId BlockId;
|
|
AcGePoint3d ptInsert;
|
|
AcGePoint3d ptS,ptE;
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,BlockId);
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
|
|
TDb::TCurveElement el;
|
|
memset(&el,0,sizeof(TDb::TCurveElement));
|
|
|
|
el.ptGe[0] = ptS;
|
|
el.ptGe[1] = ptE;
|
|
el.ptGe[2] = ptE;
|
|
cplCurve.append(el);
|
|
|
|
AcDbVoidPtrArray arPtrs,arPtrsSub;
|
|
explode(arPtrs);
|
|
AcDbEntity* pEnt = NULL;
|
|
AcDbBlockReference* pRef = NULL;
|
|
AcDbLine* pLine = NULL;
|
|
for (int i = 0;i < arPtrs.length();i++)
|
|
{
|
|
pEnt = (AcDbEntity*)arPtrs[i];
|
|
if (pEnt->isKindOf(AcDbBlockReference::desc()))
|
|
{
|
|
pRef = AcDbBlockReference::cast(pEnt);
|
|
pRef->explode(arPtrsSub);
|
|
for (int k = 0;k < arPtrsSub.length();k++)
|
|
{
|
|
pEnt = (AcDbEntity*)arPtrsSub[k];
|
|
if (pEnt)
|
|
{
|
|
if (pEnt->isKindOf(AcDbLine::desc()))
|
|
{
|
|
pLine = AcDbLine::cast(pEnt);
|
|
el.ptGe[0] = pLine->startPoint();
|
|
el.ptGe[1] = pLine->endPoint();
|
|
el.ptGe[2] = pLine->endPoint();
|
|
cplCurve.append(el);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::explode(AcDbVoidPtrArray& entitySet) const
|
|
{
|
|
if (m_pOwnerEnt)
|
|
{
|
|
m_pOwnerEnt->explode(entitySet);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw2d(XExplodeDraw &mode) const
|
|
{
|
|
if (m_pXDataMap == NULL)
|
|
{
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
|
|
//#define KEY_ROATEANGLE _T("Roateangle") // 图块旋转角度
|
|
AcGePoint3d ptS,ptE;
|
|
AcDbObjectId idBlk2d1,idBlk2d2;
|
|
double dAngle1 = 0.0,dAngle2 = 0.0;
|
|
AcGeVector3d vtNormal,vtDir;
|
|
int nStyle = 0,nType = 0;
|
|
BOOL bDrawPedestal(TRUE);
|
|
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtNormal);
|
|
m_pXDataMap->GetAt(KEY_STYLE,nStyle); //立柱样式
|
|
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,idBlk2d1);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
m_pXDataMap->GetAt(KEY_ISDRAWPEDESTAL, bDrawPedestal);
|
|
|
|
if (nType == TDb::eDRowSingleBracket)
|
|
{
|
|
return ExplodeOrDrawDRowBracket2d(mode);
|
|
}
|
|
vtDir = ptE - ptS;
|
|
vtDir.normalize();
|
|
|
|
// 托臂 changed below by mcl 2011.3.1 支持不绘制底座
|
|
ExplodeOrDraw2dSupport(mode,ptS,ptE,vtNormal);
|
|
if (bDrawPedestal)
|
|
{
|
|
ExplodeOrDraw2dPedestal(mode,ptS,idBlk2d1,dAngle1); //底座1
|
|
if (nType == TDb::eDoubleBracket)
|
|
{
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE2,dAngle2);
|
|
ExplodeOrDraw2dPedestal(mode,ptE,idBlk2d1,dAngle2); //底座2
|
|
}
|
|
}
|
|
|
|
//立柱2
|
|
//ExplodeOrDraw2dPillar(mode,ptPillarS2,vtDir,nStyle);
|
|
// //底座1
|
|
// ExplodeOrDraw2dPedestal(mode,ptS,idBlk2d1,dAngle1);
|
|
//
|
|
// //立柱1
|
|
// //m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS1);
|
|
// //ExplodeOrDraw2dPillar(mode,ptPillarS1,vtDir,nStyle);
|
|
// //托臂
|
|
// ExplodeOrDraw2dSupport(mode,ptS,ptE,vtNormal);
|
|
// if (nType == TDb::eDoubleBracket)
|
|
// {
|
|
// m_pXDataMap->GetAt(KEY_ROATEANGLE2,dAngle2);
|
|
// //底座2
|
|
// ExplodeOrDraw2dPedestal(mode,ptE,idBlk2d1,dAngle2);
|
|
// //立柱2
|
|
// //ExplodeOrDraw2dPillar(mode,ptPillarS2,vtDir,nStyle);
|
|
// }
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDrawDRowBracket2d(XExplodeDraw &mode) const
|
|
{
|
|
AcGePoint3d ptS,ptE;
|
|
AcDbObjectId idBlk2d1,idBlk2d2;
|
|
double dAngle1 = 0.0,dAngle2 = 0.0;
|
|
AcGeVector3d vtNormal,vtDir;
|
|
int nStyle = 0,nType = 0;
|
|
BOOL bDrawPedestal(TRUE);
|
|
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtNormal);
|
|
m_pXDataMap->GetAt(KEY_STYLE,nStyle); //立柱样式
|
|
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,idBlk2d1);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
m_pXDataMap->GetAt(KEY_ISDRAWPEDESTAL, bDrawPedestal);
|
|
|
|
ExplodeOrDraw2dPedestal(mode,ptS,idBlk2d1,dAngle1); //底座1
|
|
|
|
AcGePoint3d ptS1,ptS2,ptE1,ptE2;
|
|
double dLen = 0.0;
|
|
m_pXDataMap->GetAt(KEY_DROW_START1,ptS1);
|
|
m_pXDataMap->GetAt(KEY_DROW_START2,ptS2);
|
|
m_pXDataMap->GetAt(KEY_DROW_LENGTH,dLen);
|
|
ptS1.z = ptS.z;
|
|
ptS2.z = ptS.z;
|
|
|
|
vtDir = ptS1 - ptS;
|
|
vtDir.normalize();
|
|
ptE1 = ptS1 + vtDir * dLen;
|
|
vtDir = ptS2 - ptS;
|
|
vtDir.normalize();
|
|
ptE2 = ptS2 + vtDir * dLen;
|
|
|
|
//双排托臂
|
|
ExplodeOrDraw2dSupport(mode,ptS1,ptE1,vtNormal);
|
|
ExplodeOrDraw2dSupport(mode,ptS2,ptE2,vtNormal);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
//绘制2维底座 指定插入点 旋转角度 图块id
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw2dPedestal(XExplodeDraw &mode,AcGePoint3d ptIns,AcDbObjectId BlockId,double dAngle) const
|
|
{
|
|
AcGeScale3d scale(1.0, 1.0, 1.0);
|
|
AcDbBlockTableRecord* pBlock = NULL;
|
|
if (acdbOpenObject(pBlock, BlockId, AcDb::kForRead) == Acad::eOk)
|
|
{
|
|
mode.DrawBlock(*pBlock, ptIns, scale, dAngle, TRUE);
|
|
pBlock->close();
|
|
}
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
//绘制2维立柱 指定类型
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw2dPillar(XExplodeDraw &mode,AcGePoint3d ptS,AcGeVector3d vtDir,int nStyle) const
|
|
{
|
|
|
|
switch(nStyle)
|
|
{
|
|
case eSquareSteel:
|
|
{
|
|
double dW = 0.0,dL = 0.0;
|
|
m_pXDataMap->GetAt(KEY_B2,dW);
|
|
m_pXDataMap->GetAt(KEY_L2,dL);
|
|
AcGePoint3d pt1,pt2,pt3,pt4;
|
|
AcGeVector3d vtTemp = vtDir;
|
|
vtTemp.rotateBy(PI/2,TSysCoordinateTool::GetCurrentViewWCSKZAxis());
|
|
vtDir.normalize();
|
|
vtTemp.normalize();
|
|
pt1 = ptS + vtDir*dL/2 + vtTemp*dW/2;
|
|
pt2 = pt1 - vtDir*dL;
|
|
pt3 = pt2 - vtTemp*dW;
|
|
pt4 = pt3 + vtDir*dL;
|
|
XLine l1,l2,l3,l4;
|
|
l1.SetPoints(pt2,pt1);
|
|
l2.SetPoints(pt2,pt3);
|
|
l3.SetPoints(pt4,pt1);
|
|
l4.SetPoints(pt4,pt3);
|
|
|
|
mode.DrawLine(l1);
|
|
mode.DrawLine(l2);
|
|
mode.DrawLine(l3);
|
|
mode.DrawLine(l4);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
//绘制2维托臂 指定起点,法向量,方向向量,长度
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw2dSupport(XExplodeDraw &mode,AcGePoint3d ptS,AcGePoint3d ptE,AcGeVector3d vtNormal) const
|
|
{
|
|
AcDbPolyline* pLine = new AcDbPolyline;
|
|
if(pLine)
|
|
{
|
|
double dLineWidth = 0.0;
|
|
m_pXDataMap->GetAt(KEY_EDAGEWIDTH,dLineWidth);
|
|
AcGePlane plane(ptS,vtNormal);
|
|
AcGePoint3d ptOrth = AcGePoint3d::kOrigin.orthoProject(plane);
|
|
plane.set(ptOrth,vtNormal);
|
|
|
|
double dEl = ptOrth.asVector().length();
|
|
if (!ptOrth.asVector().isCodirectionalTo(vtNormal))
|
|
{
|
|
dEl *= -1.0;
|
|
}
|
|
|
|
BracketArmType eType = TDb::eLineShape;
|
|
m_pXDataMap->GetAt(KEY_BRACKETARMTYPE, (int&)eType);
|
|
if (TDb::eLineShape == eType)
|
|
{
|
|
pLine->addVertexAt(0,ptS.convert2d(plane));
|
|
pLine->addVertexAt(1,ptE.convert2d(plane));
|
|
}
|
|
else if (TDb::eRectShape == eType) // mcl add 2011.3.1 增加矩形画法
|
|
{
|
|
double dWidth(0.0);
|
|
m_pXDataMap->GetAt(KEY_RECTARMWIDTH, dWidth);
|
|
if (dWidth < 1)
|
|
dWidth = 50.0;
|
|
|
|
AcGePoint3d ptUpLeft, ptUpRight, ptDwLeft, ptDwRight;
|
|
AcGeVector3d vtPerl = (ptE - ptS).normalize();
|
|
vtPerl.rotateBy(PI*0.5, vtNormal);
|
|
ptUpLeft = ptS - vtPerl * dWidth*0.5;
|
|
ptUpRight = ptUpLeft + vtPerl * dWidth;
|
|
ptDwLeft = ptE - vtPerl * dWidth*0.5;
|
|
ptDwRight = ptDwLeft + vtPerl * dWidth;
|
|
|
|
pLine->addVertexAt(0, ptUpLeft.convert2d(plane));
|
|
pLine->addVertexAt(1, ptUpRight.convert2d(plane));
|
|
pLine->addVertexAt(2, ptDwRight.convert2d(plane));
|
|
pLine->addVertexAt(3, ptDwLeft.convert2d(plane));
|
|
pLine->setClosed(Adesk::kTrue);
|
|
}
|
|
|
|
pLine->setNormal(vtNormal);
|
|
pLine->setConstantWidth(dLineWidth);
|
|
pLine->setElevation(dEl);
|
|
mode.Polyline(*pLine);
|
|
delete pLine;
|
|
}
|
|
else
|
|
return Acad::eOutOfMemory;
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw3d(XExplodeDraw &mode) const
|
|
{
|
|
Acad::ErrorStatus es = Acad::eInvalidInput;
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
int nType = -1;
|
|
int nBracketType = 0;
|
|
m_pXDataMap->GetAt(KEY_RUNTIME,nType);
|
|
|
|
switch (nType)
|
|
{
|
|
case TDb::eBracket:
|
|
{
|
|
m_pXDataMap->GetAt(KEY_TYPE,nBracketType);
|
|
if (nBracketType == TDb::eDRowSingleBracket)
|
|
{
|
|
//双排单臂吊架
|
|
es = ExplodeOrDrawDRowBracket3d(mode);
|
|
}
|
|
else
|
|
es = ExplodeOrDrawBracket3d(mode);
|
|
break;
|
|
}
|
|
case TDb::eSupport:
|
|
{
|
|
es = ExplodeOrDrawSupport3d(mode);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return es;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDrawBracket3d(XExplodeDraw &mode) const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
AcGePoint3d ptS,ptE,ptPillarS1,ptPillarE1,ptPillarS2,ptPillarE2;
|
|
AcDbObjectId idBlk2d1,idBlk2d2;
|
|
double dAngle1 = 0.0,dAngle2 = 0.0,dLen = 0.0;
|
|
AcGeVector3d vtNormal,vtDir;
|
|
int nStyle = 0,nType = 0;
|
|
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtNormal);
|
|
m_pXDataMap->GetAt(KEY_STYLE,nStyle); //立柱样式
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,idBlk2d1);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptPillarE1);
|
|
|
|
vtDir = ptE - ptS;
|
|
vtDir.normalize();
|
|
|
|
dLen = ptS.distanceTo(ptE);
|
|
// 绘制底座(四方体)
|
|
ExplodeOrDraw3dPedestal(mode,ptPillarS1,vtNormal);
|
|
// 绘制立柱
|
|
|
|
ExplodeOrDraw3dPillar(mode,ptPillarS1,ptPillarE1,vtNormal,nStyle);
|
|
// 绘制托臂
|
|
AcGePoint3dArray arPt;
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPt);
|
|
for (int i = 0;i < arPt.length();i++)
|
|
{
|
|
ptS = arPt[i];
|
|
ExplodeOrDraw3dSupport(mode,ptS,vtNormal,vtDir,dLen);
|
|
}
|
|
if (nType == TDb::eDoubleBracket)
|
|
{
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START2,ptPillarS2);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END2,ptPillarE2);
|
|
//底座2
|
|
ExplodeOrDraw3dPedestal(mode,ptPillarS2,vtNormal);
|
|
//立柱2
|
|
ExplodeOrDraw3dPillar(mode,ptPillarS2,ptPillarE2,vtNormal,nStyle);
|
|
}
|
|
}
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDrawSupport3d(XExplodeDraw &mode) const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
AcGePoint3d ptS,ptE,ptPillarS1,ptPillarE1,ptPillarS2,ptPillarE2;
|
|
AcDbObjectId idBlk2d1,idBlk2d2;
|
|
double dAngle1 = 0.0,dAngle2 = 0.0,dLen = 0.0;
|
|
AcGeVector3d vtNormal,vtDir;
|
|
int nStyle;
|
|
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtNormal);
|
|
m_pXDataMap->GetAt(KEY_STYLE,nStyle); //立柱样式
|
|
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,idBlk2d1);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptPillarE1);
|
|
|
|
vtDir = ptE - ptS;
|
|
vtDir.normalize();
|
|
dLen = ptS.distanceTo(ptE);
|
|
// 绘制底座(四方体)
|
|
//ExplodeOrDraw3dPedestal(mode,ptS,vtNormal);
|
|
// 绘制立柱
|
|
ExplodeOrDraw3dPillar(mode,ptPillarS1,ptPillarE1,vtNormal,nStyle);
|
|
// 绘制托臂
|
|
AcGePoint3dArray arPt;
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPt);
|
|
for (int i = 0;i < arPt.length();i++)
|
|
{
|
|
ptS = arPt[i];
|
|
ExplodeOrDraw3dSupport(mode,ptS,vtNormal,vtDir,dLen);
|
|
}
|
|
}
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
//绘制双排吊架
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDrawDRowBracket3d(XExplodeDraw& mode) const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
AcGePoint3d ptS,ptE,ptPillarS1,ptPillarE1,ptPillarS2,ptPillarE2;
|
|
AcDbObjectId idBlk2d1,idBlk2d2;
|
|
double dAngle1 = 0.0,dAngle2 = 0.0,dLen = 0.0,dL1 = 0.0;
|
|
AcGeVector3d vtNormal,vtDir;
|
|
int nStyle = 0,nType = 0;
|
|
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtNormal);
|
|
m_pXDataMap->GetAt(KEY_STYLE,nStyle); //立柱样式
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,idBlk2d1);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS1);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptPillarE1);
|
|
m_pXDataMap->GetAt(KEY_L1,dL1);
|
|
m_pXDataMap->GetAt(KEY_DROW_LENGTH,dLen);
|
|
|
|
// 绘制底座(四方体)
|
|
ExplodeOrDraw3dPedestal(mode,ptS,vtNormal);
|
|
// 绘制立柱
|
|
ExplodeOrDraw3dPillar(mode,ptPillarS1,ptPillarE1,vtNormal,nStyle);
|
|
|
|
//绘制托臂
|
|
AcGeDoubleArray arHeight;
|
|
m_pXDataMap->GetAt(KEY_DROW_HEIGHT,arHeight);
|
|
//计算托臂起点,ptS为底座中心点
|
|
AcGePoint3d ptS1,ptS2;
|
|
double dW = 0.0,dL = 0.0,dB2;
|
|
m_pXDataMap->GetAt(KEY_B2,dB2); //立柱宽度
|
|
|
|
vtDir = ptE - ptS;
|
|
vtDir.normalize();
|
|
|
|
ptS1 = ptS + vtDir * dB2 * 0.5;
|
|
ptS2 = ptS - vtDir * dB2 * 0.5;
|
|
//lsd del 2013-7-26 不按两边对称画
|
|
// for (int i = 0;i < arHeight.length();i++)
|
|
// {
|
|
// //计算托臂起点
|
|
// ptS1.z = arHeight[i];
|
|
// ptS2.z = arHeight[i];
|
|
// ExplodeOrDraw3dSupport(mode,ptS1,vtNormal,vtDir,dLen);
|
|
// ExplodeOrDraw3dSupport(mode,ptS2,vtNormal,-1 * vtDir,dLen);
|
|
// }
|
|
|
|
//lsd add 2013-7-26 支持两边不对称
|
|
AcGePoint3dArray arPoints;
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPoints);
|
|
int dCount = arPoints.length();
|
|
if(0 == dCount)
|
|
{
|
|
for (int i = 0;i < arHeight.length();i++)
|
|
{
|
|
//计算托臂起点
|
|
ptS1.z = arHeight[i];
|
|
ptS2.z = arHeight[i];
|
|
ExplodeOrDraw3dSupport(mode,ptS1,vtNormal,vtDir,dLen);
|
|
ExplodeOrDraw3dSupport(mode,ptS2,vtNormal,-1 * vtDir,dLen);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for(int i=0; i<dCount; i++)
|
|
{
|
|
ptS1.z = arPoints[i].z;
|
|
ptS2.z = arPoints[i].z;
|
|
//判断当前托臂的方向
|
|
//if(arPoints[i].isEqualTo(ptS1))
|
|
if(arPoints[i].isEqualTo(ptS1, g_globalTol)) // modify by cq TFS8208
|
|
{
|
|
ExplodeOrDraw3dSupport(mode,ptS1,vtNormal,vtDir,dLen);
|
|
}
|
|
else
|
|
{
|
|
ExplodeOrDraw3dSupport(mode,ptS2,vtNormal,-1 * vtDir,dLen);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw3dPedestal(XExplodeDraw &mode,AcGePoint3d ptIns,AcGeVector3d vtNormal) const
|
|
{
|
|
double dB = 0.0,dL = 0.0,dH = 0.0;
|
|
AcGePoint3d ptS,ptE;
|
|
m_pXDataMap->GetAt(KEY_B1,dB);
|
|
m_pXDataMap->GetAt(KEY_L1,dL);
|
|
m_pXDataMap->GetAt(KEY_H1,dH);
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
|
|
AcGeVector3d vtDir = ptE - ptS;
|
|
AcGeVector3d vtTemp = vtDir;
|
|
AcGeVector3d vtNor = vtNormal;
|
|
|
|
vtTemp.rotateBy(PI/2,vtNormal);
|
|
|
|
vtTemp.normalize();
|
|
vtDir.normalize();
|
|
vtNor.normalize();
|
|
|
|
AcGePoint3d ptLst1[5],ptLst2[5];
|
|
ptLst1[0] = ptIns - vtDir*dL/2 - vtTemp*dB/2;
|
|
ptLst1[1] = ptLst1[0] + vtDir*dL;
|
|
ptLst1[2] = ptLst1[1] - vtNor*dH;
|
|
ptLst1[3] = ptLst1[0] - vtNor*dH;
|
|
ptLst1[4] = ptLst1[0];
|
|
|
|
ptLst2[0] = ptIns - vtDir*dL/2 + vtTemp*dB/2;
|
|
ptLst2[1] = ptLst2[0] + vtDir*dL;
|
|
ptLst2[2] = ptLst2[1] - vtNor*dH;
|
|
ptLst2[3] = ptLst2[0] - vtNor*dH;
|
|
ptLst2[4] = ptLst2[0];
|
|
|
|
AcGePoint3d ptLstTemp[4];
|
|
for (int i = 0;i < 4;i++)
|
|
{
|
|
ptLstTemp[0] = ptLst1[i];
|
|
ptLstTemp[1] = ptLst2[i];
|
|
ptLstTemp[2] = ptLst1[i+1];
|
|
ptLstTemp[3] = ptLst2[i+1];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
}
|
|
|
|
ptLstTemp[0] = ptLst1[0];
|
|
ptLstTemp[1] = ptLst1[1];
|
|
ptLstTemp[2] = ptLst1[3];
|
|
ptLstTemp[3] = ptLst1[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
|
|
ptLstTemp[0] = ptLst2[0];
|
|
ptLstTemp[1] = ptLst2[1];
|
|
ptLstTemp[2] = ptLst2[3];
|
|
ptLstTemp[3] = ptLst2[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw3dSupport(XExplodeDraw &mode,AcGePoint3d ptS,AcGeVector3d vtNormal,AcGeVector3d vtDir,double dLen) const
|
|
{
|
|
double dW = 0.0,dL = 0.0,dH = 0.0;
|
|
m_pXDataMap->GetAt(KEY_W,dW);
|
|
m_pXDataMap->GetAt(KEY_L,dL);
|
|
m_pXDataMap->GetAt(KEY_H,dH);
|
|
|
|
if (dL < dLen)
|
|
{
|
|
dL = dLen;
|
|
}
|
|
|
|
AcGeVector3d vtTemp = vtDir;
|
|
AcGeVector3d vtNor = vtNormal;
|
|
|
|
vtTemp.rotateBy(PI/2,vtNormal);
|
|
|
|
vtTemp.normalize();
|
|
vtDir.normalize();
|
|
vtNor.normalize();
|
|
|
|
AcGePoint3d ptLst1[5],ptLst2[5];
|
|
ptLst1[0] = ptS - vtDir*(dL-dLen)/2 + vtTemp*dW/2;
|
|
ptLst1[1] = ptLst1[0] - vtTemp*dW;
|
|
ptLst1[2] = ptLst1[1] - vtNor*dH;
|
|
ptLst1[3] = ptLst1[0] - vtNor*dH;
|
|
ptLst1[4] = ptLst1[0];
|
|
|
|
ptLst2[0] = ptLst1[0] + vtDir*dL;
|
|
ptLst2[1] = ptLst1[1] + vtDir*dL;
|
|
ptLst2[2] = ptLst1[2] + vtDir*dL;
|
|
ptLst2[3] = ptLst1[3] + vtDir*dL;
|
|
ptLst2[4] = ptLst2[0];
|
|
|
|
AcGePoint3d ptLstTemp[4];
|
|
for (int i = 0;i < 4;i++)
|
|
{
|
|
ptLstTemp[0] = ptLst1[i];
|
|
ptLstTemp[1] = ptLst2[i];
|
|
ptLstTemp[2] = ptLst1[i+1];
|
|
ptLstTemp[3] = ptLst2[i+1];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
}
|
|
|
|
ptLstTemp[0] = ptLst1[0];
|
|
ptLstTemp[1] = ptLst1[1];
|
|
ptLstTemp[2] = ptLst1[3];
|
|
ptLstTemp[3] = ptLst1[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
|
|
ptLstTemp[0] = ptLst2[0];
|
|
ptLstTemp[1] = ptLst2[1];
|
|
ptLstTemp[2] = ptLst2[3];
|
|
ptLstTemp[3] = ptLst2[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::ExplodeOrDraw3dPillar(XExplodeDraw &mode,AcGePoint3d ptS,AcGePoint3d ptE,AcGeVector3d vtNormal,int nStyle) const
|
|
{
|
|
double dW = 0.0,dL = 0.0;
|
|
AcGePoint3d ptStart,ptEnd;
|
|
m_pXDataMap->GetAt(KEY_B2,dW);
|
|
m_pXDataMap->GetAt(KEY_L2,dL);
|
|
m_pXDataMap->GetAt(KEY_START,ptStart);
|
|
m_pXDataMap->GetAt(KEY_END,ptEnd);
|
|
AcGeVector3d vtDir = ptEnd - ptStart;
|
|
AcGeVector3d vtTemp = vtDir;
|
|
AcGeVector3d vtNor = vtNormal;
|
|
|
|
vtTemp.rotateBy(PI/2,vtNormal);
|
|
|
|
vtTemp.normalize();
|
|
vtDir.normalize();
|
|
vtNor.normalize();
|
|
|
|
AcGePoint3d ptLst1[5],ptLst2[5];
|
|
ptLst1[0] = ptS - vtDir*(dL)/2 + vtTemp*dW/2;
|
|
ptLst1[1] = ptLst1[0] - vtTemp*dW;
|
|
ptLst1[2] = ptLst1[1] + vtDir*dL;
|
|
ptLst1[3] = ptLst1[0] + vtDir*dL;
|
|
ptLst1[4] = ptLst1[0];
|
|
|
|
ptLst2[0] = ptE - vtDir*(dL)/2 + vtTemp*dW/2;
|
|
ptLst2[1] = ptLst2[0] - vtTemp*dW;
|
|
ptLst2[2] = ptLst2[1] + vtDir*dL;
|
|
ptLst2[3] = ptLst2[0] + vtDir*dL;
|
|
ptLst2[4] = ptLst2[0];
|
|
|
|
AcGePoint3d ptLstTemp[4];
|
|
for (int i = 0;i < 4;i++)
|
|
{
|
|
ptLstTemp[0] = ptLst1[i];
|
|
ptLstTemp[1] = ptLst2[i];
|
|
ptLstTemp[2] = ptLst1[i+1];
|
|
ptLstTemp[3] = ptLst2[i+1];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
}
|
|
|
|
ptLstTemp[0] = ptLst1[0];
|
|
ptLstTemp[1] = ptLst1[1];
|
|
ptLstTemp[2] = ptLst1[3];
|
|
ptLstTemp[3] = ptLst1[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
|
|
ptLstTemp[0] = ptLst2[0];
|
|
ptLstTemp[1] = ptLst2[1];
|
|
ptLstTemp[2] = ptLst2[3];
|
|
ptLstTemp[3] = ptLst2[2];
|
|
mode.DrawMesh(2,2,ptLstTemp);
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::transformBy(const AcGeMatrix3d& xform)
|
|
{
|
|
AcGePoint3d ptS,ptE,ptPillarS,ptPillarE,ptPillarS2,ptPillarE2;
|
|
AcGeVector3d vtNor,vtOldDir,vtNewDir;
|
|
|
|
AcGePoint3dArray arPnts;
|
|
double dAngle1 = 0.0;
|
|
int nType = 0;
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptPillarE);
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPnts);
|
|
m_pXDataMap->GetAt(KEY_NORMAL, vtNor);
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle1);
|
|
|
|
//增加图块角度处理
|
|
vtOldDir = ptE - ptS;
|
|
ptS.transformBy(xform);
|
|
ptE.transformBy(xform);
|
|
vtNewDir = ptE - ptS;
|
|
double dAngle = vtOldDir.angleTo(vtNewDir,AcGeVector3d::kZAxis);
|
|
|
|
ptPillarS.transformBy(xform);
|
|
ptPillarE.transformBy(xform);
|
|
vtNor.transformBy(xform);
|
|
for (int i = 0;i < arPnts.length();i++)
|
|
{
|
|
arPnts[i].transformBy(xform);
|
|
}
|
|
|
|
m_pXDataMap->SetAt(KEY_START,ptS);
|
|
m_pXDataMap->SetAt(KEY_END,ptE);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_START,ptPillarS);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_END,ptPillarE);
|
|
m_pXDataMap->SetAt(KEY_SUPPORT_PTLST,arPnts);
|
|
m_pXDataMap->SetAt(KEY_NORMAL, vtNor);
|
|
m_pXDataMap->SetAt(KEY_ROATEANGLE,dAngle1 + dAngle);
|
|
|
|
if (nType == TDb::eDoubleBracket)
|
|
{
|
|
double dAngle2 = 0.0;
|
|
AcGePoint3d ptPillarS2,ptPillarE2;
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE2,dAngle2);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START2,ptPillarS2);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END2,ptPillarE2);
|
|
ptPillarS2.transformBy(xform);
|
|
ptPillarE2.transformBy(xform);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_START2,ptPillarS2);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_END2,ptPillarE2);
|
|
m_pXDataMap->SetAt(KEY_ROATEANGLE2,dAngle2 + dAngle);
|
|
}
|
|
else if (nType == TDb::eDRowSingleBracket)
|
|
{
|
|
//增加双排吊架处理
|
|
AcGePoint3d ptDR1,ptDR2;
|
|
m_pXDataMap->GetAt(KEY_DROW_START1,ptDR1);
|
|
m_pXDataMap->GetAt(KEY_DROW_START2,ptDR2);
|
|
ptDR1.transformBy(xform);
|
|
ptDR2.transformBy(xform);
|
|
m_pXDataMap->SetAt(KEY_DROW_START1,ptDR1);
|
|
m_pXDataMap->SetAt(KEY_DROW_START2,ptDR2);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::moveGripPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
AcGePoint3d ptS,ptE,ptPillarS,ptPillarE,ptPillarS2,ptPillarE2;
|
|
AcGePoint3dArray arPnts;
|
|
int nType = 0;
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_END,ptE);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,ptPillarS);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptPillarE);
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPnts);
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
|
|
ptS += offset;
|
|
ptE += offset;
|
|
ptPillarS += offset;
|
|
ptPillarE += offset;
|
|
ptPillarS2 += offset;
|
|
ptPillarE2 += offset;
|
|
for (int i = 0;i < arPnts.length();i++)
|
|
{
|
|
arPnts[i] += offset;
|
|
}
|
|
m_pXDataMap->SetAt(KEY_START,ptS);
|
|
m_pXDataMap->SetAt(KEY_END,ptE);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_START,ptPillarS);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_END,ptPillarE);
|
|
m_pXDataMap->SetAt(KEY_SUPPORT_PTLST,arPnts);
|
|
|
|
if (nType == TDb::eDoubleBracket)
|
|
{
|
|
AcGePoint3d ptPillarS2,ptPillarE2;
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START2,ptPillarS2);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END2,ptPillarE2);
|
|
ptPillarS2 += offset;
|
|
ptPillarE2 += offset;
|
|
m_pXDataMap->SetAt(KEY_PILLAR_START2,ptPillarS2);
|
|
m_pXDataMap->SetAt(KEY_PILLAR_END2,ptPillarE2);
|
|
}
|
|
else if (nType == TDb::eDRowSingleBracket)
|
|
{
|
|
//增加双排吊架处理
|
|
AcGePoint3d ptDR1,ptDR2;
|
|
m_pXDataMap->GetAt(KEY_DROW_START1,ptDR1);
|
|
m_pXDataMap->GetAt(KEY_DROW_START2,ptDR2);
|
|
ptDR1 += offset;
|
|
ptDR2 += offset;
|
|
m_pXDataMap->SetAt(KEY_DROW_START1,ptDR1);
|
|
m_pXDataMap->SetAt(KEY_DROW_START2,ptDR2);
|
|
}
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::moveStretchPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
return moveGripPointsAt(indices, offset);
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::getStretchPoints(AcGePoint3dArray& stretchPoints) const
|
|
{
|
|
if (m_pXDataMap != NULL)
|
|
{
|
|
AcGePoint3d pt;
|
|
m_pXDataMap->GetAt(KEY_MID,pt);
|
|
stretchPoints.append(pt);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus TEImpBracket::getGripPoints(AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
if (m_pXDataMap == NULL)
|
|
{
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
|
|
AcGePoint3d pt;
|
|
m_pXDataMap->GetAt(KEY_START, pt);
|
|
gripPoints.append(pt);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
void TEImpBracket::list() const
|
|
{
|
|
|
|
}
|
|
|
|
// 2012/9/26 comment by wzh
|
|
// CString TEImpBracket::GetXml() const
|
|
// {
|
|
// if (m_pXDataMap == NULL || m_pOwnerEnt == NULL)
|
|
// {
|
|
// return _T("");
|
|
// }
|
|
//
|
|
// int nValue(0);
|
|
// double dValue(0.0);
|
|
// int nSizePreci(3), nPtPreci(6); // 尺寸、位置精度
|
|
//
|
|
// TXmlTree xmlTree;
|
|
// CString csText;
|
|
// AcGePoint3d pt;
|
|
// AcGePoint3dArray arPts;
|
|
// AcGeVector3d vtDir;
|
|
// CString csX, csY, csZ;
|
|
// POSITION posRoot = xmlTree.Insert(_T("ATS_EQUIPMENT"), NULL, NULL);
|
|
// {
|
|
// CString sTemp = _T("");
|
|
// m_pXDataMap->GetAt(KEY_RUNTIME,nValue);
|
|
// sTemp.Format(_T("%d"),nValue);
|
|
// xmlTree.SetAttribute(posRoot, _T("name"), sTemp);
|
|
// xmlTree.SetAttribute(posRoot, _T("comment"), _T("26:吊架 27:支架"));
|
|
// }
|
|
//
|
|
// POSITION nowPos = xmlTree.Insert(KEY_TYPE,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("吊架样式"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("0:支架 1:双臂吊架 2:单臂吊架"));
|
|
// nValue = 0;
|
|
// m_pXDataMap->GetAt(KEY_TYPE,nValue);
|
|
// csText.Format(_T("%d"),nValue);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_START,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("起点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("起点"));
|
|
// m_pXDataMap->GetAt(KEY_START,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_END,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("终点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("终点"));
|
|
// m_pXDataMap->GetAt(KEY_END,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_PILLAR_START,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱1起点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱1起点"));
|
|
// m_pXDataMap->GetAt(KEY_PILLAR_START,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_PILLAR_END,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱1终点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱1终点"));
|
|
// m_pXDataMap->GetAt(KEY_PILLAR_END,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_PILLAR_START2,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱2起点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱2起点"));
|
|
// m_pXDataMap->GetAt(KEY_PILLAR_START2,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_PILLAR_END2,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱2终点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱2终点"));
|
|
// m_pXDataMap->GetAt(KEY_PILLAR_END2,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(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_SUPPORT_PTLST,posRoot,NULL);
|
|
// {
|
|
// CString sTemp = _T("");
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂起点"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂起点集"));
|
|
// m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPts);
|
|
// csText.Empty();
|
|
// for(int i = 0;i < arPts.length();i++)
|
|
// {
|
|
// pt = arPts[i];
|
|
// TAuxTools::DoubleToString(pt.x,nPtPreci,csX);
|
|
// TAuxTools::DoubleToString(pt.y,nPtPreci,csY);
|
|
// TAuxTools::DoubleToString(pt.z,nPtPreci,csZ);
|
|
// sTemp.Format(_T("%s,%s,%s"),csX,csY,csZ);
|
|
// if (!csText.IsEmpty())
|
|
// {
|
|
// csText += _T(";");
|
|
// }
|
|
// csText += sTemp;
|
|
// }
|
|
//
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_B1,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面宽度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面宽度"));
|
|
// m_pXDataMap->GetAt(KEY_B1,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
// nowPos = xmlTree.Insert(KEY_H1,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面高度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面高度"));
|
|
// m_pXDataMap->GetAt(KEY_H1,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
// nowPos = xmlTree.Insert(KEY_L1,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面长度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面长度"));
|
|
// m_pXDataMap->GetAt(KEY_L1,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_W,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面宽度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面宽度"));
|
|
// m_pXDataMap->GetAt(KEY_W,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
// nowPos = xmlTree.Insert(KEY_H,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面高度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面高度"));
|
|
// m_pXDataMap->GetAt(KEY_H,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
// nowPos = xmlTree.Insert(KEY_L,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面长度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面长度"));
|
|
// m_pXDataMap->GetAt(KEY_L,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_B2,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱截面宽度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱截面宽度"));
|
|
// m_pXDataMap->GetAt(KEY_B2,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
// nowPos = xmlTree.Insert(KEY_L2,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱截面长度"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱截面长度"));
|
|
// m_pXDataMap->GetAt(KEY_L2,dValue);
|
|
// TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(KEY_NORMAL,posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos, _T("name"), _T("法相量"));
|
|
// xmlTree.SetAttribute(nowPos, _T("comment"), _T("法相量"));
|
|
// m_pXDataMap->GetAt(KEY_NORMAL,vtDir);
|
|
// TAuxTools::DoubleToString(vtDir.x,nPtPreci,csX);
|
|
// TAuxTools::DoubleToString(vtDir.y,nPtPreci,csY);
|
|
// TAuxTools::DoubleToString(vtDir.z,nPtPreci,csZ);
|
|
// csText.Format(_T("%s,%s,%s"),csX,csY,csZ);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// nowPos = xmlTree.Insert(_T("Object_ID"),posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos,_T("name"),_T("ID"));
|
|
// xmlTree.SetAttribute(nowPos,_T("comment"),_T("支吊架ID"));
|
|
// LONG_PTR nid = m_pOwnerEnt->objectId().asOldId();
|
|
//
|
|
// csText.Format(_T("%ld"),nid);
|
|
// xmlTree.SetItemText(nowPos,csText);
|
|
// }
|
|
//
|
|
// // //获取颜色
|
|
// // CString strLayerName = m_pOwnerEnt->layer();
|
|
// // CString strColor = _T("");
|
|
// // int nr,ng,nb;
|
|
// // int ncolor = 0;
|
|
// // AcDbHardPointerId idlayer;
|
|
// // AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
|
|
// // AcDbLayerTable *pLayerTable =NULL;
|
|
// // pDb->getLayerTable(pLayerTable,AcDb::kForRead);
|
|
// // if (NULL!=pLayerTable)
|
|
// // {
|
|
// // pLayerTable->getAt(strLayerName,idlayer);
|
|
// // pLayerTable->close();
|
|
// // }
|
|
// // AcDbLayerTableRecord *pLayer = NULL;
|
|
// // Adesk::UInt16 nColor16;
|
|
// // acdbOpenObject(pLayer, idlayer,AcDb::kForRead);
|
|
// // if (pLayer != NULL)
|
|
// // {
|
|
// // ncolor = pLayer->color().color();
|
|
// // ncolor = pLayer->color().colorIndex();
|
|
// // nColor16 = pLayer->color().colorIndex();
|
|
// // nr = pLayer->color().red();
|
|
// // ng = pLayer->color().green();
|
|
// // nb = pLayer->color().blue();
|
|
// // pLayer->close();
|
|
// // TchExport::ColorToRGB(nColor16,&nr,&ng,&nb);
|
|
// // strColor.Format(_T("%d"), RGB(nr,ng,nb));
|
|
// // }
|
|
// // nowPos = xmlTree.Insert(_T("Ent_Color"),posRoot,NULL);
|
|
// // {
|
|
// // xmlTree.SetAttribute(nowPos,_T("name"),_T("color"));
|
|
// // xmlTree.SetAttribute(nowPos,_T("comment"),_T("实体颜色"));
|
|
// // xmlTree.SetItemText(nowPos,strColor);
|
|
// // }
|
|
//
|
|
// CString csXml = xmlTree.GetXml();
|
|
//
|
|
// return csXml;
|
|
// }
|
|
//
|
|
//
|
|
CString TEImpBracket::GetXml(const AcGeMatrix3d& mat) const
|
|
{
|
|
//
|
|
if (m_pXDataMap == NULL || m_pOwnerEnt == NULL)
|
|
{
|
|
return _T("");
|
|
}
|
|
|
|
int nValue(0);
|
|
double dValue(0.0);
|
|
int nSizePreci(3), nPtPreci(6); // 尺寸、位置精度
|
|
|
|
TXmlTree xmlTree;
|
|
CString csText;
|
|
AcGePoint3d pt;
|
|
AcGePoint3dArray arPts;
|
|
AcGeVector3d vtDir;
|
|
CString csX, csY, csZ;
|
|
POSITION posRoot = xmlTree.Insert(_T("ATS_EQUIPMENT"), NULL, NULL);
|
|
{
|
|
CString sTemp = _T("");
|
|
m_pXDataMap->GetAt(KEY_RUNTIME,nValue);
|
|
sTemp.Format(_T("%d"),nValue);
|
|
xmlTree.SetAttribute(posRoot, _T("name"), sTemp);
|
|
xmlTree.SetAttribute(posRoot, _T("comment"), _T("26:吊架 27:支架"));
|
|
}
|
|
|
|
POSITION nowPos = xmlTree.Insert(KEY_TYPE,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("吊架样式"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("0:支架 1:双臂吊架 2:单臂吊架"));
|
|
nValue = 0;
|
|
m_pXDataMap->GetAt(KEY_TYPE,nValue);
|
|
csText.Format(_T("%d"),nValue);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_START,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("起点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("起点"));
|
|
m_pXDataMap->GetAt(KEY_START,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_END,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("终点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("终点"));
|
|
m_pXDataMap->GetAt(KEY_END,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_PILLAR_START,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱1起点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱1起点"));
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_PILLAR_END,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱1终点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱1终点"));
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_PILLAR_START2,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱2起点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱2起点"));
|
|
m_pXDataMap->GetAt(KEY_PILLAR_START2,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_PILLAR_END2,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱2终点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱2终点"));
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END2,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(nowPos,csText);
|
|
}
|
|
//add by axc
|
|
int nBracketType = 0;
|
|
m_pXDataMap->GetAt(KEY_TYPE,nBracketType);
|
|
if (nBracketType == TDb::eDRowSingleBracket)
|
|
{
|
|
nowPos = xmlTree.Insert(KEY_DROW_LENGTH,posRoot,NULL);
|
|
{
|
|
double dLen;
|
|
m_pXDataMap->GetAt(KEY_DROW_LENGTH,dLen);
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂长度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂长度"));
|
|
TAuxTools::DoubleToString(dLen,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_SUPPORT_PTLST,posRoot,NULL);
|
|
{
|
|
CString sTemp = _T("");
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂起点"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂起点集"));
|
|
m_pXDataMap->GetAt(KEY_SUPPORT_PTLST,arPts);
|
|
csText.Empty();
|
|
for(int i = 0;i < arPts.length();i++)
|
|
{
|
|
pt = arPts[i];
|
|
TAuxTools::DoubleToString(pt.x,nPtPreci,csX);
|
|
TAuxTools::DoubleToString(pt.y,nPtPreci,csY);
|
|
TAuxTools::DoubleToString(pt.z,nPtPreci,csZ);
|
|
sTemp.Format(_T("%s,%s,%s"),csX,csY,csZ);
|
|
if (!csText.IsEmpty())
|
|
{
|
|
csText += _T(";");
|
|
}
|
|
csText += sTemp;
|
|
}
|
|
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_DROWSUPPORT_H,posRoot,NULL);
|
|
{
|
|
int nBracketType = 0;
|
|
m_pXDataMap->GetAt(KEY_TYPE,nBracketType);
|
|
if (nBracketType == TDb::eDRowSingleBracket)
|
|
{
|
|
AcGeDoubleArray arHeight;
|
|
m_pXDataMap->GetAt(KEY_DROW_HEIGHT,arHeight);
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂高度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂高度"));
|
|
if (arHeight.length() > 0)
|
|
{
|
|
csText.Format(_T("%f"), arHeight[0]);
|
|
}
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_DROW_START1,posRoot,NULL);
|
|
{
|
|
AcGePoint3d pt;
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("双排吊架托臂2d起点1"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("双排吊架托臂2d起点1"));
|
|
m_pXDataMap->GetAt(KEY_DROW_START1,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(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_DROW_START2,posRoot,NULL);
|
|
{
|
|
AcGePoint3d pt;
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("双排吊架托臂2d起点2"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("双排吊架托臂2d起点2"));
|
|
m_pXDataMap->GetAt(KEY_DROW_START2,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(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_B1,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面宽度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面宽度"));
|
|
m_pXDataMap->GetAt(KEY_B1,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_H1,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面高度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面高度"));
|
|
m_pXDataMap->GetAt(KEY_H1,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_L1,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("底座截面长度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("底座截面长度"));
|
|
m_pXDataMap->GetAt(KEY_L1,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_W,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面宽度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面宽度"));
|
|
m_pXDataMap->GetAt(KEY_W,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_H,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面高度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面高度"));
|
|
m_pXDataMap->GetAt(KEY_H,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_L,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("托臂截面长度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("托臂截面长度"));
|
|
m_pXDataMap->GetAt(KEY_L,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_B2,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱截面宽度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱截面宽度"));
|
|
m_pXDataMap->GetAt(KEY_B2,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
nowPos = xmlTree.Insert(KEY_L2,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("立柱截面长度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("立柱截面长度"));
|
|
m_pXDataMap->GetAt(KEY_L2,dValue);
|
|
TAuxTools::DoubleToString(dValue,nSizePreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_NORMAL,posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("法相量"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("法相量"));
|
|
m_pXDataMap->GetAt(KEY_NORMAL,vtDir);
|
|
TAuxTools::DoubleToString(vtDir.x,nPtPreci,csX);
|
|
TAuxTools::DoubleToString(vtDir.y,nPtPreci,csY);
|
|
TAuxTools::DoubleToString(vtDir.z,nPtPreci,csZ);
|
|
csText.Format(_T("%s,%s,%s"),csX,csY,csZ);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(KEY_ROATEANGLE,posRoot,NULL);
|
|
{
|
|
double dAngle = 0;
|
|
int nPreci(16);
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("底座图块1旋转角度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("角度"));
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE,dAngle);
|
|
TAuxTools::DoubleToString(dAngle,nPreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
int nType;
|
|
m_pXDataMap->GetAt(KEY_TYPE,nType);
|
|
if (nType == TDb::eDoubleBracket)
|
|
{
|
|
nowPos = xmlTree.Insert(KEY_ROATEANGLE2,posRoot,NULL);
|
|
{
|
|
double dAngle = 0;
|
|
int nPreci(16);
|
|
xmlTree.SetAttribute(nowPos, _T("name"), _T("底座图块2旋转角度"));
|
|
xmlTree.SetAttribute(nowPos, _T("comment"), _T("角度"));
|
|
m_pXDataMap->GetAt(KEY_ROATEANGLE2,dAngle);
|
|
TAuxTools::DoubleToString(dAngle,nPreci,csText);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
}
|
|
|
|
nowPos = xmlTree.Insert(_T("BLOCK2d"),posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos,_T("name"),_T("BLOCK2d"));
|
|
xmlTree.SetAttribute(nowPos,_T("comment"),_T("二维吊架图案"));
|
|
|
|
AcDbObjectId objId;
|
|
m_pXDataMap->GetAt(KEY_BLOCK_2D,objId);
|
|
AcDbBlockTableRecord *pRec = NULL;
|
|
acdbOpenObject(pRec, objId, AcDb::kForRead);
|
|
if (pRec != NULL)
|
|
{
|
|
TCHAR* pName = NULL;
|
|
pRec->getName(pName);
|
|
xmlTree.SetItemText(nowPos,pName);
|
|
pRec->close();
|
|
}
|
|
}
|
|
//end
|
|
nowPos = xmlTree.Insert(_T("Object_ID"),posRoot,NULL);
|
|
{
|
|
xmlTree.SetAttribute(nowPos,_T("name"),_T("ID"));
|
|
xmlTree.SetAttribute(nowPos,_T("comment"),_T("支吊架ID"));
|
|
LONG_PTR nid = m_pOwnerEnt->objectId().asOldId();
|
|
|
|
csText.Format(_T("%ld"),nid);
|
|
xmlTree.SetItemText(nowPos,csText);
|
|
}
|
|
|
|
// //获取颜色
|
|
// CString strLayerName = m_pOwnerEnt->layer();
|
|
// CString strColor = _T("");
|
|
// int nr,ng,nb;
|
|
// int ncolor = 0;
|
|
// AcDbHardPointerId idlayer;
|
|
// AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
|
|
// AcDbLayerTable *pLayerTable =NULL;
|
|
// pDb->getLayerTable(pLayerTable,AcDb::kForRead);
|
|
// if (NULL!=pLayerTable)
|
|
// {
|
|
// pLayerTable->getAt(strLayerName,idlayer);
|
|
// pLayerTable->close();
|
|
// }
|
|
// AcDbLayerTableRecord *pLayer = NULL;
|
|
// Adesk::UInt16 nColor16;
|
|
// acdbOpenObject(pLayer, idlayer,AcDb::kForRead);
|
|
// if (pLayer != NULL)
|
|
// {
|
|
// ncolor = pLayer->color().color();
|
|
// ncolor = pLayer->color().colorIndex();
|
|
// nColor16 = pLayer->color().colorIndex();
|
|
// nr = pLayer->color().red();
|
|
// ng = pLayer->color().green();
|
|
// nb = pLayer->color().blue();
|
|
// pLayer->close();
|
|
// TchExport::ColorToRGB(nColor16,&nr,&ng,&nb);
|
|
// strColor.Format(_T("%d"), RGB(nr,ng,nb));
|
|
// }
|
|
// nowPos = xmlTree.Insert(_T("Ent_Color"),posRoot,NULL);
|
|
// {
|
|
// xmlTree.SetAttribute(nowPos,_T("name"),_T("color"));
|
|
// xmlTree.SetAttribute(nowPos,_T("comment"),_T("实体颜色"));
|
|
// xmlTree.SetItemText(nowPos,strColor);
|
|
// }
|
|
|
|
CString csXml = xmlTree.GetXml();
|
|
return csXml;
|
|
}
|
|
|
|
|
|
bool TEImpBracket::GetSection(const AcDbFace &face, const AcGeVector3d &vtPlaneSecDir,
|
|
std::vector<TObjSectionRecord> §ionRecord, AcDbVoidPtrArray& arFillPtrs) const
|
|
{
|
|
if (NULL == m_pOwnerEnt || NULL == m_pXDataMap)
|
|
return false;
|
|
|
|
// 基本参数
|
|
AcDbObjectId idObj = m_pOwnerEnt->objectId();
|
|
AcDbObjectId idLayer = m_pOwnerEnt->layerId();
|
|
TGGeSectionPlane section_pln(face, vtPlaneSecDir); // 构造一个辅助剖面
|
|
AcDbVoidPtrArray arFaces;
|
|
XExplodeStream dc(arFaces);
|
|
ExplodeOrDraw3d(dc);
|
|
|
|
double dElevation = 0;
|
|
AcDbEntity* pEnt = NULL;
|
|
AcDbFace* pFace = NULL;
|
|
int i = 0;
|
|
for(i = 0; i < arFaces.length(); ++i)
|
|
{
|
|
pEnt = (AcDbEntity*)arFaces[i];
|
|
if (NULL == pEnt)
|
|
continue;
|
|
pFace = AcDbFace::cast(pEnt);
|
|
if (pFace)
|
|
{
|
|
TGGeSectionPlane pln(*pFace, vtPlaneSecDir);
|
|
TGGePoly2D poly;
|
|
dElevation = SectionUtility::Projection_plane2plane(section_pln, pln, poly);
|
|
if (poly.Length())
|
|
sectionRecord.push_back(TObjSectionRecord(idObj, idLayer, TObjSectionRecord::eTCH_EEQUIPMENT, dElevation, poly));
|
|
}
|
|
delete pEnt;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 剖切用,返回Z坐标最高、最低点
|
|
Acad::ErrorStatus TEImpBracket::GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const
|
|
{
|
|
AcGePoint3d ptS,ptE;
|
|
double dHight = 0.0,dL = 0.0;
|
|
AcGeVector3d vtNor,vtMin;
|
|
m_pXDataMap->GetAt(KEY_START,ptS);
|
|
m_pXDataMap->GetAt(KEY_PILLAR_END,ptE);
|
|
|
|
ptLow = ptE;
|
|
ptUp = ptS;
|
|
|
|
return Acad::eOk;
|
|
} |