138 lines
4.7 KiB
C++
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();
|
|
};
|