问题描述
各位大哥大姐们好,我初学MapInfo,想请教一下,如何用代码实现设置多边形区域(C#)
解决方案
解决方案二:
使用了CreateCustomTool方法创建polytool工具,然后根据这个去设置多边形区域,联机帮助和《MapX参考指南》中会对该对象给出解释,具体的代码实现自己写写吧!
解决方案三:
这是联机帮助里的部分示例代码:constshortCUSTOM_POLYGON_TOOL=42;constshortCUSTOM_POLYLINE_TOOL=43;if(Flags==miPolyToolEnd){//用户通过双击完成PolyTool的使用if(ToolNum==CUSTOM_POLYGON_TOOL){//制作新的区域图元并将其添加到第一个图层CMapXFeaturef;CMapXPointspts;pts.AttachDispatch(Points,FALSE);if(!f.CreateDispatch(f.GetClsid())){TRACE0("FailedtoCreatePointobject");return;}try{f.Attach(m_Map.GetDispatch());//设置多边形的样式f.SetType(miFeatureTypeRegion);f.GetStyle().SetRegionPattern(miPatternSolid);f.GetStyle().SetRegionColor(255);f.GetStyle().SetRegionBorderColor(0);f.GetStyle().SetRegionBorderWidth(2);f.GetStyle().SetRegionBorderStyle(1);//现在使用由事件为我提供的点f.GetParts().Add(pts);m_Map.GetLayers().Item(1).AddFeature(f);}catch(COleDispatchException*e){e->ReportError();e->Delete();}catch(COleException*e){e->ReportError();e->Delete();}}elseif(ToolNum==CUSTOM_POLYLINE_TOOL){CMapXFeaturef;CMapXPointspts;pts.AttachDispatch(Points,FALSE);if(!f.CreateDispatch(f.GetClsid())){TRACE0("FailedtoCreateFeatureobject");return;}try{f.Attach(m_Map.GetDispatch());//设置多义线的样式f.SetType(miFeatureTypeLine);f.GetStyle().SetLineStyle(1);f.GetStyle().SetLineColor(255);f.GetStyle().SetLineWidth(2);//现在使用由事件为我提供的点f.GetParts().Add(pts);m_Map.GetLayers().Item(1).AddFeature(f);}catch(COleDispatchException*e){e->ReportError();e->Delete();}catch(COleException*e){e->ReportError();e->Delete();}}}//其他可能的Flag值://miPolyToolBegin用户开始使用该工具//miPolyToolEndEscaped用户取消该工具//miPolyToolInProgress用户向多义线添加新的节点或使用BACKSPACE删除节点}我写的时候
解决方案四:
constshortCUSTOM_POLYGON_TOOL=42;constshortCUSTOM_POLYLINE_TOOL=43;voidCSampleProjectView::OnPolyToolUsed(shortToolNum,longFlags,LPDISPATCHPoints,BOOLbShift,BOOLbCtrl,BOOLFAR*EnableDefault){if(Flags==miPolyToolEnd){//用户通过双击完成PolyTool的使用if(ToolNum==CUSTOM_POLYGON_TOOL){//制作新的区域图元并将其添加到第一个图层CMapXFeaturef;CMapXPointspts;pts.AttachDispatch(Points,FALSE);*********************************if(!f.CreateDispatch(f.GetClsid())){******************************TRACE0("FailedtoCreatePointobject");return;}try{f.Attach(m_Map.GetDispatch());**********************************//设置多边形的样式f.SetType(miFeatureTypeRegion);f.GetStyle().SetRegionPattern(miPatternSolid);f.GetStyle().SetRegionColor(255);f.GetStyle().SetRegionBorderColor(0);f.GetStyle().SetRegionBorderWidth(2);f.GetStyle().SetRegionBorderStyle(1);//现在使用由事件为我提供的点f.GetParts().Add(pts);*************************************m_Map.GetLayers().Item(1).AddFeature(f);************************************}catch(COleDispatchException*e){e->ReportError();e->Delete();}catch(COleException*e){e->ReportError();e->Delete();}}我打****的地方都会报错说找不到方法,不知道为什么????????????