638 lines
15 KiB
C++
638 lines
15 KiB
C++
// LineWallDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "LineWallDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// [2010-3-16 wubo] 移植到新Geo库
|
|
// extern GEOAPI double g_nExtWidth;
|
|
// extern GEOAPI double g_nIntWidth;
|
|
// extern GEOAPI double g_nIntWallWidth;
|
|
|
|
extern int TARCH_IMPEXP g_nRunMode;
|
|
extern GEOAPI BOOL g_bAxisWall;
|
|
|
|
static ads_real minLenWall = 200.0*_UNIT_SCALE;
|
|
|
|
BOOL CLineWallDlg::g_bNoDeleteBase = FALSE;
|
|
double CLineWallDlg::m_nExtWidth = 100;
|
|
double CLineWallDlg::m_nIntWidth = 100;
|
|
double CLineWallDlg::m_nIntWallWidth = 200;
|
|
CString CLineWallDlg::m_csWallHeight = _T("当前层高");
|
|
double CLineWallDlg::m_dWallElev = 0;
|
|
int CLineWallDlg::m_iSelStyle = 2;
|
|
int CLineWallDlg::m_iAxisOrLine = 0;
|
|
|
|
CLineWallDlg::CLineWallDlg(CWnd* pParent /*=NULL*/)
|
|
: CModelessDialog(CLineWallDlg::IDD, pParent)
|
|
{
|
|
m_nIntWidth = _AS_SYS_UNIT(g_nIntWidth);
|
|
m_nExtWidth = _AS_SYS_UNIT(g_nExtWidth);
|
|
m_nIntWallWidth = _AS_SYS_UNIT(g_nIntWallWidth);
|
|
}
|
|
|
|
void CLineWallDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CModelessDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDT_INWIDTH, m_nIntWidth);
|
|
DDX_Control(pDX, IDC_SPIN_IN, m_spinInt);
|
|
DDX_Text(pDX, IDC_EDT_OUTWIDTH, m_nExtWidth);
|
|
DDX_Control(pDX, IDC_SPIN_OUT, m_spinExt);
|
|
DDX_Text(pDX, IDC_CMB_INTERWALL, m_nIntWallWidth);
|
|
DDX_Check(pDX, IDC_NO_DELETE, g_bNoDeleteBase);
|
|
// DDX_Check(pDX, IDC_AXISWALL, g_bAxisWall);
|
|
DDX_Radio(pDX, IDC_RAD_AXISWALL, m_iAxisOrLine);
|
|
DDX_CBString(pDX, IDC_CMB_HEIGHT, m_csWallHeight);
|
|
DDX_CBIndex(pDX, IDC_CMB_MATERIAL, m_iSelStyle);
|
|
DDX_Text(pDX, IDC_CMB_ELEV, m_dWallElev);
|
|
|
|
if (pDX->m_bSaveAndValidate)
|
|
{
|
|
g_nIntWidth = _AS_MM(m_nIntWidth);
|
|
g_nExtWidth = _AS_MM(m_nExtWidth);
|
|
g_nIntWallWidth = _AS_MM(m_nIntWallWidth);
|
|
}
|
|
|
|
// GetDlgItem(IDC_NO_DELETE)->ShowWindow(g_bAxisWall?SW_HIDE:SW_SHOW);
|
|
GetDlgItem(IDC_NO_DELETE)->ShowWindow(m_iAxisOrLine==0?SW_HIDE:SW_SHOW);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CLineWallDlg, CModelessDialog)
|
|
//{{AFX_MSG_MAP(CModelessDialog)
|
|
ON_WM_CLOSE()
|
|
ON_BN_CLICKED(IDC_RAD_AXISWALL, OnAxisWall)
|
|
ON_BN_CLICKED(IDC_RAD_LINE, OnLine)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CLineWallDlg::OnInitDialog()
|
|
{
|
|
CModelessDialog::OnInitDialog();
|
|
|
|
UpdateData(TRUE);
|
|
|
|
// 编辑框中的数值范围
|
|
m_spinInt.SetRange(-1000, 1000);
|
|
m_spinExt.SetRange(-1000, 1000);
|
|
|
|
// 设置编辑增量
|
|
UDACCEL accel;
|
|
accel.nSec = 0;
|
|
accel.nInc = 10;
|
|
m_spinInt.SetAccel((short)1, &accel);
|
|
m_spinExt.SetAccel((short)1, &accel);
|
|
|
|
CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_CMB_MATERIAL);
|
|
pBox->ResetContent();
|
|
pBox->AddString(WALLMATE_Concrete);
|
|
pBox->AddString(WALLMATE_Concrete1);
|
|
pBox->AddString(WALLMATE_Brick);
|
|
pBox->AddString(WALLMATE_Brick1);
|
|
pBox->AddString(WALLMATE_Rocket);
|
|
pBox->AddString(WALLMATE_Rocket1);
|
|
pBox->AddString(WALLMATE_Fill);
|
|
pBox->AddString(WALLMATE_Fill1);
|
|
pBox->AddString(WALLMATE_Fill2);
|
|
pBox->AddString(WALLMATE_Divider);
|
|
pBox->AddString(WALLMATE_Curtain);
|
|
|
|
pBox->SetCurSel(m_iSelStyle);
|
|
|
|
UpdateData(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CLineWallDlg::OnClose()
|
|
{
|
|
acedPostCommand(_T("\33"));
|
|
}
|
|
|
|
// 轴网生墙
|
|
void CLineWallDlg::OnAxisWall()
|
|
{
|
|
UpdateData();
|
|
if (m_iAxisOrLine == 0)
|
|
{
|
|
g_bAxisWall = TRUE;
|
|
}
|
|
}
|
|
|
|
// 单线变墙
|
|
void CLineWallDlg::OnLine()
|
|
{
|
|
UpdateData();
|
|
|
|
// modify by xly on 100902 说明:m_iAxisOrLine=0是轴网生墙,m_iAxisOrLine=1是单线变墙,
|
|
/*if (m_iAxisOrLine == 0)
|
|
{
|
|
g_bAxisWall = TRUE;
|
|
}*/
|
|
if (m_iAxisOrLine == 1)
|
|
{
|
|
g_bAxisWall = FALSE;
|
|
}
|
|
}
|
|
|
|
// 获得当前选择的材料类型
|
|
TWallData::TWallStyle CLineWallDlg::GetStyle(CString &sT20Mat)
|
|
{
|
|
UpdateData(TRUE);
|
|
TWallData::TWallStyle st = TWallData::kBrick; // 砖墙
|
|
st = TWallData::kBrick;
|
|
|
|
switch(m_iSelStyle)
|
|
{
|
|
case 0:
|
|
sT20Mat = WALLMATE_Concrete;
|
|
st = TWallData::kConcrete;
|
|
break;
|
|
case 1:
|
|
sT20Mat = WALLMATE_Concrete1;
|
|
st = TWallData::kConcrete;
|
|
break;
|
|
case 2:
|
|
sT20Mat = WALLMATE_Brick;
|
|
st = TWallData::kBrick;
|
|
break;
|
|
case 3:
|
|
sT20Mat = WALLMATE_Brick1;
|
|
st = TWallData::kBrick;
|
|
break;
|
|
case 4:
|
|
sT20Mat = WALLMATE_Rocket;
|
|
st = TWallData::kRocket;
|
|
break;
|
|
case 5:
|
|
sT20Mat = WALLMATE_Rocket1;
|
|
st = TWallData::kRocket;
|
|
break;
|
|
case 6:
|
|
sT20Mat = WALLMATE_Fill;
|
|
st = TWallData::kFill;
|
|
break;
|
|
case 7:
|
|
sT20Mat = WALLMATE_Fill1;
|
|
st = TWallData::kFill1;
|
|
break;
|
|
case 8:
|
|
sT20Mat = WALLMATE_Fill2;
|
|
st = TWallData::kFill2;
|
|
break;
|
|
case 9:
|
|
sT20Mat = WALLMATE_Divider;
|
|
st = TWallData::kDivider;
|
|
break;
|
|
case 10:
|
|
sT20Mat = WALLMATE_Curtain;
|
|
st = TWallData::kCurtain;
|
|
break; }
|
|
return st;
|
|
}
|
|
|
|
// 获得当前选择的高度
|
|
double CLineWallDlg::GetHeight()
|
|
{
|
|
UpdateData(TRUE);
|
|
if (m_csWallHeight == _T("当前层高"))
|
|
{
|
|
return DocGetLHeight();
|
|
}
|
|
|
|
return _tstof(m_csWallHeight);
|
|
}
|
|
|
|
// 获得当前选择的底高
|
|
double CLineWallDlg::GetElev()
|
|
{
|
|
UpdateData(TRUE);
|
|
return m_dWallElev;
|
|
}
|
|
|
|
|
|
// modify by xly on 110411 支持设置墙体到指定的图层
|
|
// 墙转化为玻璃幕墙
|
|
//bool Wall2Curtain(Entity entWall)
|
|
bool Wall2Curtain(Entity entWall, CString csLayer = _T(""));
|
|
bool Wall2Curtain(Entity entWall, CString csLayer)
|
|
{
|
|
XDbObject obj(entWall, AcDb::kForWrite);
|
|
if (!obj)
|
|
return false;
|
|
|
|
TDbWall *pWall = TDbWall::cast(obj.m_pObject);
|
|
if (pWall == NULL)
|
|
return false;
|
|
|
|
AcDbObjectId idSurf = pWall->GetLayerSurf2d();
|
|
if (!idSurf.isValid())
|
|
pWall->SetLayerSurf2d(InitLayer(LAY_SURFACE));
|
|
|
|
AcDbCurve *pCv = pWall->GetAcDbCurve(0);
|
|
if (pCv == NULL)
|
|
return false;
|
|
|
|
// 幕墙
|
|
TDbWall *pCWall = (TDbWall*)TDbCurtainWall::desc()->create();
|
|
if (pCWall == NULL)
|
|
return false;
|
|
|
|
pCWall->SetFromCurve((*pCv));
|
|
pCWall->copyFrom(pWall);
|
|
|
|
DList<AcDbSoftPointerId> listBindWinid, idlist;
|
|
|
|
//modify by xlc on 110311 解决崩溃问题(GetOpeningIdList()长度是变化的)
|
|
//int nLength = pWall->GetOpeningIdList().Length();
|
|
//for (int i=0; i<nLength; i++)
|
|
for (int i=0; i<pWall->GetOpeningIdList().Length(); i++)
|
|
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbSoftPointerId id = pWall->GetOpeningIdList()[i];
|
|
Acad::ErrorStatus es = acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead);
|
|
if (pEnt == NULL)
|
|
continue;
|
|
|
|
if (pEnt->isKindOf(TDbBandWin::desc())) // 判断是否是带形窗
|
|
{
|
|
TDbBandWin *pBandWin = TDbBandWin::cast(pEnt);
|
|
if (pBandWin != NULL)
|
|
{
|
|
long nNum = pBandWin->GetWallNum();
|
|
for (int j=0; j<nNum; j++)
|
|
{
|
|
AcDbObjectId idTem = pBandWin->GetWallId(j);
|
|
if (idTem == pWall->objectId())
|
|
{
|
|
pWall->RemoveReferenceOpening(id);
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
listBindWinid.Append(&id);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
|
|
pWall->MoveOpeningTo(*pCWall);
|
|
pWall->MovePatchTo(*pCWall);
|
|
|
|
pCWall->ChangeElevation(pWall->GetElevation(), FALSE);
|
|
pCWall->SetHeight(pWall->GetHeight());
|
|
pCWall->SetWidth(0, pWall->GetWidth(0));
|
|
pCWall->SetWidth(1, pWall->GetWidth(1));
|
|
pCWall->SetStyle(TWallData::kCurtain);
|
|
pCWall->SetUsageFlag(pWall->GetUsageFlag());
|
|
|
|
TDbCurtainWall *pCurtinWall = (TDbCurtainWall*)pCWall;
|
|
pCurtinWall->SetLayerGlass3d(InitLayer(LAY_3DGLASS));
|
|
pCurtinWall->SetLayerCol3d(InitLayer(LAY_3DFRAME));
|
|
pCurtinWall->SetLayerRow3d(InitLayer(LAY_3DFRAME));
|
|
|
|
// add by xly on 101101 玻璃幕墙的竖挺截面长度是普通的墙体的左宽+右宽
|
|
double dColV = pWall->GetWidth(0)+pWall->GetWidth(1);
|
|
pCurtinWall->SetColV(dColV);
|
|
|
|
// add by xly on 110323 设置墙体的宽度
|
|
pCurtinWall->SetWidth(0, pWall->GetWidth(0));
|
|
pCurtinWall->SetWidth(1, pWall->GetWidth(1));
|
|
|
|
AcDbObjectId idNew = pCurtinWall->AddToMSpace(Adesk::kTrue),
|
|
idOld = pWall->objectId();
|
|
for (i=0; i<listBindWinid.Length(); i++)
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbSoftPointerId id = *listBindWinid[i];
|
|
Acad::ErrorStatus es = acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite);
|
|
if (pEnt == NULL)
|
|
continue;
|
|
|
|
TDbBandWin *pBandWin = TDbBandWin::cast(pEnt);
|
|
if (pBandWin != NULL)
|
|
{
|
|
long nNum = pBandWin->GetWallNum();
|
|
for (int j=0; j<nNum; j++)
|
|
{
|
|
AcDbObjectId idTem = pBandWin->GetWallId(j);
|
|
if (idTem == idOld)
|
|
{
|
|
pBandWin->SetWallId(j, idNew);
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
|
|
// add by xly on 110412 修改玻璃幕墙所在的图层
|
|
if (!csLayer.IsEmpty())
|
|
{
|
|
AcDbEntity *pNewEnt = NULL;
|
|
if ( acdbOpenAcDbEntity(pNewEnt,idNew,AcDb::kForWrite) == Acad::eOk)
|
|
{
|
|
pNewEnt->setLayer(csLayer);
|
|
pNewEnt->close();
|
|
}
|
|
}
|
|
|
|
pWall->erase();
|
|
return true;
|
|
}
|
|
|
|
//////////////////////////////
|
|
// 命令函数:单线变墙
|
|
//////////////////////////////
|
|
// modified by xly 100602,根据8.5需求,增加墙体材料、底高、高度控件
|
|
void SDWall()
|
|
{
|
|
CAcModuleResourceOverride vTemp;
|
|
CLineWallDlg dlg;
|
|
dlg.Create(IDD_LINEWALL,acedGetAcadFrame());
|
|
acedGetAcadFrame()->SetFocus();
|
|
|
|
PickSet ssAxis(SS_FREE); // 基线选择集
|
|
RBList mask(RTDXF0, _T("LINE,ARC,CIRCLE,LWPOLYLINE,POLYLINE"), NULL);
|
|
g_ssPickFirst.Free();
|
|
|
|
int nRet = SelectEntities(_T("\n选择要变成墙体的直线、圆弧或多段线:"), ssAxis, mask);
|
|
if (nRet != RTNORM) // 命令结束
|
|
{
|
|
if (dlg.GetSafeHwnd() != NULL)
|
|
{
|
|
dlg.DestroyWindow();
|
|
}
|
|
return;
|
|
}
|
|
|
|
dlg.UpdateData();
|
|
|
|
PickSet ss(SS_FREE|SS_CREATE);
|
|
// if (g_bAxisWall)
|
|
if (dlg.m_iAxisOrLine == 0) // 轴网生墙
|
|
{
|
|
// 获得轴线层上的线
|
|
ssAxis.BaseFilter(RBList(8, LAY_AXIS, NULL));
|
|
if (ssAxis.Length() < 1) // 选择失败,命令结束
|
|
{
|
|
adsout << _T("\n轴线变墙需要选择轴线图层上的线!");
|
|
|
|
if (dlg.GetSafeHwnd() != NULL)
|
|
{
|
|
dlg.DestroyWindow();
|
|
}
|
|
return;
|
|
}
|
|
|
|
// 将用户拾取的轴线,copy一份放在ss选择集中
|
|
ss.IncludeBegin();
|
|
{
|
|
XPushVar<int> osmode(_T("OSMODE"), 0);
|
|
ads_command(RTSTR, _T(".COPY"), RTPICKS, (TLong_ptr *)ssAxis, RTSTR, _T(""),
|
|
RT3DPOINT, org_point, RT3DPOINT, org_point, NULL);
|
|
}
|
|
ss.IncludeEnd();
|
|
}
|
|
else // 单线变墙
|
|
{
|
|
// modify by xly on 100902 解决单线变墙是多出一行“Dangerous TPickEntSet = !”的提示
|
|
//ss = ssAxis;
|
|
ss += ssAxis;
|
|
}
|
|
|
|
// 找出多段线
|
|
PickSet ssPoly(SS_FREE|SS_CREATE);
|
|
long lLength = ss.Length(),
|
|
i = 0;
|
|
for (i=0; i<lLength; i++)
|
|
{
|
|
Entity ent = ss[i];
|
|
if (ent.Is(_T("LWPOLYLINE")) || ent.Is(_T("POLYLINE")))
|
|
{
|
|
ssPoly += ent;
|
|
}
|
|
}
|
|
ss.BaseExclude(RBList(RTDXF0, _T("LWPOLYLINE,POLYLINE"), NULL));
|
|
|
|
// 分解多段线
|
|
//PickSet ssNew(SS_FREE);
|
|
ss.IncludeBegin();
|
|
//ssNew.IncludeBegin();
|
|
|
|
lLength = ssPoly.Length();
|
|
for (i=0; i<lLength; i++)
|
|
{
|
|
Entity ent = ssPoly[i];
|
|
|
|
XPoly2D poly(ent);
|
|
long lLen = poly.Length(),
|
|
j = 0;
|
|
|
|
for (j=0; j<lLen; j++)
|
|
{
|
|
XCurveSegment seg;
|
|
poly.Nth(j, seg);
|
|
seg.Make();
|
|
}
|
|
}
|
|
//ssNew.IncludeEnd();
|
|
ss.IncludeEnd();
|
|
|
|
lLength = ss.Length();
|
|
if (lLength < 1) // 选择失败,命令结束
|
|
{
|
|
if (dlg.GetSafeHwnd() != NULL)
|
|
{
|
|
dlg.DestroyWindow();
|
|
}
|
|
return;
|
|
}
|
|
|
|
adsout << _T("\n处理重线...");
|
|
HandleCurveDup(ss);
|
|
adsout << _T("\n处理交线...");
|
|
HandleCurveInters(ss, minLenWall);
|
|
adsout << _T("\n识别外墙...");
|
|
|
|
// XLY add 100602,监测这段代码将生成的墙对象保存
|
|
PickSet ssWall(SS_FREE);
|
|
ssWall.IncludeBegin();
|
|
{
|
|
// 获得柱子对象
|
|
DList<AcDbObjectId> lstColus;
|
|
if (!g_nRunMode)
|
|
{
|
|
GetEntFromBlockByDxf(lstColus, _T("TCH_COLUMN"));
|
|
}
|
|
|
|
XSearchSpaceFromWall aSearch;
|
|
try
|
|
{
|
|
aSearch.InitStart(ss, lstColus);
|
|
}
|
|
catch(...)
|
|
{
|
|
adsout << /*UMSG*/_T("\n发生例外情况!");
|
|
ss.Erase();
|
|
if (dlg.GetSafeHwnd() != NULL)
|
|
{
|
|
dlg.DestroyWindow();
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (aSearch.SearchSpaces())
|
|
{
|
|
aSearch.SetDefaultWidth();
|
|
}
|
|
aSearch.CreateWalls(!g_bAxisWall);
|
|
}
|
|
ssWall.IncludeEnd();
|
|
|
|
// 删除基线
|
|
if (g_bAxisWall || !CLineWallDlg::g_bNoDeleteBase)
|
|
{
|
|
ss.Erase();
|
|
ssPoly.Erase();
|
|
}
|
|
else
|
|
{
|
|
ssPoly.Erase();
|
|
}
|
|
|
|
// 获取对话框中的参数
|
|
double dHeight = dlg.GetHeight();
|
|
double dElev = dlg.GetElev();
|
|
CString sT20Mat;
|
|
TWallData::TWallStyle style = dlg.GetStyle(sT20Mat);
|
|
|
|
// 打开新生成的普通墙对象,修改其属性
|
|
lLength = ssWall.Length();
|
|
for (i = 0; i<lLength; i++)
|
|
{
|
|
OPENOBJ_BEGIN(ssWall[i], AcDb::kForWrite, TDbWall, pWall);
|
|
if (pWall != NULL)
|
|
{
|
|
pWall->SetHeight(dHeight); // 设置墙高度
|
|
pWall->SetElevation(dElev); // 设置墙底高
|
|
pWall->SetStyle(style); // 设置墙材料
|
|
pWall->SetT20WallMat(sT20Mat);
|
|
pWall->setLayer(InitLayer(pWall->GetDefaultLayer())); // 设置墙所属的图层
|
|
pWall->UpdateWallWidth();
|
|
}
|
|
OPENOBJ_END();
|
|
}
|
|
|
|
// 将墙对象变成玻璃幕墙
|
|
if (style == TWallData::kCurtain)
|
|
{
|
|
for (i = 0; i<ssWall.Length(); i++)
|
|
{
|
|
Entity entWall = ssWall[i];
|
|
if (Wall2Curtain(entWall))
|
|
{
|
|
ssWall -= entWall;
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (dlg.GetSafeHwnd() != NULL)
|
|
{
|
|
dlg.DestroyWindow();
|
|
}
|
|
}
|
|
|
|
|
|
// 单线变三维
|
|
// 必须在WCS下
|
|
//void SDWall()
|
|
//{
|
|
// // AsureWCS();
|
|
// if (SetWallWidth() != RTNORM)
|
|
// return; //处理命令参数, 如(C:SDWall n1 n2 n3)
|
|
//
|
|
// PickSet ss(SS_FREE);
|
|
// RBList mask=ads_buildlist(RTDXF0, _T("LINE,ARC,CIRCLE"), -4, _T("<NOT"), 8, LAY_AXIS, -4, _T("NOT>"), NULL);
|
|
// g_ssPickFirst.Free();
|
|
// if (SelectEntities(_T("\n选择待转成墙体的简单曲线(LINE,ARC,CIRCLE):"), ss, mask)==RTNORM)
|
|
// {
|
|
// adsout << _T("\n处理重线...");
|
|
// HandleCurveDup(ss);
|
|
// adsout << _T("\n处理交线...");
|
|
// HandleCurveInters(ss, minLenWall);
|
|
// adsout << _T("\n识别外墙...");
|
|
// DList<AcDbObjectId> lstColus;
|
|
// if (!g_nRunMode)
|
|
// GetEntFromBlockByDxf(lstColus, _T("TCH_COLUMN"));
|
|
//
|
|
// XSearchSpaceFromWall aSearch;
|
|
// try {
|
|
// aSearch.InitStart(ss, lstColus);
|
|
// } catch(...) {
|
|
// adsout << _T("\n发生例外情况!");
|
|
// return;
|
|
// }
|
|
//
|
|
// if (aSearch.SearchSpaces()) {
|
|
// aSearch.SetDefaultWidth();
|
|
// }
|
|
// aSearch.CreateWalls();
|
|
// ss.Erase();
|
|
// }
|
|
//}
|
|
|
|
// 轴线变墙体
|
|
// 必须在WCS下
|
|
//void AxisWall()
|
|
//{
|
|
// //AsureWCS();
|
|
// if (SetWallWidth() != RTNORM)
|
|
// return; //处理命令参数, 如(C:SDWall n1 n2 n3)
|
|
//
|
|
// PickSet ssAxis(SS_FREE);
|
|
// RBList mask(RTDXF0, _T("LINE,ARC,CIRCLE"), 8, LAY_AXIS, NULL);
|
|
// g_ssPickFirst.Free();
|
|
// if (SelectEntities(_T("\n选择要变成墙体的轴线:"), ssAxis, mask) == RTNORM) {
|
|
// PickSet ss(SS_FREE|SS_CREATE);
|
|
// //XPushVarStr vTemp(_T("CLAYER"), LAY_WALLS);
|
|
// ss.IncludeBegin();
|
|
// {
|
|
// XPushVar<int> osmode(_T("OSMODE"), 0);
|
|
// ads_command(RTSTR, _T(".COPY"), RTPICKS, (long *)ssAxis, RTSTR, _T(""),
|
|
// RT3DPOINT, org_point, RT3DPOINT, org_point, NULL);
|
|
// }
|
|
// ss.IncludeEnd();
|
|
//
|
|
// adsout << _T("\n处理重线...");
|
|
// HandleCurveDup(ss);
|
|
// adsout << _T("\n处理交线...");
|
|
// HandleCurveInters(ss, minLenWall);
|
|
// adsout << _T("\n识别外墙...");
|
|
//
|
|
// DList<AcDbObjectId> lstColus;
|
|
// if (!g_nRunMode)
|
|
// GetEntFromBlockByDxf(lstColus, _T("TCH_COLUMN"));
|
|
// XSearchSpaceFromWall aSearch;
|
|
// try {
|
|
// aSearch.InitStart(ss, lstColus);
|
|
// } catch(...) {
|
|
// adsout << /*UMSG*/_T("\n发生例外情况!");
|
|
// ss.Erase();
|
|
// return;
|
|
// }
|
|
//
|
|
// if (aSearch.SearchSpaces()) {
|
|
// aSearch.SetDefaultWidth();
|
|
// }
|
|
// XPushMemVar<BOOL> vTemp(g_bAxisWall,TRUE);
|
|
// aSearch.CreateWalls(FALSE);
|
|
//
|
|
// ss.Erase();
|
|
// }
|
|
//}
|