// 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; nerase(); 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; iEnableWindow(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; iEnableWindow(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='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 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; im_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; }