257 lines
5.8 KiB
C++
257 lines
5.8 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "LBXGDlg.h"
|
|
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
//填充面板对话框:
|
|
extern bool acedHatchPalletteDialog(const TCHAR* Pattern, bool bAllowCustom, TCHAR*& result);
|
|
|
|
IMPLEMENT_DYNAMIC(CLBXGDlg, CDialog)
|
|
|
|
CLBXGDlg::CLBXGDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CLBXGDlg::IDD, pParent)
|
|
, m_dThick(360.0)
|
|
, m_dTopEl(0.0)
|
|
, m_sMaterial(_T("钢筋混凝土"))
|
|
, m_sPurpose(_T("结构底板"))
|
|
, m_sPatternName(_T(""))
|
|
, m_dAngle(0.0)
|
|
, m_sScale(_T("50.0"))
|
|
, m_sNo(_T(""))
|
|
{
|
|
m_nColor = 4;
|
|
m_dOldTopEl = 0.0;
|
|
}
|
|
|
|
CLBXGDlg::~CLBXGDlg()
|
|
{
|
|
}
|
|
|
|
void CLBXGDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dThick);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dTopEl);
|
|
DDX_Text(pDX, IDC_EDIT2, m_sMaterial);
|
|
DDX_Text(pDX, IDC_EDIT12, m_sPurpose);
|
|
DDX_Text(pDX, IDC_EDIT4, m_sPatternName);
|
|
DDX_Text(pDX, IDC_EDIT5, m_dAngle);
|
|
DDX_CBString(pDX, IDC_COMBO1, m_sScale);
|
|
DDX_Text(pDX, IDC_EDIT13, m_sNo);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CLBXGDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CLBXGDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDOK, &CLBXGDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CLBXGDlg::OnBnClickedButton3)
|
|
ON_BN_CLICKED(IDC_STATIC_COLOR, &CLBXGDlg::OnStaticColor)
|
|
ON_WM_CTLCOLOR()
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CLBXGDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CLBXGDlg::OnStaticColor()
|
|
{
|
|
UpdateData();
|
|
acedSetColorDialog(m_nColor, Adesk::kFalse, m_nColor);
|
|
Invalidate();
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
HBRUSH CLBXGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|
{
|
|
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
if (nCtlColor == CTLCOLOR_STATIC)
|
|
{
|
|
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR)
|
|
{
|
|
COLORREF crColor = RGB(255, 255, 255);
|
|
if (m_nColor == 256)
|
|
{
|
|
crColor = RGB(255, 255, 255);
|
|
}
|
|
else
|
|
{
|
|
crColor = acedGetRGB(m_nColor);
|
|
}
|
|
|
|
CRect rc;
|
|
pWnd->GetClientRect(rc);
|
|
pDC->FillSolidRect(rc, crColor);
|
|
}
|
|
}
|
|
return hbr;
|
|
}
|
|
|
|
//扩展属性
|
|
void CLBXGDlg::OnBnClickedButton1()
|
|
{
|
|
}
|
|
|
|
void CLBXGDlg::SetFromSlab(const AcDbObjectId& id)
|
|
{
|
|
m_idSlab = id;
|
|
AcAxDocLock lock;
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
|
|
if (pSlab != NULL)
|
|
{
|
|
m_dThick = pSlab->GetThick();
|
|
m_dTopEl = pSlab->GetElBom();
|
|
m_dTopEl += m_dThick;
|
|
m_dOldTopEl = m_dTopEl;
|
|
|
|
pSlab->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_PURPOSE,m_sPurpose);
|
|
pSlab->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,m_sMaterial);
|
|
pSlab->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,m_sNo);
|
|
if ( !pSlab->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("COLOR"),m_nColor) )
|
|
{
|
|
m_nColor = kColorByLayer;
|
|
}
|
|
|
|
PipeHatch sHatch;
|
|
if ( pSlab->GetHatch(sHatch) )
|
|
{
|
|
m_sPatternName = sHatch.szPattern;
|
|
m_dAngle = sHatch.dAngle;
|
|
m_sScale.Format(_T("%.2f"),sHatch.dScale);
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CLBXGDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_dThick < 1.e-1)
|
|
{
|
|
AfxMessageBox(_T("板的厚度尺寸不正确!请输入合适的尺寸"));
|
|
return;
|
|
}
|
|
|
|
UpdateSlabData();
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CLBXGDlg::UpdateSlabData()
|
|
{
|
|
AcAxDocLock lock;
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idSlab,AcDb::kForWrite))
|
|
{
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
|
|
if (pSlab != NULL)
|
|
{
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_NO,m_sNo);
|
|
|
|
AcDbCurve* pCur = pSlab->GetBaseCurve();
|
|
if (pCur != NULL)
|
|
{
|
|
AcDbLine* pLn = AcDbLine::cast(pCur);//水池底板
|
|
if (pLn != NULL)
|
|
{
|
|
AcGePoint3d ptSta = pLn->startPoint();
|
|
AcGePoint3d ptEnd = pLn->endPoint();
|
|
AcGeVector3d vt = ptEnd - ptSta;
|
|
vt.normalize();
|
|
|
|
double dThickOld = ptEnd.distanceTo(ptSta);
|
|
|
|
ptSta.z = m_dTopEl - m_dThick;
|
|
ptEnd = ptSta + vt * m_dThick;
|
|
|
|
// 保证顶部标高不变.保证水池容积
|
|
double dThickAdd = m_dThick - dThickOld;
|
|
AcGeVector3d vtMove(0,0,-dThickAdd);
|
|
//ptSta += vtMove;
|
|
//ptEnd += vtMove;
|
|
|
|
pSlab->SetBaseCurve(ptSta,ptEnd);
|
|
AcGeVector3d vtAdd = vt;
|
|
|
|
vtAdd.normalize();
|
|
vtAdd *= 0.5 * dThickAdd;
|
|
|
|
pSlab->HoleAndPipeExtend(dThickAdd,-vtAdd);
|
|
}
|
|
|
|
AcDbPolyline* pPl = AcDbPolyline::cast(pCur);//路径盖板
|
|
if (pPl != NULL)
|
|
{
|
|
double dL = 0.0,dW = m_dThick,dt = 0.0;
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_SIZE1,dL);
|
|
pSlab->GetSpecialtyData()->GetAt(PIPE_THICK,dt);
|
|
|
|
AcDbPolyline* pPlN = AcDbPolyline::cast(pSlab->GetNativeCurve());
|
|
if (pPlN != NULL)
|
|
{
|
|
pPlN->setElevation(m_dTopEl - m_dThick);
|
|
}
|
|
pSlab->SetSection(dL,m_dThick,dt);
|
|
}
|
|
|
|
pSlab->SetHatch(m_sPatternName,m_dAngle,_ttof(m_sScale));
|
|
pSlab->setColorIndex(m_nColor);
|
|
|
|
AcGePoint3d ptOrg;
|
|
if( pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptOrg) )
|
|
{
|
|
ptOrg.z = m_dTopEl - m_dThick;
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_ORGPT,ptOrg);
|
|
}
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_PURPOSE,m_sPurpose);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_NO,m_sNo);
|
|
|
|
int nVt = 0;
|
|
if ( pSlab->GetSpecialtyData()->HasKey(KEY_BOMTHICK,nVt) )
|
|
{
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_BOMTHICK,m_dThick);
|
|
}
|
|
|
|
AcGeMatrix3d xformEl;
|
|
AcGeVector3d vtMove(0,0,m_dTopEl - m_dOldTopEl);
|
|
xformEl.setToTranslation(vtMove);
|
|
|
|
pSlab->TransformDTYGPartEnt(xformEl);
|
|
pSlab->TransformAssocPartEnt(xformEl);
|
|
|
|
pSlab->ReCreateDraw3d();
|
|
pSlab->ReCreateDraw2d();
|
|
}
|
|
delete pCur;
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CLBXGDlg::OnBnClickedButton3()
|
|
{
|
|
LPCTSTR pszPattern = _T("ANSI32");
|
|
#ifdef ZWCAD
|
|
TCHAR* pszReslt = new TCHAR;
|
|
#else
|
|
TCHAR* pszReslt = NULL;
|
|
#endif
|
|
|
|
if ( acedHatchPalletteDialog(pszPattern,true,pszReslt) )
|
|
{
|
|
m_sPatternName = pszReslt;
|
|
UpdateData(FALSE);
|
|
}
|
|
DELETE_PTR(pszReslt);
|
|
}
|