LOGO
帮助文档
旧版文档
简介得到指定过滤条件实体得到所有实体方法1得到所有实体方法2得到范围内实体得到跨范围实体用户交互选择实体得到当前选择的实体1得到当前选择的实体2得到一个点下面的实体
简介

得到图上的对象,使用控件提供的构造选择集功能,构造选择集类:MxDrawSelectionSet,详细帮助参考:http://www.mxdraw.com/help/IMxDrawSelectionSet.htm, 选择集类提供了得到图上所有对象,得到当前选择对象,得到指定范围内的对象函数,在得到对象的时还可以设置过滤条件,比如得到某类,某个图层上的对象。

 

构造选择集使用例子:点击此处下载演示实例

 

支持如下过滤条件

 

参数类型类型
5020TEXT文字
MTEXT多行文字
CIRCLE
ARC圆弧
LINE线
LWPOLYLINE多段线
INSERT图块
ELLIPSE椭圆
SPLINE样条线
LinkLine超链接
8图层
2图块
-4通配符
62颜色索引
-3扩展数据

 

 

视频如下:

得到指定过滤条件实体

如下c#代码,得到0层上面,颜色索引值是1,的所有直线和圆弧如下:


private void SelectAssign()
{
    //创建选择集
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
    // "0",是图层名,8是DXF码,代表"0"是个图层字符串。
    // 选择 0层上的实体。
    spFilte.AddStringEx("0", 8);
    // 选择直线或圆弧实体。5020是DXF码,代表"LINE"是类型字符串。
    spFilte.AddStringEx("LINE,ARC", 5020);
    // 选择红色的实体。1为颜色索引值,代表红色。 62是DXF码,但1是个颜色类型。
    spFilte.AddLongEx(1, 62);
    ss.Select2(MCAD_McSelect.mcSelectionSetAll, null, null, null, spFilte);
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}

如下c#代码,得到0层上面,颜色索引值是1,的所有直线和圆弧如下:

例如: C# 扩展数据值过滤选择, 下面,代码得到图上所有直线,并且有扩展数据,扩展数据名为TestApp,Long组码为1071,值为:77678 的直线。


            MxDrawResbuf filter = new MxDrawResbuf();
            filter.AddStringEx("LINE", 5020);
            filter.AddAppName("TestApp");
            filter.AddLongEx(77678, 1071);
            MxDrawSelectionSet ss = new MxDrawSelectionSet();
            ss.AllSelect(filter);

            MessageBox.Show(ss.Count.ToString() );


得到所有实体方法1

主要用到函数说明:


IMxDrawSelectionSet::Select2


构造选择集。详细说明如下:


参数说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterType

构造选择集的过滤数据的类型

[in,optional] VARIANT filterData

构造选择集的过滤数据

可以取如下值

mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体


c#中使用如下:


