aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2461回复:5

继续贡献Vc 中MO编辑对象代码

楼主#
更多 发布于:2004-01-13 09:58
#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_)
喜欢0 评分0
fwting59
路人甲
路人甲
  • 注册日期2003-10-25
  • 发帖数6
  • QQ
  • 铜币124枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-04-26 12:39
楼上说得有道理呀!楼主就再辛苦点吧~嘻~~~~~~~~`
举报 回复(0) 喜欢(0)     评分
gis1117
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
2楼#
发布于:2004-02-07 01:56
支持你!希望多来,不错,如果能给点说明就更好
举报 回复(0) 喜欢(0)     评分
wrbwf
路人甲
路人甲
  • 注册日期2003-12-01
  • 发帖数944
  • QQ
  • 铜币2516枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-02-06 15:58
d
举报 回复(0) 喜欢(0)     评分
zzqgis
路人甲
路人甲
  • 注册日期2003-08-26
  • 发帖数70
  • QQ
  • 铜币9枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-01-14 09:17
谢谢,希望能有更多的贡献
举报 回复(0) 喜欢(0)     评分
sulin
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数158
  • QQ
  • 铜币501枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-01-13 10:41
爱才兄,给我发送一份好吗?
本人不太懂VC,把学兄的代码贴进VC++中,编译不过去,还请
aicai给我发送一份VC的原代码给我,谢谢先!
wsysulin@sina.com<img src="images/post/smile/dvbbs/em10.gif" />
举报 回复(0) 喜欢(0)     评分
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于: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);

////&raquo;&shy;&micro;&atilde;&iquest;&ordf;&Ecirc;&frac14;/////
if( strCurrentLayer == "" )
{
return ;
}
CMoLayers layers(m_pMap->GetLayers());
CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer))));
if( !layer )
{
AfxMessageBox("&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;&Atilde;&ucirc;&pound;&ordm;" +  strCurrentLayer + " &sup2;&raquo;&acute;&aelig;&Ocirc;&Uacute;!!!" + "&Ccedil;&euml;&Egrave;·&Egrave;&Iuml;&iexcl;&pound;");
return ;
}
else
{
if( m_point )
{
long layerShapeType = layer.GetShapeType() ;
if( layerShapeType != moShapeTypePoint )
{
AfxMessageBox("&micro;±&Ccedil;°&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;:" +strCurrentLayer + "&sup2;&raquo;&Ecirc;&Ccedil;&micro;&atilde;&ETH;&Iacute;&micro;&Auml;!!!");
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();

////&raquo;&shy;&micro;&atilde;&frac12;á&Ecirc;&oslash;/////

}


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 );

////&raquo;&shy;&Iuml;&szlig;&iquest;&ordf;&Ecirc;&frac14;/////
if( strCurrentLayer == "" )
{
return ;
}
CMoLayers layers(m_pMap->GetLayers());
CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer))));
if( !layer )
{
AfxMessageBox("&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;&Atilde;&ucirc;&pound;&ordm;" +  strCurrentLayer + " &sup2;&raquo;&acute;&aelig;&Ocirc;&Uacute;!!!" + "&Ccedil;&euml;&Egrave;·&Egrave;&Iuml;&iexcl;&pound;");
return ;
}
else
{
if( m_line )
{
long layerShapeType = layer.GetShapeType() ;
if( layerShapeType != moShapeTypeLine )
{
AfxMessageBox("&micro;±&Ccedil;°&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;:" +strCurrentLayer + "&sup2;&raquo;&Ecirc;&Ccedil;&Ouml;±&Iuml;&szlig;&ETH;&Iacute;&micro;&Auml;!!!");
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();
////&raquo;&shy;&Iuml;&szlig;&frac12;á&Ecirc;&oslash;/////

}

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 );

////&raquo;&shy;&Iuml;&szlig;&iquest;&ordf;&Ecirc;&frac14;/////
if( strCurrentLayer == "" )
{
return ;
}
CMoLayers layers(m_pMap->GetLayers());
CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer))));
if( !layer )
{
AfxMessageBox("&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;&Atilde;&ucirc;&pound;&ordm;" +  strCurrentLayer + " &sup2;&raquo;&acute;&aelig;&Ocirc;&Uacute;!!!" + "&Ccedil;&euml;&Egrave;·&Egrave;&Iuml;&iexcl;&pound;");
return ;
}
else
{
if( m_polygon )
{
long layerShapeType = layer.GetShapeType() ;
if( layerShapeType != moShapeTypePolygon )
{
AfxMessageBox("&micro;±&Ccedil;°&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;:" +strCurrentLayer + "&sup2;&raquo;&Ecirc;&Ccedil;&Atilde;&aelig;&ETH;&Iacute;&micro;&Auml;!!!");
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();
////&raquo;&shy;&Iuml;&szlig;&frac12;á&Ecirc;&oslash;/////

}

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 );
////&raquo;&shy;&Iuml;&szlig;&iquest;&ordf;&Ecirc;&frac14;/////
if( strCurrentLayer == "" )
{
return ;
}
CMoLayers layers(m_pMap->GetLayers());
CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer))));
if( !layer )
{
AfxMessageBox("&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;&Atilde;&ucirc;&pound;&ordm;" +  strCurrentLayer + " &sup2;&raquo;&acute;&aelig;&Ocirc;&Uacute;!!!" + "&Ccedil;&euml;&Egrave;·&Egrave;&Iuml;&iexcl;&pound;");
return ;
}
else
{
if( m_rect )
{
long layerShapeType = layer.GetShapeType() ;
if( layerShapeType != moShapeTypePolygon )
{
AfxMessageBox("&micro;±&Ccedil;°&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;:" +strCurrentLayer + "&sup2;&raquo;&Ecirc;&Ccedil;&frac34;&Oslash;&ETH;&Icirc;&ETH;&Iacute;&micro;&Auml;!!!");
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();
////&raquo;&shy;&Iuml;&szlig;&frac12;á&Ecirc;&oslash;/////

}

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 );
////&raquo;&shy;&Ocirc;&sup2;&iquest;&ordf;&Ecirc;&frac14;/////
if( strCurrentLayer == "" )
{
return ;
}
CMoLayers layers(m_pMap->GetLayers());
CMoMapLayer layer(layers.Item( COleVariant(TEXT(strCurrentLayer))));
if( !layer )
{
AfxMessageBox("&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;&Atilde;&ucirc;&pound;&ordm;" +  strCurrentLayer + " &sup2;&raquo;&acute;&aelig;&Ocirc;&Uacute;!!!" + "&Ccedil;&euml;&Egrave;·&Egrave;&Iuml;&iexcl;&pound;");
return ;
}
else
{
if( m_ellipse )
{
long layerShapeType = layer.GetShapeType() ;
if( layerShapeType != moShapeTypePolygon )
{
AfxMessageBox("&micro;±&Ccedil;°&Auml;ú&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&micro;&Auml;&Iacute;&frac14;&sup2;&atilde;:" + strCurrentLayer + "&sup2;&raquo;&Ecirc;&Ccedil;&Iacute;&Ouml;&Ocirc;&sup2;&ETH;&Iacute;&micro;&Auml;!!!");
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();
////&raquo;&shy;&Ocirc;&sup2;&frac12;á&Ecirc;&oslash;/////

}

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);
}
举报 回复(0) 喜欢(0)     评分
游客

返回顶部