#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); } } }