阅读:1813回复:2
[原创]将MO的Ellipse对象转化为Polygon对象!
<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编辑过]
|
|
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> |
|
2楼#
发布于:2005-12-27 11:07
<P>高啊。简单。mo对园和矩形以0为缓冲距离。将返回一个多边形对象。而且仅是原数据的拷贝</P>
|
|