343 lines
8.7 KiB
C++
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;
|
|
} |