#include "StdAfx.h" #include "MarkObjPropertieMgr.h" #include "MainFrm.h" #include "GlobalFunction.h" #include "Propertie.h" #include "PropertieMgr.h" #include "CommandStretch.h" #include "CommandMgr.h" CMarkObjPropertieMgr *gMarkObjPropertieMgr = new CMarkObjPropertieMgr; CMarkObjPropertieMgr::CMarkObjPropertieMgr(void) { m_PenNum = -1;//选择obj 的笔号 } CMarkObjPropertieMgr::~CMarkObjPropertieMgr(void) { } #if 1 //创建属性页 CMFCPropertyGridProperty *CMarkObjPropertieMgr::CreatGridProperty() { //更新公共属性值 UpdateCommonPropVal(); //-------------------------------------------------------------------------------// CString PropertyName;//属性名称 CString Description;//描述 CString Name; //-------------------------------------------------------------------------------// PropertyName = _T("图形属性"); CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName); PropertyName = _T("基本属性"); CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(PropertyName); //-------------------------------------------------------------------------------// { //添加属性变量映射 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_Coord.x); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); //添加属性显示 PropertyName = _T("x 坐标"); Description = _T("选择对象的x 方向坐标值(单位:mm)"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_Coord.x, Description); pGroup1->AddSubItem(p1); gDrawPropertieMgr.Insert(p1, pPropertie); } //-------------------------------------------------------------------------------// { //添加属性变量映射 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_Coord.y); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); //添加属性显示 PropertyName = _T("y 坐标"); Description = _T("选择对象的y 方向坐标值(单位:mm)"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_Coord.y, Description); pGroup1->AddSubItem(p1); gDrawPropertieMgr.Insert(p1, pPropertie); } //-------------------------------------------------------------------------------// { //添加属性变量映射 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_Size.w); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); //添加属性显示 PropertyName = _T("x 尺寸"); Description = _T("选择对象的宽度值(单位:mm)"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_Size.w, Description); pGroup1->AddSubItem(p1); gDrawPropertieMgr.Insert(p1, pPropertie); } //-------------------------------------------------------------------------------// { //添加属性变量映射 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_Size.h); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); //添加属性显示 PropertyName = _T("y 尺寸"); Description = _T("选择对象的高度值(单位:mm)"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_Size.h, Description); pGroup1->AddSubItem(p1); gDrawPropertieMgr.Insert(p1, pPropertie); } if(m_PenNum >=0) { //添加属性变量映射 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_PenNum); pPropertie->SetType(_PROP_TYPE_INT); pPropertie->SetpModule(this); //添加属性显示 PropertyName = _T("笔号"); Description = _T("选择对象的笔号"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_PenNum, Description); pGroup1->AddSubItem(p1); gDrawPropertieMgr.Insert(p1, pPropertie); } pGroup->AddSubItem(pGroup1); //创建对象的特殊属性 CMFCPropertyGridProperty* pSpecialGrid = CreatSpecialGridProperty(this); if(pSpecialGrid != NULL) { pGroup->AddSubItem(pSpecialGrid); } return pGroup; } //创建对象的特殊属性 CMFCPropertyGridProperty *CMarkObjPropertieMgr::CreatSpecialGridProperty(CModule *pModule) { CLayer &layer = gLayer; return layer.CreatSpecialGridProperty(pModule); } //响应属性的改变 void CMarkObjPropertieMgr::OnPropertyChanged() { CLayer &layer = gLayer; //移动 if(MoveSelObj()==false) { //改变尺寸 if(ResizeSelObj()==false) { //特殊属性 OnSpecialPropertyChanged(); } } //更新属性值 UpdateSelMarkObjPropertie(); //刷新 GetCurViewPtr()->RefreshView(); } //相应特殊属性的变化 void CMarkObjPropertieMgr::OnSpecialPropertyChanged() { CLayer &layer = gLayer; layer.OnSpecialPropertyChanged(); } #endif //更新选择对象的属性 void CMarkObjPropertieMgr::UpdateSelMarkObjPropertie() { if(gbFactoryMode) { GetFrame()->m_DlgGraphEdit.UpdateObjPropList(); } } //更新公共属性值 void CMarkObjPropertieMgr::UpdateCommonPropVal() { CObjContainer &ObjContainer = gLayer.GetObjContainer(); DbRect rect = ObjContainer.GetSelObjRect(); //尺寸 m_Size = rect.GetSize(); //坐标 m_Coord = rect.GetCenterPt(); m_PenNum = ObjContainer.GetSelObjPenNum(); } //通过修改坐标移动obj bool CMarkObjPropertieMgr::MoveSelObj() { CLayer &layer = gLayer; Dbxy CoordOld = layer.GetSelObjRect().GetCenterPt(); if(!IsTwoDbEqual(m_Coord.x,CoordOld.x) || !IsTwoDbEqual(m_Coord.y,CoordOld.y)) { layer.OnMove(m_Coord.x-CoordOld.x,m_Coord.y-CoordOld.y); return true; } return false; } //改变尺寸 bool CMarkObjPropertieMgr::ResizeSelObj() { CLayer &layer = gLayer; DbRect rect = layer.GetSelObjRect(); DbSize SizeOld = rect.GetSize(); Dbxy BasePt;//基准点 double OldSize,NewSize; double Diff;//新旧尺寸的差 X_OR_Y xy; bool flg = false; if(!IsTwoDbEqual(m_Size.w,SizeOld.w) && m_Size.w > 0) { BasePt = rect.GetCenterPt();//基准点 OldSize = SizeOld.w; NewSize = m_Size.w; Diff = m_Size.w-SizeOld.w;//最大移动量 xy = _X; flg = true; } if(!IsTwoDbEqual(m_Size.h,SizeOld.h) && m_Size.h > 0) { BasePt = rect.GetCenterPt();//基准点 OldSize = SizeOld.h; NewSize = m_Size.h; Diff = m_Size.h-SizeOld.h;//最大移动量 xy = _Y; flg = true; } if(flg) { SObjOperatePar par; par.OpType = _OP_STRETCH; par.BasePt = BasePt; par.OldSize = OldSize; par.NewSize = NewSize; par.Diff = Diff; par.xy = xy; //创建undo 用的指令-----start CCommandStretch *pCommand = new CCommandStretch; pCommand->SetOperatePar(par); gCommandMgr.AddUndoCommand(pCommand); //创建undo 用的指令-----end pCommand->Excute(); return true; } return false; }