private void SelectSetAll()
{
    // 创建选择集对象
MxDrawSelectionSet ss = new MxDrawSelectionSet();
 
    //用户选择对象  得到用户选取的实体
    ss.Select2(MCAD_McSelect.mcSelectionSetAll, null, null, null, null);            
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
得到所有实体方法2

主要用到函数说明:


IMxDrawSelectionSet::AllSelect


得到当前空间的所有实体。详细说明如下:


参数说明

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件


c#中使用如下:


private void AllSelect()
{
    // 创建选择集对象
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
 
    // 创建过滤对象.
    MxDrawResbuf spFilte = new MxDrawResbuf();
 
    //得到当前空间的所有实体
    ss.AllSelect(spFilte);
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
得到范围内实体

mcSelectionSetWindow方式:实体对象完全在范围才能得到


主要用到函数说明:


IMxDrawSelectionSet::Select


构造选择集。详细说明如下:


参数说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterData

构造选择集的过滤数据

可以取如下值

mcSelectionSetWindow = 0, mcSelectionSetCrossing = 1, mcSelectionSetFence = 2, mcSelectionSetPrevious = 3, mcSelectionSetLast = 4, mcSelectionSetAll = 5, 选择图面上的所有实体 mcSelectionSetWindowPolygon = 6, mcSelectionSetCrossingPolygon = 7, mcSelectionSetUserSelect = 8 mcSelectionImpliedSelectSelect = 9,_I 返回当前图上已经选择的实体


c#中使用如下:


private void SelectWindow()
{
    //创建选择集对象
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
 
    MxDrawUtility mxUtility = new MxDrawUtility();
    //点取范围左上角位置
    MxDrawPoint point = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围左上角位置..."));
    //点取范围左下角位置
    MxDrawPoint point1 = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围右下角位置..."));
 
 
    ss.Select(MCAD_McSelect.mcSelectionSetWindow, point, point1, spFilte);
 
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
得到跨范围实体

mcSelectionSetCrossing方式:只要实体对象与给的范围相交,并不需要完全在范围也能得到。

c#中使用如下:


private void SelectCross()
{
    //创建选择集对象
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
 
    MxDrawUtility mxUtility = new MxDrawUtility();
    //点取范围左上角位置
    MxDrawPoint point = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围左上角位置..."));
    //点取范围左下角位置
    MxDrawPoint point1 = (MxDrawPoint)(mxUtility.GetPoint(null, "点取范围右下角位置..."));
 
    //选取跨范围的实体
    ss.Select(MCAD_McSelect.mcSelectionSetCrossing, point, point1, spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
用户交互选择实体

c#中使用如下:


private void SelectUserSelect()
{
    //创建选择集对象
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
    //用户选择对象,得到用户选取的实体
    ss.Select2(MCAD_McSelect.mcSelectionSetUserSelect, null, null, spFilte);
           
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
得到当前选择的实体1

c#中使用如下:


private void SelectImpliedSelectSelect()
{
    //创建选择集
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
 
    ss.Select2(MCAD_McSelect.mcSelectionImpliedSelectSelect, null, null, spFilte);
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
得到当前选择的实体2

主要用到函数说明:


IMxDrawSelectionSet::CurrentSelect


得到当前已经选择的实体。详细说明如下:


参数说明

filterData

过滤条件


c#中使用如下:


private void CurrentSelect()
{
    //创建选择集
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
    ss.CurrentSelect(spFilte);
    int i = 0;
    for (; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
               
        if (ent.ObjectName == "McDbLine")
        {
            MxDrawLine line = (MxDrawLine)ent;
            // 是个直线。
            MxDrawPoint spt = (MxDrawPoint)line.StartPoint;
            MxDrawPoint ept = (MxDrawPoint)line.EndPoint;
            MessageBox.Show(spt.x.ToString());
        }
        else if (ent.ObjectName == "McDbPolyline")
        {
            MxDrawPolyline polyline = (MxDrawPolyline)ent;
            // 是个多义线.
            int j = 0;
            // 循环,得到端点坐标
            for (j = 0; j < polyline.NumVerts; j++)
            {
                MxDrawPoint pt = polyline.GetPointAt(j);
                MessageBox.Show(pt.x.ToString());
            }
        }
    }
}
得到一个点下面的实体

主要用到函数说明:


IMxDrawSelectionSet::SelectAtPoint


在一个点构造选择集。详细说明如下:


参数说明

[in] IMxDrawPoint* point

点坐标

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件


c#中使用如下:


private void SelectAtPoint()
{
    //创建选择集
            MxDrawSelectionSet ss = new MxDrawSelectionSet();
            //创建过滤对象
            MxDrawResbuf spFilte = new MxDrawResbuf();
            //在一个点构造选择集
            MxDrawPoint vPt = (MxDrawPoint)axMxDrawX1.Call("Mx_NewPoint", "");
            axMxDrawX1.NewPoint();

            vPt.x = -20;
            vPt.y = -20;
            ss.SelectAtPoint(vPt, spFilte);
            for (int i = 0; i < ss.Count; i++)
            {
                MxDrawEntity ent = ss.Item(i);
                MessageBox.Show(ent.ObjectName);
            }
}