1880 lines
46 KiB
C++
1880 lines
46 KiB
C++
#include "stdafx.h"
|
||
#include "Resource.h"
|
||
#include "LineStairDlg.h"
|
||
#include "ArcStairdlg.h"
|
||
#include "CurveStairdlg.h"
|
||
#include "RectStairdlg.h"
|
||
#include "DbMultiStair.h"
|
||
// [9/28/2007 nsh]
|
||
#include "LineStairCreateDlg.h"
|
||
#include "rectstaircreatedlg.h"
|
||
#include "ArcStairCreateDlg.h"
|
||
#include "CrossStairDlg.h"
|
||
#include "aduifileDialog.h"
|
||
#include "parallelstairdlg.h"
|
||
#include "scissorsstairdlg.h"
|
||
#include "cornerstairdlg.h"
|
||
#include "doublemulstairdlg.h"
|
||
#include "TriangleStairDlg.h"
|
||
#include "rectcornerstairdlg.h"
|
||
#include "autostairdlg.h"
|
||
// 2010-3-15 16:48 wubo
|
||
// 移植Geo
|
||
// extern GEOAPI int DragPickSet(PickSet &ss, XPoint &ptBase);
|
||
|
||
// [9/28/2007 nsh]
|
||
extern void GetDist_();
|
||
extern void GetInsideR();
|
||
extern void GetOutsideR();
|
||
extern void GetStartAngle();
|
||
extern void GetStairSpace();
|
||
extern void GetStep();
|
||
///////////////////////////////////////////
|
||
// Command: 梯段
|
||
// 必须在WCS下
|
||
void RectStair()
|
||
{
|
||
// CRectStairDlg dlg(acedGetAcadFrame());
|
||
//dlg.m_bCreate=TRUE;
|
||
// {
|
||
// CAcModuleResourceOverride vTemp;
|
||
// if (dlg.DoModal() != IDOK) {
|
||
// return;
|
||
// }
|
||
// }
|
||
// TDbRectStair *pStep = new TDbRectStair;
|
||
// pStep->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
// pStep->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
//dlg.Dlg2Obj(pStep);
|
||
//
|
||
// CPoint ptCursor;
|
||
// XPoint ptLoc;
|
||
// if (GetCursorPos(&ptCursor)) {
|
||
// acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
// acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
// ptLoc=Wcs2Ucs(ptLoc);
|
||
// }
|
||
// pStep->SetLocation(Ucs2Wcs(ptLoc));
|
||
|
||
// XVector3D vtRot(1,0,0);
|
||
// vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
// pStep->SetRotation(ads_angle(XPoint(), vtRot));
|
||
// AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
// ASSERT(!!idLast);
|
||
// OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
// if (pEnt)
|
||
// pEnt->draw();
|
||
// OPENOBJ_END();
|
||
// PickSet ss(SS_FREE);
|
||
// ss += idLast;
|
||
// if (DragPickSet(ss, ptLoc)!=RTNORM)
|
||
//{
|
||
// ss.Redraw(1);
|
||
// ss.Delete();
|
||
// }
|
||
//else
|
||
//{
|
||
// pStep=NULL;
|
||
// acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
// if (pStep!=NULL)
|
||
// {
|
||
// //add by xlc on 070803
|
||
// //解决标高不正确问题
|
||
// ptLoc = Ucs2Wcs(ptLoc);
|
||
// pStep->upgradeOpen();
|
||
// pStep->SetElevation(ptLoc.z);
|
||
// pStep->downgradeOpen();
|
||
|
||
// TDbSymbArrow* pArrowUp=NULL,*pArrowDown=NULL;
|
||
// pStep->GetDefaultArrow(pArrowUp,pArrowDown);
|
||
// if (pArrowUp!=NULL)
|
||
// {
|
||
// pArrowUp->SetLayoutRotation(Ucs2Wcs(0));
|
||
// pArrowUp->AddToMSpace(Adesk::kTrue);
|
||
// }
|
||
// if (pArrowDown!=NULL)
|
||
// {
|
||
// pArrowDown->SetLayoutRotation(Ucs2Wcs(0));
|
||
// pArrowDown->AddToMSpace(Adesk::kTrue);
|
||
// }
|
||
// pStep->close();
|
||
// }
|
||
//}
|
||
// ----------------------------- [9/28/2007 nsh]
|
||
CAcModuleResourceOverride vTemp;
|
||
CRectStairCreateDlg *dlg=new CRectStairCreateDlg(acedGetAcadFrame());
|
||
dlg->Create(IDD_RECTSTAIR1,acedGetAcadFrame());
|
||
|
||
//add by xlc on 090522 在屏幕菜单处点击命令后直接ESC不退出
|
||
acedGetAcadDwgView()->SetFocus();
|
||
|
||
CRectStairCreateDlg::m_pSelfRSC=dlg;
|
||
while(CRectStairCreateDlg::m_pSelfRSC!=NULL && CRectStairCreateDlg::m_pSelfRSC->GetSafeHwnd()!=NULL)
|
||
{
|
||
GetStairSpace();
|
||
GetStep();
|
||
TDbRectStair *pStep = new TDbRectStair;
|
||
pStep->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pStep->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
|
||
// add by xlc on 080701
|
||
pStep->SetLayerText(InitLayer(LAY_TEXT));
|
||
pStep->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pStep->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
|
||
dlg->Dlg2Obj(pStep);
|
||
CPoint ptCursor;
|
||
XPoint ptLoc;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
pStep->SetLocation(Ucs2Wcs(ptLoc));
|
||
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pStep->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pStep->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
int i=0;
|
||
PickSet ss(SS_FREE);
|
||
ss += idLast;
|
||
i=DragPickSet(ss,ptLoc);
|
||
if (i!=RTNORM)
|
||
{
|
||
//以下判断语句,是检查是否响应用户操作的事件,例如ESC/Space/Right Button of Mouse/Enter等,如果是用户的输入操作
|
||
//则退出“数跑楼梯”命令,如果AutoCAD自身内部发出的取消命令,则执行其他相关操作,不退出“双跑楼梯”命令,
|
||
//主要的内部可能发出的 取消命令的多用了标记,如下:m_bESCStairWidth-梯段宽度,m_bESCStepWidth-踏步宽度,m_bUpdateEdit-执行
|
||
//UpdateEdit函数的时候发出命令。
|
||
//{----------
|
||
if (i=RTCAN)
|
||
{
|
||
//对ESC键的处理过程
|
||
if (CRectStairCreateDlg::m_bESCStairWidth||CRectStairCreateDlg::m_bESCStepWidth||CRectStairCreateDlg::m_bUpdateEdit)
|
||
{
|
||
if (CRectStairCreateDlg::m_bESCStairWidth==TRUE)
|
||
{
|
||
CRectStairCreateDlg::m_bESCStairWidth=FALSE;
|
||
}
|
||
else if (CRectStairCreateDlg::m_bESCStepWidth==TRUE)
|
||
{
|
||
CRectStairCreateDlg::m_bESCStepWidth=FALSE;
|
||
}
|
||
else if (CRectStairCreateDlg::m_bUpdateEdit==TRUE)
|
||
{
|
||
CRectStairCreateDlg::m_bUpdateEdit =FALSE;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
}
|
||
}
|
||
if (i==RTNONE)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
}
|
||
//}------------
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
else
|
||
{
|
||
pStep=NULL;
|
||
acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
if (pStep!=NULL)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStep->upgradeOpen();
|
||
pStep->SetElevation(ptLoc.z);
|
||
pStep->downgradeOpen();
|
||
|
||
// del by xlc on 080701
|
||
/*
|
||
TDbSymbArrow* pArrowUp=NULL,*pArrowDown=NULL;
|
||
pStep->GetDefaultArrow(pArrowUp,pArrowDown);
|
||
if (pArrowUp!=NULL)
|
||
{
|
||
pArrowUp->SetLayoutRotation(Ucs2Wcs(0));
|
||
pArrowUp->AddToMSpace(Adesk::kTrue);
|
||
}
|
||
if (pArrowDown!=NULL)
|
||
{
|
||
pArrowDown->SetLayoutRotation(Ucs2Wcs(0));
|
||
pArrowDown->AddToMSpace(Adesk::kTrue);
|
||
}*/
|
||
pStep->close();
|
||
}
|
||
}
|
||
pStep=NULL;
|
||
}
|
||
dlg->DestroyWindow();
|
||
}
|
||
|
||
|
||
|
||
// Command:编辑矩形两跑楼梯
|
||
int EditRectStair(AcDbObjectId id)
|
||
{
|
||
/*
|
||
int cmddia=0;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
if (!cmddia)
|
||
return EditRectStair(id);
|
||
*/
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbRectStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
// int ret;
|
||
|
||
CAcModuleResourceOverride vTemp;
|
||
CRectStairCreateDlg Dlg(acedGetAcadFrame());
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
// Dlg.Obj2Dlg(pStep);
|
||
// {
|
||
//
|
||
// ret = Dlg.DoModal();
|
||
// if (ret != IDOK)
|
||
// return RTERROR;
|
||
// }
|
||
// if (pStep->upgradeOpen()!=Acad::eOk)
|
||
// return RTERROR;
|
||
// pStep->assertWriteEnabled();
|
||
// Dlg.Dlg2Obj(pStep);
|
||
//
|
||
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
|
||
TDbRectStair *pView=(TDbRectStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
Dlg.Obj2Dlg(pView);
|
||
// pStep->downgradeOpen();
|
||
|
||
if (Dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
Dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
|
||
delete pView;
|
||
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
|
||
|
||
///////////////////////////////////////////
|
||
// Command: 梯段
|
||
// 必须在WCS下
|
||
void LineStair()
|
||
{
|
||
//CLineStairDlg dlg(acedGetAcadFrame());
|
||
//dlg.m_bCreate=TRUE;
|
||
// {
|
||
// CAcModuleResourceOverride vTemp;
|
||
// if (dlg.DoModal() != IDOK)
|
||
// return;
|
||
// }
|
||
// TDbLineStair *pStep = new TDbLineStair;
|
||
//dlg.Dlg2Obj(pStep);
|
||
//
|
||
|
||
// CPoint ptCursor;
|
||
// XPoint ptLoc;
|
||
// if (GetCursorPos(&ptCursor)) {
|
||
// acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
// acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
// ptLoc=Wcs2Ucs(ptLoc);
|
||
// }
|
||
// ptLoc.z = pStep->GetElevation();
|
||
// pStep->SetLocation(Ucs2Wcs(ptLoc));
|
||
|
||
// XVector3D vtRot(1,0,0);
|
||
// vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
// pStep->SetRotation(ads_angle(XPoint(), vtRot));
|
||
// AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
// ASSERT(!!idLast);
|
||
// OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
// if (pEnt)
|
||
// pEnt->draw();
|
||
// OPENOBJ_END();
|
||
// PickSet ss(SS_FREE);
|
||
// ss += idLast;
|
||
// if (DragPickSet(ss, ptLoc)!=RTNORM) {
|
||
// ss.Redraw(1);
|
||
// ss.Delete();
|
||
// }
|
||
//
|
||
////add by xlc on 070803
|
||
////解决标高不正确问题
|
||
//else
|
||
//{
|
||
// pStep=NULL;
|
||
// acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
// if (pStep!=NULL)
|
||
// {
|
||
// ptLoc = Ucs2Wcs(ptLoc);
|
||
// pStep->upgradeOpen();
|
||
// pStep->SetElevation(ptLoc.z);
|
||
// pStep->downgradeOpen();
|
||
// pStep->close();
|
||
// }
|
||
//}
|
||
|
||
|
||
// [9/28/2007 nsh]
|
||
CAcModuleResourceOverride vTemp;
|
||
CLineStairCreateDlg *dlg=new CLineStairCreateDlg(IDD_LINESTAIR1,acedGetAcadFrame());
|
||
|
||
dlg->Create(IDD_LINESTAIR1,acedGetAcadFrame());
|
||
|
||
//add by xlc on 090522 在屏幕菜单处点击命令后直接ESC不退出
|
||
acedGetAcadDwgView()->SetFocus();
|
||
|
||
CLineStairCreateDlg::pSelfCSC =dlg;
|
||
//while循环开始
|
||
while(CLineStairCreateDlg::pSelfCSC!=NULL && CLineStairCreateDlg::pSelfCSC->GetSafeHwnd()!=NULL)
|
||
{
|
||
|
||
GetDist_();
|
||
TDbLineStair *pStep = new TDbLineStair;
|
||
dlg->Dlg2Obj(pStep);
|
||
//CLineStairCreateDlg::pStepTest=pStep;
|
||
CPoint ptCursor;
|
||
XPoint ptLoc;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pStep->GetElevation();
|
||
pStep->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pStep->SetRotation(ads_angle(XPoint(), vtRot));
|
||
AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
PickSet ss(SS_FREE);
|
||
ss += idLast;
|
||
int i=0;
|
||
i=DragPickSet(ss,ptLoc);
|
||
if (i!=RTNORM)
|
||
{
|
||
//以下是对程序的是否响应用户按下的ESC/Space/Enter/Right Button of Mouse的操作所发出的取消指令,
|
||
//如果判断到m_bUpdateEdit & m_bPickSW为正确,说明不是用户发送的取消指令,而是程序本身与AutoCAD的
|
||
//通讯所发出的取消指令,所以“直线梯段”命令继续执行而不是退出。否则退出“直线梯段”命令。
|
||
//{--------
|
||
if (i==RTCAN)
|
||
{
|
||
if (CLineStairCreateDlg::m_bUpdateEdit || CLineStairCreateDlg::m_bPickSW)
|
||
{
|
||
if (CLineStairCreateDlg::m_bUpdateEdit==TRUE)
|
||
{
|
||
CLineStairCreateDlg::m_bUpdateEdit=FALSE;
|
||
}
|
||
else if (CLineStairCreateDlg::m_bPickSW==TRUE)
|
||
{
|
||
CLineStairCreateDlg::m_bPickSW=FALSE;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
|
||
}
|
||
}
|
||
if (i==RTNONE)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
}
|
||
//}---------
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
else
|
||
{
|
||
pStep=NULL;
|
||
|
||
acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
if (pStep!=NULL)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStep->upgradeOpen();
|
||
pStep->SetElevation(ptLoc.z);
|
||
pStep->downgradeOpen();
|
||
pStep->close();
|
||
}
|
||
}
|
||
pStep=NULL;
|
||
}//while循环结束
|
||
dlg->DestroyWindow();
|
||
}
|
||
|
||
|
||
///////////////////////////////////////////
|
||
// Command: 梯段
|
||
// 必须在WCS下
|
||
void ArcStair()
|
||
{
|
||
// XPoint ptCen;
|
||
//
|
||
// CArcStairDlg dlg(acedGetAcadFrame());
|
||
// dlg.m_bCreate=TRUE;
|
||
// {
|
||
// CAcModuleResourceOverride tVar;
|
||
// if (dlg.DoModal()!= IDOK) {
|
||
// return;
|
||
// }
|
||
// }
|
||
// TDbArcStair *pStep = new TDbArcStair;
|
||
// dlg.Dlg2Obj(pStep);
|
||
//
|
||
// CPoint ptCursor;
|
||
// XPoint ptLoc;
|
||
// if (GetCursorPos(&ptCursor)) {
|
||
// acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
// acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
// ptLoc=Wcs2Ucs(ptLoc);
|
||
// }
|
||
// ptLoc.z = pStep->GetElevation();
|
||
// pStep->SetCenter(Ucs2Wcs(ptLoc));
|
||
// AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
// ASSERT(!!idLast);
|
||
// OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
// if (pEnt)
|
||
// pEnt->draw();
|
||
// OPENOBJ_END();
|
||
// PickSet ss(SS_FREE);
|
||
// ss += idLast;
|
||
// if (DragPickSet(ss, ptLoc)!=RTNORM) {
|
||
// ss.Redraw(1);
|
||
// ss.Delete();
|
||
// }
|
||
//
|
||
// //add by xlc on 070803
|
||
// //解决标高不正确问题
|
||
// else
|
||
// {
|
||
// pStep=NULL;
|
||
// acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
// if (pStep!=NULL)
|
||
// {
|
||
// ptLoc = Ucs2Wcs(ptLoc);
|
||
// pStep->upgradeOpen();
|
||
// pStep->SetElevation(ptLoc.z);
|
||
// pStep->downgradeOpen();
|
||
// pStep->close();
|
||
// }
|
||
// }
|
||
//--------------------------
|
||
// [9/28/2007 nsh]
|
||
//--------------------------
|
||
CAcModuleResourceOverride vTemp;
|
||
CArcStairCreateDlg * dlg=new CArcStairCreateDlg(acedGetAcadFrame());
|
||
dlg->Create(IDD_ARCSTAIR1,acedGetAcadFrame());
|
||
|
||
//add by xlc on 090522 在屏幕菜单处点击命令后直接ESC不退出
|
||
acedGetAcadDwgView()->SetFocus();
|
||
|
||
CArcStairCreateDlg::p_selfARC=dlg;
|
||
while(CArcStairCreateDlg::p_selfARC!=NULL && CArcStairCreateDlg::p_selfARC->GetSafeHwnd()!=NULL)
|
||
{
|
||
GetInsideR();
|
||
GetOutsideR();
|
||
GetStartAngle();
|
||
TDbArcStair *pStep = new TDbArcStair;
|
||
dlg->Dlg2Obj(pStep);
|
||
|
||
CPoint ptCursor;
|
||
XPoint ptLoc;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pStep->GetElevation();
|
||
pStep->SetCenter(Ucs2Wcs(ptLoc));
|
||
AcDbObjectId idLast=pStep->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
PickSet ss(SS_FREE);
|
||
ss += idLast;
|
||
int i=DragPickSet(ss, ptLoc);
|
||
if (i!=RTNORM) {
|
||
//此段代码的作用是圆弧梯段中,判断是否是ESC/Space/Enter/Right Button of Mouse发出的取消命令,是则退出“圆弧梯段”命令,如果判断
|
||
//判断m_bAng or m_bUpdateEdit or m_bPRI or m_bPRO任意一个为TRUE的情况下,说明为程序内部自身发出的命令,当前命令不退出,而是执行
|
||
//相关的操作。
|
||
//{--------------------
|
||
if (i==RTCAN)
|
||
{
|
||
if (CArcStairCreateDlg::m_bAng || CArcStairCreateDlg::m_bUpdateEdit || CArcStairCreateDlg::m_bPRI || CArcStairCreateDlg::m_bPRO)
|
||
{
|
||
if (CArcStairCreateDlg::m_bAng == TRUE)
|
||
{
|
||
CArcStairCreateDlg::m_bAng =FALSE;
|
||
}
|
||
else if (CArcStairCreateDlg::m_bUpdateEdit==TRUE)
|
||
{
|
||
CArcStairCreateDlg::m_bUpdateEdit=FALSE;
|
||
}
|
||
else if (CArcStairCreateDlg::m_bPRI==TRUE)
|
||
{
|
||
CArcStairCreateDlg::m_bPRI = FALSE;
|
||
}
|
||
else if (CArcStairCreateDlg::m_bPRO == TRUE)
|
||
{
|
||
CArcStairCreateDlg::m_bPRO=FALSE;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
|
||
}
|
||
}
|
||
if (i==RTNONE)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
break;
|
||
}
|
||
//}---------------------
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
else
|
||
{
|
||
pStep=NULL;
|
||
acdbOpenObject(pStep,idLast,AcDb::kForRead);
|
||
if (pStep!=NULL)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStep->upgradeOpen();
|
||
pStep->SetElevation(ptLoc.z);
|
||
pStep->downgradeOpen();
|
||
pStep->close();
|
||
}
|
||
}
|
||
pStep=NULL;
|
||
}
|
||
dlg->DestroyWindow();
|
||
}
|
||
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////
|
||
///////////////////////////////////////////
|
||
// Command: 任意梯段
|
||
// 必须在WCS下
|
||
void CurveStair()
|
||
{
|
||
/* int cmddia=0;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
static int nStepNum=10;
|
||
static double nStepHeight=150;
|
||
*/
|
||
RBList rbMask(RTDXF0, _T("LINE,ARC"), NULL);
|
||
Entity lEnt, rEnt;
|
||
if (SelectEntity(_T("\n请点取梯段左侧边线(LINE/ARC): "), lEnt, rbMask)!=RTNORM ||
|
||
rEnt.FilterSelect(_T("\n请点取梯段右侧边线(LINE/ARC): "), rbMask)!=RTNORM)
|
||
return;
|
||
|
||
XCurveSegment lCurve(lEnt), rCurve(rEnt);
|
||
XDirectionCurve lCurve0, rCurve0;
|
||
if (lCurve.OnWhichSide(rCurve.MidPoint())==OFFSET_RIGHT)
|
||
(XCurveSegment &)lCurve0=lCurve;
|
||
else
|
||
lCurve0=XDirectionCurve(lCurve.EndPoint(), lCurve.StartPoint(), -lCurve.GetBulge());
|
||
if (rCurve.OnWhichSide(lCurve.MidPoint())==OFFSET_LEFT)
|
||
(XCurveSegment &)rCurve0=rCurve;
|
||
else
|
||
rCurve0=XDirectionCurve(rCurve.EndPoint(), rCurve.StartPoint(), -rCurve.GetBulge());
|
||
|
||
/* if (!cmddia) {
|
||
adsout << _T("\n踏步数目<") << nStepNum << _T(">: ");
|
||
ads_initget(RSG_NOZERO|RSG_NONEG, NULL);
|
||
if (ads_getint(_T(""), &nStepNum)==RTCAN ||
|
||
GetDist(_T("\n踏步高度"), nStepHeight, RSG_NOZERO|RSG_NONEG)==RTCAN)
|
||
return;
|
||
}*/
|
||
|
||
/* pStep->SetStepHeight(nStepHeight);
|
||
pStep->SetStepNum(nStepNum);
|
||
pStep->SetSideCurve2d(lCurve0, rCurve0);
|
||
|
||
if (cmddia) {*/
|
||
CCurveStairDlg dlg(acedGetAcadFrame());
|
||
dlg.m_bCreate=TRUE;
|
||
dlg.m_lCurve0 = lCurve0;
|
||
dlg.m_rCurve0 = rCurve0;
|
||
|
||
//dlg.Obj2Dlg(pStep);
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
if (dlg.DoModal()!=IDOK) {
|
||
return;
|
||
}
|
||
}
|
||
TDbCurveStair *pStep = new TDbCurveStair;
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->AddToMSpace(Adesk::kTrue);
|
||
}
|
||
|
||
|
||
|
||
//--------------------------------------------------------BEGIN-----------------------------------------
|
||
// [4/9/2008 nsh]
|
||
//新添加的楼梯的操作
|
||
//交叉楼梯
|
||
void CrossStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CCrossStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbCrossStair *pDbCS=new TDbCrossStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbCrossStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditCrossStair(AcDbObjectId id)
|
||
{
|
||
// add by gjm 2013/10/15
|
||
CAcModuleResourceOverride vTemp;
|
||
// end
|
||
|
||
//对交叉楼梯的编辑操作
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbCrossStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CCrossStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
|
||
TDbCrossStair *pView=(TDbCrossStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//双分平行楼梯
|
||
void ParallelStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CParallelStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbParallelStair *pDbCS=new TDbParallelStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbParallelStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditParallelStair(AcDbObjectId id)
|
||
{//对双分平行楼梯的编辑
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbParallelStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CParallelStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbParallelStair *pView=(TDbParallelStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//剪刀楼梯
|
||
void ScissorsStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CScissorsStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbScissorsStair *pDbCS=new TDbScissorsStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbScissorsStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditScissorsStair(AcDbObjectId id)
|
||
{//对剪刀楼梯的编辑
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbScissorsStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CScissorsStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbScissorsStair *pView=(TDbScissorsStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//双分转角楼梯
|
||
void CornerStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CCornerStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbCornerStair *pDbCS=new TDbCornerStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决红户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbCornerStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditCornerStair(AcDbObjectId id)
|
||
{//对双分转角楼梯的编辑
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbCornerStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CCornerStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbCornerStair *pView=(TDbCornerStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//双分三跑楼梯
|
||
void DoubleMulStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CDoubleMulStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbDoubleMulStair *pDbCS=new TDbDoubleMulStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbDoubleMulStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditDoubleMulStair(AcDbObjectId id)
|
||
{//对双分三跑编辑
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbDoubleMulStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CDoubleMulStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbDoubleMulStair *pView=(TDbDoubleMulStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
|
||
//三角楼梯
|
||
void TriangleStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CTriangleStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbTriangleStair *pDbCS=new TDbTriangleStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbTriangleStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditTriangleStair(AcDbObjectId id)
|
||
{//对三角楼梯的编辑
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbTriangleStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CTriangleStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbTriangleStair *pView=(TDbTriangleStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//矩形转角楼梯
|
||
void RectCornerStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CRectCornerStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbRectCornerStair *pDbCS=new TDbRectCornerStair;
|
||
pDbCS->SetLayerHand3d(InitLayer(LAY_HANDRAIL));
|
||
pDbCS->SetLayerRail3d(InitLayer(LAY_RAIL));
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbRectCornerStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditRectCornerStair(AcDbObjectId id)
|
||
{//编辑矩形转角楼梯
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbRectCornerStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CRectCornerStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbRectCornerStair *pView=(TDbRectCornerStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//自动扶梯
|
||
void AutoStair()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CAutoStairDlg dlg;
|
||
XPoint ptLoc;
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
PickSet ss(SS_FREE);
|
||
//处理pDbCS的拖动操作
|
||
TDbAutoStair *pDbCS=new TDbAutoStair;
|
||
pDbCS->SetLayerText(InitLayer(LAY_TEXT));
|
||
pDbCS->SetTextStyle(InitTextStyle(TS_DIM));
|
||
pDbCS->SetLayerArrow(InitLayer(LAY_OTHER_DIM));
|
||
dlg.Dlg2Obj(pDbCS);
|
||
CPoint ptCursor;
|
||
if (GetCursorPos(&ptCursor)) {
|
||
acedGetAcadDwgView()->ScreenToClient(&ptCursor);
|
||
acedCoordFromPixelToWorld(ptCursor, ptLoc);
|
||
ptLoc=Wcs2Ucs(ptLoc);
|
||
}
|
||
ptLoc.z = pDbCS->GetElevation();
|
||
pDbCS->SetLocation(Ucs2Wcs(ptLoc));
|
||
XVector3D vtRot(1,0,0);
|
||
vtRot=Ucs2Wcs(vtRot, TRUE);
|
||
pDbCS->SetRotation(ads_angle(XPoint(), vtRot));
|
||
|
||
//add by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
pDbCS->SetLayoutRotation(Ucs2Wcs(0));
|
||
|
||
AcDbObjectId idLast=pDbCS->AddToMSpace(Adesk::kTrue);
|
||
ASSERT(!!idLast);
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, AcDbEntity, pEnt);
|
||
if (pEnt)
|
||
pEnt->draw();
|
||
OPENOBJ_END();
|
||
ss += idLast;
|
||
int iRet=DragPickSet(ss,ptLoc);
|
||
if (iRet!=RTNORM)
|
||
{
|
||
ss.Redraw(1);
|
||
ss.Delete();
|
||
}
|
||
|
||
//add by xlc on 090216 改基点后标高错误
|
||
else
|
||
{
|
||
OPENOBJ_BEGIN(idLast, AcDb::kForRead, TDbAutoStair, pStair);
|
||
if (pStair)
|
||
{
|
||
ptLoc = Ucs2Wcs(ptLoc);
|
||
pStair->upgradeOpen();
|
||
pStair->SetElevation(ptLoc.z);
|
||
pStair->downgradeOpen();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
int EditAutoStair(AcDbObjectId id)
|
||
{//编辑自动扶梯
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbAutoStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
CAutoStairDlg dlg;
|
||
|
||
//modify by xlc on 090205 解决用户坐标系下预览文字倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbAutoStair *pView=(TDbAutoStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
|
||
dlg.Obj2Dlg(pView);
|
||
pStep->downgradeOpen();
|
||
if (dlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
// pStep->assertWriteEnabled();
|
||
dlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
//---------------------------------------------------------END------------------------------------------
|
||
// Command:编辑梯段
|
||
int EditLineStair(AcDbObjectId id)
|
||
{
|
||
/*
|
||
int cmddia=0;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
if (!cmddia)
|
||
return EditLineStair0(id);
|
||
*/
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbLineStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
// int ret;
|
||
CLineStairCreateDlg StairDlg(acedGetAcadFrame());
|
||
|
||
//add by xlc on 090222 解决用户坐标系下预览幻灯片倾斜的问题
|
||
double dRot=pStep->GetRotation(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbLineStair *pView=(TDbLineStair*)(pStep->clone());
|
||
pView->SetRotation(0);
|
||
pView->SetLayoutRotation(0);
|
||
pStep->downgradeOpen();
|
||
|
||
StairDlg.Obj2Dlg(pView);
|
||
|
||
// {
|
||
// CAcModuleResourceOverride vTemp;
|
||
// ret = StairDlg.DoModal();
|
||
// if (ret != IDOK)
|
||
// return RTERROR;
|
||
// }
|
||
// if (pStep->upgradeOpen()!=Acad::eOk)
|
||
// return RTERROR;
|
||
// pStep->assertWriteEnabled();
|
||
// StairDlg.Dlg2Obj(pStep);
|
||
if (StairDlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
|
||
StairDlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->SetRotation(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
|
||
pStep->downgradeOpen();
|
||
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|
||
|
||
|
||
// Command:编辑弧段楼梯
|
||
int EditArcStair(AcDbObjectId id)
|
||
{
|
||
|
||
// add by gjm 2013/10/15
|
||
CAcModuleResourceOverride vTemp;
|
||
// end
|
||
|
||
/*
|
||
int cmddia=0;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
if (!cmddia)
|
||
return EditArcStair0(id);
|
||
*/
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbArcStair, pStep);
|
||
if (!pStep)
|
||
return RTERROR;
|
||
|
||
CArcStairCreateDlg ArcStairDlg(acedGetAcadFrame());
|
||
// int ret;
|
||
//add by xlc on 090222 解决用户坐标系下预览幻灯片倾斜的问题
|
||
double dRot=pStep->GetStartAngle(),dLayRot=pStep->GetLayoutRotation();
|
||
TDbArcStair *pView=(TDbArcStair*)(pStep->clone());
|
||
//pStep->SetStartAngle(0);
|
||
pView->SetLayoutRotation(0);
|
||
pStep->downgradeOpen();
|
||
|
||
ArcStairDlg.Obj2Dlg(pView); // 实体数据传向对话框
|
||
// {
|
||
// CAcModuleResourceOverride vTemp;
|
||
// ret = ArcStairDlg.DoModal();
|
||
// }
|
||
// if (ret != IDOK)
|
||
// return RTERROR;
|
||
//
|
||
// if (pStep->upgradeOpen()!=Acad::eOk)
|
||
// return RTERROR;
|
||
// pStep->assertWriteEnabled();
|
||
// ArcStairDlg.Dlg2Obj(pStep); // 对话框数据传向实体
|
||
if (ArcStairDlg.DoModal()==IDOK)
|
||
{
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
{
|
||
delete pView;
|
||
return RTERROR;
|
||
}
|
||
|
||
ArcStairDlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
}
|
||
delete pView;
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
// pStep->SetStartAngle(dRot);
|
||
pStep->SetLayoutRotation(dLayRot);
|
||
pStep->AddToMSpace(Adesk::kTrue);
|
||
OPENOBJ_END();
|
||
|
||
return RTNORM;
|
||
}
|
||
|
||
|
||
int EditCurveStair(AcDbObjectId id)
|
||
{
|
||
/*
|
||
int cmddia=0;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
if (!cmddia)
|
||
return EditCurveStair0(id); */
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbCurveStair, pStep);
|
||
|
||
// Zyu modify on 100722,支持64位
|
||
//int ret;
|
||
INT_PTR ret;
|
||
XDirectionCurve lCurve0 = pStep->GetSideCurve2d( 0 );
|
||
XDirectionCurve rCurve0 = pStep->GetSideCurve2d( 1 );
|
||
|
||
CCurveStairDlg StairDlg(acedGetAcadFrame());
|
||
StairDlg.m_lCurve0 = lCurve0;
|
||
StairDlg.m_rCurve0 = rCurve0;
|
||
|
||
StairDlg.Obj2Dlg(pStep);
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
ret = StairDlg.DoModal();
|
||
}
|
||
if (ret != IDOK)
|
||
return RTERROR;
|
||
|
||
if (pStep->upgradeOpen()!=Acad::eOk)
|
||
return RTERROR;
|
||
pStep->assertWriteEnabled();
|
||
|
||
StairDlg.Dlg2Obj(pStep);
|
||
pStep->downgradeOpen();
|
||
|
||
OPENOBJ_END();
|
||
|
||
return RTNORM;
|
||
}
|
||
void GetDist_()
|
||
{
|
||
//这个函数的作用是当在IDD_LINESTAIR1中单击梯段宽的时候,用于截取一段宽度的函数
|
||
//
|
||
//
|
||
ads_real dDist;
|
||
int i=0;
|
||
if (CLineStairCreateDlg::m_bGetStair==TRUE)
|
||
{
|
||
i=acedGetDist(NULL, _T("\n 请输入梯段宽度<取消>:"), &dDist);
|
||
if (i == RTNORM)
|
||
{
|
||
CLineStairCreateDlg::pSelfCSC->UpdateData();
|
||
CLineStairCreateDlg::m_strStairWidth.Format(_T("%.2f"),dDist);
|
||
CLineStairCreateDlg::pSelfCSC->UpdateData(FALSE);
|
||
CLineStairCreateDlg::pSelfCSC->UpdateEdit(IDC_STAIR_WIDTH,true);
|
||
CLineStairCreateDlg::m_bGetStair=FALSE;
|
||
CLineStairCreateDlg::pSelfCSC->ShowWindow(SW_SHOW);
|
||
}
|
||
else
|
||
{
|
||
CLineStairCreateDlg::m_bGetStair=FALSE;
|
||
CLineStairCreateDlg::pSelfCSC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
void GetInsideR()
|
||
{
|
||
//得到内圆半径
|
||
//这个函数的作用是在IDD_ASCSTAIR1中单击内圆半径的时候,用于获得一段长度来标记内圆半径
|
||
ads_real dDist;
|
||
int i=0;
|
||
BOOL save=TRUE;
|
||
static CString nInRadius,nOutRadius;
|
||
if (CArcStairCreateDlg::m_bInsideR==TRUE)
|
||
{
|
||
i=acedGetDist(NULL, _T("\n 请选取梯段宽度:"), &dDist);
|
||
if (i == RTNORM)
|
||
{
|
||
double y;
|
||
CArcStairCreateDlg::p_selfARC->GetDlgItemText(IDC_STAIR_INRADIUS,nInRadius);
|
||
CArcStairCreateDlg::p_selfARC->GetDlgItemText(IDC_STEP_OUTRADIUS,nOutRadius);
|
||
y=::_tcstod(nOutRadius,NULL);
|
||
if (dDist>=y)
|
||
{
|
||
save=FALSE;
|
||
CArcStairCreateDlg::m_strInRadius=nInRadius;
|
||
::AfxMessageBox(_T("内圆半径应当小于外圆半径"));
|
||
GetInsideR();
|
||
return;
|
||
|
||
}
|
||
else if (dDist==0)
|
||
{
|
||
save=FALSE;
|
||
CArcStairCreateDlg::m_strInRadius =nInRadius ;
|
||
::AfxMessageBox(_T("内圆半径应当小于外圆半径"));
|
||
::AfxMessageBox(_T("内圆半径不能为零"));
|
||
GetInsideR();
|
||
}
|
||
else
|
||
{
|
||
CArcStairCreateDlg::p_selfARC->UpdateData();
|
||
CArcStairCreateDlg::m_strInRadius.Format(_T("%.2f"),dDist);
|
||
CArcStairCreateDlg::p_selfARC->UpdateData(FALSE);
|
||
CArcStairCreateDlg::p_selfARC->UpdateEdit(IDC_STAIR_INRADIUS,true);
|
||
CArcStairCreateDlg::m_bInsideR=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
if (!save)
|
||
{
|
||
CArcStairCreateDlg::p_selfARC->UpdateData();
|
||
CArcStairCreateDlg::m_strInRadius=nInRadius;
|
||
CArcStairCreateDlg::p_selfARC->UpdateData(FALSE);
|
||
}
|
||
CArcStairCreateDlg::m_bInsideR=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
}
|
||
void GetOutsideR()
|
||
{
|
||
//得到外圆半径
|
||
//这个函数的作用是在IDD_ASCSTAIR1中单击外圆半径的时候,获取一段长度来标记外圆半径
|
||
ads_real dDist;
|
||
int i=0;
|
||
BOOL save=TRUE;
|
||
static CString nInRadius,nOutRadius;
|
||
if (CArcStairCreateDlg::m_bOutsideR==TRUE)
|
||
{
|
||
i=acedGetDist(NULL, _T("\n 请选取梯段宽度:"), &dDist);
|
||
if (i == RTNORM)
|
||
{
|
||
double x;
|
||
CArcStairCreateDlg::p_selfARC->GetDlgItemText(IDC_STAIR_INRADIUS,nInRadius);
|
||
CArcStairCreateDlg::p_selfARC->GetDlgItemText(IDC_STEP_OUTRADIUS,nOutRadius);
|
||
x=::_tcstod(nInRadius,NULL);
|
||
if (dDist<=x)
|
||
{
|
||
save=FALSE;
|
||
CArcStairCreateDlg::m_strOutRadius=nOutRadius;
|
||
::AfxMessageBox(_T("外圆半径应当大于内圆半径"));
|
||
GetOutsideR();
|
||
return;
|
||
|
||
}
|
||
else if (dDist==0)
|
||
{
|
||
save=FALSE;
|
||
CArcStairCreateDlg::m_strOutRadius=nOutRadius;
|
||
::AfxMessageBox(_T("外圆半径应当大于内圆半径"));
|
||
::AfxMessageBox(_T("外圆半径不能为零"));
|
||
GetOutsideR();
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
CArcStairCreateDlg::p_selfARC->UpdateData();
|
||
CArcStairCreateDlg::m_strOutRadius.Format(_T("%.2f"),dDist);
|
||
CArcStairCreateDlg::p_selfARC->UpdateData(FALSE);
|
||
CArcStairCreateDlg::p_selfARC->UpdateEdit(IDC_STEP_OUTRADIUS,true);
|
||
CArcStairCreateDlg::m_bOutsideR=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
if (!save)
|
||
{
|
||
CArcStairCreateDlg::p_selfARC->UpdateData();
|
||
CArcStairCreateDlg::m_strOutRadius=nOutRadius;
|
||
CArcStairCreateDlg::p_selfARC->UpdateData(FALSE);
|
||
}
|
||
CArcStairCreateDlg::m_bOutsideR=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
}
|
||
void GetStartAngle()
|
||
{
|
||
//得到开始角度
|
||
//这个函数的作用是在IDD_ASCSTAIR1中单击起始角度的时候,获取所画线与水平方向的夹角
|
||
ads_real nStartAngle;
|
||
int i=0;
|
||
if (CArcStairCreateDlg::m_bAngle==TRUE)
|
||
{
|
||
i=ads_getangle(NULL,_T(""),&nStartAngle);
|
||
if (i == RTNORM)
|
||
{
|
||
CString temp=Angle2Str(nStartAngle * 180.0 / PI);
|
||
CArcStairCreateDlg::p_selfARC->UpdateData();
|
||
CArcStairCreateDlg::m_strStartAngle =temp;
|
||
CArcStairCreateDlg::p_selfARC->UpdateData(FALSE);
|
||
CArcStairCreateDlg::p_selfARC->UpdateEdit(IDC_STARTANGLE,true);
|
||
CArcStairCreateDlg::m_bAngle=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
else
|
||
{
|
||
CArcStairCreateDlg::m_bAngle=FALSE;
|
||
CArcStairCreateDlg::p_selfARC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
}
|
||
//双跑
|
||
void GetStairSpace()
|
||
{
|
||
//返回梯间宽
|
||
//这个函数的作用是在IDD_RECTSTAIR1中单击梯间宽的时候,获取一段距离来标记梯间宽
|
||
ads_real dStepWidth;
|
||
int i=0;
|
||
static CString nStairWidth,nStepWidth;
|
||
BOOL save=TRUE;
|
||
if (CRectStairCreateDlg::m_bStepWidth==TRUE)
|
||
{
|
||
i=acedGetDist(NULL, _T("\n 请输入梯间宽度<取消>:"), &dStepWidth);
|
||
if (i == RTNORM)
|
||
{
|
||
double x;
|
||
CRectStairCreateDlg::m_pSelfRSC->GetDlgItemText(IDC_STAIR_WIDTH,nStepWidth);
|
||
CRectStairCreateDlg::m_pSelfRSC->GetDlgItemText(IDC_SPACE_WIDTH,nStairWidth);
|
||
x=_tcstod(nStepWidth,NULL);
|
||
if (dStepWidth<2.0*_MIN_STAIRWIDTH)
|
||
{
|
||
save=FALSE;
|
||
CRectStairCreateDlg::m_strSpaceWidth=nStairWidth;
|
||
::AfxMessageBox(_T("输入的梯间宽度太小"));
|
||
GetStairSpace();
|
||
}
|
||
else
|
||
{
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData();
|
||
CRectStairCreateDlg::m_strSpaceWidth.Format(_T("%.2f"),dStepWidth);
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData(FALSE);
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateEdit(IDC_SPACE_WIDTH,true);
|
||
CRectStairCreateDlg::m_bStepWidth=FALSE;
|
||
CRectStairCreateDlg::m_pSelfRSC->ShowWindow(SW_SHOW);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
if (!save)
|
||
{
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData();
|
||
CRectStairCreateDlg::m_strSpaceWidth =nStairWidth;
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData(FALSE);
|
||
}
|
||
CRectStairCreateDlg::m_bStepWidth=FALSE;
|
||
CRectStairCreateDlg::m_pSelfRSC->ShowWindow(SW_SHOW);
|
||
}
|
||
}
|
||
}
|
||
void GetStep()
|
||
{
|
||
//返回梯段宽
|
||
//这个函数的作用是在IDD_RECTSTAIR1中单击来获取一段长度标记梯段宽
|
||
ads_real dStairSpace;
|
||
int i=0;
|
||
static CString nStairWidth,nStepWidth;
|
||
BOOL save=TRUE;
|
||
if (CRectStairCreateDlg::m_bStairSpace==TRUE)
|
||
{
|
||
i=acedGetDist(NULL, _T("\n 请输入梯段宽度<取消>:"), &dStairSpace);
|
||
if (i == RTNORM)
|
||
{
|
||
double x;
|
||
CRectStairCreateDlg::m_pSelfRSC->GetDlgItemText(IDC_STAIR_WIDTH,nStepWidth);//梯段宽
|
||
CRectStairCreateDlg::m_pSelfRSC->GetDlgItemText(IDC_SPACE_WIDTH,nStairWidth);//梯间宽
|
||
x=_tcstod(nStairWidth,NULL);
|
||
if (2*dStairSpace >x)
|
||
{
|
||
save=FALSE;
|
||
CRectStairCreateDlg::m_strStairWidth=nStepWidth;
|
||
::AfxMessageBox(_T("输入的梯段宽度应当小于1/2的梯间宽度"));
|
||
GetStep();
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData();
|
||
CRectStairCreateDlg::m_strStairWidth.Format(_T("%.0f"),dStairSpace);
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData(FALSE);
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateEdit(IDC_STAIR_WIDTH,true);
|
||
CRectStairCreateDlg::m_bStairSpace=FALSE;
|
||
CRectStairCreateDlg::m_pSelfRSC->ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
if (!save)
|
||
{
|
||
CRectStairCreateDlg::m_pSelfRSC ->UpdateData();
|
||
CRectStairCreateDlg::m_strStairWidth=nStepWidth;
|
||
CRectStairCreateDlg::m_pSelfRSC->UpdateData(FALSE);
|
||
}
|
||
CRectStairCreateDlg::m_bStairSpace=FALSE;
|
||
CRectStairCreateDlg::m_pSelfRSC->ShowWindow(SW_SHOW);
|
||
}
|
||
}
|
||
} |