#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; }