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

346 lines
7.3 KiB
C++

#include "stdafx.h"
#include "TJTDDlg.h"
#include "KTCADUtilityEx.h"
#include "AcDbX3dSolid.h"
#include "AecDbX3dPart.h"
#include "axlock.h"
#include "UITools.h"
#include "BimInfoDlg.h"
IMPLEMENT_DYNAMIC(CTJTDDlg, CDialog)
CTJTDDlg::CTJTDDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTJTDDlg::IDD, pParent)
, m_dH(2.5)
, m_dW(2.5)
, m_dL(8.0)
, m_dT(0.36)
, m_dA(90)
, m_dE(0.0)
, m_nShape(0)
, m_sPoints(_T(""))
, m_sVtStaCut(_T(""))
, m_sVtEndCut(_T(""))
{
m_vtLast.set(0,0,0);
m_vtNext.set(0,0,0);
m_sVtStaCut = _T("0,0,0");
m_sVtEndCut = _T("0,0,0");
UIDataCache::Read(_T("%d%d%d%d%d%d%i"), _T("CTJTDDlg")
, &m_dH , &m_dW , &m_dL , &m_dT , &m_dA , &m_dE
, &m_nShape);
}
CTJTDDlg::~CTJTDDlg()
{
}
void CTJTDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_wndEditH);
DDX_Text(pDX, IDC_EDIT1, m_dH);
DDX_Text(pDX, IDC_EDIT3, m_dW);
DDX_Text(pDX, IDC_EDIT4, m_dL);
DDX_Text(pDX, IDC_EDIT5, m_dT);
DDX_Text(pDX, IDC_EDIT6, m_dA);
DDX_Text(pDX, IDC_EDIT7, m_dE);
DDX_Radio(pDX, IDC_RADIO1, m_nShape);
DDX_Text(pDX, IDC_EDIT2, m_sPoints);
DDX_Text(pDX, IDC_EDIT16, m_sVtStaCut);
DDX_Text(pDX, IDC_EDIT17, m_sVtEndCut);
}
BEGIN_MESSAGE_MAP(CTJTDDlg, CDialog)
ON_BN_CLICKED(IDOK, &CTJTDDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_RADIO2, &CTJTDDlg::OnBnClickedRadio2)
ON_BN_CLICKED(IDC_RADIO1, &CTJTDDlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_BUTTON1, &CTJTDDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CTJTDDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON54, &CTJTDDlg::OnBnClickedButton54)
ON_BN_CLICKED(IDC_BUTTON55, &CTJTDDlg::OnBnClickedButton55)
END_MESSAGE_MAP()
BOOL CTJTDDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("通道"));
return TRUE;
}
void CTJTDDlg::OnBnClickedOk()
{
UpdateData();
if (m_nShape == 1)
{
m_dH = m_dW;
}
if (m_dH < 0.1 || m_dW < 0.1 || m_dL < 0.1)
{
AfxMessageBox(_T("通道尺寸太小!请重新输入尺寸!"));
return;
}
UIDataCache::Write(_T("%d%d%d%d%d%d%i"), _T("CTJTDDlg")
, &m_dH , &m_dW , &m_dL , &m_dT , &m_dA , &m_dE
, &m_nShape);
OnOK();
}
void CTJTDDlg::OnBnClickedRadio2()
{
UpdateData();
if (m_nShape == 1)
{
m_wndEditH.EnableWindow(TRUE);
}
else
{
m_wndEditH.EnableWindow(FALSE);
}
}
void CTJTDDlg::OnBnClickedRadio1()
{
UpdateData();
if (m_nShape == 0)
{
m_wndEditH.EnableWindow(TRUE);
}
else
{
m_wndEditH.EnableWindow(FALSE);
}
}
int CTJTDDlg::GetX3dPart( AecDbX3dPart*& pPart)
{
if (pPart != NULL)
{
pPart->RemoveAll3dSolidRec();
}
else
{
pPart = new AecDbX3dPart;
}
AcGePoint3d ptOrg;
ptOrg.set(0,0,m_dE);
double dAng = m_dA * PI / 180.0;
AcGeVector3d vtZ = AcGeVector3d::kXAxis;
vtZ.rotateBy(dAng,AcGeVector3d::kZAxis);
AcDbX3dSolid* pXSolid = NULL;
if (!m_sPoints.IsEmpty())//路径通道
{
//矩形 - L,W,t,H 长宽,厚度
//圆形 - r,t,H
pXSolid = new AcDbX3dSolid;
pXSolid->CreatePipe(ptOrg,m_sPoints,m_nShape,m_dW,m_dH,m_dT,m_dT,m_dT,m_vtLast,m_vtNext);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
}
else
{
if (m_nShape == 0)//矩形
{
//L,W,t,H 长宽,厚度
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kRectTube,ptOrg,vtZ,4,m_dW,m_dH,m_dT,m_dL);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
}
else//圆形
{
////r,t,H
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kPipe,ptOrg,vtZ,4,m_dW * 0.5,m_dT,m_dL);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
}
}
pPart->SetOrgPoint( ptOrg );
pPart->SetAxis(X,AcGeVector3d::kXAxis);
pPart->SetAxis(Y,AcGeVector3d::kYAxis);
pPart->SetAxis(Z,AcGeVector3d::kZAxis);
//序列化BIM数据
pPart->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
pPart->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
pPart->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
pPart->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT);
pPart->GetSpecialtyData()->SetAt(_T("m_dA"),m_dA);
pPart->GetSpecialtyData()->SetAt(_T("m_dE"),m_dE);
pPart->GetSpecialtyData()->SetAt(_T("m_nShape"),m_nShape);
pPart->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints);
pPart->GetSpecialtyData()->SetAt(_T("m_sVtStaCut"),m_sVtStaCut);
pPart->GetSpecialtyData()->SetAt(_T("m_sVtEndCut"),m_sVtEndCut);
pPart->GetSpecialtyData()->SetAt(_T("m_vtLast"),m_vtLast);
pPart->GetSpecialtyData()->SetAt(_T("m_vtNext"),m_vtNext);
pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
return TRUE;
}
void CTJTDDlg::OnBnClickedButton1()
{
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("通道"));
}
void CTJTDDlg::OnBnClickedButton4()
{
UpdateData();
EnableWindow(FALSE);
CWnd* pFrame = acedGetAcadFrame();
pFrame->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrame->SetFocus();
ads_point pt;
ads_name ent;
AcAxDocLock lock;
int nRes = acedEntSel(_T("\n请选择巷道路径线:"),ent,pt);
if (nRes == RTNORM)
{
AcDbObjectId id;
acdbGetObjectId(id,ent);
double dBulge = 0.0;
CString sText;
AcDbEntity* pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AcDbPolyline* pPl = AcDbPolyline::cast(pEnt);
if (pPl != NULL)
{
AcGePoint2d ptSta;
pPl->getPointAt(0,ptSta);
AcGeVector2d vtMove = ptSta.asVector();
vtMove.negate();
m_sPoints = _T("");
AcGePoint2d pt2d;
AcGePoint2dArray arPt2ds;
for (int i = 0;i < pPl->numVerts();i++)
{
pPl->getPointAt(i,pt2d);
pPl->getBulgeAt(i,dBulge);
pt2d += vtMove;
//if (arPt2ds.find(pt2d) == -1)
{
arPt2ds.append(pt2d);
sText.Format(_T("%g,%g@%g,"),pt2d.x,pt2d.y,dBulge);
m_sPoints += sText;
}
}
m_sPoints.TrimRight(_T(","));
}
else
{
acutPrintf(_T("\n选择的实体不是pline线!"));
}
pEnt->close();
}
}
pFrame->EnableWindow(FALSE);
ShowWindow(SW_SHOW);
EnableWindow(TRUE);
UpdateData(FALSE);
}
void CTJTDDlg::OnBnClickedButton54()
{
UpdateData();
EnableWindow(FALSE);
CWnd* pFrame = acedGetAcadFrame();
pFrame->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrame->SetFocus();
AcAxDocLock lock;
ads_point pt;
ads_name ent;
int nRes = acedEntSel(_T("\n请选择起点断面直线:"),ent,pt);
if (nRes == RTNORM)
{
AcDbObjectId id;
acdbGetObjectId(id,ent);
AcDbEntity* pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AcDbLine* pLn = AcDbLine::cast(pEnt);
if (pLn != NULL)
{
AcGeVector3d vt = pLn->endPoint() - pLn->startPoint();
vt.normalize();
m_vtLast = vt;
m_sVtStaCut.Format(_T("%g,%g,%g"),vt.x,vt.y,vt.z);
}
pEnt->close();
}
}
pFrame->EnableWindow(FALSE);
ShowWindow(SW_SHOW);
EnableWindow(TRUE);
UpdateData(FALSE);
}
void CTJTDDlg::OnBnClickedButton55()
{
UpdateData();
EnableWindow(FALSE);
CWnd* pFrame = acedGetAcadFrame();
pFrame->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrame->SetFocus();
AcAxDocLock lock;
ads_point pt;
ads_name ent;
int nRes = acedEntSel(_T("\n请选择终点断面直线:"),ent,pt);
if (nRes == RTNORM)
{
AcDbObjectId id;
acdbGetObjectId(id,ent);
AcDbEntity* pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AcDbLine* pLn = AcDbLine::cast(pEnt);
if (pLn != NULL)
{
AcGeVector3d vt = pLn->endPoint() - pLn->startPoint();
vt.normalize();
m_vtNext = vt;
m_sVtEndCut.Format(_T("%g,%g,%g"),vt.x,vt.y,vt.z);
}
pEnt->close();
}
}
pFrame->EnableWindow(FALSE);
ShowWindow(SW_SHOW);
EnableWindow(TRUE);
UpdateData(FALSE);
}