#include "StdAfx.h" #include ".\itemnet.h" #include "SigmaDoc.h" #include ".\itemframe.h" CItemEditNet::CItemEditNet(CSigmaDoc * ppDoc) : CItemEditFrame(ppDoc) , m_pNet(NULL) , DisplayIdea(0) , MarkText(0) , TextFormat(0) , color(0) , m_dThickness(0) { this->SetType(ITEM_NET); } CItemEditNet::~CItemEditNet(void) { } void CItemEditNet::DoLButtonUp(CDC* pDC) { CRect8 rect=this->GetRect(); m_pNet=new CNet; *(CRect8*)m_pNet=rect; if(!GetDoc()->GetDraw()->GetProjection().IsEmpty()) { m_pNet->SetProjection(&(GetDoc()->GetDraw()->m_ExchangeXYZ)); //自动计算步长 rect=m_pNet->GetRangeBL(); double step=min(rect.Width()/5, rect.Height()/5); step*=60; //转换为分单位 step=AfxGetPublicFunction()->GetLBStep(step); m_pNet->m_step.SetSize(step, step); } //自动根据单位设置文字大小 //double scale=GetDoc()->GetCurrentUnitScale(); //TOFIX:关键函数.要实现. //m_pNet->ScaleProperty(scale, scale); /* CPropertiesSheet sheet(IDS_STRING_NET,GetView(),0,FALSE); sheet.SetItem(this); if(sheet.DoModal()==IDOK) { if(GetDoc()->GetDraw()->GetProjection().IsEmpty()) { ::AfxMessageBox(IDS_PROJECTION_IS_EMPTY); delete m_pNet; m_pNet=NULL; GetDoc()->EnableDefaultTool(); } else { POSITION pos=AddElement(m_pNet,DOUBLEFOX_NET); GetDoc()->GetDraw()->SetElementColor(pos,color); m_pNet=NULL; COne* pOne=GetDoc()->GetDraw()->GetAt(pos); if(pOne->IsCanEdit() && pOne->IsView()) GetView()->Select(pos); else GetDoc()->EnableDefaultTool(); } } else { delete m_pNet; m_pNet=NULL; GetDoc()->EnableDefaultTool(); } */ } void NItem::CItemEditNet::CreateFrame(CNet* pNet) { CFrame* pFrame=new CFrame(); CItemEditFrame item(GetDoc()); COLORREF col=color; if(item.CreateFrame(*pFrame, pNet, col)) { POSITION pos=item.AddElement(pFrame,DOUBLEFOX_FRAME); GetDoc()->GetDraw()->SetElementColor(pos,item.color); //Select(pos); } else delete pFrame; } /* BOOL CItemEditNet::InitPropertyGrid(CXTPPropertyGrid& grid) { BOOL brt=FALSE; if(this->IsEditState()) { COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); color=pOne->color; CNet* pValue=(CNet*)pOne->GetValue(); brt=InitPropertyGrid(grid,pValue); } else if(m_pNet) brt=InitPropertyGrid(grid,m_pNet); CItem::InitPropertyGrid(grid); return brt; } BOOL CItemEditNet::OnGridItemChangeValue(CXTPPropertyGridItem* pItem) { if(this->IsEditState()) { COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); CNet* pValue=(CNet*)pOne->GetValue(); return OnGridItemChangeValue(pItem,pValue); } return OnGridItemChangeValue(pItem,m_pNet); } BOOL CItemEditNet::InitPropertyGrid(CXTPPropertyGrid& grid, CNet* pValue) { if(pValue==NULL) return FALSE; CPropertyGridItemAdd ItemAdd(NULL); CXTPPropertyGridItem* pItem; CString strFormat=GetFloatFormatString(); GetDisplayIdea(pValue); GetMarkText(pValue); //网格//IDS_STRING_NET//经纬网 pItem=grid.AddCategory(IDS_STRING_NET); ItemAdd.SetItem(pItem); pItem->Expand(); ItemAdd.AddItemSize8(IDS_GI_GRID_STEP_GRID, pValue->m_step, NULL, IDS_GI_NET_STEP_LONGITUDE, IDS_GI_NET_STEP_LATITUDE); ItemAdd.AddItemCombo(IDS_GI_NET_VIEW_IDEA, IDS_GI_NET_VIEW_COMBO, DisplayIdea,&DisplayIdea); ItemAdd.AddItemDouble(IDS_GI_NET_SCALE, pValue->scale, strFormat, NULL); //刻度 ItemAdd.AddItemColor(IDS_GI_COLOR, color, NULL); //文字 pItem=grid.AddCategory(IDS_STRING_Text); ItemAdd.SetItem(pItem); pItem->Expand(); m_szText = GetUnitMode().toPrintUnit(pValue->m_szText); ItemAdd.AddItemUnitDouble(IDS_STRING_TEXT_HEIGHT, GetUnit(), m_szText.cy, strFormat, &m_szText.cy); ItemAdd.AddItemCombo(IDS_GI_NET_MARK, IDS_GI_NET_MARK_COMBO, MarkText, &MarkText); //高级设置 pItem=grid.AddCategory(IDS_STRING_SETTING); ItemAdd.SetItem(pItem); pItem->Expand(); ItemAdd.AddItemRect(IDS_GI_COORDINATE_RECT, *(CRect8*)pValue, NULL); //大地坐标范围 m_rect=pValue->GetRangeBL(); if(!GetDoc()->GetDraw()->GetProjection().IsEmpty()) ToDMS(m_rect); CCustomItemRect* pRect=(CCustomItemRect*)ItemAdd.AddItemRect(IDS_GI_NET_RECT, m_rect,&m_rect);//经纬度范围 pRect->SetCaptionNetting(); pItem=ItemAdd.AddItemString(IDS_GI_NET_PROJECTION, GetDoc()->GetDraw()->GetProjection()); pItem->SetReadOnly(TRUE); //投影 //边框 return InitPropertyGrid_Frame(grid, pValue); } BOOL CItemEditNet::InitPropertyGrid_Frame(CXTPPropertyGrid& grid, CNet* pNet) { CPropertyGridItemAdd ItemAdd(NULL); CXTPPropertyGridItem* pItem=grid.AddCategory(IDS_STRING_Frame); ItemAdd.SetItem(pItem); pItem->Expand(); CString strFormat=GetFloatFormatString(); CFrame* pFrame=pNet->GetOutFrame(); m_bShowOutFrame = pNet->IsHasOutFrame(); ItemAdd.AddItemBool(IDS_STRING_SHOW_FRAME, m_bShowOutFrame, &m_bShowOutFrame); CString name;if(!pFrame->IsEmpty()) name=pFrame->GetName(); m_bBlackLine=pFrame->IsBlackLine(); pItem=ItemAdd.AddItemMark(IDS_GI_MARK_NAME, name, pFrame->pDraw); pItem->SetReadOnly(m_bBlackLine); m_dThickness = GetUnitMode().toPrintUnit(pFrame->thickness); ItemAdd.AddItemUnitDouble(IDS_GI_FRAME_THICKNESS, GetUnit(), m_dThickness, strFormat, &m_dThickness); ItemAdd.AddItemBool(IDS_GI_FRAME_BLACK, m_bBlackLine, &m_bBlackLine); m_colFrame=pNet->GetFrameColor(); ItemAdd.AddItemColor(IDS_STRING_COLOR, m_colFrame, &m_colFrame); return TRUE; } */ bool CItemEditNet::ChangeSetting(ItemEditNetData * pData, CNet* pNet) { if (pData == NULL || pNet == NULL) return false; m_bShowOutFrame = pData->isShowOutBorder; pNet->EnableOutFrame(m_bShowOutFrame?true:false); COLORREF color = RGB(pData->borderColorR, pData->borderColorG, pData->borderColorB); m_colFrame = color; pNet->SetFrameColor(m_colFrame); m_bBlackLine = pData->blackOutterBorder; pNet->GetOutFrame()->EnableBlackLine(m_bBlackLine); pNet->GetOutFrame()->thickness = GetUnitMode().toRealUnit(pData->borderThickness); return true; //{ // CXTPPropertyGridItem* pp=FindItem(pItem,IDS_GI_MARK_NAME); // if(pp)pp->SetReadOnly(m_bBlackLine); //} //case IDS_GI_MARK_NAME: // { // CString name=pItem->GetValue(); // CString txt=pNet->GetOutFrame()->GetName(); // if(name.CollateNoCase(txt)!=0) // { // AfxGetGlobalMark()->BackupMark(); // AfxGetGlobalMark()->SetMark(GetDoc()->GetDraw()->GetMark()); // pNet->GetOutFrame()->SetName(name); // pNet->GetOutFrame()->PositionNew(0); // AfxGetGlobalMark()->RestoreMark(); // } // else // bUpdate=FALSE; // } // bUpdate=TRUE; // break; } /* BOOL CItemEditNet::OnGridItemChangeValue(CXTPPropertyGridItem* pItem, CNet* pValue) { if(pValue==NULL) return FALSE; COne* pOne=NULL; if(IsEditState()) pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos()); BOOL bUpdate=FALSE; switch(pItem->GetID()) { case IDS_GI_COLOR: color=atol(pItem->GetValue());; if(pOne) pOne->color=color; bUpdate=TRUE; break; case IDS_GI_GRID_STEP_GRID: { CSize8 sz=((CCustomItemPoint*)pItem)->GetValuePoint(); pValue->SetStep(sz); } bUpdate=TRUE; break; case IDS_GI_NET_SCALE: pValue->scale=((CXTPPropertyGridItemDouble*)pItem)->GetDouble(); bUpdate=TRUE; break; case IDS_STRING_TEXT_HEIGHT: pValue->m_szText.cy = GetUnitMode().toRealUnit(m_szText.cy); pValue->m_szText.cx=pValue->m_szText.cy*0.4; bUpdate=TRUE; break; case IDS_GI_NET_RECT: { //转换为分 CRect8 rt=m_rect; if(!GetDoc()->GetDraw()->GetProjection().IsEmpty()) { ToDegree(rt); rt.left*=60; rt.bottom*=60; rt.right*=60; rt.top*=60; pValue->ChangeToXY_M(rt.left, rt.bottom); pValue->ChangeToXY_M(rt.right, rt.top); } *(CRect8*)pValue=rt; { CCustomItemRect* pp=(CCustomItemRect*)((CXTPPropertyGridView*)(pItem->GetGrid()))->GetPropertyGrid()->FindItem(IDS_GI_COORDINATE_RECT); rt.NormalizeRect(); if(pp)pp->SetRectValue(rt); } pValue->ClearCurve(); } bUpdate=TRUE; break; case IDS_GI_COORDINATE_RECT: *(CRect8*)pValue=((CCustomItemRect*)pItem)->GetValueRect8(); { CCustomItemRect* pp=(CCustomItemRect*)((CXTPPropertyGridView*)(pItem->GetGrid()))->GetPropertyGrid()->FindItem(IDS_GI_NET_RECT); m_rect=pValue->GetRangeBL(); if(pp)pp->SetRectValue(m_rect); } pValue->ClearCurve(); bUpdate=TRUE; break; case IDS_GI_NET_VIEW_IDEA: SetDisplayIdea(pValue); bUpdate=TRUE; break; case IDS_GI_NET_MARK: SetMarkText(pValue); bUpdate=TRUE; break; default: bUpdate=OnGridItemChangeValue_Frame(pItem, pValue); break; } return bUpdate | CItem::OnGridItemChangeValue(pItem); } */ void CItemEditNet::GetDisplayIdea(CNet* pValue) { switch(pValue->GetDisplayMode()) { default: case CNet::showLine: DisplayIdea=0; break; case CNet::showCrossPoint: DisplayIdea=1; break; case CNet::showNull: DisplayIdea=2; break; } } void CItemEditNet::SetDisplayIdea(CNet* pValue) { switch(DisplayIdea) { default: case 0: pValue->SetDisplayMode(CNet::showLine); break;//显示曲线 case 1: pValue->SetDisplayMode(CNet::showCrossPoint); break;//显示交点 case 2: pValue->SetDisplayMode(CNet::showNull); break;//显示为空1 } } void CItemEditNet::GetMarkText(CNet* pValue) { switch(pValue->GetSideMode()) { default: case CNet::markAllSide: MarkText=0; break;//所有边 case CNet::markLeftTop: MarkText=1; break;//左边+上边 case CNet::markTopRight: MarkText=2; break;//上边+右边 case CNet::markRightBottom: MarkText=3; break;//右边+下边 case CNet::markBottomLeft: MarkText=4; break;//下边+左边 } } void CItemEditNet::SetMarkText(CNet* pValue) { switch(MarkText) { default: case 0: pValue->SetSideMode(CNet::markAllSide); break; case 1: pValue->SetSideMode(CNet::markLeftTop); break; case 2: pValue->SetSideMode(CNet::markTopRight); break; case 3: pValue->SetSideMode(CNet::markRightBottom); break; case 4: pValue->SetSideMode(CNet::markBottomLeft); break; } } void CItemEditNet::GetTextFormat(CNet* pValue) { switch(pValue->GetTextMode()) { case CNet::textGeography: TextFormat=0; break; case CNet::textMath: TextFormat=1; break; case CNet::textGeography1: TextFormat=2; break; default: case CNet::textGeography2: TextFormat=3; break; } } void CItemEditNet::SetTextFormat(CNet* pValue) { switch(TextFormat) { case 0: pValue->SetTextMode(CNet::textGeography); break;//地理 case 1: pValue->SetTextMode(CNet::textMath); break;//数学 case 2: pValue->SetTextMode(CNet::textGeography1); break;//地理1 default: case 3: pValue->SetTextMode(CNet::textGeography2); break;//地理2(all) } } void NItem::CItemEditNet::ToDMS(CRect8& rect) { rect.left=AfxGetPublicFunction()->ToDMS(rect.left); rect.top=AfxGetPublicFunction()->ToDMS(rect.top); rect.right=AfxGetPublicFunction()->ToDMS(rect.right); rect.bottom=AfxGetPublicFunction()->ToDMS(rect.bottom); } void NItem::CItemEditNet::ToDegree(CRect8& rect) //由度分秒转换为度格式 { rect.left=AfxGetPublicFunction()->ToDegree(rect.left); rect.top=AfxGetPublicFunction()->ToDegree(rect.top); rect.right=AfxGetPublicFunction()->ToDegree(rect.right); rect.bottom=AfxGetPublicFunction()->ToDegree(rect.bottom); }