默认头像
G!s
路人甲
路人甲
  • 注册日期2004-06-22
  • 发帖数76
  • QQ
  • 铜币269枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1836回复:2

[原创]将MO的Ellipse对象转化为Polygon对象!

楼主#
更多 发布于:2005-07-12 09:21

代码如下(直接复制到一个地图窗口下即可运行):

Option Explicit

'//圆周率"派"值
Const PI As Single = 3.1415926

Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

   '//鼠标绘制圆形
   Dim crl As New MapObjects2.Ellipse
   Set crl = Map1.TrackCircle
   
   '//将圆形转化为多边形
   Dim pgn As New MapObjects2.Polygon
   Set pgn = ChangeCircleToPolygon(crl)
   
   '//闪烁多边形
   Map1.FlashShape pgn, 2
End Sub

'*******************************************************************************
'【名  称】:ChangeCircleToPolygon()
'【功  能】:将圆形对象转化为多边形对象
'【参  数】:crl  : 圆形对象
'            Sect : 转化后的多边形边数
'【返回值】:新的MO多边形对象
'******************************************************************************
Public Function ChangeCircleToPolygon(crl As MapObjects2.Ellipse, Optional Sect As Integer = 40) As MapObjects2.Polygon
   '//获得圆心
   Dim CPt As New MapObjects2.Point
   Set CPt = crl.Center
   
   '//获得圆心坐标
   Dim Cx As Double: Dim Cy As Double
   Cx = CPt.X: Cy = CPt.Y
   
   '//获得半径
   Dim rds As Double
   rds = crl.Width / 2
   
   '//获得等边多边形每一边所对应的夹角
   Dim cnr As Double
   cnr = PI * 2 / Sect
   
   '//生成新的多边形对象
   Dim pnt As New MapObjects2.Point: Dim pnts As New MapObjects2.Points
   Dim X As Double: Dim Y As Double
   Dim pgn As New MapObjects2.Polygon
   
   Dim i As Integer
   For i = 1 To Sect
       X = Cx + Cos(i * cnr) * rds
       Y = Cy + Sin(i * cnr) * rds
       pnt.Set X, Y
       pnts.Add pnt
   Next
   pgn.Parts.Add pnts
   
   Set ChangeCircleToPolygon = pgn
End Function

[此贴子已经被作者于2005-7-12 10:46:49编辑过]
喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期2004-10-29
  • 发帖数83
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-12-27 11:07

高啊。简单。mo对园和矩形以0为缓冲距离。将返回一个多边形对象。而且仅是原数据的拷贝

举报 回复(0) 喜欢(0)     评分
默认头像
G!s
路人甲
路人甲
  • 注册日期2004-06-22
  • 发帖数76
  • QQ
  • 铜币269枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-07-12 15:11

仅供参考吧,最好的办法是直接利用Buffer属性

dim pgn as new mapobjects2.polygon

set pgn = Ellipse.Buffer(0,map1.extent)

举报 回复(0) 喜欢(0)     评分
默认头像

返回顶部