Files
envi-code/SourceCode/Code2026/Pool3dCmd/SBZWDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

1011 lines
24 KiB
C++

#include "stdafx.h"
#include "SBZWDlg.h"
#include "NozzDlg.h"
#include "AecDbEwEquipment.h"
#include "KTSetting.h"
#define LAY_PIPE_CENTER _T("PIPE_CEN")
#define LAY_PIPE_OUTSIDE _T("PIPE_OUT")
#define LAY_PIPE_SINGLE _T("PIPE_SIG")
#define LAY_PIPE_DASH _T("PIPE_DSH")
#ifndef LAY_FITN_CENTER
#define LAY_FITN_CENTER _T("FITN_CEN")
#endif
#define LAY_FITN_OUTSIDE _T("FITN_OUT")
#define LAY_FITN_SINGLE _T("FITN_SIG")
#define LAY_FITN_DASH _T("FITN_DSH")
#ifndef LAY_EQU_CENTER
#define LAY_EQU_CENTER _T("EQU_CEN")
#define LAY_EQU_DASH _T("EQU_DSH")
#define LAY_EQU _T("EQU")
#endif
extern CString IDCreate();
//同 CEquipmentMakeDlg namespace
namespace
{
template <typename T>
void setData(AecEqui::XPrimData *pXPData, void *pData)
{
pXPData->m_nID = ::_time32(NULL);
switch (pXPData->m_eType)
{
case AecEqui::kExtrude:
case AecEqui::kRevolve:
pXPData->m_nSize = ((AecEqui::XBuffer*)pData)->nSize;
if (pXPData->m_nSize > 0)
{
pXPData->m_pData = new byte[pXPData->m_nSize];
::memcpy(pXPData->m_pData, ((AecEqui::XBuffer*)pData)->pData, pXPData->m_nSize);
}
break;
default:
pXPData->m_pData = new T;
::memcpy(pXPData->m_pData, pData, sizeof(T));
pXPData->m_nSize = sizeof(T);
break;
}
}
void GetTransformbyXform(AcGePoint3d &ptRotation, AcGeVector3d &vtMove, AcGePoint3d& ptPos)
{
//x旋转轴旋转
AcGeMatrix3d xform;
xform.setToRotation(ptRotation.x, AcGeVector3d::kXAxis);
ptPos.transformBy(xform);
//Y旋转轴旋转
xform.setToIdentity();
xform.setToRotation(ptRotation.y, AcGeVector3d::kYAxis);
ptPos.transformBy(xform);
//z旋转轴旋转
xform.setToIdentity();
xform.setToRotation(ptRotation.z, AcGeVector3d::kZAxis);
ptPos.transformBy(xform);
//x方向移动
xform.setToIdentity();
xform.setToTranslation(AcGeVector3d(vtMove.x, 0.0, 0.0));
ptPos.transformBy(xform);
//y方向移动
xform.setToIdentity();
xform.setToTranslation(AcGeVector3d(0.0, vtMove.y, 0.0));
ptPos.transformBy(xform);
//z方向移动
xform.setToIdentity();
xform.setToTranslation(AcGeVector3d(0.0, 0.0, vtMove.z));
ptPos.transformBy(xform);
}
void GetTransformbyXform(AcGePoint3d &ptRotation, AcGeVector3d& vtDir)
{
//x旋转轴旋转
AcGeMatrix3d xform;
xform.setToRotation(ptRotation.x, AcGeVector3d::kXAxis);
vtDir.transformBy(xform);
//Y旋转轴旋转
xform.setToIdentity();
xform.setToRotation(ptRotation.y, AcGeVector3d::kYAxis);
vtDir.transformBy(xform);
//z旋转轴旋转
xform.setToIdentity();
xform.setToRotation(ptRotation.z, AcGeVector3d::kZAxis);
vtDir.transformBy(xform);
}
short GetInfFaceCount(AecEqui::Primitive type)
{
switch (type)
{
case AecEqui::kPyramid:
case AecEqui::kBox:
return 6;
case AecEqui::kCylinder:
case AecEqui::kCone:
case AecEqui::kCirTorus:
case AecEqui::kRectTorus:
case AecEqui::kExtrude:
case AecEqui::kRevolve:
case AecEqui::kTydf:
case AecEqui::kNozz:
return 2;
case AecEqui::kDish:
case AecEqui::kSphere:
return 1;
default: break;
}
return 0;
}
void GetInfFaceInf(AecEqui::XPrimData *pXPData, short nIndex, AcGeVector3d& vtDir, AcGePoint3d& ptGe)
{
AcGePoint3d ptGeT[4], ptGeB[4], ptMid, ptMid2;
AcGeVector3d vt1, vt2;
if (nIndex < GetInfFaceCount((AecEqui::Primitive)pXPData->m_eType) && nIndex > -1 && pXPData->m_pData != NULL)
{
switch (pXPData->m_eType)
{
case AecEqui::kBox:
{
AecEqui::XBox* pBox = (AecEqui::XBox*)pXPData->m_pData;
ptGe = AcGePoint3d::kOrigin;
switch (nIndex)
{
case 0://下
{
ptGe = AcGePoint3d::kOrigin;//-= pBox->dH / 2.0;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1://上
{
ptGe.z += pBox->dH;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 2://左
{
ptGe.z += pBox->dH / 2.0;
ptGe.x -= pBox->dL / 2.0;
vtDir = -AcGeVector3d::kXAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 3://右
{
ptGe.z += pBox->dH / 2.0;
ptGe.x += pBox->dL / 2.0;
vtDir = AcGeVector3d::kXAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 4://前
{
ptGe.z += pBox->dH / 2.0;
ptGe.y += pBox->dW / 2.0;
vtDir = -AcGeVector3d::kYAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 5://后
{
ptGe.z += pBox->dH / 2.0;
ptGe.y -= pBox->dW / 2.0;
vtDir = AcGeVector3d::kYAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kCylinder:
{
AecEqui::XCylinder* pCli = (AecEqui::XCylinder*)pXPData->m_pData;
ptGe = AcGePoint3d::kOrigin;
switch (nIndex)
{
case 0:
{
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe.z += pCli->dH;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kCone:
{
AecEqui::XCone* pCone = (AecEqui::XCone*)pXPData->m_pData;
ptGe = AcGePoint3d::kOrigin;
switch (nIndex)
{
case 0:
{
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe.z += pCone->dH;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kPyramid:
{
AecEqui::XPyramid* pPyramid = (AecEqui::XPyramid*)pXPData->m_pData;
ptGe = AcGePoint3d::kOrigin;
ptGeB[0] = ptGe;
ptGeB[0].x += pPyramid->dBX / 2.0;
ptGeB[0].y += pPyramid->dBY / 2.0;
ptGeB[1] = ptGeB[0];
ptGeB[1].x -= pPyramid->dBX;
ptGeB[2] = ptGeB[1];
ptGeB[2].y -= pPyramid->dBY;
ptGeB[3] = ptGeB[2];
ptGeB[3].x += pPyramid->dBX;
//顶
ptGeT[0] = ptGe;
ptGeT[0].z += pPyramid->dH;
ptGeT[0].x += pPyramid->dTX / 2.0;
ptGeT[0].y += pPyramid->dTY / 2.0;
ptGeT[1] = ptGeT[0];
ptGeT[1].x -= pPyramid->dTX;
ptGeT[2] = ptGeT[1];
ptGeT[2].y -= pPyramid->dTY;
ptGeT[3] = ptGeT[2];
ptGeT[3].x += pPyramid->dTX;
switch (nIndex)
{
case 0:
{
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
Midpoint(ptGeT[0], ptGeT[1], ptMid);
vt1 = ptMid - ptGeB[0];
vt2 = ptMid - ptGeB[1];
vtDir = vt1.crossProduct(vt2);
Midpoint(ptGeB[0], ptGeB[1], ptMid2);
Midpoint(ptMid, ptMid2, ptGe);
vt2 = ptGe.asVector();
if (vt2.dotProduct(vtDir) < 0)
vtDir.negate();
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 2:
{
Midpoint(ptGeT[1], ptGeT[2], ptMid);
vt1 = ptMid - ptGeB[1];
vt2 = ptMid - ptGeB[2];
vtDir = vt1.crossProduct(vt2);
Midpoint(ptGeB[1], ptGeB[2], ptMid2);
Midpoint(ptMid, ptMid2, ptGe);
vt2 = ptGe.asVector();
if (vt2.dotProduct(vtDir) < 0)
vtDir.negate();
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 3:
{
Midpoint(ptGeT[2], ptGeT[3], ptMid);
vt1 = ptMid - ptGeB[2];
vt2 = ptMid - ptGeB[3];
vtDir = vt1.crossProduct(vt2);
Midpoint(ptGeB[2], ptGeB[3], ptMid2);
Midpoint(ptMid, ptMid2, ptGe);
vt2 = ptGe.asVector();
if (vt2.dotProduct(vtDir) < 0)
vtDir.negate();
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 4:
{
Midpoint(ptGeT[3], ptGeT[0], ptMid);
vt1 = ptMid - ptGeB[3];
vt2 = ptMid - ptGeB[0];
vtDir = vt1.crossProduct(vt2);
Midpoint(ptGeB[3], ptGeB[0], ptMid2);
Midpoint(ptMid, ptMid2, ptGe);
vt2 = ptGe.asVector();
if (vt2.dotProduct(vtDir) < 0)
vtDir.negate();
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 5:
{
vtDir = AcGeVector3d::kZAxis;
ptGe = AcGePoint3d::kOrigin;
ptGe.z += pPyramid->dH;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kCirTorus:
{
AecEqui::XCirtorus* pCirtor = (AecEqui::XCirtorus*)pXPData->m_pData;
AcDbArc arc(AcGePoint3d::kOrigin, (pCirtor->dOutR + pCirtor->dInr) / 2.0,
pCirtor->dStaAngle, pCirtor->dEndAngle);
switch (nIndex)
{
case 0:
{
arc.getStartPoint(ptGe);
vtDir = ptGe - arc.center();
vtDir.rotateBy(-PI / 2.0, AcGeVector3d::kZAxis);
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
arc.getEndPoint(ptGe);
vtDir = ptGe - arc.center();
vtDir.rotateBy(PI / 2.0, AcGeVector3d::kZAxis);
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kRectTorus:
{
AecEqui::XRecttorus* pRcTor = (AecEqui::XRecttorus*)pXPData->m_pData;
AcDbArc arc(AcGePoint3d::kOrigin, (pRcTor->dOutR + pRcTor->dInr) / 2.0,
pRcTor->dStaAngle, pRcTor->dEndAngle);
switch (nIndex)
{
case 0:
{
arc.getStartPoint(ptGe);
vtDir = ptGe - arc.center();
vtDir.rotateBy(-PI / 2.0, AcGeVector3d::kZAxis);
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
arc.getEndPoint(ptGe);
vtDir = ptGe - arc.center();
vtDir.rotateBy(PI / 2.0, AcGeVector3d::kZAxis);
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kDish:
{
ptGe = AcGePoint3d::kOrigin;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case AecEqui::kSphere:
{
ptGe = AcGePoint3d::kOrigin;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
vtDir.set(1.0, 0.0, 0.0);
break;
}
case AecEqui::kExtrude:
{
AecEqui::XVertex* pVert = (AecEqui::XVertex*)pXPData->m_pData;
double dH = pVert->dVal[0];
switch (nIndex)
{
case 0:
{
ptGe = AcGePoint3d::kOrigin;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe = AcGePoint3d::kOrigin;
ptGe.z += dH;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kRevolve:
{
//前两个为旋转轴
AecEqui::XVertex* pVert = (AecEqui::XVertex*)pXPData->m_pData;
AecEqui::XVertex* pVertAxFr = pVert;
AecEqui::XVertex* pVertAxTo = pVert;
pVertAxTo += 1;
AcGePoint3d ptGeFr = asPnt3d((double*)pVertAxFr);
AcGePoint3d ptGeTo = asPnt3d((double*)pVertAxTo);
AcGeVector3d vt = ptGeTo - ptGeFr;
switch (nIndex)
{
case 0:
{
ptGe = ptGeFr;
vtDir = -vt;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe = ptGeTo;
vtDir = vt;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kTydf:
{
AecEqui::XTydf* pTydf = (AecEqui::XTydf*)pXPData->m_pData;
switch (nIndex)
{
case 0:
{
ptGe = AcGePoint3d::kOrigin;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe = AcGePoint3d::kOrigin;
ptGe.z += pTydf->dH;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
break;
}
case AecEqui::kNozz:
{
AecEqui::XNozz* pNozz = (AecEqui::XNozz*)pXPData->m_pData;
if (pNozz->nType == 0)
{
switch (nIndex)
{
case 0:
{
ptGe = AcGePoint3d::kOrigin;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
double dH = pNozz->dVal5;
//接口尺寸表 DN D N C
double nDn = pNozz->dVal1;
double nD = pNozz->dVal2;
double nN = pNozz->dVal3;
double nC = pNozz->dVal4;
double dDx = nDn + (nN - nDn) / 4.0;
double dTx = (nN - dDx) / 2.0;
double dh = dTx * tan(75.0 * PI / 180.0);
double dYMinh = 1.0 * int(dh + nC + 0.5);
dH += dYMinh;
ptGe = AcGePoint3d::kOrigin;
ptGe.z = dYMinh;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
}
else
{
switch (nIndex)
{
case 0:
{
ptGe = AcGePoint3d::kOrigin;
vtDir = -AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
case 1:
{
ptGe = AcGePoint3d::kOrigin;
ptGe.z = pNozz->dVal3;
vtDir = AcGeVector3d::kZAxis;
GetTransformbyXform(pXPData->m_ptRotation, pXPData->m_vtMove, ptGe);
GetTransformbyXform(pXPData->m_ptRotation, vtDir);
break;
}
default:
break;
}
}
break;
}
default:
break;
}
}
}
void MoveToInfFace(AecEqui::XPrimData *pXPData, AcGeVector3d &vtDirTo, AcGePoint3d &ptGeTo)
{
if (pXPData->m_nActiveInf == -1) return;
AcGePoint3d ptGeThis;
AcGeVector3d vtThis;
GetInfFaceInf(pXPData, pXPData->m_nActiveInf, vtThis, ptGeThis);
AcGeVector3d vtMove = ptGeTo - ptGeThis;
double dDot = vtDirTo.dotProduct(vtThis);
if (dDot < 0)
vtDirTo.negate();
//两个面吻合,this 旋转
AcGeVector3d vtNorm = vtDirTo.crossProduct(vtThis);
double dRotate = vtThis.angleTo(vtDirTo);
//dRotate *= -1.0;//右旋方向
AcGeMatrix3d xform1;
xform1.setToRotation(dRotate, vtNorm, ptGeThis);
AcGeMatrix3d xform2;
xform2.setToTranslation(vtMove);
pXPData->m_arMatrix.append(xform1);
pXPData->m_arMatrix.append(xform2);
}
}
IMPLEMENT_DYNAMIC(CSBZWDlg, CDialog)
CSBZWDlg::CSBZWDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSBZWDlg::IDD, pParent)
, m_sName(_T(""))
, m_sProvider(_T("*"))
, m_sType(_T("*"))
, m_sRem(_T("*"))
, m_dX(1200)
, m_dY(800)
, m_dZ(900)
, m_nPos(0)
, m_clr(256)
, m_sNo(_T(""))
, m_sPosNo(_T(""))
{
m_pWEquip = new AecDbEwEquipment;
m_boxData.m_eType = AecEqui::kBox;
m_boxData.m_nID = ::_time32(NULL);
m_boxData.m_pData = new AecEqui::XBOX;
m_boxData.m_iClr = m_clr;
AecEqui::XBox box;
box.dL = m_dX;
box.dW = m_dY;
box.dH = m_dZ;
m_dBomEl = 0.0;
m_sNo = IDCreate();
::memcpy(m_boxData.m_pData, &box, sizeof(AecEqui::XBox));
m_boxData.m_nSize = sizeof(AecEqui::XBOX);
m_pWEquip->AddSubPrimObj(&m_boxData);
GET_CACHE(CSBZWDlg
, %s%s%s%s%f%f%f%f%d
, &m_sName
, &m_sProvider
, &m_sType
, &m_sRem
, &m_dX
, &m_dY
, &m_dZ
, &m_dBomEl
, &m_nPos );
}
CSBZWDlg::CSBZWDlg(double dX, double dY, double dZ, CWnd *pParent /*=NULL*/)
: CDialog(CSBZWDlg::IDD, pParent)
, m_sName(_T(""))
, m_sProvider(_T("*"))
, m_sType(_T("*"))
, m_sRem(_T("*"))
, m_dX(dX)
, m_dY(dY)
, m_dZ(dZ)
, m_nPos(0)
, m_clr(256)
, m_sNo(_T(""))
{
m_pWEquip = new AecDbEwEquipment;
m_boxData.m_eType = AecEqui::kBox;
m_boxData.m_nID = ::_time32(NULL);
m_boxData.m_pData = new AecEqui::XBOX;
m_boxData.m_iClr = m_clr;
AecEqui::XBox box;
box.dL = m_dX;
box.dW = m_dY;
box.dH = m_dZ;
m_dBomEl = 0.0;
m_sNo = IDCreate();
::memcpy(m_boxData.m_pData, &box, sizeof(AecEqui::XBox));
m_boxData.m_nSize = sizeof(AecEqui::XBOX);
m_pWEquip->AddSubPrimObj(&m_boxData);
}
CSBZWDlg::~CSBZWDlg()
{
}
void CSBZWDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT18, m_sName);
DDX_Text(pDX, IDC_EDIT4, m_sProvider);
DDX_Text(pDX, IDC_EDIT5, m_sType);
DDX_Text(pDX, IDC_EDIT6, m_sRem);
DDX_Text(pDX, IDC_EDIT1, m_dX);
DDX_Text(pDX, IDC_EDIT2, m_dY);
DDX_Text(pDX, IDC_EDIT3, m_dZ);
DDX_Text(pDX, IDC_EDIT12, m_dBomEl);
DDX_Radio(pDX, IDC_RADIO1, m_nPos);
DDX_Text(pDX, IDC_EDIT28, m_sNo);
DDX_Text(pDX, IDC_EDIT31, m_sPosNo);
}
BEGIN_MESSAGE_MAP(CSBZWDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTONADDNOZ, &CSBZWDlg::OnBnClickedButtonaddnoz)
ON_BN_CLICKED(IDOK, &CSBZWDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_STATIC_COLOR, &CSBZWDlg::OnStaticColor)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
BOOL CSBZWDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
return TRUE;
}
void CSBZWDlg::OnStaticColor()
{
AcCmColor clr;
#if ARX < 24
clr.setColorMethod(AcCmEntityColor::kByACI);
#endif
clr.setColorIndex(256);
if (acedSetColorDialogTrueColor(clr, Adesk::kTrue, clr, AcCm::kACITab) == Adesk::kFalse) return;
m_clr = clr.colorIndex();
Invalidate();
}
HBRUSH CSBZWDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC)
{
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR)
{
CRect rc;
pWnd->GetClientRect(rc);
pDC->FillSolidRect(rc, acedGetRGB(m_clr));
}
}
return hbr;
}
void CSBZWDlg::GetBoxInf(AcGeVector3d& vtDir,AcGePoint3d& ptGe,int nPos)
{
//X,Y,Z
switch(nPos)
{
case 0://底面
{
ptGe.set(0,0,0);
vtDir = -AcGeVector3d::kZAxis;
break;
}
case 1://顶面
{
ptGe.set(0,0,m_dZ);
vtDir = AcGeVector3d::kZAxis;
break;
}
case 2://左面
{
ptGe.set(-0.5 * m_dX,0,0.5 * m_dZ);
vtDir = -AcGeVector3d::kXAxis;
break;
}
case 3://右面
{
ptGe.set(0.5 * m_dX,0,0.5 * m_dZ);
vtDir = AcGeVector3d::kXAxis;
break;
}
case 4://前面
{
ptGe.set(0,-0.5 * m_dY,0.5 * m_dZ);
vtDir = -AcGeVector3d::kYAxis;
break;
}
case 5://后面
{
ptGe.set(0,0.5 * m_dY,0.5 * m_dZ);
vtDir = AcGeVector3d::kYAxis;
break;
}
default:
break;
}
}
void CSBZWDlg::GetInfTransform(int nPos,AcGePoint3d& ptRotation)
{
//X,Y,Z
switch(nPos)
{
case 0://底面
{
ptRotation.set(PI,0,0);
break;
}
case 1://顶面
{
ptRotation.set(0,0,0);
break;
}
case 2://左面
{
ptRotation.set(0,0,0);
break;
}
case 3://右面
{
ptRotation.set(0,0,0);
break;
}
case 4://前面
{
ptRotation.set(0,0,0);
break;
}
case 5://后面
{
ptRotation.set(0,0,0);
break;
}
default:
break;
}
}
void CSBZWDlg::OnBnClickedButtonaddnoz()
{
UpdateData();
DWORD_PTR dwSubiD = (DWORD_PTR)m_boxData.m_nID;
m_boxData.m_nActiveInf = m_nPos;//设置活动面
AcGeVector3d vtDir;
AcGePoint3d ptGe;
GetBoxInf(vtDir,ptGe,m_nPos);//计算面中心位置向量
AcGePoint3d ptRotation;
GetInfTransform(m_nPos,ptRotation);
CNozzDlg nozzDlg;
if ( IDOK == nozzDlg.DoModal() )
{
//偏移
AcGeVector3d vtOff;
vtOff.set(nozzDlg.m_dX,nozzDlg.m_dY,nozzDlg.m_dZ);
ptGe += vtOff;
//加入, 可以加入多个管嘴
AecEqui::XNozz* pNozzData = nozzDlg.GetNozzData();
Adesk::Int32 nID = AddNozz(dwSubiD,vtDir,ptGe,pNozzData, nozzDlg.m_clr);
AecEqui::XPrimData data;
data.m_ptRotation = ptRotation;
m_pWEquip->ModifyPrimData(nID,data,3);
}
}
Adesk::Int32 CSBZWDlg::AddNozz(DWORD dwSubiD, AcGeVector3d& vtDir, AcGePoint3d& ptGe, AecEqui::XNozz* pNozzData, const int &clr)
{
//圆型管觜 接口尺寸表 DN D N C H
// AecDb3dSolid* pSolid = new AecDb3dSolid;
// pSolid->SetData(AecEqui::kNozz,pNozzData);
AecEqui::XPrimData data;
data.m_eType = AecEqui::kNozz;
data.m_nID = ::_time32(NULL);
data.m_iClr = clr;
data.m_pData = new AecEqui::XNozz;
::memcpy(data.m_pData, pNozzData, sizeof(AecEqui::XNozz));
data.m_nSize = sizeof(AecEqui::XNozz);
data.m_nActiveInf = -1;
//变换
// pSolid->SetActiveInfPos(0);
// pSolid->MoveToInfFace(vtDir,ptGe);
MoveToInfFace(&data, vtDir, ptGe);
m_pWEquip->AddSubPrimObj(&data);
return data.m_nID;
}
void CSBZWDlg::OnBnClickedOk()
{
UpdateData();
if (m_sName.IsEmpty() || m_sNo.IsEmpty() || m_sPosNo.IsEmpty() )
{
AfxMessageBox(_T("占位设备名称或编号或位号不能为空!"));
return;
}
if (m_dX < 100.0 || m_dY < 100.0 || m_dZ < 100.0)
{
AfxMessageBox(_T("占位设备尺寸过小!,至少大于100毫米!"));
return;
}
AecDbObjXDataMap* pXDataMap = m_pWEquip->GetSpecialtyData();
pXDataMap->SetAt(KEY_NAME, m_sName);
pXDataMap->SetAt(KEY_NO, m_sNo);
pXDataMap->SetAt(KEY_POSNO, m_sPosNo);
pXDataMap->SetAt(KEY_FACTORY,m_sProvider);
pXDataMap->SetAt(KEY_TYPE,m_sType);
pXDataMap->SetAt(KEY_REM,m_sRem);
pXDataMap->SetAt(KEY_FITSRV, KEY_FITWPIPE);
pXDataMap->SetAt(KEY_RUNTIME, eEquipment);
//pWEquip->ReCreateByXDataMap();
//设置图层
m_pWEquip->setLayer(KTSetting::InitLayer(LAY_PIPE_OUTSIDE));
m_pWEquip->SetDashLayer(KTSetting::InitLayer(LAY_FITN_DASH));
m_pWEquip->SetCenterLayer(KTSetting::InitLayer(LAY_FITN_CENTER));
AecEqui::XBox box;
box.dL = m_dX;
box.dW = m_dY;
box.dH = m_dZ;
::memcpy(m_boxData.m_pData, &box, sizeof(AecEqui::XBox));
AecEqui::XPrimData* pData = m_pWEquip->GetSubPrimObj(0);
if (pData != NULL)
{
memcpy(pData->m_pData,&box, sizeof(AecEqui::XBox));
}
AecEqui::XPrimData data;
//memset(&data,0,sizeof(AecEqui::XPrimData));
m_pWEquip->ModifyPrimData(0,data,10,FALSE);
SET_CACHE(CSBZWDlg
, %s%s%s%s%f%f%f%f%d
, m_sName
, m_sProvider
, m_sType
, m_sRem
, m_dX
, m_dY
, m_dZ
, m_dBomEl
, m_nPos);
OnOK();
}