Files
envi-code/SourceCode/Code2026/Pool3dCmd/LBXGDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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