240 lines
5.0 KiB
C++
240 lines
5.0 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);
|
|
}
|