当前位置:知识库 / C#开发 / 详情
计算鼠标点位置的闭合pl线的面积.
计算鼠标点位置的闭合pl线的面积.
C#开发|大少爷|2017-07-27 15:42
回答:


    private void axMxDrawX1_MouseEvent(object sender, AxMxDrawXLib._DMxDrawXEvents_MouseEventEvent e)
            {                if (e.lType == 4)
                {                    // 是鼠标左键双击
                    // 得到鼠标位置
         
                    MxDrawPoint point = new MxDrawPoint();
                    point.x = e.dX;
                    point.y = e.dY;                    // 构造择集,得到鼠标所在闭合区域。
                    // 设置过滤条件
                    MxDrawResbuf filter = new MxDrawResbuf();                    // 设置PL线为过滤条件
                    filter.AddStringEx("LWPOLYLINE", 5020);                    // 选择范围左下角
                    MxDrawPoint pt1 = new MxDrawPoint();
                    pt1.x = point.x - 100;
                    pt1.y = point.y - 100;                    // 选择范围右上角
                    MxDrawPoint pt2 = new MxDrawPoint();
                    pt2.x = point.x + 100;
                    pt2.y = point.y + 100;                    // 选择pt1,pt2所在范围内的对象.
                    MxDrawSelectionSet ss = new MxDrawSelectionSet();
                    ss.Select(MCAD_McSelect.mcSelectionSetCrossing, pt1, pt2, filter);                    for (int i = 0; i < ss.Count; i++)
                    {                        // 遍历所有对象,看当前点是在那个闭合区域内
                        MxDrawPolyline pl = (MxDrawPolyline)ss.Item(i);                        // 得到闭合区域的点坐标。
                        MxDrawPoints pts = new MxDrawPoints();                        for (int j = 0; j < pl.NumVerts; j++)
                        {
                            MxDrawPoint pt = pl.GetPointAt(j);
                            pts.Add(pt.x, pt.y, pt.z);
                        }                        if (pts.Count < 3)                            continue;                        // 判断鼠标点,是不是在这个闭合的区域内.

                        MxDrawUtility utility = new MxDrawUtility();                        if (utility.PointInPolyline(pts, point.x, point.y))
                        {                            // 找到用户点击的闭合区域 
                            double dArea = 0.0;
                            pl.GetArea(out dArea);                            // 对选择的区域填充
                            for (int k = 0; k < pts.Count; k++)
                            {
                                MxDrawPoint tmp = pts.Item(k);                                if(k == 0)
                                    axMxDrawX1.PathMoveTo(tmp.x, tmp.y);                                else
                                    axMxDrawX1.PathLineTo(tmp.x, tmp.y);
                            }

                            axMxDrawX1.DrawCADColorIndex = 3;
                            axMxDrawX1.DrawPathToHatch(0.0);
                            axMxDrawX1.UpdateDisplay();

                                MessageBox.Show("面积为:" + dArea.ToString());

                            e.lRet = 1;                            // 取消后面的命令。                            axMxDrawX1.SendStringToExecute("");                            break;
                        }
                    }

                }
            }


相关问题
与用交互,加逻辑或作为条件过滤,下面选择Lay
与用交互,选择图上对象.
得到图上所有直线,并且有扩展数据,扩展数据名
找查图面上的文字
控件中的选择集构造管理器,用图面上的实体搜
控件中的两端无限长的射线类型
添加一个页眉或页脚数据
判断一个点是否在pl线组成的闭合区域内
得到pl线所在区域里,离区域中心位置最近的文
得到多线的端点,并成填充对象。
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703