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

138 lines
4.7 KiB
C++

#pragma once
#include "resource.h"
#include <vector>
#include <map>
#include "GlwCAcUiDialog.h"
class TBuildInfomationDlg;
class TRedLine
{
friend TBuildInfomationDlg;
private:
AcDbObjectId m_id;
std::vector<AcGeLineSeg3d> m_RedSegs;
TGGePoly3D m_RedlinePoly, m_BacklinePoly, m_LightBuildPoly, m_BuildPoly;
std::vector<AcDbObjectId> m_colorLines;
AcGePoint3d m_ptCloses; // 退线方向边与退线最近边的交点
AcGePoint3d m_ptOther; // 退线方向边的另一点
AcGeVector3d m_vtCloses; // 最近边的方向,由m_ptCloses点指向最近边的另一点
AcGeVector3d m_vtOther; // 与方向边相交的另一边的方向,由 m_ptOther点指向另一点(具体看下图)
AcGeVector3d m_vtDirect; // 方向边方向,由 m_ptCloses指向m_ptOther
// 围成轻建筑曲线的主要三根线段,分别与退线的other,closes两线段平等,与direct线段重合
AcGeLineSeg3d m_segLightCloses;
AcGeLineSeg3d m_segLightOther;
AcGeLineSeg3d m_segLightDirect;
// 围成建筑曲线的主要四根线段
AcGeLineSeg3d m_segBuildCloses;
AcGeLineSeg3d m_segBuildOther;
AcGeLineSeg3d m_segBuildCloses1; // 与退线方向边平行
AcGeLineSeg3d m_segBuildOther1; // 与退线方向边平行
/************************************************************************
segOther segCloses
| |
^ | | ^
m_vtOther| | | | m_vtCloses
| |
|_______________________| segDirect
************************************************************************/
int m_idxDirect, m_idxCloses, m_idxOther; // 建筑物方向,建筑物靠近的边儿, 和与方向边相交的另一边(具体位置看上图)
int m_nUpAtuoNum; // 地上机动停车数量
int m_nUpBikeNum; // 地上非机动车数量
double m_dGreen; // 绿化率
double m_dVolume; // 容积率
double m_dBuildDensity; // 建筑密度
double m_dUpBuildArea; // 地上面积
double m_dDownBuildArea; // 地下面积
double m_dBacklineRed, m_dBacklineYellow, m_dBacklineGreen, m_dBacklineCyan,
m_dBacklineBlue, m_dBacklineMagenta, m_dBacklineWhite;// 退线长度
double m_dRedlineArea, m_dBackLineArea; // 场地红线面积,退线面积
double m_dFootLength; // 步行街长度
bool m_b3Floor; // 三层方案? 否为四层方案
AcGePoint3d m_ptInsertFootDim; // 插入步行街标注的位置
AcGePoint3d m_ptInsertLightDim1; // 插入轻资产标注的位置
AcGePoint3d m_ptInsertLightDim2; // 插入轻资产标注的位置
std::pair<AcGePoint3d, AcGePoint3d> m_DimA1;
std::pair<AcGePoint3d, AcGePoint3d> m_DimA2;
std::pair<AcGePoint3d, AcGePoint3d> m_DimB;
std::pair<AcGePoint3d, AcGePoint3d> m_DimH1;
std::pair<AcGePoint3d, AcGePoint3d> m_DimH2;
public:
TRedLine():m_id(AcDbObjectId::kNull), m_RedSegs(0), m_idxCloses(-1), m_idxDirect(-1), m_idxOther(-1),
m_nUpAtuoNum(0), m_nUpBikeNum(0), m_dGreen(.0), m_dVolume(.0), m_dBuildDensity(.0),
m_dUpBuildArea(.0), m_dDownBuildArea(.0), m_dBacklineRed(10.), m_dBacklineYellow(10.),
m_dBacklineGreen(10.), m_dBacklineCyan(10.), m_dBacklineBlue(10.), m_dBacklineMagenta(10.),
m_dBacklineWhite(10.), m_dRedlineArea(.0), m_dBackLineArea(.0), m_dFootLength(0.), m_b3Floor(false),
m_ptInsertLightDim1(AcGePoint3d::kOrigin), m_ptInsertFootDim(AcGePoint3d::kOrigin){}
public:
AcGeLineSeg3d GetBLDirectSeg();
AcGeLineSeg3d GetBLClosesSeg();
AcGeLineSeg3d GetBLOtherSeg();
void CalcBackLine();
double CalcNo3Step();
bool CalcNo4Step();
// 算出围成S1面积的曲线
bool CalcLightBuildPoly(const double &a, const double &h2, const double &S1, double &h1);
// 算出围成S2面积的曲线
bool CalcBuildPoly(const double &a, const double &h1, const double &h2, const double &S1, const double &S2, double &b);
void CalcCurtainPoly(const double &b, const double &h1);
void CalcDim();
private:
double GetBacklineValue(const int &idx);
AcGeLineSeg3d GetSegByIdx(const int &idx, const TGGePoly3D &poly);
};
class TBuildInfomationDlg : public CModelessDialog
{
DECLARE_DYNAMIC(TBuildInfomationDlg)
enum { IDD = IDD_DIALOG_DLWD};
public:
TBuildInfomationDlg(CWnd* pParent = NULL); // standard constructor
virtual ~TBuildInfomationDlg();
virtual BOOL OnInitDialog();
private:
void ShowBackLineCtrl();
void BeforSelectRedline();
void AfterSelectRedline();
void RemoveColorLine();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
afx_msg void OnBnClickedButtonSelect();
afx_msg void OnBnClickedButtonCalc();
afx_msg void OnDestroy();
afx_msg void OnClose();
afx_msg HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor);
afx_msg LONG_PTR OnAcadKeepFocus(UINT_PTR, LONG_PTR);
private:
TRedLine m_redline;
std::vector<CWnd*> m_cwnds;
public:
afx_msg void OnEnKillfocusEdit();
};