591 lines
14 KiB
C++
591 lines
14 KiB
C++
// MountRoofDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "MountRoofDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CMountRoofDlg, GlwCAcUiDialog)
|
|
double CMountRoofDlg::m_dElevation=0;
|
|
double CMountRoofDlg::m_dRoofHeight=_AS_SYS_UNIT(3000);
|
|
double CMountRoofDlg::m_dMountHeight=_AS_SYS_UNIT(1100);
|
|
double CMountRoofDlg::m_dSlopeAngle=45;
|
|
double CMountRoofDlg::m_dEavesLength=_AS_SYS_UNIT(600);
|
|
int CMountRoofDlg::m_nRoofType=0;
|
|
double CMountRoofDlg::m_dMountLength=0;
|
|
|
|
CMountRoofDlg::CMountRoofDlg(CWnd* pParent /*=NULL*/)
|
|
: CModelessDialog(CMountRoofDlg::IDD, pParent)
|
|
{
|
|
m_pRoof=NULL;
|
|
}
|
|
|
|
// CMountRoofDlg::~CMountRoofDlg()
|
|
// {
|
|
// }
|
|
|
|
void CMountRoofDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CModelessDialog::DoDataExchange(pDX);
|
|
// 建筑专业数据交换
|
|
DDX_Text(pDX, IDC_EDIT_ELEV, m_dElevation);
|
|
DDX_Text(pDX, IDC_EDIT_RHEIGHT, m_dRoofHeight);
|
|
DDX_Text(pDX, IDC_EDIT_MHEIGHT, m_dMountHeight);
|
|
DDX_Text(pDX, IDC_EDIT_ANGLE, m_dSlopeAngle);
|
|
DDX_Text(pDX, IDC_EDIT_LENGTH,m_dEavesLength);
|
|
DDX_Text(pDX, IDC_EDIT_MLENGTH,m_dMountLength);
|
|
DDX_Control(pDX,IDC_COMBO_TYPE,m_comboType);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMountRoofDlg, CModelessDialog)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_ELEV, OnKFEditElevation)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_RHEIGHT, OnKFEditRHeight)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_MHEIGHT, OnKFEditMHeight)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_ANGLE, OnKFEditSlopeAngle)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_LENGTH,OnKFEditEavesLength)
|
|
ON_EN_KILLFOCUS(IDC_EDIT_MLENGTH,OnKFEditMountLength)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_TYPE,OnSelChangeType)
|
|
|
|
ON_WM_CLOSE()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CMountRoofDlg 消息处理程序
|
|
BOOL CMountRoofDlg::OnInitDialog()
|
|
{
|
|
BOOL bRet=CModelessDialog::OnInitDialog();
|
|
if (m_pRoof==NULL)
|
|
{
|
|
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
|
|
|
|
CRect rect,rect1;
|
|
GetWindowRect(rect);
|
|
GetDlgItem(IDOK)->GetWindowRect(rect1);
|
|
rect.right = rect1.left+3;
|
|
MoveWindow(rect);
|
|
}
|
|
m_comboType.SetCurSel(m_nRoofType);
|
|
OnSelChangeType();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return bRet;
|
|
}
|
|
void CMountRoofDlg::OnKFEditElevation()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_ELEV)->GetWindowText(temp);
|
|
if (temp==_T("")||fabs(_tstof(temp))<_DIST_SNAP)
|
|
{
|
|
m_dElevation=0;
|
|
UpdateData(FALSE);
|
|
}
|
|
else
|
|
UpdateData();
|
|
}
|
|
void CMountRoofDlg::OnKFEditRHeight()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_RHEIGHT)->GetWindowText(temp);
|
|
if (temp==_T("")||_tstof(temp)<_DIST_SNAP)
|
|
UpdateData(FALSE);
|
|
else
|
|
UpdateData();
|
|
}
|
|
void CMountRoofDlg::OnKFEditMHeight()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_MHEIGHT)->GetWindowText(temp);
|
|
if (temp==_T("")||_tstof(temp)<_DIST_SNAP)
|
|
UpdateData(FALSE);
|
|
else
|
|
UpdateData();
|
|
}
|
|
void CMountRoofDlg::OnKFEditSlopeAngle()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_ANGLE)->GetWindowText(temp);
|
|
if (temp==_T("")||_tstof(temp)<_DIST_SNAP)
|
|
UpdateData(FALSE);
|
|
else
|
|
UpdateData();
|
|
}
|
|
void CMountRoofDlg::OnKFEditEavesLength()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_LENGTH)->GetWindowText(temp);
|
|
if (temp==_T(""))
|
|
UpdateData(FALSE);
|
|
else if (_tstof(temp)<_DIST_SNAP)
|
|
{
|
|
GetDlgItem(IDC_EDIT_LENGTH)->SetWindowText(_T("0"));
|
|
UpdateData();
|
|
}
|
|
else
|
|
UpdateData();
|
|
}
|
|
|
|
void CMountRoofDlg::OnKFEditMountLength()
|
|
{
|
|
CString temp;
|
|
GetDlgItem(IDC_EDIT_MLENGTH)->GetWindowText(temp);
|
|
if (temp==_T("")||_tstof(temp)<_DIST_SNAP)
|
|
UpdateData(FALSE);
|
|
else
|
|
UpdateData();
|
|
}
|
|
|
|
void CMountRoofDlg::OnSelChangeType()
|
|
{
|
|
CRect rect,rect1,rect2;
|
|
GetWindowRect(rect);
|
|
|
|
GetDlgItem(IDC_EDIT_RHEIGHT)->GetWindowRect(rect1);
|
|
m_nRoofType=m_comboType.GetCurSel();
|
|
BOOL bShowLen=TRUE,bShowHeight=TRUE,bEnableAngle=TRUE;
|
|
if (m_nRoofType==0) //歇山
|
|
{
|
|
bShowLen=FALSE;
|
|
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_SHOW);
|
|
}
|
|
else if (m_nRoofType==1) //四坡
|
|
{
|
|
bShowLen=FALSE;
|
|
bShowHeight=FALSE;
|
|
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_SHOW);
|
|
}
|
|
else if (m_nRoofType==2) //人字坡
|
|
{
|
|
bShowHeight=FALSE;
|
|
bEnableAngle=FALSE;
|
|
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_SHOW);
|
|
}
|
|
else //攒尖
|
|
{
|
|
bShowHeight=FALSE;
|
|
bShowLen=FALSE;
|
|
bShowLen=FALSE;
|
|
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_HIDE);
|
|
}
|
|
if (m_nRoofType==3)
|
|
{
|
|
GetDlgItem(IDC_EDIT_ANGLE)->GetWindowRect(rect2);
|
|
rect.bottom = rect2.top+4;
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_EDIT_ANGLE)->GetWindowRect(rect2);
|
|
rect.bottom = rect2.bottom+12;
|
|
}
|
|
MoveWindow(rect);
|
|
GetDlgItem(IDC_EDIT_MLENGTH)->ShowWindow(bShowLen?SW_SHOW:SW_HIDE);
|
|
GetDlgItem(IDC_STATIC_LENGTH)->ShowWindow(bShowLen?SW_SHOW:SW_HIDE);
|
|
GetDlgItem(IDC_EDIT_MHEIGHT)->ShowWindow(bShowHeight?SW_SHOW:SW_HIDE);
|
|
GetDlgItem(IDC_STATIC_HEIGHT)->ShowWindow(bShowHeight?SW_SHOW:SW_HIDE);
|
|
GetDlgItem(IDC_EDIT_ANGLE)->EnableWindow(bEnableAngle);
|
|
}
|
|
void CMountRoofDlg::OnOK()
|
|
{
|
|
if (m_pRoof)
|
|
{
|
|
m_pRoof->upgradeOpen();
|
|
m_pRoof->SetElevation(m_dElevation);
|
|
double dRoofHeight=m_dRoofHeight/*-m_pRoof->GetSlabThick()*/;
|
|
m_pRoof->SetRoofHeight(dRoofHeight);
|
|
if (m_nRoofType == 0) //歇山
|
|
{
|
|
m_pRoof->SetMountHeight(m_dMountHeight);
|
|
m_pRoof->SetSlopeAngle2(PI*m_dSlopeAngle/180.0);
|
|
}
|
|
else if (m_nRoofType == 1) //四坡
|
|
{
|
|
m_pRoof->SetMountHeight(0);
|
|
m_pRoof->SetSlopeAngle2(PI*m_dSlopeAngle/180.0);
|
|
}
|
|
else if (m_nRoofType == 2) //人字坡
|
|
{
|
|
m_pRoof->SetMountHeight(0);
|
|
m_pRoof->SetSlopeAngle2(PI*0.5);
|
|
m_pRoof->SetMountLen(m_dMountLength);
|
|
}
|
|
else //攒尖
|
|
{
|
|
m_pRoof->SetMountHeight(0);
|
|
m_pRoof->SetSlopeAngle2(atan(dRoofHeight*2/m_pRoof->GetLength()));
|
|
}
|
|
m_pRoof->SetEavesLen(m_dEavesLength);
|
|
if (m_pRoof->IsValid())
|
|
{
|
|
m_pRoof->downgradeOpen();
|
|
CModelessDialog::OnOK();
|
|
}
|
|
else
|
|
{
|
|
MessageBox(_T("屋顶高和侧坡角不合理,无法生成屋顶!"));
|
|
}
|
|
}
|
|
}
|
|
void CMountRoofDlg::OnClose()
|
|
{
|
|
if (!m_pRoof)
|
|
acedPostCommand(_T("\33"));
|
|
else
|
|
CModelessDialog::OnClose();
|
|
}
|
|
|
|
|
|
|
|
class CMountRoofJig: public AcEdJig
|
|
{
|
|
public:
|
|
CMountRoofJig(TDbMountRoof *pDrawEnt,AcGePoint3d ptBase);
|
|
~CMountRoofJig();
|
|
virtual DragStatus sampler();
|
|
virtual Adesk::Boolean update();
|
|
virtual AcDbEntity* entity() const;
|
|
void SetPrompt(const TCHAR *pTemp);
|
|
int GetRetCode() const;
|
|
int doIt();
|
|
|
|
int m_nRetCode; //返回码
|
|
|
|
int m_nPromptCounter;
|
|
const TCHAR *m_pszPrompt; //提示信息
|
|
AcGePoint3d m_point;
|
|
AcGePoint3d m_ptLoc,m_ptRightDown,m_ptRightUp;
|
|
TDbMountRoof *m_MountRoof;
|
|
CMountRoofDlg *m_dlg;
|
|
};
|
|
CMountRoofJig::CMountRoofJig(TDbMountRoof *pDrawEnt,AcGePoint3d ptBase)
|
|
{
|
|
m_MountRoof = pDrawEnt;
|
|
m_ptLoc = ptBase;
|
|
m_nPromptCounter=0;
|
|
}
|
|
CMountRoofJig::~CMountRoofJig()
|
|
{
|
|
}
|
|
void CMountRoofJig::SetPrompt(const TCHAR *pTemp)
|
|
{
|
|
m_pszPrompt = pTemp;
|
|
acutPrintf(pTemp);
|
|
}
|
|
int CMountRoofJig::GetRetCode() const
|
|
{
|
|
int ret = m_nRetCode;
|
|
if (ret == AcEdJig::kCancel)
|
|
ret = RTCAN;
|
|
else if (ret == AcEdJig::kNull)
|
|
ret = RTNONE;
|
|
else if (ret == AcEdJig::kNormal)
|
|
ret = RTNORM;
|
|
return ret;
|
|
}
|
|
int CMountRoofJig::doIt()
|
|
{
|
|
setDispPrompt(_T("\n点取主坡墙外皮的右下角点<返回>: "));
|
|
m_nRetCode = drag();
|
|
int nRet = GetRetCode();
|
|
|
|
if (nRet!=RTNORM)
|
|
return nRet;
|
|
m_nPromptCounter++; // now == 1
|
|
setDispPrompt(_T("\n点取主坡墙外皮的右上角点<返回>: "));
|
|
|
|
m_nRetCode = drag();
|
|
nRet = GetRetCode();
|
|
return nRet;
|
|
}
|
|
Adesk::Boolean CMountRoofJig::update()
|
|
{
|
|
m_MountRoof->SetElevation(m_dlg->m_dElevation);
|
|
m_MountRoof->SetRoofHeight(m_dlg->m_dRoofHeight/*-m_MountRoof->GetSlabThick()*/);
|
|
m_MountRoof->SetEavesLen(m_dlg->m_dEavesLength);
|
|
if (m_dlg->m_nRoofType==0) //歇山
|
|
{
|
|
m_MountRoof->SetMountHeight(m_dlg->m_dMountHeight);
|
|
m_MountRoof->SetSlopeAngle2(PI*m_dlg->m_dSlopeAngle/180.0);
|
|
}
|
|
else if (m_dlg->m_nRoofType==1) //四坡
|
|
{
|
|
m_MountRoof->SetMountHeight(0);
|
|
m_MountRoof->SetSlopeAngle2(PI*m_dlg->m_dSlopeAngle/180.0);
|
|
}
|
|
else if (m_dlg->m_nRoofType==2) //人字坡
|
|
{
|
|
m_MountRoof->SetMountHeight(0);
|
|
m_MountRoof->SetSlopeAngle2(PI*0.5);
|
|
m_MountRoof->SetMountLen(m_dlg->m_dMountLength);
|
|
}
|
|
else //攒尖
|
|
{
|
|
m_MountRoof->SetMountHeight(0);
|
|
//m_MountRoof->SetSlopeAngle2(PI*m_dlg->m_dSlopeAngle/180.0);
|
|
}
|
|
|
|
switch (m_nPromptCounter)
|
|
{
|
|
case 0:
|
|
{
|
|
AcGePoint3d pt1,pt2;
|
|
pt1=m_ptRightDown;
|
|
pt2=m_ptLoc;
|
|
pt1.z=pt2.z=0;
|
|
XVector3D vtRot=pt1-pt2;
|
|
vtRot.z=0;
|
|
double rot=CT_std_angle(ads_angle(XPoint(),vtRot)-ads_angle(XPoint(),XVector3D(1,0,0)));
|
|
m_MountRoof->SetRotation(rot);
|
|
double length=pt1.distanceTo(pt2);
|
|
m_MountRoof->SetLength(length);
|
|
m_MountRoof->SetWidth(length*0.5);
|
|
if (m_dlg->m_nRoofType==3&&length>0)
|
|
{
|
|
//modify by xlc on 090226
|
|
//m_MountRoof->SetSlopeAngle2(atan(m_dlg->m_dRoofHeight*2.0/length));
|
|
m_MountRoof->SetSlopeAngle2(atan(m_MountRoof->GetRoofHeight()*2.0/length));
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
{
|
|
AcGeVector3d offset=m_ptRightUp-m_ptRightDown;
|
|
XVector3D vtOffset=m_ptRightUp-m_ptRightDown;
|
|
vtOffset.z = 0;
|
|
double nVtRot=CT_std_angle(ads_angle(XPoint(), vtOffset)-m_MountRoof->GetRotation());
|
|
double nIncLen=ads_distance(XPoint(), vtOffset) * sin(nVtRot);
|
|
|
|
if (nIncLen>_DIST_SNAP)
|
|
{
|
|
m_MountRoof->SetWidth(nIncLen);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
return Adesk::kTrue;
|
|
}
|
|
|
|
AcEdJig::DragStatus CMountRoofJig::sampler()
|
|
{
|
|
DragStatus stat;
|
|
setUserInputControls((UserInputControls)
|
|
(AcEdJig::kAccept3dCoordinates |AcEdJig::kNullResponseAccepted));
|
|
AcGePoint3d m_Temp;
|
|
if (m_nPromptCounter == 0)
|
|
{
|
|
static AcGePoint3d ptTemp;
|
|
stat = acquirePoint(m_ptRightDown,m_ptLoc);
|
|
if (ptTemp != m_ptRightDown)
|
|
ptTemp = m_ptRightDown;
|
|
else if (stat == AcEdJig::kNormal)
|
|
return AcEdJig::kNoChange;
|
|
}
|
|
else if (m_nPromptCounter == 1)
|
|
{
|
|
static AcGePoint3d ptTemp2;
|
|
stat = acquirePoint(m_ptRightUp,m_ptRightDown);
|
|
if (ptTemp2 != m_ptRightUp)
|
|
ptTemp2 = m_ptRightUp;
|
|
else if (stat == AcEdJig::kNormal)
|
|
return AcEdJig::kNoChange;
|
|
}
|
|
return stat;
|
|
}
|
|
AcDbEntity* CMountRoofJig::entity() const
|
|
{
|
|
return (AcDbEntity*)m_MountRoof;
|
|
}
|
|
|
|
|
|
|
|
//歇山屋顶
|
|
void MountRoof()
|
|
{
|
|
CMountRoofDlg dlg;
|
|
CAcModuleResourceOverride vTemp;
|
|
dlg.Create(CMountRoofDlg::IDD,acedGetAcadFrame());
|
|
dlg.ShowWindow(SW_SHOW);
|
|
acedGetAcadDwgView()->SetFocus();
|
|
for (int i=0;;i++)
|
|
{
|
|
XPoint ptLoc;
|
|
if (acedGetPoint(NULL,_T("\n点取主坡墙外皮的左下角点<退出>:"),ptLoc)!=RTNORM)
|
|
{
|
|
break;
|
|
}
|
|
TDbMountRoof *pRoof=new TDbMountRoof;
|
|
pRoof->SetShowSide(FALSE);
|
|
pRoof->SetLocation(Ucs2Wcs(ptLoc));
|
|
pRoof->setLayer(InitLayer(LAY_ROOF));
|
|
CMountRoofJig jig(pRoof,Ucs2Wcs(ptLoc));
|
|
|
|
dlg.UpdateData();
|
|
jig.m_dlg= &dlg;
|
|
|
|
//add by xlc on 090505 06以下平台资源冲突
|
|
CAcModuleResourceOverride resOverride(acedGetAcadResourceInstance());
|
|
|
|
if (jig.doIt() == RTNORM&&pRoof->IsValid())
|
|
{
|
|
pRoof->AddToMSpace(Adesk::kTrue);
|
|
}
|
|
else
|
|
{
|
|
if (pRoof != NULL)
|
|
delete pRoof;
|
|
}
|
|
}
|
|
|
|
if (::IsWindow(dlg.m_hWnd))
|
|
dlg.DestroyWindow();
|
|
}
|
|
|
|
// 歇山屋顶 for TSun8 090914
|
|
void MountRoof2()
|
|
{
|
|
static double dElevation = 24000;
|
|
static double dEavesLength = 0;
|
|
static double dRoofHeight = 3000;
|
|
static double dMountHeight = 1100;
|
|
static double dMountLength = 0;
|
|
|
|
CMountRoofDlg dlg;
|
|
CAcModuleResourceOverride vTemp;
|
|
dlg.Create(CMountRoofDlg::IDD,acedGetAcadFrame());
|
|
|
|
dlg.m_dEavesLength = _AS_SYS_UNIT(dEavesLength);
|
|
dlg.m_dElevation = _AS_SYS_UNIT(dElevation);
|
|
dlg.m_dRoofHeight = _AS_SYS_UNIT(dRoofHeight);
|
|
dlg.m_dMountHeight = _AS_SYS_UNIT(dMountHeight);
|
|
dlg.m_dMountLength = _AS_SYS_UNIT(dMountLength);
|
|
dlg.UpdateData(FALSE);
|
|
|
|
dlg.ShowWindow(SW_SHOW);
|
|
acedGetAcadDwgView()->SetFocus();
|
|
for (int i=0;;i++)
|
|
{
|
|
XPoint ptLoc;
|
|
if (acedGetPoint(NULL,_T("\n点取主坡墙外皮的左下角点<退出>:"),ptLoc)!=RTNORM)
|
|
{
|
|
break;
|
|
}
|
|
TDbMountRoof *pRoof=new TDbMountRoof;
|
|
pRoof->SetShowSide(FALSE);
|
|
pRoof->SetLocation(Ucs2Wcs(ptLoc));
|
|
pRoof->setLayer(InitLayer(LAY_ROOF));
|
|
CMountRoofJig jig(pRoof,Ucs2Wcs(ptLoc));
|
|
jig.m_dlg= &dlg;
|
|
|
|
//add by xlc on 090505 06以下平台资源冲突
|
|
CAcModuleResourceOverride resOverride(acedGetAcadResourceInstance());
|
|
|
|
if (jig.doIt() == RTNORM&&pRoof->IsValid())
|
|
{
|
|
dElevation = _AS_MM(dlg.m_dElevation);
|
|
dEavesLength = _AS_MM(dlg.m_dEavesLength);
|
|
dRoofHeight = _AS_MM(dlg.m_dRoofHeight);
|
|
dMountHeight = _AS_MM(dlg.m_dMountHeight);
|
|
dMountLength = _AS_MM(dlg.m_dMountLength);
|
|
|
|
pRoof->AddToMSpace(Adesk::kTrue);
|
|
}
|
|
else
|
|
{
|
|
if (pRoof != NULL)
|
|
delete pRoof;
|
|
}
|
|
}
|
|
|
|
if (::IsWindow(dlg.m_hWnd))
|
|
dlg.DestroyWindow();
|
|
}
|
|
|
|
|
|
int EditMountRoof(AcDbObjectId id_MountRoof)
|
|
{
|
|
XDbObject obj(id_MountRoof,AcDb::kForWrite);
|
|
TDbMountRoof *pRoof = NULL;
|
|
if (!!obj)
|
|
pRoof = TDbMountRoof::cast(obj.m_pObject);
|
|
if (!pRoof)
|
|
return RTERROR;
|
|
|
|
double dEavesLength=pRoof->GetEavesLen();
|
|
double dRoofHeight=pRoof->GetRoofHeight();
|
|
double dMountHeight=pRoof->GetMountHeight();
|
|
double dSlopeAngle=pRoof->GetSlopeAngle2();
|
|
double dElevation=pRoof->GetElevation();
|
|
|
|
CAcModuleResourceOverride vTemp;
|
|
CMountRoofDlg dlg;
|
|
dlg.m_pRoof = pRoof;
|
|
dlg.m_dEavesLength=dEavesLength;
|
|
dlg.m_dRoofHeight=dRoofHeight/*+pRoof->GetSlabThick()*/;
|
|
if (fabs(dMountHeight)<_DIST_SNAP)
|
|
{
|
|
dlg.m_dMountHeight=dRoofHeight*0.5;
|
|
}
|
|
else
|
|
{
|
|
dlg.m_dMountHeight=dMountHeight;
|
|
}
|
|
CString strAngle;
|
|
strAngle.Format(_T("%.3f"),dSlopeAngle*180.0/PI);
|
|
if (fabs(cos(dSlopeAngle))<1E-3)
|
|
{
|
|
dlg.m_dSlopeAngle=45;
|
|
}
|
|
else
|
|
{
|
|
dlg.m_dSlopeAngle=::_tstof(strAngle);
|
|
}
|
|
dlg.m_dElevation=dElevation;
|
|
|
|
if (fabs(dRoofHeight-dMountHeight)<_DIST_SNAP
|
|
||fabs(cos(dSlopeAngle))<1E-3)
|
|
{
|
|
dlg.m_nRoofType=2;
|
|
}
|
|
else if (dMountHeight<_DIST_SNAP)
|
|
{
|
|
if (fabs(dRoofHeight/tan(dSlopeAngle)-pRoof->GetLength()*0.5)<_DIST_SNAP)
|
|
{
|
|
dlg.m_nRoofType=3;
|
|
}
|
|
else
|
|
{
|
|
dlg.m_nRoofType=1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dlg.m_nRoofType=0;
|
|
}
|
|
if (dlg.DoModal() ==IDOK)
|
|
{
|
|
ads_redraw(NULL,NULL);
|
|
}
|
|
else
|
|
{
|
|
pRoof->upgradeOpen();
|
|
pRoof->SetElevation(dElevation);
|
|
pRoof->SetRoofHeight(dRoofHeight);
|
|
pRoof->SetMountHeight(dMountHeight);
|
|
pRoof->SetEavesLen(dEavesLength);
|
|
pRoof->SetElevation(dElevation);
|
|
pRoof->SetSlopeAngle2(dSlopeAngle);
|
|
pRoof->Close();
|
|
ads_redraw(NULL,NULL);
|
|
}
|
|
return RTNORM;
|
|
}
|
|
|
|
|