Files
envi-code/SourceCode/Code2026/tg_shs/shs_public/LoadTchDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

1114 lines
30 KiB
C++

// LoadTchDlg.cpp : implementation file
//
#include "stdafx.h"
//#include "DocReactor.h"
#include "dbhatch.h"
#include "DbCornerWin.h"
//#include "arxtools.h"
#include "DbOpening.h"
#include "LoadTchDlg.h"
#include "TAPI.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
void ColumnBlk2Null(const TCHAR* szBlkName)
{
AcDbBlockTableRecord *pRecord = NULL;
AcDbBlockTable* pBlockTable = NULL;
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
if(!pBlockTable)
return;
if(Acad::eOk != pBlockTable->getAt(szBlkName, pRecord, AcDb::kForWrite)){
pBlockTable->close();
return;
}
pBlockTable->close();
if(!pRecord)
return;
AcDbBlockTableRecordIterator *pIterator;
pRecord->newIterator(pIterator);
AcDbObjectId objId1 = NULL;
AcDbObjectId objId2 = NULL;
AcDbObjectId objId3 = NULL;
AcDbObjectId objId4 = NULL;
if(!pIterator){
pRecord->close();
return;
}
for(pIterator->start(); !pIterator->done(); pIterator->step()){
AcDbEntity *pEnt = NULL;
pIterator->getEntity(pEnt, AcDb::kForWrite);
if(pEnt){
AcDbHatch *pHatch = NULL;
//群亚柱子是HATCH, 直接删除
if(pHatch = AcDbHatch::cast(pEnt))
pHatch->erase();
//上华3方柱子是SOLID, 理正方柱子是SOLID+4根线
AcDbSolid *pSolid = NULL;
if(_tcsicmp(szBlkName, _T("_FZH")) == 0){
if(pSolid = AcDbSolid::cast(pEnt)){
XPoint pt1, pt2, pt3, pt4;
pSolid->getPointAt(0, pt1);
pSolid->getPointAt(1, pt2);
pSolid->getPointAt(2, pt3);
pSolid->getPointAt(3, pt4);
AcDbLine *pL1 = new AcDbLine(pt1, pt2);
AcDbLine *pL2 = new AcDbLine(pt2, pt4);
AcDbLine *pL3 = new AcDbLine(pt3, pt4);
AcDbLine *pL4 = new AcDbLine(pt1, pt3);
pRecord->appendAcDbEntity(objId1, pL1);
pRecord->appendAcDbEntity(objId2, pL2);
pRecord->appendAcDbEntity(objId3, pL3);
pRecord->appendAcDbEntity(objId4, pL4);
pL1->close();
pL2->close();
pL3->close();
pL4->close();
pSolid->erase();
pEnt->close();
break;
}
}
//上华3圆柱子是PLINE, 理正圆柱子是图块"*U"
else if(_tcsicmp(szBlkName, _T("_YZH")) == 0){
AcDbBlockReference *pRef = NULL;
AcDbPolyline *pline = NULL;
if(pRef = AcDbBlockReference::cast(pEnt))
pRef->erase();
if(pline = AcDbPolyline::cast(pEnt)){
XPoint ptCir = pRecord->origin();
AcDbCircle *pCir = new AcDbCircle(ptCir, AcGeVector3d::kZAxis, 0.5);
pRecord->appendAcDbEntity(objId4, pCir);
pCir->close();
pline->erase();
pEnt->close();
break;
}
}
pEnt->close();
}
}
pRecord->close();
delete pIterator;
}
void Column2Null()
{
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, _T("*"), 2, _T("_FZH"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, _T("*"), 2, _T("_YZH"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_COLUMN"), 8, _T("*"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ss(SS_FREE);
ColumnBlk2Null(_T("_FZH"));
ColumnBlk2Null(_T("_YZH"));
DocSetIsSolidFill(FALSE);
DocSetIsLineWeight(FALSE);
ss.Get(_T("X"), NULL, NULL, rbMask);
UpdateGraphic(ss);
}
void DelWindowText()
{
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_OPENING") , -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_CORNER_WINDOW"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, LAY_WIN, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, LAY_FIRE_DOOR, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, LAY_FIRE_WIN, -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), 8, LAY_FIRE_JL, -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ss(SS_FREE);
PickSet ssFm(SS_FREE);
if(SelectEntities(_T("\n请选择需要删除编号的门窗:<退出>"), ss, rbMask) == RTNORM){
long len = ss.Length();
for(long i=0;i<len;i++){
Entity ent = ss[i];
if(ent.Is(_T("INSERT"))){
AcDbBlockReference *pBlockRef = NULL;// 定义块表指针
AcDbObjectId eId;
acdbGetObjectId(eId, ent);
acdbOpenObject(pBlockRef, eId, AcDb::kForRead);
AcDbObjectIterator *pIterator = NULL;
pIterator = pBlockRef->attributeIterator();
for(pIterator->start();!pIterator->done();pIterator->step()){
AcDbEntity *pEnt = NULL;
AcDbAttribute *pAtt = NULL;
AcDbObjectId att_id;
att_id = pIterator->objectId();
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite);
pAtt = AcDbAttribute::cast(pEnt);
if(pAtt){
TCHAR *szText = pAtt->textString();
CString csName = szText;
delete szText;
if(csName.Find(_T("FM")) < 0 && csName.Find(_T("FC")) < 0 && csName.Find(_T("FJL")) < 0)
pAtt->setInvisible(!pAtt->isInvisible());
else
ssFm += ent;
}
pEnt->close();
}
delete pIterator;
pBlockRef->close();
}
else{
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbOpening, pOpening);
if(pOpening) {
CString csName;
csName = pOpening->GetLabel();
if(csName.Find(_T("FM")) < 0 && csName.Find(_T("FC")) < 0 && csName.Find(_T("FJL")) < 0)
pOpening->SetLabelVisible(false);
else
ssFm += ent;
}
OPENOBJ_END();
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbCornerWin, pOpening);
if(pOpening) {
CString csName;
csName = pOpening->GetLabel();
if(csName.Find(_T("FC")) < 0)
pOpening->SetHideLabel(TRUE);
else
ssFm += ent;
}
OPENOBJ_END();
}
}
long len2 = ssFm.Length();
if(len2 == 0)
return;
TCHAR chText[256];
ads_getstring(NULL, _T("\n发现有防火门窗,是否也同时删除门窗编号?<N>: "), chText);
if(_tcsicmp(chText, _T("Y")) == 0)
{
for(long i=0;i<len2;i++){
Entity ent = ssFm[i];
if(ent.Is(_T("INSERT"))){
AcDbBlockReference *pBlockRef = NULL;// 定义块表指针
AcDbObjectId eId;
acdbGetObjectId(eId, ent);
acdbOpenObject(pBlockRef, eId, AcDb::kForRead);
AcDbObjectIterator *pIterator = NULL;
pIterator = pBlockRef->attributeIterator();
for(pIterator->start();!pIterator->done();pIterator->step()){
AcDbEntity *pEnt = NULL;
AcDbAttribute *pAtt = NULL;
AcDbObjectId att_id;
att_id = pIterator->objectId();
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite);
pAtt = AcDbAttribute::cast(pEnt);
if(pAtt){
pAtt->setInvisible(!pAtt->isInvisible());
}
pEnt->close();
}
delete pIterator;
pBlockRef->close();
}
else{
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbOpening, pOpening);
if(pOpening) {
pOpening->SetLabelVisible(false);
}
OPENOBJ_END();
OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbCornerWin, pOpening);
if(pOpening) {
pOpening->SetHideLabel(TRUE);
}
OPENOBJ_END();
}
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CLoadTchDlg dialog
void LoadTch()
{
CAcModuleResourceOverride vTemp;
SetLayer0UnLocked();
CLoadTchDlg dlg;
if(dlg.DoModal() != IDOK)
return;
PickSet ssAll(SS_FREE);
if(SelectEntities(_T("\n请选择建筑图范围<整张图>"), ssAll, RBList()) != RTNORM)
ssAll.Get(_T("X"), NULL, NULL, NULL);
UNDOB;
PickSet sswall(SS_FREE), ssReserve(SS_FREE), ssThick(SS_FREE);
long sslen = ssAll.Length();
for(long m=0;m<sslen;m++){
Entity entTmp = ssAll[m];
if(entTmp.Is(_T("HATCH"))){
AcDbObjectId eId;
AcDbHatch *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForRead);
if(pEnt){
if(pEnt->associative()){
if(pEnt->upgradeOpen()==Acad::eOk) {
pEnt->setAssociative(false);
pEnt->downgradeOpen();
}
}
pEnt->close();
}
}
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, LAY_TEXT) == 0)
ssReserve += entTmp;
else if(_tcsicmp(szLayer, _T("TCH_保留")) == 0 || _tcsicmp(szLayer, LAY_BALCONY) == 0)
ssReserve += entTmp;
if(_tcsicmp(szLayer, _T("PUB_WALL")) == 0){
ssThick += entTmp;
}
if(dlg.m_bColumn){
if(_tcsicmp(szLayer, LAY_COLU) == 0){
ssReserve += entTmp;
sswall += entTmp;
continue;
}
}
if(dlg.m_bDote){
if(_tcsicmp(szLayer, LAY_AXIS) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bLvtry){
if(_tcsicmp(szLayer, LAY_SANIWARE) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bPubTitle){
if(_tcsicmp(szLayer, _T("PUB_TITLE")) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bSpace){
if(_tcsicmp(szLayer, LAY_SPACE) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bStair){
if(_tcsicmp(szLayer, LAY_STAIR) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bWall){
if(_tcsicmp(szLayer, LAY_WALL) == 0){
ssReserve += entTmp;
sswall += entTmp;
continue;
}
}
if(dlg.m_bWindow){
if(_tcsicmp(szLayer, LAY_WIN) == 0){
ssReserve += entTmp;
if(entTmp.Is(_T("INSERT")))
SetBlkAttrText(entTmp, _T(""), _T("A"), 0.0, FALSE);
continue;
}
}
if(dlg.m_bAxis){
if(_tcsicmp(szLayer, LAY_DIMAX) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bText){
if(_tcsicmp(szLayer, _T("PUB_TEXT")) == 0){
ssReserve += entTmp;
continue;
}
}
if(dlg.m_bDim){//要PUB_DIM层的图元
if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0){
ssReserve += entTmp;
continue;
}
}
// else{ //不要PUB_DIM层的图元, 删除所有尺寸标注, 保留符号标注
// if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0 && !entTmp.Is(_T("DIMENSION")) && !entTmp.Is(_T("ATS_DIMENSION"))){
// ssReserve += entTmp;
// continue;
// }
// }
//保留其它图层
if(dlg.m_iMode == 1){
BOOL bOther = TRUE;
for(int j=0;j<dlg.m_lstDelLay.Length();j++){
CString csLayTmp = dlg.m_lstDelLay[j];
if(_tcsicmp(csLayTmp, szLayer) == 0){
bOther = FALSE;
break;
}
}
if(bOther)
ssReserve += entTmp;
}
}
if(dlg.m_bWallThick){
ssReserve -= ssThick;
}
ssAll -= ssReserve;
ssAll.Erase();
XPushVarStr clayer(_T("CLAYER"), _T("0"));
if(dlg.m_bWindow)
SetLayerOnOff(LAY_OPENING_DIM, FALSE);
if(dlg.m_bColumn && dlg.m_bColNull){
DocSetIsSolidFill(FALSE);
Column2Null();
}
if(dlg.m_bWallThick && dlg.m_bColumn){
DocSetIsLineWeight(FALSE);
UpdateGraphic(sswall);
}
// ads_command(RTSTR, _T(".PURGE"), RTSTR, _T("ALL"), RTSTR, _T(""), RTSTR, _T("N"), RTNONE);
UNDOE;
}
CLoadTchDlg::CLoadTchDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoadTchDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLoadTchDlg)
m_bColumn = 1;
if (g_nProductId == 15 || g_nProductId == 5)
m_bDote = 1; // add by cq 2015-05-29 10:37:09 暖通专业 转条件图,默认值保留轴线
else
m_bDote = 0;
m_bLvtry = 1;
m_bPubTitle = 1;
m_bSpace = 1;
m_bStair = 1;
m_bWall = 1;
m_bWindow = 1;
m_bAxis = 1;
m_bAll = TRUE;
m_bDim = 0;
m_bText = 1;
m_iMode = 1;
m_bColNull = TRUE;
m_bWallThick = TRUE;
//}}AFX_DATA_INIT
}
void CLoadTchDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoadTchDlg)
DDX_Check(pDX, IDC_CHECK_COLUMN, m_bColumn);
DDX_Check(pDX, IDC_CHECK_DOTE, m_bDote);
DDX_Check(pDX, IDC_CHECK_LVTRY, m_bLvtry);
DDX_Check(pDX, IDC_CHECK_PUB_TITLE, m_bPubTitle);
DDX_Check(pDX, IDC_CHECK_SPACE, m_bSpace);
DDX_Check(pDX, IDC_CHECK_STAIR, m_bStair);
DDX_Check(pDX, IDC_CHECK_WALL, m_bWall);
DDX_Check(pDX, IDC_CHECK_WINDOW, m_bWindow);
DDX_Check(pDX, IDC_CHECK_AXIS, m_bAxis);
DDX_Check(pDX, IDC_CHECK_ALL, m_bAll);
DDX_Check(pDX, IDC_CHECK_DIM, m_bDim);
DDX_Check(pDX, IDC_CHECK_PUB_TEXT, m_bText);
DDX_Radio(pDX, IDC_RADIO_MODE1, m_iMode);
DDX_Check(pDX, IDC_CHECK_COL_NULL, m_bColNull);
DDX_Check(pDX, IDC_CHECK_THICK, m_bWallThick);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLoadTchDlg, CDialog)
//{{AFX_MSG_MAP(CLoadTchDlg)
ON_BN_CLICKED(IDC_BUTTON_WALL, OnButtonWall)
ON_BN_CLICKED(IDC_BUTTON_OPENING, OnButtonOpening)
ON_BN_CLICKED(IDC_BUTTON_COLUMN, OnButtonColumn)
ON_BN_CLICKED(IDC_BUTTON_STAIR, OnButtonStair)
ON_BN_CLICKED(IDC_BUTTON_PREVIEW, OnButtonPreview)
ON_BN_CLICKED(IDC_BUTTON_AXIS, OnButtonAxis)
ON_BN_CLICKED(IDC_BUTTON_TEXT, OnButtonText)
ON_BN_CLICKED(IDC_BUTTON_TCH_RESERVE, OnButtonTchReserve)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLoadTchDlg message handlers
void CLoadTchDlg::HideDialog(BOOL Flag)
{
if (Flag) {
GetParent()->EnableWindow(TRUE);
GetParent()->SetFocus();
GetParent()->SetActiveWindow();
ShowWindow(SW_HIDE);
}
else {
GetParent()->EnableWindow(FALSE);
EnableWindow(TRUE);
SetActiveWindow();
ShowWindow(SW_SHOW);
}
}
extern void ChangeColor(PickSet &ss, int iCol);
extern int GetLayerColorByDwg(const TCHAR*szLayer);
void CLoadTchDlg::OnButtonWall()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_WALL"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LWPOLYLINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ARC"), -4, _T("and>"),
-4, _T("or>"), NULL);
Entity entSel;
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, LAY_WALL) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的墙线(上华墙线已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
PickSet ss(SS_FREE);
if(ret != RTNORM)
continue;
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
ss.Redraw(3);
ssNewWall += ss;
}
if(ret != RTCAN){
InitLayer(LAY_WALL);
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(LAY_WALL);
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonOpening()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_OPENING"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LWPOLYLINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ELLIPSE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ARC"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, LAY_WIN) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的门窗(上华门窗已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
if(ret != RTNORM)
continue;
PickSet ss(SS_FREE);
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
sswall += ss;
ssNewWall += ss;
ss.Redraw(3);
}
if(ret != RTCAN){
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(InitLayer(LAY_WIN)); // cet 2017.8.8 modify 门窗图层没有创建时,转换失败
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonColumn()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_COLUMN"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LWPOLYLINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, LAY_COLU) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的柱子(上华柱子已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
if(ret != RTNORM)
continue;
PickSet ss(SS_FREE);
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
sswall += ss;
ssNewWall += ss;
ss.Redraw(3);
}
if(ret != RTCAN){
InitLayer(LAY_COLU);
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(LAY_COLU);
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonAxis()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_AXIS_LABEL"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_DIMENSION"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("DIMENSION"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("TEXT"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("CIRCLE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("INSERT"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, _T("AXIS")) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的轴标(上华轴标已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
if(ret != RTNORM)
continue;
PickSet ss(SS_FREE);
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
sswall += ss;
ssNewWall += ss;
ss.Redraw(3);
}
if(ret != RTCAN){
InitLayer(_T("AXIS"));
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(_T("AXIS"));
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonText()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_TEXT"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_MTEXT"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("MTEXT"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("TEXT"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, _T("PUB_TEXT")) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的文字(上华文字已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
if(ret != RTNORM)
continue;
PickSet ss(SS_FREE);
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
sswall += ss;
ssNewWall += ss;
ss.Redraw(3);
}
if(ret != RTCAN){
InitLayer(_T("PUB_TEXT"));
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(_T("PUB_TEXT"));
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonTchReserve() //建筑保留
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask(RTDXF0, _T("*"), 8, _T("TCH_保留"), NULL);
PickSet sswall(SS_FREE), ssNewWall(SS_FREE);
sswall.Get(_T("X"), NULL, NULL, rbMask);
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要保留的图元(上华建筑保留图元已被虚显, ESC取消已修改操作):<确定>"), entSel, RBList());
if(ret != RTNORM)
continue;
sswall += entSel;
ssNewWall += entSel;
entSel.Redraw(3);
}
if(ret != RTCAN){
InitLayer(_T("TCH_保留"));
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(_T("TCH_保留"));
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonStair()
{
UpdateData(TRUE);
HideDialog(TRUE);
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_LINESTAIR"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_ARCSTAIR"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_RECTSTAIR"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LWPOLYLINE"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("LINE"), -4, _T("and>"),
-4, _T("or>"), NULL);
PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE);
ssAll.Get(_T("X"), NULL, NULL, rbMask);
long len = ssAll.Length();
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, _T("STAIR")) == 0){
sswall += entTmp;
}
}
sswall.Redraw(3);
Entity entSel;
int ret = RTNORM;
while(ret == RTNORM){
ret = SelectEntity(_T("\n请选择需要转化为上华识别的楼梯(上华楼梯已被虚显, ESC取消已修改操作):<确定>"), entSel, rbMask);
if(ret != RTNORM)
continue;
PickSet ss(SS_FREE);
if(m_bAll){
TCHAR szSelLayer[256];
entSel.GetData(8, szSelLayer);
for(long i=0;i<len;i++){
Entity entTmp = ssAll[i];
TCHAR szTmpLayer[256];
entTmp.GetData(8, szTmpLayer);
if(_tcsicmp(szTmpLayer, szSelLayer) == 0){
ss += entTmp;
}
}
}
else{
ss += entSel;
// break;
}
sswall += ss;
ssNewWall += ss;
ss.Redraw(3);
}
if(ret != RTCAN){
InitLayer(_T("STAIR"));
long sslen = ssNewWall.Length();
for(long j=0;j<sslen;j++){
Entity entTmp = ssNewWall[j];
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
pEnt->setLayer(_T("STAIR"));
pEnt->close();
}
}
}
sswall.Redraw(4);
HideDialog(FALSE);
}
void CLoadTchDlg::OnButtonPreview()
{
UpdateData(TRUE);
UpdaeDelLayers();
HideDialog(TRUE);
PickSet ssAll(SS_FREE);
if(SelectEntities(_T("\n请选择建筑图范围<整张图>"), ssAll, RBList()) != RTNORM)
ssAll.Get(_T("X"), NULL, NULL, NULL);
PickSet sswall(SS_FREE), ssReserve(SS_FREE), ssThick(SS_FREE);
long sslen = ssAll.Length();
for(long m=0;m<sslen;m++){
Entity entTmp = ssAll[m];
if(entTmp.Is(_T("HATCH"))){
AcDbObjectId eId;
AcDbHatch *pEnt = NULL;
acdbGetObjectId(eId, entTmp);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(pEnt){
if(pEnt->associative()){
pEnt->setAssociative(false);
}
pEnt->close();
}
}
TCHAR szLayer[256];
entTmp.GetData(8, szLayer);
if(_tcsicmp(szLayer, LAY_TEXT) == 0)
ssReserve += entTmp;
else if(_tcsicmp(szLayer, _T("TCH_保留")) == 0 || _tcsicmp(szLayer, LAY_BALCONY) == 0)
ssReserve += entTmp;
if(_tcsicmp(szLayer, _T("PUB_WALL")) == 0)
ssThick += entTmp;
if(m_bColumn){
if(_tcsicmp(szLayer, LAY_COLU) == 0){
ssReserve += entTmp;
sswall += entTmp;
}
}
if(m_bDote){
if(_tcsicmp(szLayer, LAY_AXIS) == 0)
ssReserve += entTmp;
}
if(m_bLvtry){
if(_tcsicmp(szLayer, LAY_SANIWARE) == 0)
ssReserve += entTmp;
}
if(m_bPubTitle){
if(_tcsicmp(szLayer, _T("PUB_TITLE")) == 0)
ssReserve += entTmp;
}
if(m_bSpace){
if(_tcsicmp(szLayer, LAY_SPACE) == 0)
ssReserve += entTmp;
}
if(m_bStair){
if(_tcsicmp(szLayer, LAY_STAIR) == 0)
ssReserve += entTmp;
}
if(m_bWall){
if(_tcsicmp(szLayer, LAY_WALL) == 0)
ssReserve += entTmp;
}
if(m_bWindow){
if(_tcsicmp(szLayer, LAY_WIN) == 0)
ssReserve += entTmp;
}
if(m_bAxis){
if(_tcsicmp(szLayer, LAY_DIMAX) == 0)
ssReserve += entTmp;
}
if(m_bText){
if(_tcsicmp(szLayer, _T("PUB_TEXT")) == 0)
ssReserve += entTmp;
}
if(m_bDim){//要PUB_DIM层的图元
if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0)
ssReserve += entTmp;
}
// else{ //不要PUB_DIM层的图元, 删除所有尺寸标注, 保留符号标注
// if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0 && !entTmp.Is(_T("DIMENSION")) && !entTmp.Is(_T("ATS_DIMENSION")))
// ssReserve += entTmp;
// }
//保留其它图层
if(m_iMode == 1){
BOOL bOther = TRUE;
for(int j=0;j<m_lstDelLay.Length();j++){
CString csLayTmp = m_lstDelLay[j];
if(_tcsicmp(csLayTmp, szLayer) == 0){
bOther = FALSE;
break;
}
}
if(bOther)
ssReserve += entTmp;
}
}
if(m_bWallThick){
ssReserve -= ssThick;
}
ssAll -= ssReserve;
MakeVisible(ssAll, false);
ads_getstring(0, _T("\n按右键或回车返回对话框。"), XString());
MakeVisible(ssAll, true);
ads_getstring(0, _T("\n按右键或回车返回对话框。"), XString());
HideDialog(FALSE);
}
void CLoadTchDlg::OnCancel()
{
CDialog::OnCancel();
}
BOOL CLoadTchDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}
void CLoadTchDlg::OnOK()
{
UpdateData(TRUE);
UpdaeDelLayers();
CDialog::OnOK();
}
void CLoadTchDlg::UpdaeDelLayers()
{
m_lstDelLay.Reset();
if(!m_bColumn){
m_lstDelLay.Append(tstrnew(LAY_COLU));
}
if(!m_bDote){
m_lstDelLay.Append(tstrnew(LAY_AXIS));
}
if(!m_bLvtry){
m_lstDelLay.Append(tstrnew(LAY_SANIWARE));
}
if(!m_bPubTitle){
m_lstDelLay.Append(tstrnew(_T("PUB_TITLE")));
}
if(!m_bSpace){
m_lstDelLay.Append(tstrnew(LAY_SPACE));
}
if(!m_bStair){
m_lstDelLay.Append(tstrnew(LAY_STAIR));
}
if(!m_bWall){
m_lstDelLay.Append(tstrnew(LAY_WALL));
}
if(!m_bWindow){
m_lstDelLay.Append(tstrnew(LAY_WIN));
}
if(!m_bAxis){
m_lstDelLay.Append(tstrnew(LAY_DIMAX));
}
if(!m_bText){
m_lstDelLay.Append(tstrnew(_T("PUB_TEXT")));
}
if(!m_bDim){//要PUB_DIM层的图元
m_lstDelLay.Append(tstrnew(_T("PUB_DIM")));
}
}