Files
envi-code/SourceCode/Code2026/EarthWormCmd/TJBJDlg.cpp
T
2026-09-28 15:28:50 +08:00

343 lines
8.7 KiB
C++

#include "stdafx.h"
#include "TJBJDlg.h"
#include "AecDbEarthWorm.h"
#include "KTCADUtilityEx.h"
#include "AcDbX3dSolid.h"
#include "AecDbX3dGroup.h"
#include "UITools.h"
#include "axlock.h"
#include "AecDbEarthWormFitting.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(CTJBJDlg, CDialog)
CTJBJDlg::CTJBJDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTJBJDlg::IDD, pParent)
, m_dDn(100.0)
, m_sMertial(_T(""))
, m_sCurrSys(_T(""))
, m_sInfDir1(_T(""))
{
m_vtEnter.set(0,0,0);
m_ptStart.set(0,0,0);
m_dRRato = 2.0;
m_nPipeColor = kRed;
m_sCurrSys = _T("");
m_sMertial = _T("");
m_dDn = 100.0;
m_dOD = 107.0;
m_dL = 300.0;
m_dt = 14;
m_idxRoom = -1;
m_dEDn = 150.0;
m_dL = 200.0;
m_dTOD = 105.0;
}
CTJBJDlg::~CTJBJDlg()
{
}
void CTJBJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT3, m_dDn);
DDX_Text(pDX, IDC_EDIT4, m_sMertial);
DDX_Text(pDX, IDC_EDIT5, m_sCurrSys);
DDX_Text(pDX, IDC_EDIT10, m_sInfDir1);
DDX_Control(pDX, IDC_LIST2, m_wndListCtrl);
}
BEGIN_MESSAGE_MAP(CTJBJDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON4, &CTJBJDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDOK, &CTJBJDlg::OnBnClickedOk)
END_MESSAGE_MAP()
BOOL CTJBJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString path = FilePath::GetSysDir() + Plumbing_DB;
if (!m_dbSQLite.InitADOServer(path))
{
AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + Plumbing_DB + _T("文件是否存在."));
return FALSE;
}
m_wndListCtrl.InsertColumn(0,_T("主管公称直径"),LVCFMT_LEFT,100);
m_wndListCtrl.InsertColumn(1,_T("变径端公称直径"),LVCFMT_LEFT,100);
m_wndListCtrl.InsertColumn(2,_T("长度"),LVCFMT_LEFT,60);
m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
InitReducer();
return TRUE;
}
void CTJBJDlg::SetEWFittingId(AcDbObjectId& id)
{
m_idEWFit = id;
}
void CTJBJDlg::SetXXXHouseID(AcDbObjectId& id)
{
m_idHouse = id;
}
void CTJBJDlg::InitReducer()
{
m_wndListCtrl.DeleteAllItems();
CString sSQL;
sSQL.Format(_T("select [公称直径L],[公称直径S],[长度] from AecReduceData")
_T(" where [公称直径L]=%d and [长度] > 0 order by [公称直径S]"),(int)m_dDn);
CUIIValueTable valTable;
m_dbSQLite.GetSelData(sSQL,valTable);
CString sDN1,sDN2,sL;
CStringArray arVals;
CStringList lstDn2s;
int nSize = valTable.GetTableLogicSize();
for(int i = 0;i < nSize;i++)
{
arVals.RemoveAll();
valTable.GetValueRecord(i,arVals);
if (arVals.GetSize() >= 3)
{
sDN1 = arVals.GetAt(0);
sDN2 = arVals.GetAt(1);
sL = arVals.GetAt(2);
if (lstDn2s.Find(sDN2) == NULL)
{
int nItem = m_wndListCtrl.GetItemCount();
m_wndListCtrl.InsertItem(nItem,sDN1);
m_wndListCtrl.SetItemText(nItem,1,sDN2);
m_wndListCtrl.SetItemText(nItem,2,sL);
lstDn2s.AddTail(sDN2);
}
}
}
valTable.RemoveAll();
sSQL.Format(_T("select [公称直径S],[公称直径L],[长度] from AecReduceData")
_T(" where [公称直径S]=%d and [长度] > 0 order by [公称直径L]"),(int)m_dDn);
m_dbSQLite.GetSelData(sSQL,valTable);
nSize = valTable.GetTableLogicSize();
for(i = 0;i < nSize;i++)
{
arVals.RemoveAll();
valTable.GetValueRecord(i,arVals);
if (arVals.GetSize() >= 3)
{
sDN1 = arVals.GetAt(0);
sDN2 = arVals.GetAt(1);
sL = arVals.GetAt(2);
if (lstDn2s.Find(sDN2) == NULL)
{
lstDn2s.AddTail(sDN2);
int nItem = m_wndListCtrl.GetItemCount();
m_wndListCtrl.InsertItem(nItem,sDN1);
m_wndListCtrl.SetItemText(nItem,1,sDN2);
m_wndListCtrl.SetItemText(nItem,2,sL);
}
}
}
m_wndListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
}
void CTJBJDlg::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)
{
m_ptStart = pInf->ptPos;
m_vtEnter = -pInf->vtDir;
m_vtEnter.negate();
if ( !pGroupNext->GetAt(_T("m_dDn"),dDn) )
{
pGroupNext->GetAt(_T("m_dDn2"),dDn);
}
if (dDn < 1.e-3)
{
pGroupNext->GetAt(PIPE_DN,dDn);
dDn *= 1000.0;
}
m_dDn = dDn;//毫米
//复制pGroup的材料信息和管径
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;////毫米
if ( !pGroupNext->GetAt(_T("m_dt"),m_dt) )
{
pGroupNext->GetAt(PIPE_THICK,m_dt);
m_dt *= 1000.0;//转为毫米
}
pGroupNext->GetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR
pGroupNext->GetAt(_T("m_dRRato"),m_dRRato);
pInf->vtDir.normalize();
m_sInfDir1.Format(_T("%g,%g,%g"),pInf->vtDir.x,pInf->vtDir.y,pInf->vtDir.z);
//查询变径信息
InitReducer();
UpdateData(FALSE);
}
}
void CTJBJDlg::OnBnClickedOk()
{
int nItem = -1;
POSITION ps = m_wndListCtrl.GetFirstSelectedItemPosition();
if (ps != NULL)
{
nItem = m_wndListCtrl.GetNextSelectedItem(ps);
}
if (nItem == -1)
{
AfxMessageBox(_T("请选择变径系列!"));
return;
}
CString sEDn = m_wndListCtrl.GetItemText(nItem,1);
m_dEDn = _ttof(sEDn);
CString sL = m_wndListCtrl.GetItemText(nItem,2);
m_dL = _ttof(sL);
if (m_vtEnter.isZeroLength())
{
AfxMessageBox(_T("请选择锁定管线管件接口!"));
return;
}
CString sSQL,sText;
sSQL.Format(_T("select [外径] from AecOD order by [公称直径] where [公称直径]=%d and [壁厚]=%g"),(int)(m_dEDn + 0.5),m_dt);
if ( m_dbSQLite.GetSelData(sSQL,sText) )
{
m_dTOD = _ttof(sText);
}
OnOK();
}
int CTJBJDlg::GetFitting(AecDbEwFitting*& pFit)
{
bool bIsModify = false;
if (pFit == NULL)
{
pFit = new AecDbEwFitting;
}
else
{
bIsModify = true;
}
pFit->GetSpecialtyData()->SetAt(KEY_RUNTIME,eReduce);
pFit->GetSpecialtyData()->SetAt(KEY_MAJBR, m_vtEnter);
pFit->GetSpecialtyData()->SetAt(KEY_NORMAL, AcGeVector3d::kZAxis);
AcGeVector3d vtOff(0,0,0);
pFit->GetSpecialtyData()->SetAt(KEY_OFFSET, vtOff);
pFit->GetSpecialtyData()->SetAt(KEY_START, m_ptStart);
AcGeVector3d vtEnd = m_vtEnter;
vtEnd.normalize();
AcGePoint3d ptEnd = m_ptStart + vtEnd * AS_MUNIT(m_dL);
pFit->GetSpecialtyData()->SetAt(KEY_END, ptEnd);
int nMod = 2;
pFit->GetSpecialtyData()->SetAt(PIPE_DRAWDIR, WPipe::eDN);
pFit->GetSpecialtyData()->SetAt(PIPE_DN, AS_MUNIT( m_dDn ));
pFit->GetSpecialtyData()->SetAt(PIPE_OD, AS_MUNIT(m_dOD));
pFit->GetSpecialtyData()->SetAt(PIPE_EDN, AS_MUNIT(m_dEDn));
pFit->GetSpecialtyData()->SetAt(PIPE_EOD, AS_MUNIT(m_dTOD));
pFit->GetSpecialtyData()->SetAt(PIPE_THICK, m_dt);
pFit->GetSpecialtyData()->SetAt(PIPE_RATIO,m_dRRato);
int nCnType = 0;
double dFL = 0.0, dFD = 0.0;
pFit->GetSpecialtyData()->SetAt(PIPE_CONNECT, nCnType); // 接口类型
pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACEL, AS_MUNIT(m_dDn));
pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACED, AS_MUNIT(m_dDn));
double dFL2 = 0.0, dFD2 = 0.0;
pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACEL2, AS_MUNIT(m_dEDn));
pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACED2, AS_MUNIT(m_dEDn));
pFit->GetSpecialtyData()->SetAt(KEY_2DSTYLE, 1);
pFit->GetSpecialtyData()->SetAt(PIPE_DN, AS_MUNIT(m_dDn));
pFit->GetSpecialtyData()->SetAt(PIPE_THICK, AS_MUNIT(m_dt));
pFit->GetSpecialtyData()->SetAt(PIPE_MATERIAL, m_sMertial);
pFit->GetSpecialtyData()->SetAt(PIPE_SYS, m_sCurrSys);
pFit->GetSpecialtyData()->SetAt(PIPE_RATIO,m_dRRato);
pFit->GetSpecialtyData()->SetAt(_T("m_sCurrSys"),m_sCurrSys);
pFit->GetSpecialtyData()->SetAt(_T("m_sMertial"),m_sMertial);
pFit->GetSpecialtyData()->SetAt(_T("m_dDn"),m_dDn);
pFit->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt);
pFit->GetSpecialtyData()->SetAt(_T("m_vtEnter"),m_vtEnter);
pFit->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
pFit->GetSpecialtyData()->SetAt(_T("m_dOD"),m_dOD);
CString sOutDir;
sOutDir.Format(_T("%g,%g,%g"),m_vtEnter.x,m_vtEnter.y,m_vtEnter.z);
pFit->GetSpecialtyData()->SetAt(_T("m_sOutDir"),sOutDir);
pFit->GetSpecialtyData()->SetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR
pFit->GetSpecialtyData()->SetAt(_T("m_idxRoom"),m_idxRoom);//系统默认KEY COLOR
return 0;
}