2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#include "TJSTDlg.h"
|
|
|
|
|
#include "AecDbEarthWorm.h"
|
|
|
|
|
#include "KTCADUtilityEx.h"
|
|
|
|
|
#include "AcDbX3dSolid.h"
|
|
|
|
|
#include "AecDbX3dGroup.h"
|
|
|
|
|
#include "UITools.h"
|
|
|
|
|
#include "axlock.h"
|
|
|
|
|
#include "AecDbEarthWormFitting.h"
|
|
|
|
|
#include "KTTempTol.h"
|
|
|
|
|
#include "AecDbEwFitting.h"
|
|
|
|
|
|
|
|
|
|
#ifndef Plumbing_DB
|
|
|
|
|
#define Plumbing_DB _T("\\Plumbing.db")
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static const Adesk::UInt16 kColorByBlock = 0;
|
|
|
|
|
static const Adesk::UInt16 kRed = 1;
|
|
|
|
|
static const Adesk::UInt16 kYellow = 2;
|
|
|
|
|
static const Adesk::UInt16 kGreen = 3;
|
|
|
|
|
static const Adesk::UInt16 kCyan = 4;
|
|
|
|
|
static const Adesk::UInt16 kBlue = 5;
|
|
|
|
|
static const Adesk::UInt16 kMagenta = 6;
|
|
|
|
|
static const Adesk::UInt16 kWhite = 7;
|
|
|
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
|
extern CString IDCreate();
|
|
|
|
|
extern AecInterface* SelectLockInf(AcDbObjectId idEW,AecDbX3dGroup*& pGroupAt);
|
|
|
|
|
extern AecInterface* SelectLockInf(AcDbObjectId idEW,AecDbObjXDataMap*& pGroupMap);
|
|
|
|
|
extern AecInterface* SelectLockInfH(AcDbObjectId idHouse,AecDbObjXDataMap*& pGroupMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CTJSTDlg, CDialog)
|
|
|
|
|
|
|
|
|
|
CTJSTDlg::CTJSTDlg(CWnd* pParent /*=NULL*/)
|
|
|
|
|
: CDialog(CTJSTDlg::IDD, pParent)
|
|
|
|
|
, m_sOutDir(_T("0,0,1"))
|
|
|
|
|
, m_dDn(0.0)
|
|
|
|
|
, m_nPos(0)
|
|
|
|
|
, m_sInfDir1(_T(""))
|
|
|
|
|
, m_sInfDir2(_T(""))
|
|
|
|
|
, m_bOnMidPipe(FALSE)
|
|
|
|
|
{
|
|
|
|
|
m_vtEnter = AcGeVector3d::kXAxis;
|
|
|
|
|
m_vtOutDir = AcGeVector3d::kZAxis;
|
|
|
|
|
m_ptStart.set(0,0,0);
|
|
|
|
|
|
|
|
|
|
m_sCurrSys = _T("");
|
|
|
|
|
m_sMertial = _T("");
|
|
|
|
|
m_nPipeColor = kRed;
|
|
|
|
|
m_dLen1 = 0;
|
|
|
|
|
m_dLen2 = 0;
|
|
|
|
|
m_dDn2 = 0.0;
|
|
|
|
|
m_dt = 14;
|
|
|
|
|
m_idxRoom = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CTJSTDlg::~CTJSTDlg()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
{
|
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT6, m_sOutDir);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT3, m_dDn);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT7, m_dDn2);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT4, m_sMertial);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT5, m_sCurrSys);
|
|
|
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nPos);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT10, m_sInfDir1);
|
|
|
|
|
DDX_Text(pDX, IDC_EDIT34, m_sInfDir2);
|
|
|
|
|
DDX_Check(pDX, IDC_CHECK1, m_bOnMidPipe);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTJSTDlg, CDialog)
|
|
|
|
|
ON_BN_CLICKED(IDOK, &CTJSTDlg::OnBnClickedOk)
|
|
|
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CTJSTDlg::OnBnClickedButton1)
|
|
|
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CTJSTDlg::OnBnClickedButton2)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO1, &CTJSTDlg::OnBnClickedRadio1)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO2, &CTJSTDlg::OnBnClickedRadio2)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO3, &CTJSTDlg::OnBnClickedRadio3)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO4, &CTJSTDlg::OnBnClickedRadio4)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO12, &CTJSTDlg::OnBnClickedRadio12)
|
|
|
|
|
ON_BN_CLICKED(IDC_RADIO13, &CTJSTDlg::OnBnClickedRadio13)
|
|
|
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CTJSTDlg::OnBnClickedButton4)
|
|
|
|
|
ON_BN_CLICKED(IDC_BUTTON5, &CTJSTDlg::OnBnClickedButton5)
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
BOOL CTJSTDlg::OnInitDialog()
|
|
|
|
|
{
|
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
|
|
|
|
|
|
CString path = FilePath::GetSysDir() + Plumbing_DB;
|
|
|
|
|
if (!m_dbSQLite.InitADOServer(path))
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + Plumbing_DB + _T("文件是否存在."));
|
2026-09-28 15:28:50 +08:00
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::SetEWFittingId(AcDbObjectId& id)
|
|
|
|
|
{
|
|
|
|
|
m_idEWFit = id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::SetXXXHouseID(AcDbObjectId& id)
|
|
|
|
|
{
|
|
|
|
|
m_idHouse = id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedOk()
|
|
|
|
|
{
|
|
|
|
|
if (m_dDn < 1.e-2)
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
AfxMessageBox(_T("没有选择主管道接口位置!"));
|
2026-09-28 15:28:50 +08:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//查询三通尺寸
|
2026-09-28 15:28:50 +08:00
|
|
|
int nDn1 = (int)(m_dDn + 0.1);
|
|
|
|
|
int nDn2 = (int)(m_dDn2 + 0.1);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
if (nDn1 < nDn2)//交换
|
2026-09-28 15:28:50 +08:00
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
AfxMessageBox(_T("三通主进口公称直径必须大于等于分支口公称直径!"));
|
2026-09-28 15:28:50 +08:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString sSQL;
|
2026-10-04 00:04:20 +08:00
|
|
|
sSQL.Format(_T("select [长度L],[长度S] from AecTeeData where [公称直径L]=%d AND [公称直径S]=%d"),nDn1,nDn2);
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
CStringArray arVals;
|
|
|
|
|
m_dbSQLite.GetSelData(sSQL,arVals);
|
|
|
|
|
|
|
|
|
|
if (arVals.IsEmpty())
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//再从AecTeeData中查找
|
|
|
|
|
sSQL.Format(_T("select [结构长度] from AecTeeTData where [公称直径]=%d"),nDn1);
|
2026-09-28 15:28:50 +08:00
|
|
|
m_dbSQLite.GetSelData(sSQL,arVals);
|
|
|
|
|
|
|
|
|
|
if (arVals.IsEmpty())
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
sSQL.Format(_T("查不到公称直径为 %d 的三通结构尺寸!"),nDn1);
|
2026-09-28 15:28:50 +08:00
|
|
|
AfxMessageBox(sSQL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_dLen1 = _ttof(arVals.GetAt(0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
arVals.RemoveAll();
|
2026-10-04 00:04:20 +08:00
|
|
|
sSQL.Format(_T("select [结构长度] from AecTeeTData where [公称直径]=%d"),nDn2);
|
2026-09-28 15:28:50 +08:00
|
|
|
m_dbSQLite.GetSelData(sSQL,arVals);
|
|
|
|
|
|
|
|
|
|
if (arVals.IsEmpty())
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
sSQL.Format(_T("查不到公称直径为 %d 的三通结构尺寸!"),nDn2);
|
2026-09-28 15:28:50 +08:00
|
|
|
AfxMessageBox(sSQL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_dLen2 = _ttof(arVals.GetAt(0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (arVals.GetSize() >= 2)
|
|
|
|
|
{
|
|
|
|
|
m_dLen1 = _ttof(arVals.GetAt(0));
|
|
|
|
|
m_dLen2 = _ttof(arVals.GetAt(1));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_vtEnter.normalize();
|
|
|
|
|
m_vtOutDir.normalize();
|
|
|
|
|
|
|
|
|
|
KTTempTol tol(1.e-3);
|
|
|
|
|
if (!m_vtEnter.isParallelTo(m_vtEnter))
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
AfxMessageBox(_T("三通主方向和支管方向不垂直,不能创建管件!"));
|
2026-09-28 15:28:50 +08:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OnOK();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedButton1()
|
|
|
|
|
{
|
|
|
|
|
UpdateData(TRUE);
|
|
|
|
|
|
|
|
|
|
EnableWindow(FALSE);
|
|
|
|
|
CWnd* pFrame = acedGetAcadFrame();
|
|
|
|
|
pFrame->EnableWindow(TRUE);
|
|
|
|
|
ShowWindow(SW_HIDE);
|
|
|
|
|
pFrame->SetFocus();
|
|
|
|
|
|
|
|
|
|
ads_point pt;
|
2026-10-04 00:04:20 +08:00
|
|
|
int nRes = acedGetPoint(NULL,_T("\n选择接口点:"),pt);
|
2026-09-28 15:28:50 +08:00
|
|
|
if (nRes == RTNORM)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptInf = asPnt3d(pt);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//选择管道,弯头等
|
2026-09-28 15:28:50 +08:00
|
|
|
AcAxDocLock lock;
|
|
|
|
|
AecDbEarthWormFitting* pFit = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity((AcDbEntity*&)pFit,m_idEWFit,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbX3dGroup* pGroupNext = NULL;
|
|
|
|
|
int nPos = 0;
|
|
|
|
|
double dDn = 0.0,dSpace = 0.0;
|
|
|
|
|
|
|
|
|
|
while( pFit->GetX3dGroup(nPos,pGroupNext) )
|
|
|
|
|
{
|
|
|
|
|
AcArray<AecInterface> arInfs;
|
|
|
|
|
if ( pGroupNext->GetInterface(arInfs) )
|
|
|
|
|
{
|
|
|
|
|
if ( !pGroupNext->GetSpecialtyData()->GetAt(_T("m_dDn"),dDn) )
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_dDn2"),dDn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i < arInfs.length();i++)
|
|
|
|
|
{
|
|
|
|
|
dSpace = ptInf.distanceTo(arInfs.at(i).ptPos);
|
|
|
|
|
|
|
|
|
|
if ( fabs( dSpace - 0.5 * AS_MUNIT(dDn) ) < 1.e-1) //10mm
|
|
|
|
|
{
|
|
|
|
|
m_ptStart = arInfs.at(i).ptPos;
|
|
|
|
|
m_vtEnter = arInfs.at(i).vtDir;
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//复制pGroup的材料信息和管径
|
2026-09-28 15:28:50 +08:00
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_sCurrSys"),m_sCurrSys);
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_sMertial"),m_sMertial);
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
|
|
|
|
|
m_dDn = dDn;
|
|
|
|
|
m_dDn2 = m_dDn;
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_dt"),m_dt);
|
2026-10-04 00:04:20 +08:00
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pFit->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pFrame->EnableWindow(FALSE);
|
|
|
|
|
ShowWindow(SW_SHOW);
|
|
|
|
|
EnableWindow(TRUE);
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedButton4()
|
|
|
|
|
{
|
|
|
|
|
UpdateData();
|
|
|
|
|
AecDbObjXDataMap* pGroupNext = NULL;
|
|
|
|
|
AecInterface* pInf = SelectLockInf(m_idEWFit,pGroupNext);
|
|
|
|
|
double dDn = 0.0,dSpace = 0.0;
|
|
|
|
|
|
|
|
|
|
if (pInf == NULL)
|
|
|
|
|
{
|
|
|
|
|
pInf = SelectLockInfH(m_idHouse,pGroupNext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pInf != NULL)
|
|
|
|
|
{
|
|
|
|
|
if ( !pGroupNext->GetAt(_T("m_dDn"),dDn) )
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetAt(_T("m_dDn2"),dDn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pGroupNext->GetAt(_T("m_dOD"),m_dOD);
|
|
|
|
|
if (dDn < 1.e-3)
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetAt(PIPE_DN,dDn);
|
|
|
|
|
dDn *= 1000.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_ptStart = pInf->ptPos;
|
|
|
|
|
m_vtEnter = pInf->vtDir;
|
|
|
|
|
|
|
|
|
|
if (m_bOnMidPipe)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptMid;
|
|
|
|
|
if ( pGroupNext->GetAt(KEY_MID,ptMid) )
|
|
|
|
|
{
|
|
|
|
|
m_ptStart = ptMid;
|
|
|
|
|
pInf->ptPos = ptMid;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//复制pGroup的材料信息和管径
|
2026-09-28 15:28:50 +08:00
|
|
|
pGroupNext->GetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
|
|
|
|
|
pGroupNext->GetAt(_T("m_sCurrSys"),m_sCurrSys);
|
|
|
|
|
|
|
|
|
|
if (!pGroupNext->GetAt(_T("m_sMertial"),m_sMertial))
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetAt(PIPE_MATERIAL,m_sMertial);
|
|
|
|
|
pGroupNext->GetAt(PIPE_SYS,m_sCurrSys);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pGroupNext->GetAt(PIPE_OD,m_dOD);
|
|
|
|
|
m_dOD *= 1000.0;
|
|
|
|
|
|
|
|
|
|
m_dDn = dDn;
|
|
|
|
|
m_dDn2 = m_dDn;
|
|
|
|
|
|
|
|
|
|
if ( !pGroupNext->GetAt(_T("m_dt"),m_dt) )
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetAt(PIPE_THICK,m_dt);
|
2026-10-04 00:04:20 +08:00
|
|
|
m_dt *= 1000.0;//转为毫米
|
2026-09-28 15:28:50 +08:00
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
pGroupNext->GetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
pInf->vtDir.normalize();
|
|
|
|
|
m_sInfDir1.Format(_T("%g,%g,%g"),pInf->vtDir.x,pInf->vtDir.y,pInf->vtDir.z);
|
|
|
|
|
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedButton2()
|
|
|
|
|
{
|
|
|
|
|
UpdateData(TRUE);
|
|
|
|
|
|
|
|
|
|
EnableWindow(FALSE);
|
|
|
|
|
CWnd* pFrame = acedGetAcadFrame();
|
|
|
|
|
pFrame->EnableWindow(TRUE);
|
|
|
|
|
ShowWindow(SW_HIDE);
|
|
|
|
|
pFrame->SetFocus();
|
|
|
|
|
|
|
|
|
|
ads_point pt;
|
2026-10-04 00:04:20 +08:00
|
|
|
int nRes = acedGetPoint(NULL,_T("\n选择接口点:"),pt);
|
2026-09-28 15:28:50 +08:00
|
|
|
if (nRes == RTNORM)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptInf = asPnt3d(pt);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//选择管道,弯头等
|
2026-09-28 15:28:50 +08:00
|
|
|
AcAxDocLock lock;
|
|
|
|
|
AecDbEarthWormFitting* pFit = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity((AcDbEntity*&)pFit,m_idEWFit,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbX3dGroup* pGroupNext = NULL;
|
|
|
|
|
int nPos = 0;
|
|
|
|
|
double dDn = 0.0,dSpace = 0.0;
|
|
|
|
|
|
|
|
|
|
while( pFit->GetX3dGroup(nPos,pGroupNext) )
|
|
|
|
|
{
|
|
|
|
|
AcArray<AecInterface> arInfs;
|
|
|
|
|
if ( pGroupNext->GetInterface(arInfs) )
|
|
|
|
|
{
|
|
|
|
|
if ( !pGroupNext->GetSpecialtyData()->GetAt(_T("m_dDn"),dDn) )
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_dDn2"),dDn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i < arInfs.length();i++)
|
|
|
|
|
{
|
|
|
|
|
dSpace = ptInf.distanceTo(arInfs.at(i).ptPos);
|
|
|
|
|
|
|
|
|
|
if ( fabs( dSpace - 0.5 * AS_MUNIT(dDn) ) < 1.e-1) //10mm
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetSpecialtyData()->GetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
m_vtOutDir = arInfs.at(i).vtDir;
|
|
|
|
|
m_dDn2 = dDn;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pFit->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pFrame->EnableWindow(FALSE);
|
|
|
|
|
ShowWindow(SW_SHOW);
|
|
|
|
|
EnableWindow(TRUE);
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedButton5()
|
|
|
|
|
{
|
|
|
|
|
UpdateData();
|
|
|
|
|
AecDbObjXDataMap* pGroupNext = NULL;
|
|
|
|
|
AecInterface* pInf = SelectLockInf(m_idEWFit,pGroupNext);
|
|
|
|
|
double dDn = 0.0,dSpace = 0.0;
|
|
|
|
|
|
|
|
|
|
if (pInf == NULL)
|
|
|
|
|
{
|
|
|
|
|
pInf = SelectLockInfH(m_idHouse,pGroupNext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pInf != NULL)
|
|
|
|
|
{
|
|
|
|
|
if ( !pGroupNext->GetAt(_T("m_dDn"),dDn) )
|
|
|
|
|
{
|
|
|
|
|
pGroupNext->GetAt(_T("m_dDn2"),dDn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pGroupNext->GetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
m_vtOutDir = pInf->vtDir;
|
|
|
|
|
m_dDn2 = dDn;
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//复制pGroup的材料信息和管径
|
2026-09-28 15:28:50 +08:00
|
|
|
pGroupNext->GetAt(_T("m_sCurrSys"),m_sCurrSys);
|
|
|
|
|
pGroupNext->GetAt(_T("m_sMertial"),m_sMertial);
|
|
|
|
|
pGroupNext->GetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
|
|
|
|
|
m_dDn = dDn;
|
|
|
|
|
m_dDn2 = m_dDn;
|
|
|
|
|
|
|
|
|
|
pGroupNext->GetAt(_T("m_dt"),m_dt);
|
2026-10-04 00:04:20 +08:00
|
|
|
pGroupNext->GetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR
|
2026-09-28 15:28:50 +08:00
|
|
|
|
|
|
|
|
pInf->vtDir.normalize();
|
|
|
|
|
m_sInfDir2.Format(_T("%g,%g,%g"),pInf->vtDir.x,pInf->vtDir.y,pInf->vtDir.z);
|
|
|
|
|
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio1()
|
|
|
|
|
{
|
|
|
|
|
UpdateData();
|
|
|
|
|
|
|
|
|
|
switch(m_nPos)
|
|
|
|
|
{
|
|
|
|
|
case 0://Z+
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = AcGeVector3d::kZAxis;
|
|
|
|
|
m_sOutDir = _T("0,0,1");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 1://Z-
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = -AcGeVector3d::kZAxis;
|
|
|
|
|
m_sOutDir = _T("0,0,-1");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2://Y+
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = AcGeVector3d::kYAxis;
|
|
|
|
|
m_sOutDir = _T("0,1,0");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 3://Y-
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = -AcGeVector3d::kYAxis;
|
|
|
|
|
m_sOutDir = _T("0,-1,0");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 4://X+
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = AcGeVector3d::kXAxis;
|
|
|
|
|
m_sOutDir = _T("1,0,0");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 5://X-
|
|
|
|
|
{
|
|
|
|
|
m_vtOutDir = -AcGeVector3d::kXAxis;
|
|
|
|
|
m_sOutDir = _T("-1,0,0");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
m_sInfDir2 = m_sOutDir;
|
|
|
|
|
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio2()
|
|
|
|
|
{
|
|
|
|
|
OnBnClickedRadio1();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio3()
|
|
|
|
|
{
|
|
|
|
|
OnBnClickedRadio1();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio4()
|
|
|
|
|
{
|
|
|
|
|
OnBnClickedRadio1();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio12()
|
|
|
|
|
{
|
|
|
|
|
OnBnClickedRadio1();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTJSTDlg::OnBnClickedRadio13()
|
|
|
|
|
{
|
|
|
|
|
OnBnClickedRadio1();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CTJSTDlg::GetX3dSolidRecs( AecDbX3dGroup*& pGroup)
|
|
|
|
|
{
|
|
|
|
|
if (pGroup != NULL)
|
|
|
|
|
{
|
|
|
|
|
pGroup->RemoveAll3dSolidRec();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pGroup = new AecDbX3dGroup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_vtEnter.normalize();
|
|
|
|
|
m_vtOutDir.normalize();
|
|
|
|
|
|
|
|
|
|
AcGePoint3d ptMid = m_ptStart + m_vtEnter * AS_MUNIT(m_dLen1);
|
|
|
|
|
AcGePoint3d ptOrg = ptMid;
|
|
|
|
|
double dR = 0.5 * AS_MUNIT ( m_dDn );
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//主
|
2026-09-28 15:28:50 +08:00
|
|
|
X3dSolidRec rec;
|
|
|
|
|
AcDbX3dSolid* pXSolid = new AcDbX3dSolid;
|
2026-10-04 00:04:20 +08:00
|
|
|
pXSolid->Create(AcDbX3dSolid::kPipe,ptMid,m_vtEnter,3,dR,AS_MUNIT(m_dt),2.0 * AS_MUNIT(m_dLen1 ) );//米单位
|
2026-09-28 15:28:50 +08:00
|
|
|
rec.pXSolid = pXSolid;
|
|
|
|
|
rec.bType = AcDb::kBoolUnite;
|
|
|
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//支
|
2026-09-28 15:28:50 +08:00
|
|
|
double dr = 0.5 * AS_MUNIT ( m_dDn2 );
|
|
|
|
|
ptMid += m_vtOutDir * 0.5 * AS_MUNIT(m_dLen2);
|
|
|
|
|
|
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
2026-10-04 00:04:20 +08:00
|
|
|
pXSolid->Create(AcDbX3dSolid::kPipe,ptMid,m_vtOutDir,3,dr,AS_MUNIT(m_dt),AS_MUNIT(m_dLen2 ) );//米单位
|
2026-09-28 15:28:50 +08:00
|
|
|
rec.pXSolid = pXSolid;
|
|
|
|
|
rec.bType = AcDb::kBoolUnite;
|
|
|
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
|
|
|
|
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
|
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
|
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
|
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//不需要BOOL并到Fit中的标志
|
2026-09-28 15:28:50 +08:00
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sCurrSys"),m_sCurrSys);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMertial"),m_sMertial);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sOutDir"),m_sOutDir);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nPos"),m_nPos);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dDn"),m_dDn);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dLen1"),m_dLen1);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dDn2"),m_dDn2);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dLen2"),m_dLen2);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_vtEnter"),m_vtEnter);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_ptStart"),m_ptStart);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_vtOutDir"),m_vtOutDir);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("COLOR"),m_nPipeColor);
|
|
|
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CTJSTDlg::GetFitting(AecDbEwFitting*& pFit)
|
|
|
|
|
{
|
|
|
|
|
bool bIsModify = false;
|
|
|
|
|
if (pFit == NULL)
|
|
|
|
|
{
|
|
|
|
|
pFit = new AecDbEwFitting;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bIsModify = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_vtEnter.normalize();
|
|
|
|
|
m_vtOutDir.normalize();
|
|
|
|
|
|
|
|
|
|
AcGePoint3d ptMid = m_ptStart + m_vtEnter * AS_MUNIT(m_dLen1);
|
|
|
|
|
AcGePoint3d ptOrg = ptMid;
|
|
|
|
|
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_RUNTIME,eTee);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_DN,AS_MUNIT ( m_dDn ));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_TDN,AS_MUNIT ( m_dDn2 ));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_THICK,AS_MUNIT(m_dt));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_FITSRV,KEY_FITWPIPE);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_OD,AS_MUNIT(m_dOD));
|
|
|
|
|
|
|
|
|
|
AcGeVector3d vtNro = m_vtOutDir.crossProduct(m_vtEnter);
|
|
|
|
|
if (!bIsModify)
|
|
|
|
|
{
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_MAJBR,m_vtEnter);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_MINBR,m_vtOutDir);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_MID,ptMid);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_NORMAL,vtNro);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_L,2.0 * AS_MUNIT(m_dLen1 ));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_T,AS_MUNIT(m_dLen2 ));
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//不需要BOOL并到Fit中的标志
|
2026-09-28 15:28:50 +08:00
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_sCurrSys"),m_sCurrSys);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_sMertial"),m_sMertial);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_sOutDir"),m_sOutDir);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_nPos"),m_nPos);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_dDn"),m_dDn);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_dLen1"),m_dLen1);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_dDn2"),m_dDn2);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_dLen2"),m_dLen2);
|
|
|
|
|
|
|
|
|
|
if (!bIsModify)
|
|
|
|
|
{
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_vtEnter"),m_vtEnter);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_ptStart"),m_ptStart);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_vtOutDir"),m_vtOutDir);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("COLOR"),m_nPipeColor);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(_T("m_idxRoom"),m_idxRoom);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//统一管线接口
|
2026-09-28 15:28:50 +08:00
|
|
|
pFit->GetSpecialtyData()->SetAt(KEY_2DSTYLE, 1);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_DN, AS_MUNIT(m_dDn));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_OD, AS_MUNIT(m_dOD));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_THICK,AS_MUNIT(m_dt));
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_MATERIAL, m_sMertial);
|
|
|
|
|
pFit->GetSpecialtyData()->SetAt(PIPE_SYS, m_sCurrSys);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|