阅读:2460回复:5
继续贡献Vc 中MO编辑对象代码
#if !defined(AFX_ADDDRAWOBJECT_H__F00730DA_9F0C_4AFB_A55B_8784233C6CCC__INCLUDED_)
#define AFX_ADDDRAWOBJECT_H__F00730DA_9F0C_4AFB_A55B_8784233C6CCC__INCLUDED_ #include "MO_COMMON\mopoint.h" // Added by ClassView #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // AddDrawObject.h : header file // ///////////////////////////////////////////////////////////////////////////// // CAddDrawObject window class CAddDrawObject : public CObject { // Construction public: CAddDrawObject(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAddDrawObject) //}}AFX_VIRTUAL // Implementation public: void AddEllipseMouseDown(); void AddEllipse( CString strCurrentLayer ); void AddRect( CString strCurrentLayer ); void AddRectMouseDown(); void AddPolygon( CString strCurrentLayer ); void AddPolygonMouseDown(); void AddLine( CString strCurrentLayer ); void AddLineMouseDown(); void AddPoint( CString strCurrentLayer ); void AddPointMouseUp( long x , long y ); void InitialMap( CMap1 *pMap ); void AddPointMouseDown( long x , long y); virtual ~CAddDrawObject(); // Generated message map functions protected: //{{AFX_MSG(CAddDrawObject) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG private: CMoPoint m_point ; CMoLine m_line ; CMoRectangle m_rect ; CMoEllipse m_ellipse ; CMoPolygon m_polygon ; CMap1 *m_pMap ; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ADDDRAWOBJECT_H__F00730DA_9F0C_4AFB_A55B_8784233C6CCC__INCLUDED_) |
|
1楼#
发布于:2004-01-13 09:59
// AddDrawObject.cpp : implementation file
// #include "stdafx.h" #include "MapObjectTest.h" #include "AddDrawObject.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAddDrawObject CAddDrawObject::CAddDrawObject() { } CAddDrawObject::~CAddDrawObject() { } ///////////////////////////////////////////////////////////////////////////// // CAddDrawObject message handlers void CAddDrawObject::AddPointMouseDown(long x, long y) { VARIANT va; VariantInit(&va); // Get the tracking layer CMoTrackingLayer tLayer(m_pMap->GetTrackingLayer()); // Capture a new point CMoPoint pt(m_pMap->ToMapPoint((float)x, (float)y)); if (LPDISPATCH(pt)) m_point = pt; // create a temp rectangle with which to refresh the screen // around the point CMoRectangle r = CMoRectangle(); r.CreateDispatch(TEXT("MapObjects2.Rectangle")); r.SetBottom(pt.GetY()); r.SetLeft(pt.GetX()); r.SetTop(pt.GetY()+1.0); r.SetRight(pt.GetX()+1.0); r.ScaleRectangle(50.0); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; tLayer.Refresh(true, va); } void CAddDrawObject::InitialMap(CMap1 *pMap) { m_pMap = pMap; } void CAddDrawObject::AddPointMouseUp(long x, long y) { VARIANT va; VariantInit(&va); CMoPoint pt(m_pMap->ToMapPoint((float)x, (float)y)); if (LPDISPATCH(pt)) m_point = pt; // create a temp rectangle with which to refresh the screen // around the point CMoRectangle r = CMoRectangle(); r.CreateDispatch(TEXT("MapObjects2.Rectangle")); r.SetBottom( pt.GetY() ); r.SetLeft( pt.GetX() ); r.SetTop( pt.GetY() + 1.0 ); r.SetRight( pt.GetX() + 1.0 ); r.ScaleRectangle(50.0); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; CRect rect ; rect.left = x - 1 ; rect.top = y + 1 ; rect.right = x + 1 ; rect.bottom = y - 1; r.ScaleRectangle(0.05 ); m_pMap->RefreshRect( r ); } void CAddDrawObject::AddPoint(CString strCurrentLayer) { if( !m_point ) return ; CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; //sym.SetColor(moPurple); sym.SetColor(moRed); sym.SetSymbolType(moPointSymbol); sym.SetStyle(moCircleMarker); m_pMap->DrawShape( m_point , sym); ////»­µã¿ªÊ¼///// if( strCurrentLayer == "" ) { return ; } CMoLayers layers(m_pMap->GetLayers()); CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer)))); if( !layer ) { AfxMessageBox("ÄúËùÑ¡ÔñµÄͼ²ãÃû£º" + strCurrentLayer + " ²»´æÔÚ!!!" + "ÇëÈ·ÈÏ¡£"); return ; } else { if( m_point ) { long layerShapeType = layer.GetShapeType() ; if( layerShapeType != moShapeTypePoint ) { AfxMessageBox("µ±Ç°ÄúËùÑ¡ÔñµÄͼ²ã:" +strCurrentLayer + "²»ÊǵãÐ͵Ä!!!"); return ; } CMoRecordset recs( layer.GetRecords()); CMoFields fields( recs.GetFields()); CString featureName; recs.AddNew(); // "Shape" = m_point SetValue(fields, TEXT("Shape"), LPDISPATCH( m_point )); // "Name" = featureName featureName.Format("%s%d", "point", 1); SetValue(fields, TEXT("Name"), featureName); // "Area" = m_point.GetArea() SetValue(fields, TEXT("Area"), 0.0); // "Perimeter" = m_point.GetPerimeter() SetValue(fields, TEXT("Perimeter"), 0.0); recs.Update(); //ReleasePoints(); } } m_point.ReleaseDispatch(); //m_map.Refresh(); ////»­µã½áÊø///// } void CAddDrawObject::AddLineMouseDown() { // Track a new line CMoLine line( CMoLine(m_pMap->TrackLine()) ); if (LPDISPATCH(line)) m_line = line ; CMoRectangle r = CMoRectangle(m_line.GetExtent()); VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; CMoTrackingLayer tLayer(m_pMap->GetTrackingLayer()); tLayer.Refresh(true, va); } void CAddDrawObject::AddLine(CString strCurrentLayer) { if( !m_line ) return ; CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; sym.SetColor(moRed); sym.SetSymbolType(moLineSymbol); sym.SetStyle(moSolidLine); sym.SetSize(2); m_pMap->DrawShape( m_line , sym ); ////»­Ïß¿ªÊ¼///// if( strCurrentLayer == "" ) { return ; } CMoLayers layers(m_pMap->GetLayers()); CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer)))); if( !layer ) { AfxMessageBox("ÄúËùÑ¡ÔñµÄͼ²ãÃû£º" + strCurrentLayer + " ²»´æÔÚ!!!" + "ÇëÈ·ÈÏ¡£"); return ; } else { if( m_line ) { long layerShapeType = layer.GetShapeType() ; if( layerShapeType != moShapeTypeLine ) { AfxMessageBox("µ±Ç°ÄúËùÑ¡ÔñµÄͼ²ã:" +strCurrentLayer + "²»ÊÇÖ±ÏßÐ͵Ä!!!"); return ; } CMoRecordset recs(layer.GetRecords()); CMoFields fields(recs.GetFields()); CString featureName; recs.AddNew(); // "Shape" = m_line SetValue(fields, TEXT("Shape"), LPDISPATCH( m_line )); // "Name" = featureName featureName.Format("%s%d", "line", 1 ); SetValue(fields, TEXT("Name"), featureName); // "Area" = m_point.GetArea() SetValue(fields, TEXT("Area"), 0.0); // "Perimeter" = m_point.GetPerimeter() SetValue(fields, TEXT("Perimeter"), m_line.GetLength()); recs.Update(); } //ReleaseLines(); } CMoRectangle r = m_line.GetExtent() ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; m_pMap->RefreshRect( r ); m_line.ReleaseDispatch(); ////»­Ïß½áÊø///// } void CAddDrawObject::AddPolygonMouseDown() { CMoPolygon poly( CMoPolygon(m_pMap->TrackPolygon()) ); if (LPDISPATCH(poly)) m_polygon = poly ; CMoRectangle rect = CMoRectangle(m_polygon.GetExtent()); VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer(m_pMap->GetTrackingLayer()); tLayer.Refresh(true, va); } void CAddDrawObject::AddPolygon(CString strCurrentLayer) { CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; sym.SetColor(moRed); sym.SetSymbolType(moFillSymbol); sym.SetStyle(moGrayFill); sym.SetSize(2); m_pMap->DrawShape( m_polygon , sym ); ////»­Ïß¿ªÊ¼///// if( strCurrentLayer == "" ) { return ; } CMoLayers layers(m_pMap->GetLayers()); CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer)))); if( !layer ) { AfxMessageBox("ÄúËùÑ¡ÔñµÄͼ²ãÃû£º" + strCurrentLayer + " ²»´æÔÚ!!!" + "ÇëÈ·ÈÏ¡£"); return ; } else { if( m_polygon ) { long layerShapeType = layer.GetShapeType() ; if( layerShapeType != moShapeTypePolygon ) { AfxMessageBox("µ±Ç°ÄúËùÑ¡ÔñµÄͼ²ã:" +strCurrentLayer + "²»ÊÇÃæÐ͵Ä!!!"); return ; } CMoRecordset recs(layer.GetRecords()); CMoFields fields(recs.GetFields()); CString featureName; recs.AddNew(); // "Shape" = m_poly SetValue(fields, TEXT("Shape"), LPDISPATCH(m_polygon)); // "Name" = featureName featureName.Format("%s%d", "poly", 0 ); SetValue(fields, TEXT("Name"), featureName); // "Area" = m_poly.GetArea() SetValue(fields, TEXT("Area"), m_polygon.GetArea()); // "Perimeter" = m_poly.GetPerimeter() SetValue(fields, TEXT("Perimeter"), m_polygon.GetPerimeter()); recs.Update(); } } CMoRectangle r = m_polygon.GetExtent() ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; m_pMap->RefreshRect( r ); m_polygon.ReleaseDispatch(); ////»­Ïß½áÊø///// } void CAddDrawObject::AddRectMouseDown() { CMoRectangle rect( CMoRectangle(m_pMap->TrackRectangle()) ); if (LPDISPATCH(rect)) m_rect = rect ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer(m_pMap->GetTrackingLayer()); tLayer.Refresh(true, va); } void CAddDrawObject::AddRect(CString strCurrentLayer) { if( !m_rect ) return ; CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; sym.SetColor(moRed); sym.SetSymbolType(moFillSymbol); sym.SetStyle(moGrayFill); sym.SetSize(2); m_pMap->DrawShape( m_rect , sym ); ////»­Ïß¿ªÊ¼///// if( strCurrentLayer == "" ) { return ; } CMoLayers layers(m_pMap->GetLayers()); CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer)))); if( !layer ) { AfxMessageBox("ÄúËùÑ¡ÔñµÄͼ²ãÃû£º" + strCurrentLayer + " ²»´æÔÚ!!!" + "ÇëÈ·ÈÏ¡£"); return ; } else { if( m_rect ) { long layerShapeType = layer.GetShapeType() ; if( layerShapeType != moShapeTypePolygon ) { AfxMessageBox("µ±Ç°ÄúËùÑ¡ÔñµÄͼ²ã:" +strCurrentLayer + "²»ÊǾØÐÎÐ͵Ä!!!"); return ; } CMoRecordset recs(layer.GetRecords()); CMoFields fields(recs.GetFields()); CMoRectangle rect(m_pMap->GetFullExtent()); VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CString featureName ; recs.AddNew(); CMoRectangle r( m_rect ); CMoPolygon poly(r.Buffer(0.0, va )); // "Shape" = poly SetValue(fields, TEXT("Shape"), LPDISPATCH(poly.m_lpDispatch)); // "Name" = featureName featureName.Format("%s%d", "Rectangle", 0); SetValue(fields, TEXT("Name"), featureName); // "Area" = poly.GetArea() SetValue(fields, TEXT("Area"), poly.GetArea()); // "Perimeter" = poly.GetPerimeter() SetValue(fields, TEXT("Perimeter"), poly.GetPerimeter()); recs.Update(); } } CMoRectangle r = m_rect.GetExtent() ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; m_pMap->RefreshRect( r ); m_rect.ReleaseDispatch(); ////»­Ïß½áÊø///// } void CAddDrawObject::AddEllipse(CString strCurrentLayer) { if( !m_ellipse ) return ; CMoSymbol sym; if (!sym.CreateDispatch("MapObjects2.Symbol")) return; sym.SetColor(moRed); sym.SetSymbolType(moFillSymbol); sym.SetStyle(moGrayFill); sym.SetSize(2); m_pMap->DrawShape( m_ellipse , sym ); ////»­Ô²¿ªÊ¼///// if( strCurrentLayer == "" ) { return ; } CMoLayers layers(m_pMap->GetLayers()); CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer)))); if( !layer ) { AfxMessageBox("ÄúËùÑ¡ÔñµÄͼ²ãÃû£º" + strCurrentLayer + " ²»´æÔÚ!!!" + "ÇëÈ·ÈÏ¡£"); return ; } else { if( m_ellipse ) { long layerShapeType = layer.GetShapeType() ; if( layerShapeType != moShapeTypePolygon ) { AfxMessageBox("µ±Ç°ÄúËùÑ¡ÔñµÄͼ²ã:" + strCurrentLayer + "²»ÊÇÍÖÔ²Ð͵Ä!!!"); return ; } CMoRecordset recs(layer.GetRecords()); CMoFields fields(recs.GetFields()); CString featureName; CMoRectangle extent(m_pMap->GetFullExtent()); VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = extent.m_lpDispatch; recs.AddNew(); CMoEllipse ellipse( m_ellipse ); CMoPolygon poly(ellipse.Buffer(0.0,va)); // Shape = poly SetValue(fields,TEXT("Shape"),LPDISPATCH(poly.m_lpDispatch)); // "Name" = featureName featureName.Format("%s%d", "ellipse", 0); SetValue(fields, TEXT("Name"), featureName); // "Area" = poly.GetArea() SetValue(fields, TEXT("Area"), poly.GetArea()); // "Perimeter" = poly.GetPerimeter() SetValue(fields, TEXT("Perimeter"), poly.GetPerimeter()); recs.Update(); } } CMoRectangle r = m_ellipse.GetExtent() ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = r.m_lpDispatch; m_pMap->RefreshRect( r ); m_ellipse.ReleaseDispatch(); ////»­Ô²½áÊø///// } void CAddDrawObject::AddEllipseMouseDown() { // Create a new ellipse object // Track a rectangle and to set the ellipse width/height CMoRectangle rect(m_pMap->TrackRectangle()); CMoEllipse * pEllipse = new CMoEllipse(); pEllipse->CreateDispatch(TEXT("MapObjects2.Ellipse")); pEllipse->SetBottom(rect.GetBottom()); pEllipse->SetLeft(rect.GetLeft()); pEllipse->SetRight(rect.GetRight()); pEllipse->SetTop(rect.GetTop()); m_ellipse = *pEllipse ; VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer(m_pMap->GetTrackingLayer()); tLayer.Refresh(true, va); } |
|
2楼#
发布于:2004-01-13 10:41
爱才兄,给我发送一份好吗?
本人不太懂VC,把学兄的代码贴进VC++中,编译不过去,还请
aicai给我发送一份VC的原代码给我,谢谢先! wsysulin@sina.com<img src="images/post/smile/dvbbs/em10.gif" /> |
|
3楼#
发布于:2004-01-14 09:17
谢谢,希望能有更多的贡献
|
|
4楼#
发布于:2004-02-06 15:58
d
|
|
5楼#
发布于:2004-02-07 01:56
支持你!希望多来,不错,如果能给点说明就更好
|
|
6楼#
发布于:2004-04-26 12:39
楼上说得有道理呀!楼主就再辛苦点吧~嘻~~~~~~~~`
|
|