261 lines
6.1 KiB
C++
261 lines
6.1 KiB
C++
#include "stdafx.h"
|
|
#include "TJFJDlg.h"
|
|
#include "AcDbX3dSolid.h"
|
|
#include "AecDbX3dPart.h"
|
|
#include "CCSYDlg.h"
|
|
#include "UITools.h"
|
|
|
|
extern void SplitStrintToArray(LPCTSTR pszDescr,CStringArray& arInfo,TCHAR tcSpace);
|
|
|
|
IMPLEMENT_DYNAMIC(CTJFJDlg, CDialog)
|
|
|
|
CTJFJDlg::CTJFJDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CTJFJDlg::IDD, pParent)
|
|
{
|
|
m_nLineSelect = -1;
|
|
|
|
UIDataCache::Read(_T("%i%a"), _T("CTJFJDlg")
|
|
, &m_nLineSelect
|
|
, &m_arSelLine);
|
|
}
|
|
|
|
CTJFJDlg::~CTJFJDlg()
|
|
{
|
|
}
|
|
|
|
void CTJFJDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndFJList);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTJFJDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CTJFJDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CTJFJDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CTJFJDlg::OnBnClickedButton4)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CTJFJDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//从外部list文本文件建表格
|
|
InitList();
|
|
|
|
m_wndFJList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|
|
|
if (m_nLineSelect != -1)
|
|
{
|
|
m_wndFJList.SetItemState(m_nLineSelect,LVIS_SELECTED,LVIS_SELECTED);
|
|
}
|
|
else
|
|
{
|
|
m_nLineSelect = 0;
|
|
m_wndFJList.SetItemState(m_nLineSelect,LVIS_SELECTED,LVIS_SELECTED);
|
|
}
|
|
|
|
// m_wndFJList.InsertColumn(0,_T("机号"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(1,_T("φA"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(2,_T("B"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(3,_T("C"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(4,_T("φD"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(5,_T("E"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(6,_T("F"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(7,_T("H"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(8,_T("G"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(9,_T("M(d)xL"),LVCFMT_LEFT,120,120);
|
|
// m_wndFJList.InsertColumn(10,_T("重量(Kg)"),LVCFMT_LEFT,120,120);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CTJFJDlg::InitList()
|
|
{
|
|
CString sFile = _T("DWT-II.lst");
|
|
|
|
//读取设置是否显示
|
|
TCHAR szfileName[MAX_PATH],szFullPath[MAX_PATH];
|
|
GetModuleFileName(_hdllInstance,szfileName,MAX_PATH);
|
|
|
|
TCHAR drive[_MAX_DRIVE] = _T(""),
|
|
dir[_MAX_DIR] = _T(""),
|
|
fname[_MAX_FNAME] = _T(""),
|
|
ext[_MAX_EXT] = _T("");
|
|
|
|
//e:\,program files\autodesk\,myarx,exe
|
|
_tsplitpath(szfileName, drive, dir, fname, ext);
|
|
_tcscpy(szFullPath, drive);
|
|
_tcscat(szFullPath, dir);
|
|
|
|
CString sFullPath = szFullPath;
|
|
sFullPath.TrimRight(_T('\\'));
|
|
|
|
//上一级目录
|
|
int nPos = sFullPath.ReverseFind(_T('\\'));
|
|
CString sPath = sFullPath.Mid(0,nPos + 1);
|
|
|
|
sFullPath = sPath + _T("sys\\");
|
|
sFullPath += sFile;
|
|
|
|
CString sLine;
|
|
CStdioFile file;
|
|
if (file.Open(sFullPath,CFile::modeRead|CFile::typeText))
|
|
{
|
|
file.ReadString(sLine);
|
|
|
|
CStringArray arInfo;
|
|
SplitStrintToArray(sLine,arInfo,_T('\t'));
|
|
|
|
for (int i = 0;i < arInfo.GetSize();i++)
|
|
{
|
|
m_wndFJList.InsertColumn(i,arInfo.GetAt(i),LVCFMT_LEFT,160,160);
|
|
}
|
|
|
|
int nItem = -1;
|
|
while(file.ReadString(sLine))
|
|
{
|
|
if (!sLine.IsEmpty())
|
|
{
|
|
arInfo.RemoveAll();
|
|
SplitStrintToArray(sLine,arInfo,_T('\t'));
|
|
|
|
for (int i = 0;i < arInfo.GetSize();i++)
|
|
{
|
|
if (i == 0)
|
|
nItem = m_wndFJList.InsertItem(m_wndFJList.GetItemCount(),arInfo.GetAt(i));
|
|
else
|
|
m_wndFJList.SetItemText(nItem,i,arInfo.GetAt(i));
|
|
}
|
|
}
|
|
}
|
|
file.Close();
|
|
}
|
|
}
|
|
|
|
void CTJFJDlg::OnBnClickedOk()
|
|
{
|
|
POSITION ps = m_wndFJList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
m_nLineSelect = m_wndFJList.GetNextSelectedItem(ps);
|
|
}
|
|
|
|
if (m_nLineSelect == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择风机型号!"));
|
|
return;
|
|
}
|
|
|
|
CString sText,sKey;
|
|
|
|
HDITEM hItem;
|
|
hItem.mask = HDI_TEXT;
|
|
TCHAR szBuffer[MAX_PATH];
|
|
hItem.pszText = szBuffer;
|
|
hItem.cchTextMax = MAX_PATH;
|
|
|
|
for (int i = 0;i < m_wndFJList.GetHeaderCtrl()->GetItemCount();i++)
|
|
{
|
|
sText = m_wndFJList.GetItemText(m_nLineSelect,i);
|
|
m_arSelLine.Add(sText);
|
|
|
|
m_wndFJList.GetHeaderCtrl()->GetItem(i,&hItem);
|
|
sKey = hItem.pszText;
|
|
|
|
m_mapBimData.SetAt(sKey,sText);
|
|
}
|
|
|
|
UIDataCache::Write(_T("%i%a"), _T("CTJFJDlg")
|
|
, &m_nLineSelect
|
|
, &m_arSelLine);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CTJFJDlg::OnBnClickedButton1()
|
|
{
|
|
CCCSYDlg dlg;
|
|
dlg.SetBmpFileName(_T("DWT-II-DIM.bmp"));
|
|
dlg.DoModal();
|
|
}
|
|
|
|
void CTJFJDlg::OnBnClickedButton4()
|
|
{
|
|
CCCSYDlg dlg;
|
|
dlg.SetBmpFileName(_T("DWT-II.bmp"));
|
|
dlg.DoModal();
|
|
}
|
|
|
|
int CTJFJDlg::GetX3dPart(AecDbX3dPart*& pGroup)
|
|
{
|
|
//0 1 2 ...
|
|
//机号 φA B C φD E F H G M(d)*L 重量(Kg)
|
|
//3 690 430 60 310 382 277 702 30 10.580 80
|
|
|
|
if (m_nLineSelect == -1)
|
|
return 0;
|
|
|
|
if (pGroup != NULL)
|
|
{
|
|
pGroup->RemoveAll3dSolidRec();
|
|
}
|
|
else
|
|
{
|
|
pGroup = new AecDbX3dPart;
|
|
}
|
|
|
|
AcGePoint3d ptOrg;
|
|
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
|
|
|
|
AcDbX3dSolid* pXSolid = NULL;
|
|
double dB = AS_MUNIT( _ttof(m_arSelLine.GetAt(2)) );
|
|
double dC = AS_MUNIT( _ttof(m_arSelLine.GetAt(3)) );
|
|
|
|
ptOrg.z += 0.5 * dC;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,dB,dB,dC);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
ptOrg.z += 0.5 * dC;
|
|
|
|
double dF = AS_MUNIT( _ttof(m_arSelLine.GetAt(6)));
|
|
|
|
//CYL RxH
|
|
double dE = AS_MUNIT(_ttof(m_arSelLine.GetAt(5)));
|
|
double dA = AS_MUNIT (_ttof(m_arSelLine.GetAt(1)));
|
|
double dT = AS_MUNIT(200.0);
|
|
|
|
ptOrg.z += 0.5 * (dF + dT);
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,dA / 4.0,dF + dT);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
ptOrg.z += 0.5 * (dF + dT );
|
|
|
|
ptOrg.z += 0.5 * (dE - dF );
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,dA / 2.0,dE - dF);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
ptOrg.z += 0.5 * (dE - dF );
|
|
|
|
double dH = AS_MUNIT( _ttof(m_arSelLine.GetAt(7)) );
|
|
|
|
// R1xR2xH
|
|
ptOrg.z += 0.5 * (dH - dF);
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCone,ptOrg,vtZ,3,0.8 * dA / 2.0,0.1,dH - dF);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
//pGroup->SetBoolOperFor(3);//有问题
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
//序列化BIM数据
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nLineSelect"),m_nLineSelect);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
return TRUE;
|
|
} |