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

945 lines
26 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// SpaceProperty.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "SpaceProperty.h"
#include "SpaceNameDlg.h"
#include "rxregsvc.h"
#include "SpaceNameClassDlg.h"
static const TCHAR *sMsgPrompt[]={
#include "SpaceProperty.hpp"
};
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//----------------------------start----------------------------
// sg add 081119,房间对象填充使用
CHatchPreviewCtrl::CHatchPreviewCtrl()
: CGsPreviewCtrl(0), m_dbPreview(true, true)
{
m_xSize = _AS_SYS_UNIT(800); //modifide by fxj090514 支持米单位
m_ySize = _AS_SYS_UNIT(600);//modifide by fxj090514 支持米单位
m_nScale = DocGetPScale();
m_nColorPattern = 7;
m_nColorFrame = 1;
m_nLineWeight = 0.0;
m_dAngle = 0; // sg add 090122
}
void CHatchPreviewCtrl::UpdateView()
{
int nCount = m_idArray.length();
for (int n=0; n<nCount; n++)
{
AcDbObjectId id = m_idArray[n];
OPENOBJ_BEGIN(id, AcDb::kForWrite, AcDbEntity, pEnt);
if (pEnt != NULL)
pEnt->erase();
OPENOBJ_END();
}
while (m_idArray.length())
m_idArray.removeLast();
AcDbBlockTable *pBlockTab = NULL;
VERIFY(m_dbPreview.getSymbolTable(pBlockTab, AcDb::kForRead)==Acad::eOk);
AcDbBlockTableRecord *pMspace = NULL;
VERIFY(pBlockTab->getAt(ACDB_MODEL_SPACE, pMspace, AcDb::kForWrite)==Acad::eOk);
pBlockTab->close();
XRectAngle rect(XPoint(), m_xSize, m_ySize);
XPoly2D polyRect(1);
rect.AsPoly2D(polyRect);
if (!m_sPattern)
{
}
else
{
// sg modify 090122,调用带旋转角度的同名函数
double dAngle = m_dAngle * PI / 180;
// AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect, m_sPattern, m_nScale);
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect, m_sPattern, m_nScale, dAngle);
if (pHatch != NULL)
{
// modify by xly on 100908
//pHatch->setColorIndex(m_nColorPattern);
pHatch->setColor(m_cColor);
AcDbObjectId idNew;
if (pMspace->appendAcDbEntity(idNew, pHatch) == Acad::eOk)
{
m_idArray.append(idNew);
pHatch->close();
}
else
delete pHatch;
}
}
AcDbPolyline *pline = new AcDbPolyline;
PolyConvert(polyRect, *pline);
pline->setColorIndex(m_nColorFrame);
pline->setConstantWidth(m_nLineWeight);
AcDbObjectId idNew;
if (pMspace->appendAcDbEntity(idNew, pline) == Acad::eOk)
{
m_idArray.append(idNew);
pline->close();
}
else
delete pline;
clearAll();
init(true);
XPoint ptTar(0, 0, 0);
XPoint position(0, 0, _AS_SYS_UNIT(1000));//modifide by fxj090514 支持米单位
AcGsView* pView = view();
pView->setView(position, ptTar, AcGeVector3d(0.0, 1.0, 0.0), // upvector
m_xSize*1.2, m_ySize*1.2);
AcGsModel *pModel = model();
pView->add(pMspace, pModel);
pMspace->close();
Invalidate();
}
//----------------------------end----------------------------
/////////////////////////////////////////////////////////////////////////////
// CSpaceProperty dialog
// lgh modify 101119,spacenam.txt文件格式进行了调整,使用新的机制,原先的代码无法使用
/*
BOOL GetSpaceNames(XStringList &lstSpaceNames)
{
XString sFile(256);
if (FindFile(_T("spacenam.txt"), sFile)) {
#if (ADS>15)
std::
#endif
ifstream in(sFile);
lstSpaceNames.Reset();
while(!!in) {
XAString sName(1024);
in >> (char *)sName;
if (!!sName) lstSpaceNames.Append(tstrnew(TString(sName)));
}
return TRUE;
}
return FALSE;
}
*/
BOOL GetSpaceNames(XStringList &lstSpaceNames)
{
lstSpaceNames.Reset();
XString sFile(256);
if (FindFile(_T("spacenam.txt"), sFile))
{
CSpaceFileOperator *pFileBase = new CSpaceFileOperator(sFile);
CSpaceDataTable dataTable;
CSpaceDataTable::InitKeyWords();
if (pFileBase->ReadFile(dataTable))
{
for (int i = 0; i < CSpaceDataTable::eNum; i++)
{
CStringArray arNames;
if (dataTable.GetNameAry(CSpaceDataTable::EKeyWord(i), arNames) > 0)
{
for (int j = 0; j < arNames.GetSize(); j++)
{
// XString xs(arNames[i]);
// 该字符串的声明周期交给lst管理
lstSpaceNames.Append(tstrnew(TString(arNames[j])));
}
}
}
}
delete pFileBase;
pFileBase = NULL;
}
return FALSE;
}
CSpaceProperty::CSpaceProperty(BOOL bHouse,CWnd* pParent /*=NULL*/)
: GlwCAcUiDialog(CSpaceProperty::IDD, pParent), m_bShowCodeList(TRUE)
{
//{{AFX_DATA_INIT(CSpaceProperty)
m_bHouse=bHouse;
m_csCode = _T("");
if (!m_bHouse)
{
m_csStaticCode=_T("编号:");
m_csStaticName=_T("名称:");
}
else
{
m_csStaticCode=_T("户号:");
m_csStaticName=_T("套型编号:");
}
m_csName = _T("");
// m_csHeight = _T("");//del by fxj 090602
m_csFloorThick = _T("120");
m_bMask = FALSE;
m_bHas3D = FALSE;
// add by xly 100907 粉刷层的变量
m_csPaintLayerWid = _T("0");
//}}AFX_DATA_INIT
GetSpaceNames(m_lstSpaceNames);
// delete by xly on 101111根据8.5需求修改该房间对象,支持房间名和面积都不标注
// int nSpFlag = DocGetSpaceDispMode();
//// if ((nSpFlag&SPF_CODE) != 0)
//// m_bShowCode = TRUE;
//// else
//// m_bShowCode = FALSE;
// if ((nSpFlag&SPF_NAME_AND_CODE) != 0) // sg modify 081119
// {
// m_bSpaceCode = TRUE;
// m_bSpaceName = TRUE;
// }
// else if ((nSpFlag&SPF_CODE) != 0)
// {
// m_bSpaceCode = TRUE;
// m_bSpaceName = FALSE;
// }
// else
// {
// m_bSpaceCode = FALSE;
// m_bSpaceName = TRUE;
// }
//
// if ((nSpFlag&SPF_UNIT) != 0)
// m_bShowUnit = TRUE;
// else
// m_bShowUnit = FALSE;
//
// if ((nSpFlag&SPF_AREA) != 0)
// m_bShowArea = TRUE;
// else
// m_bShowArea = FALSE;
m_bShowHatch = FALSE; // sg add 081124
m_csHatch = _T("SOLID");
m_dHatchScale = 100;
// delete by xly on 10909 支持真彩色
// m_nColor = 256; // 默认Bylayer
}
void CSpaceProperty::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSpaceProperty)
DDX_Control(pDX, IDC_TEXTLIST, m_listTexts);
DDX_Text(pDX, IDC_CODE, m_csCode);
DDX_Text(pDX, IDC_NAME, m_csName);
DDX_Check(pDX, IDC_SPACE_MASK, m_bMask);
DDX_Check(pDX, IDC_HAS3D, m_bHas3D);
//del by fxj 090602
// DDX_Text(pDX, IDC_HEIGHT, m_csHeight);
// if (pDX->m_bSaveAndValidate && _tstof(m_csHeight)<_DIST_SNAP)
// pDX->Fail();
DDX_Text(pDX, IDC_FLOOR_THICK, m_csFloorThick);
// if (pDX->m_bSaveAndValidate && _tstof(m_csFloorThick)<_DIST_SNAP)//del by fxj 090521
// pDX->Fail();
// DDX_Radio(pDX,IDC_RADIO_NAME,m_bShowCode);
DDX_Check(pDX,IDC_CHECK_DIMAREA,m_bShowArea);
DDX_Check(pDX,IDC_CHECK_AREAUNIT,m_bShowUnit);
//--------add by fxj 080623---------
DDX_CBIndex(pDX, IDC_AREATYPE, m_nType);
DDX_Check(pDX, IDC_SHOW_OUTLINE, m_bShowOutline);
DDX_Check(pDX, IDC_HALAREA,m_bHalArea);
DDX_Text(pDX, IDC_STATIC_CODE, m_csStaticCode);
DDX_Text(pDX, IDC_STATIC_NAME, m_csStaticName);
//----------------------------------
GetDlgItem(IDC_TEXTLIST)->EnableWindow(m_nType==0); // add by fxj 080703
DDX_Check(pDX, IDC_CHECK_SPACECODE, m_bSpaceCode); // sg add 081119
DDX_Check(pDX, IDC_CHECK_SPACENAME, m_bSpaceName);
DDX_Check(pDX, IDC_CHECK_HATCH, m_bShowHatch); // sg add 081124
DDX_Control(pDX, IDC_STATIC_STYLE, m_wndHatch);
DDX_Control(pDX, IDC_COMBO_HATCHCOLOR, m_ctlColor);
DDX_Text(pDX, IDC_EDIT_SCALE , m_dHatchScale);
DDX_Text(pDX, IDC_EDIT_SPACEANGLE, m_nHatchAngle);
// sg add 090122
DDX_Control(pDX, IDC_SPIN_SPACEANGLE, m_angleSpin);
// add by xly 100907 粉刷层后控件的关联
DDX_Text(pDX, IDC_EDIT_LAYERWID, m_csPaintLayerWid);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSpaceProperty, GlwCAcUiDialog)
//{{AFX_MSG_MAP(CSpaceProperty)
ON_EN_SETFOCUS(IDC_CODE, OnSetfocusCode)
ON_EN_SETFOCUS(IDC_NAME, OnSetfocusName)
ON_LBN_SELCHANGE(IDC_TEXTLIST, OnSelchangeTextlist)
ON_BN_CLICKED(IDC_EDITNAME, OnEditname)
ON_BN_CLICKED(IDC_HAS3D, OnHas3D)
ON_CBN_SELCHANGE(IDC_AREATYPE, OnSelchangeType)
ON_BN_CLICKED(IDC_CHECK_SPACECODE, OnBnClickedCheckSpaceCode) // sg add 081119
ON_BN_CLICKED(IDC_CHECK_SPACENAME, OnBnClickedCheckSpaceName)
ON_BN_CLICKED(IDC_CHECK_HATCH, OnClickHatch) // sg add 081124
ON_BN_CLICKED(IDC_STATIC_STYLE, OnStaticStyle)
ON_CBN_SELCHANGE(IDC_COMBO_HATCHCOLOR, OnSelchangeComboColor)
ON_WM_SETCURSOR() // sg add 081202
ON_EN_CHANGE(IDC_EDIT_SPACEANGLE, OnChangeEditSpaceAngle) // sg add 090218
ON_EN_KILLFOCUS(IDC_EDIT_SCALE, OnKillFocusScale)//add by fxj 090426
ON_BN_CLICKED(IDC_CHECK_DIMAREA, OnClickArea)//add by fxj 090514
ON_EN_KILLFOCUS(IDC_FLOOR_THICK, OnKillFocusThick)//add by fxj 090521
ON_EN_KILLFOCUS(IDC_EDIT_LAYERWID, OnKillFocusLayerWid)// add by xly on 100913
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSpaceProperty message handlers
BOOL CSpaceProperty::OnInitDialog()
{
CDialog::OnInitDialog();
// sg add 090122
m_angleSpin.SetRange(0, 360);
GetDlgItem(IDC_FLOOR_THICK)->EnableWindow(m_bHas3D);
OnClickHatch(); // sg add 081124,设置“填充”部分是否可用
m_nHatchAngle = m_dSpareAngle;
XString sAngle = Angle2Str(m_dSpareAngle); // sg add 081215,角度精确度受控制
GetDlgItem(IDC_EDIT_SPACEANGLE)->SetWindowText(sAngle);
// 问题描述:选择颜色时只支持索引颜色一种,希望可以像CAD一样增加对真彩色和配色系统的支持。(TT10)
// 解决方法:把CAcUiColorComboBox换成CAcUiTrueColorComboBox,并替换相应的函数
// 修改人,修改时间:Zyu modify on 100322
// Begin
#if (ADS < 16)
// modify by xly 真彩色的兼容,兼容为一个变量
// sg add 081124,设置“填充颜色”
//int nItem = m_ctlColor.FindItemByColorIndex(m_nColor);
int nTempColor = m_cColor.colorIndex();
int nItem = m_ctlColor.FindItemByColorIndex(nTempColor);
#else
// modyfy by xly on 100908 真彩色的使用
//AcCmColor clrTemp;
//clrTemp.setColorIndex(m_nColor);
//int nItem = m_ctlColor.FindItemByColor(clrTemp);
int nItem = m_ctlColor.FindItemByColor(m_cColor);
#endif
if (nItem < 0)
{
#if (ADS < 16)
// modify by xly 真彩色的兼容,兼容为一个变量
/*m_ctlColor.AddColorToMRU(m_nColor);
nItem = m_ctlColor.FindItemByColorIndex(m_nColor);*/
m_ctlColor.AddColorToMRU(nTempColor);
nItem = m_ctlColor.FindItemByColorIndex(nTempColor);
#else
// modify by xly on 100908 真彩色的使用
/*m_ctlColor.AddColorToMRU(clrTemp);
nItem = m_ctlColor.FindItemByColor(clrTemp);*/
m_ctlColor.AddColorToMRU(m_cColor);
nItem = m_ctlColor.FindItemByColor(m_cColor);
#endif
}
// End
if (nItem >= 0)
{
m_ctlColor.SetCurSel(nItem);
}
GetDlgItem(IDC_CHECK_AREAUNIT)->EnableWindow(m_bShowArea);//add by fxj 090514
UpdatePreview(); // sg add 081124,获取“填充样式”
// [2010-3-25 wubo] C006-04 按照类型进行相应的操作
OnSelchangeType();
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
GetDlgItem(IDC_NAME)->EnableWindow(m_bSpaceName);
GetDlgItem(IDC_CODE)->EnableWindow(m_bSpaceCode);
if (m_nType == TDbSpace::kTotalArea)
{
GetDlgItem(IDC_CODE)->EnableWindow(FALSE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//////////////////////////////////////////////////////////////
// 关标移到房间编号时, 初始化编号列表, 并把_T("编辑...")按钮无效
void CSpaceProperty::OnSetfocusCode()
{
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
ASSERT(pWnd);
pWnd->EnableWindow(FALSE);
if (m_nType == 0)
{
GetDlgItem(IDC_TEXTLIST)->EnableWindow(TRUE);
m_bShowCodeList = TRUE;
m_listTexts.ShowWindow(SW_SHOW);
m_listTexts.ResetContent();
for (int i=0; i<m_lstSpaceCodes.Length(); i++)
m_listTexts.AddString(m_lstSpaceCodes[i]);
}
else
GetDlgItem(IDC_TEXTLIST)->EnableWindow(FALSE);
}
//////////////////////////////////////////////////////////////
// 关标移到房间名称时, 初始化名称列表, 并把_T("编辑...")按钮有效
void CSpaceProperty::OnSetfocusName()
{
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
ASSERT(pWnd);
// pWnd->EnableWindow(TRUE); // sg modify 081127
if (m_nType == 0)
{
pWnd->EnableWindow(TRUE);
GetDlgItem(IDC_TEXTLIST)->EnableWindow(TRUE);
m_bShowCodeList = FALSE;
m_listTexts.ShowWindow(SW_SHOW);
m_listTexts.ResetContent();
for (int i=0; i<m_lstSpaceNames.Length(); i++)
m_listTexts.AddString(m_lstSpaceNames[i]);
}
else
{
pWnd->EnableWindow(FALSE);
GetDlgItem(IDC_TEXTLIST)->EnableWindow(FALSE);
}
}
/////////////////////////////////////////////
// 假如为名字列表的话,改变当前行时,填入名称
void CSpaceProperty::OnSelchangeTextlist()
{
if (!m_bShowCodeList)
{
int nCurSel = m_listTexts.GetCurSel();
if (nCurSel>=0 && nCurSel!=LB_ERR)
{
CString csText;
m_listTexts.GetText(nCurSel, csText);
CWnd *pWnd = GetDlgItem(IDC_NAME);
ASSERT(pWnd);
pWnd->SetWindowText(csText);
}
}
}
void CSpaceProperty::OnSelchangeType()
{
UpdateData(TRUE);
CString csStyle;
CWnd *pWnd = GetDlgItem(IDC_AREATYPE);
pWnd->GetWindowText(csStyle);
if (csStyle == _T("套内面积"))
{
m_csStaticCode = _T("户号:");
m_csStaticName = _T("套型编号:");
// add by xly 编辑套内面积对象时修改控件的显示文字
SetCtrlText(true);
}
else
{
m_csStaticCode = _T("编号:");
m_csStaticName = _T("名称:");
// add by xly 编辑套内面积对象时修改控件的显示文字
SetCtrlText(false);
}
if (csStyle==_T("洞口面积"))//add by fxj 090724
{
m_bHas3D=FALSE;
}
// [2010-3-25 wubo] C006-04 当类型为建筑轮廓面积时,“编号”、“显示房间编号”
// 和“显示房间名称”这几项均灰显,且将“显示房间名称”置为选中状态,
// “显示房间编号”置于非选中状态。
if (m_nType == TDbSpace::kTotalArea)
{
// delete by xly 101125 根据8.5对房间对象的修改名称可以不显示
/*m_bSpaceCode = FALSE;
m_bSpaceName = TRUE;*/
GetDlgItem(IDC_CODE)->EnableWindow(FALSE); // 编号
GetDlgItem(IDC_CHECK_SPACECODE)->EnableWindow(FALSE); // 【显示房间编号】控件
// delete by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
//GetDlgItem(IDC_CHECK_SPACENAME)->EnableWindow(FALSE); // 【显示房间名称】控件
}
else
{
GetDlgItem(IDC_CODE)->EnableWindow(TRUE); // 编号
GetDlgItem(IDC_CHECK_SPACECODE)->EnableWindow(TRUE); // 【显示房间编号】控件
GetDlgItem(IDC_CHECK_SPACENAME)->EnableWindow(TRUE); // 【显示房间名称】控件
}
// add by xly on100907 粉刷层厚,套内阳台支持粉刷层设置
if (csStyle==_T("套内阳台面积") || csStyle == _T("套内面积"))
{
GetDlgItem(IDC_EDIT_LAYERWID)->EnableWindow(FALSE);
GetDlgItem(IDC_STC_PAINLAYER)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_EDIT_LAYERWID)->EnableWindow(TRUE);
GetDlgItem(IDC_STC_PAINLAYER)->EnableWindow(TRUE);
}
UpdateData(FALSE);
}
/////////////////////////////////////////////////////
// 用全屏编辑器编辑房间名称列表
void CSpaceProperty::OnEditname()
{
CAcModuleResourceOverride vTemp;
CSpaceNameDlg dlg(this);
if (dlg.DoModal() == IDOK)
{
GetSpaceNames(m_lstSpaceNames);
CWnd *pWnd = GetDlgItem(IDC_NAME);
pWnd->SetFocus();
}
}
void CSpaceProperty::OnHas3D()
{
m_bHas3D = !m_bHas3D;
GetDlgItem(IDC_FLOOR_THICK)->EnableWindow(m_bHas3D);
}
void CSpaceProperty::OnBnClickedCheckSpaceCode() // sg add 081124
{
UpdateData(TRUE);
// delete by xly on 101111 8.5需求支持房间对象名称和编号都不显示
/*if (!m_bSpaceCode)
{
m_bSpaceName = TRUE;
}*/
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
GetDlgItem(IDC_CODE)->EnableWindow(m_bSpaceCode);
UpdateData(FALSE);
}
void CSpaceProperty::OnBnClickedCheckSpaceName() // sg add 081124
{
UpdateData(TRUE);
// delete by xly on 101111 8.5需求支持房间对象名称和编号都不显示
/*if (!m_bSpaceName)
{
m_bSpaceCode = TRUE;
}*/
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
GetDlgItem(IDC_NAME)->EnableWindow(m_bSpaceName);
UpdateData(FALSE);
}
void CSpaceProperty::OnClickHatch() // sg add 081124,sg add 090122,控制填充部分是否可编辑
{
UpdateData(TRUE);
GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(m_bShowHatch);
GetDlgItem(IDC_COMBO_HATCHCOLOR)->EnableWindow(m_bShowHatch);
GetDlgItem(IDC_EDIT_SCALE)->EnableWindow(m_bShowHatch);
GetDlgItem(IDC_EDIT_SPACEANGLE)->EnableWindow(m_bShowHatch);
GetDlgItem(IDC_SPIN_SPACEANGLE)->EnableWindow(m_bShowHatch);
UpdateData(FALSE);
}
void CSpaceProperty::OnClickArea()//add by fxj 090514
{
m_bShowArea=!m_bShowArea;
GetDlgItem(IDC_CHECK_AREAUNIT)->EnableWindow(m_bShowArea);
}
void CSpaceProperty::OnKillFocusThick()//add by fxj 090521
{
CDataExchange dx0(this, TRUE);
CString szText;
DDX_Text(&dx0, IDC_FLOOR_THICK, szText);
double dThick = _tstof(szText);
if (szText== _T("")||dThick<-1E-6)
{
}
else
m_csFloorThick = szText;
CDataExchange dx1(this, FALSE);
DDX_Text(&dx1, IDC_FLOOR_THICK, m_csFloorThick);
}
void CSpaceProperty::OnStaticStyle() // sg add 081124,选择填充效果
{
if (!AT_loaded(_T("tch_blklib")))
{
int nRet = acrxLoadModule(_T("tch_blklib.arx"), Adesk::kTrue, true);
if (!nRet)
{
return;
}
}
RBList rbCmd = ads_buildlist(RTSTR, _T("ITUAN"), RTSTR,
(const TCHAR*)(m_csHatch), NULL);
resbuf *rbRes = NULL;
if (ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
{
if (rbRes && rbRes->restype==RTSTR)
{
m_csHatch = rbRes->resval.rstring;
}
ads_relrb(rbRes);
}
UpdatePreview();
SetFocus(); // sg add 081211,需要强制设置CAD不可用,而使焦点留在当前对话框
GetParent()->EnableWindow(false);
EnableWindow(true);
}
void CSpaceProperty::UpdatePreview() // sg add 081124,填充效果预览
{
if (m_csHatch.IsEmpty())
{
m_csHatch = _T("SOLID");
}
m_wndHatch.SetPattern(m_csHatch);
// modify by xly on 100908 真彩色的使用
m_wndHatch.SetColorPattern1(m_cColor);
m_wndHatch.SetAngle(m_nHatchAngle);
m_wndHatch.UpdateView();
}
BOOL CSpaceProperty::DestroyWindow()
{
m_wndHatch.clearAll();
return CDialog::DestroyWindow();
}
void CSpaceProperty::PostNcDestroy()
{
m_wndHatch.clearAll();
CDialog::PostNcDestroy();
}
void CSpaceProperty::OnSelchangeComboColor() // sg add 081124,获取最新填充颜色,刷新m_nColor
{
UpdateData(TRUE);
// Zyu modify on 100322
// 把CAcUiColorComboBox换成CAcUiTrueColorComboBox后替换相应的函数
// Begin
#if ( ADS < 16 )
// modify by xly on 100909 真彩色的使用兼容到一个变量m_cColor
int nIndex = m_ctlColor.GetCurrentItemColorIndex();
m_cColor.setColorIndex(nIndex);
#else
// modify by xly on 100908 真彩色的使用
//AcCmColor clrTemp;
//m_ctlColor.GetCurrentItemColor(clrTemp);
//int nIndex = clrTemp.colorIndex();
m_ctlColor.GetCurrentItemColor(m_cColor);
#endif
// End
// modify by xly on 100908 真彩色的使用,提前到 (ADS < 16)分支使用
// GetCurrentItemColor不支持返回值,不做判断,都更新显示
//if (nIndex >= 0)
//{
/*m_nColor = nIndex;
m_wndHatch.SetColorPattern(m_nColor);*/
m_wndHatch.SetColorPattern1(m_cColor);
m_wndHatch.UpdateView();
//}
}
BOOL CSpaceProperty::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (pWnd && (pWnd->m_hWnd == m_wndHatch.m_hWnd))
{
CAcModuleResourceOverride vTemp;
HCURSOR hIcon = AfxGetApp()->LoadCursor(IDC_CUR_PICK);
SetCursor( hIcon );
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
void CSpaceProperty::OnChangeEditSpaceAngle()
{
CString csTemp;
GetDlgItem(IDC_EDIT_SPACEANGLE)->GetWindowText(csTemp);
m_nHatchAngle = _tstof(csTemp);
UpdateData(FALSE);
UpdatePreview();
}
void CSpaceProperty::OnKillFocusScale()//add by fxj 090426
{
UpdateData(TRUE);
}
// add by xly on 100913 判断csStr中是否含有字母
bool IsAllDigital(CString csStr)
{
int nLen = csStr.GetLength(),
nTemp(0);
for (int i=0; i<nLen; i++)
{
nTemp = (int)csStr.GetAt(i);
if ((nTemp<='z' && nTemp>='a') || (nTemp<='Z' && nTemp>='A'))
{
return false;
}
}
return true;
}
// add by xly on 100913 粉刷层厚,支持输入大于等于0的数字
void CSpaceProperty::OnKillFocusLayerWid()
{
CDataExchange dx0(this, TRUE);
CString szText;
DDX_Text(&dx0, IDC_EDIT_LAYERWID, szText);
double dThick = _tstof(szText);
if (szText== _T("")||dThick<-1E-6||!IsAllDigital(szText))
{
}
else
{
m_csPaintLayerWid.Format(_T("%g"),dThick);
}
CDataExchange dx1(this, FALSE);
DDX_Text(&dx1, IDC_EDIT_LAYERWID, m_csPaintLayerWid);
}
// add by xly 编辑套内面积对象时修改控件的显示文字
void CSpaceProperty::SetCtrlText(bool bIsTaoNei)
{
if (bIsTaoNei)// 套内面积对象
{
GetDlgItem(IDC_CHECK_SPACECODE)->SetWindowText(_T("显示户号"));
GetDlgItem(IDC_CHECK_SPACENAME)->SetWindowText(_T("显示套型编号"));
}
else // 非套内面积对象
{
GetDlgItem(IDC_CHECK_SPACECODE)->SetWindowText(_T("显示房间编号"));
GetDlgItem(IDC_CHECK_SPACENAME)->SetWindowText(_T("显示房间名称"));
}
}
////////////////////////////////
// 对象编辑: 房间
int EditSpace(AcDbObjectId id) //modified by fxj 090416 类型取代图层作判断依据,增加阳台类型。
{
/*
int cmddia;
xg_getvar(_T("CMDDIA"), &cmddia);
if (!cmddia)
return EditSpace0(id);
*/
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbSpace, pSpace);
DList<TSpaceData> lstSpaces;
TSpaceData::GetAllSpaces(lstSpaces);
BOOL bHouse = FALSE;
CString layerOld = pSpace->layer();
int nSpaceType = pSpace->GetType(); // sg add 081226,房间类型
if (nSpaceType==TDbSpace::kHouseArea)//modified by fxj
bHouse = TRUE;
CSpaceProperty dlg(bHouse,acedGetAcadFrame());
dlg.m_csCode = pSpace->m_sCode;
dlg.m_csName = pSpace->m_sName;
dlg.m_bMask = pSpace->IsMask();
dlg.m_bHas3D = pSpace->Has3D();
// dlg.m_csHeight.Format(_T("%g"), pSpace->m_nHeight);//del by fxj 090602
dlg.m_csFloorThick.Format(_T("%g"), pSpace->GetFloorThick());
dlg.m_bShowHatch = pSpace->HasHatch(); // sg add 081124
dlg.m_csHatch = pSpace->GetHatchStyle();
// modify by xly on 10908 真彩色的使用
//dlg.m_nColor = pSpace->GetHatchColor();
#if ( ADS <16 )
dlg.m_cColor.setColorIndex(pSpace->GetHatchColor());
#else
dlg.m_cColor = pSpace->GetHatchTrueColor();
#endif
dlg.m_dHatchScale = pSpace->GetHatchScale();
dlg.m_dSpareAngle = pSpace->GetHatchAngle()*180/PI;
dlg.m_nType = nSpaceType;
// int nTypeOld = nSpaceType; // add by fxj 080702
dlg.m_bHalArea = pSpace->IsHalfArea();
dlg.m_bShowOutline = pSpace->IsShowOutline();
//--------------------
// setup space code list
dlg.m_lstSpaceCodes.Reset();
for (int i=0L; i<lstSpaces.Length(); i++)
{
TSpaceData *pSpace = lstSpaces[i];
if (!!pSpace->m_sCode)
dlg.m_lstSpaceCodes.Append(tstrnew(pSpace->m_sCode));
}
dlg.m_lstSpaceCodes.QuickSort(_tcscmp);
// add xly on 100908 粉刷层厚度设置
dlg.m_csPaintLayerWid.Format(_T("%g"),pSpace->GetStuccoThickness());
// add by xly on 101111 设置房间编辑对话框的标注情况
dlg.m_bSpaceName = pSpace->IsDimName();
dlg.m_bSpaceCode = pSpace->IsDimCode();
dlg.m_bShowArea = pSpace->IsDimArea();
dlg.m_bShowUnit = pSpace->IsDimUnit();
CAcModuleResourceOverride vTemp;
if (dlg.DoModal() == IDOK)
{
if (pSpace->upgradeOpen() != Acad::eOk)
return RTERROR;
pSpace->assertWriteEnabled();
// Modify data member
pSpace->m_sCode = dlg.m_csCode;
pSpace->m_sName = dlg.m_csName;
pSpace->SetMask(dlg.m_bMask);
pSpace->SetHas3D(dlg.m_bHas3D);
pSpace->SetFloorThick(_tstof(dlg.m_csFloorThick));
pSpace->SetHatchStyle(dlg.m_csHatch); // sg add 081124
// modify by xly on 100908 真彩色的使用
//pSpace->SetHatchColor(dlg.m_nColor);
pSpace->SetHatchTrueColor(dlg.m_cColor);
pSpace->SetHasHatch(dlg.m_bShowHatch);
pSpace->SetHatchScale(dlg.m_dHatchScale);
pSpace->SetHatchAngle(dlg.m_nHatchAngle*PI/180);
// delete by xly on 110304 对象编辑时不影响填充的图层
//AcDbObjectId idHatch = InitLayer(LAY_SPACE_HATCH);//modified by fxj 090609
//pSpace->SetHatchLayer(idHatch);
// modify by xly on 101111根据8.5需求修改该房间对象,支持房间名和面积都不标注
// int nSpFlag = DocGetSpaceDispMode();
// int nSpFlag0 = nSpFlag;
// if (dlg.m_bShowArea)
// nSpFlag |= SPF_AREA;
// else
// nSpFlag &= ~SPF_AREA;
//
// if (dlg.m_bShowUnit)
// nSpFlag |= SPF_UNIT;
// else
// nSpFlag &= ~SPF_UNIT;
//
//// if (dlg.m_bShowCode) // sg modify 081119
//// nSpFlag |= SPF_CODE;
//// else
//// nSpFlag &= ~SPF_CODE;
// if (dlg.m_bSpaceCode && dlg.m_bSpaceName) // 同时标注
// {
// nSpFlag &= ~SPF_CODE;
// nSpFlag |= SPF_NAME_AND_CODE;
// }
// else
// {
// nSpFlag &= ~SPF_NAME_AND_CODE;
// if (dlg.m_bSpaceCode) // 标编号
// nSpFlag |= SPF_CODE;
// else // 标名称
// nSpFlag &= ~SPF_CODE;
// }
pSpace->SetDimNameAndCode(dlg.m_bSpaceName, dlg.m_bSpaceCode);
pSpace->SetDimArea(dlg.m_bShowArea);
pSpace->SetDimUnit(dlg.m_bShowUnit);
//del by fxj 090602
// double h = _tstof(dlg.m_csHeight);
// if (h > 1.0E-6)
// pSpace->m_nHeight = h;
//----------add by fxj 080623--------
nSpaceType = dlg.m_nType;
CString layer;
switch(nSpaceType)
{
case 0:layer=LAY_SPACE; break;
case 1:layer=LAY_HOUSE_SPACE; break;
case 2:layer=LAY_BUILDING_SPACE; break;
case 3:layer=LAY_HOLE_SPACE; break;
case 4:layer=LAY_SHARE_SPACE; break;
case 5:layer=LAY_BALCONY_SPACE; break;
//del by fxj 090602
//case 6:
// {
// // modified by fxj 090426
// nSpaceType=nTypeOld;
// layer=layerOld;
// break;
//
// }
}
pSpace->setLayer(InitLayer(layer));//modified by fxj 090223
pSpace->SetType((TDbSpace::AreaType)nSpaceType);
if (nSpaceType==3)//add by fxj 090724
pSpace->SetName(_T("洞口"));
pSpace->SetHalfArea(dlg.m_bHalArea);
XPoly2D polyPath;
AcGeVector3d normal;
pSpace->GetPathPoly(polyPath,normal);
pSpace->SetShowOutline(dlg.m_bShowOutline);
// -------------------------------------
// add xly on 100908 粉刷层厚度设置,套内面积和套内阳台面积不设置粉刷层
if (dlg.m_nType != 1 || dlg.m_nType != 5)
{
double dWid = _tstof(dlg.m_csPaintLayerWid);
pSpace->SetStuccoThickness(dWid);
}
pSpace->downgradeOpen();
// modify xly on 101211 根据8.5需求房间对象的修改,更新显示
/*if (nSpFlag != nSpFlag0)
{
DocSetSpaceDispMode(nSpFlag);
PickSet ss(SS_FREE);
ss.Get(_T("X"), NULL, NULL, RBList(RTDXF0, _T("TCH_SPACE"), NULL));
UpdateGraphic(ss);
}*/
PickSet ss(SS_FREE);
ss.Get(_T("X"), NULL, NULL, RBList(RTDXF0, _T("TCH_SPACE"), NULL));
UpdateGraphic(ss);
}
OPENOBJ_END();
return RTNORM;
}