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

240 lines
4.9 KiB
C++

#include "stdafx.h"
#include "StdArx.h"
#include "JMDBDlg.h"
#include "GLTKDlg.h"
#include "CoreTools.h"
IMPLEMENT_DYNAMIC(CJMDBDlg, CDialog)
CJMDBDlg::CJMDBDlg(CWnd* pParent /*=NULL*/)
: CDialog(CJMDBDlg::IDD, pParent)
, m_sNo(_T(""))
, m_sHatch(HATCH_DEFAULT)
, m_bAddHatch(TRUE)
{
m_pSectionReg = NULL;
m_sMaterial = _T("钢筋混凝土");
m_sPurpose = _T("水池底板");
m_dExLen = 3000.0;
GET_CACHE(CJMDBDlg
, %s%s%f%s
, &m_sMaterial
, &m_sPurpose
, &m_dExLen
, &m_sHatch);
}
CJMDBDlg::~CJMDBDlg(void)
{
}
void CJMDBDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT4, m_sRegScr);
DDX_Text(pDX, IDC_EDIT15, m_sMaterial);
DDX_Text(pDX, IDC_EDIT16, m_sPurpose);
DDX_Text(pDX, IDC_EDIT1, m_dExLen);
DDX_Text(pDX, IDC_EDIT17, m_sNo);
DDX_Control(pDX, IDC_BTN_FILL, m_wndBtHatch);
DDX_Check(pDX, IDC_CHECK_HATCH, m_bAddHatch);
DDX_Text(pDX, IDC_BTN_FILL, m_sHatch);
}
BEGIN_MESSAGE_MAP(CJMDBDlg, CDialog)
ON_BN_CLICKED(IDOK, &CJMDBDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CJMDBDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CJMDBDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BTN_FILL, &CJMDBDlg::OnBnClickedBtnFill)
ON_BN_CLICKED(IDC_CHECK_HATCH, &CJMDBDlg::OnBnClickedCheckHatch)
END_MESSAGE_MAP()
BOOL CJMDBDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndBtHatch.EnableWindow(m_bAddHatch);
UpdateData(FALSE);
return TRUE;
}
void CJMDBDlg::OnBnClickedOk()
{
if (m_pSectionReg == NULL)
{
AfxMessageBox(_T("没有选择拉伸截面!"));
return;
}
SET_CACHE(CJMDBDlg
, %s%s%f%s
, m_sMaterial
, m_sPurpose
, m_dExLen
,m_sHatch);
OnOK();
}
void CJMDBDlg::OnBnClickedButton1()
{
UpdateData();
//
CGLTKDlg dlg(CGLTKDlg::eSelect, _T("poolstandard.db"), _T("standard"), CGLTKDlg::drawRegion);
if ( IDOK == dlg.DoModal() )
{
CString sScr;
if (dlg.GetCrossSectionScr(sScr))
{
CString sFullPath = FilePath::GetSysDir();
sFullPath.MakeLower();
sFullPath += _T("\\JMSJ.sat");
CStdioFile file;
if (file.Open(sFullPath,CFile::modeCreate |CFile::modeWrite ))
{
file.WriteString(sScr);
file.Close();
}
AcDbVoidPtrArray arBodyPtrs;
if ( Acad::eOk == AcDbBody::acisIn(sFullPath,arBodyPtrs) )
{
if (arBodyPtrs.length() > 0)
{
AcDbEntity* pEnt = (AcDbEntity*)arBodyPtrs.first();
AcDbRegion* pRegion = AcDbRegion::cast(pEnt);
if (pRegion != NULL)
{
m_pSectionReg = pRegion;
m_sRegScr = sScr;
}
}
}
UpdateData(FALSE);
}
}
}
void CJMDBDlg::OnBnClickedButton2()
{
EnableWindow(FALSE);
CWnd* pFrame = acedGetAcadFrame();
pFrame->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrame->SetFocus();
bool bSuccess = false;
LPCTSTR pszTip = _T("请拾取区域内一点提取截面:");
ads_point pt;
int nRes = acedGetPoint(NULL,pszTip,pt);
// 用pt构造一个位移变换
AcGeMatrix3d mat;
mat.setToTranslation(asPnt3d(pt).asVector().negate());
if (nRes == RTNORM)
{
ads_name ent0,ent1;
acdbEntLast(ent0);
SHacedCommand(RTSTR, _T("-boundary"), RTPOINT, pt, RTSTR, _T(""), RTNONE);
acdbEntLast(ent1);
AcDbObjectId id1,id2;
acdbGetObjectId(id1,ent0);
acdbGetObjectId(id2,ent1);
if (id1 != id2 && id2.isValid())
{
AcDbEntity* pEnt = NULL;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id2,AcDb::kForRead))
{
AcDbPolyline* pPl = AcDbPolyline::cast(pEnt);
if (pPl != NULL)
{
AcDbPolyline* pPlCln = (AcDbPolyline*)pPl->clone();
pPlCln->transformBy(mat);
m_pSectionReg = CoreTools::createRegion(pPlCln);
delete pPlCln;
bSuccess = true;
}
pEnt->close();
}
acdbEntDel(ent1);
}
else
{
acutPrintf(_T("\n提取闭合区域失败!请检查基线是否构成闭合区域!"));
}
}
if (m_pSectionReg != NULL && bSuccess)
{
CString sFullPath = FilePath::getSystemTemporaryFolder() + _T("\\JMSJ.sat");
CString sRegionScrp = _T("");
CString sLine;
AcDbVoidPtrArray arBodyPtrs;
arBodyPtrs.append(m_pSectionReg);
if (Acad::eOk == AcDbBody::acisOut(sFullPath, arBodyPtrs))
{
CFile file;
if (file.Open(sFullPath, CFile::modeRead))
{
ULONGLONG dwFileLength = file.GetLength();
char* pszTxt = new char[dwFileLength];
file.Read(pszTxt, dwFileLength);
m_sRegScr = pszTxt;
DELETE_ARR_(pszTxt);
file.Close();
}
}
}
pFrame->EnableWindow(FALSE);
ShowWindow(SW_SHOW);
EnableWindow(TRUE);
UpdateData(FALSE);
}
extern bool __cdecl acedHatchPalletteDialog(wchar_t const* , bool , wchar_t *&);
void CJMDBDlg::OnBnClickedBtnFill()
{
UpdateData();
TCHAR *psz = new TCHAR[1024];
::memset(psz, 0, sizeof(TCHAR) * 1024);
CString sHatch(m_sMaterial);
if (!m_sHatch.IsEmpty())
sHatch = m_sHatch;
if (acedHatchPalletteDialog(sHatch, false, psz))
{
m_sHatch = psz;
m_wndBtHatch.SetWindowText(m_sHatch);
}
delete[] psz;
}
void CJMDBDlg::OnBnClickedCheckHatch()
{
UpdateData();
m_wndBtHatch.EnableWindow(m_bAddHatch);
if (!m_bAddHatch)
m_sHatch = HATCH_NO_NEED;
else
m_sHatch = HATCH_DEFAULT;
UpdateData(FALSE);
}