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

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

楼主#
更多 发布于:2005-07-12 09:21
<P>代码如下(直接复制到一个地图窗口下即可运行):</P>
<P>Option Explicit</P>
<P>'//圆周率"派"值<br>Const PI As Single = 3.1415926</P>
<P>Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)</P>
<P>    '//鼠标绘制圆形<br>    Dim crl As New MapObjects2.Ellipse<br>    Set crl = Map1.TrackCircle<br>    <br>    '//将圆形转化为多边形<br>    Dim pgn As New MapObjects2.Polygon<br>    Set pgn = ChangeCircleToPolygon(crl)<br>    <br>    '//闪烁多边形<br>    Map1.FlashShape pgn, 2<br>End Sub</P>
<P>'*******************************************************************************<br>'【名  称】:ChangeCircleToPolygon()<br>'【功  能】:将圆形对象转化为多边形对象<br>'【参  数】:crl  : 圆形对象<br>'            Sect : 转化后的多边形边数<br>'【返回值】:新的MO多边形对象<br>'******************************************************************************<br>Public Function ChangeCircleToPolygon(crl As MapObjects2.Ellipse, Optional Sect As Integer = 40) As MapObjects2.Polygon<br>    '//获得圆心<br>    Dim CPt As New MapObjects2.Point<br>    Set CPt = crl.Center<br>    <br>    '//获得圆心坐标<br>    Dim Cx As Double: Dim Cy As Double<br>    Cx = CPt.X: Cy = CPt.Y<br>    <br>    '//获得半径<br>    Dim rds As Double<br>    rds = crl.Width / 2<br>    <br>    '//获得等边多边形每一边所对应的夹角<br>    Dim cnr As Double<br>    cnr = PI * 2 / Sect<br>    <br>    '//生成新的多边形对象<br>    Dim pnt As New MapObjects2.Point: Dim pnts As New MapObjects2.Points<br>    Dim X As Double: Dim Y As Double<br>    Dim pgn As New MapObjects2.Polygon<br>    <br>    Dim i As Integer<br>    For i = 1 To Sect<br>        X = Cx + Cos(i * cnr) * rds<br>        Y = Cy + Sin(i * cnr) * rds<br>        pnt.Set X, Y<br>        pnts.Add pnt<br>    Next<br>    pgn.Parts.Add pnts<br>    <br>    Set ChangeCircleToPolygon = pgn<br>End Function<br></P>
[此贴子已经被作者于2005-7-12 10:46:49编辑过]
喜欢0 评分0
G!s
G!s
路人甲
路人甲
  • 注册日期2004-06-22
  • 发帖数76
  • QQ
  • 铜币269枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-07-12 15:11
<P>仅供参考吧,最好的办法是直接利用Buffer属性</P>
<P>dim pgn as new mapobjects2.polygon</P>
<P>set pgn = Ellipse.Buffer(0,map1.extent)</P>
举报 回复(0) 喜欢(0)     评分
zpgis2002
路人甲
路人甲
  • 注册日期2004-10-29
  • 发帖数83
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-12-27 11:07
<P>高啊。简单。mo对园和矩形以0为缓冲距离。将返回一个多边形对象。而且仅是原数据的拷贝</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部