惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
量子位
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - fatrick

媒体网关在OCS系统架构中的作用 图文详解配置ocs边缘服务器 实战部署UC平台(OCS VOIP GW and Exchange 2007) OCS服务器Ports and Protocols OCS发待办事宜 ActiveDirectory获取用户 增强SEO的div+css命名规则 WEB网站大数据量的性能解决方案 mapxtreme2005 改变选中的图元样式 Mapxtreme2005 两点之间画直线 mapxtreme2005 创建各种样式 MapXtreme 2005 基础代码 MapXtreme创建本地TAB文件 - fatrick - 博客园 如何在DataGrid里面产生滚动条 [转载]关于项目管理的一点体会 [IE&FireFox兼容]JS对select操作 个人网站建设八部曲 帮助解决网页和JS文件中的中文编码问题的小工具 FLV Player下载
MapxTreme2005 画扇区
fatrick · 2008-06-18 · via 博客园 - fatrick

 public MapInfo.Geometry.Geometry DrawSector(double x, double y, int middle, int angle, double radius)
        {
            if ((angle == 0) || (radius == 0))
                return null;
            MapInfo.Geometry.DPoint center = new MapInfo.Geometry.DPoint(x, y);           
            //创建一段弧线
            double beginAngle, endAngle;
            if (middle < 90)
            {
                beginAngle = 90 - middle - angle / 2;
                endAngle = 90 - middle + angle / 2;
            }
            else if (middle == 90)
            {
                beginAngle = 360 - angle / 2;
                endAngle = angle / 2;
            }
            else if (middle == 360)
            {
                beginAngle = 0;
                endAngle = 360;            
            }
            else
            {
                beginAngle = 450 - middle - angle / 2;
                endAngle = 450 - middle + angle / 2;
            }

            MapInfo.Geometry.LegacyArc sector = new LegacyArc(map.GetDisplayCoordSys(), center, radius, radius,
            MapInfo.Geometry.DistanceUnit.Kilometer, MapInfo.Geometry.DistanceType.Spherical, beginAngle, endAngle);

            MultiCurve mc = sector.CreateMultiCurve(100);

            MapInfo.Geometry.DPoint[] tmpPoints = mc[0][0].SamplePoints();

            MapInfo.Geometry.DPoint[] dPoints = new MapInfo.Geometry.DPoint[3];
            dPoints[0] = mc[0].EndPoint;
            dPoints[1] = new MapInfo.Geometry.DPoint(x, y);
            dPoints[2] = mc[0].StartPoint;

            MapInfo.Geometry.DPoint[] mPoints = new MapInfo.Geometry.DPoint[tmpPoints.Length - 1 + 3];
            for (int i = 0, j = 0; i < tmpPoints.Length - 1 + 3; i++)
            {
                if (i < tmpPoints.Length - 1)
                    mPoints[i] = tmpPoints[i];
                else
                    mPoints[i] = dPoints[j++];
            }

            MapInfo.Geometry.MultiPolygon mp = new MultiPolygon(map.GetDisplayCoordSys(), CurveSegmentType.Linear, mPoints);
            mp.EditingComplete();
            return mp;          
        }