简介得到所有实体方法1得到所有实体方法2得到范围内实体得到跨范围实体得到用户选择实体得到当前选择的实体1得到当前选择的实体2得到指定条件实体在一个点构造选择集多个点构造选择集
简介

我们将类及其命令注册进了控件系统,而后我们将调用命令来实现过滤。在本实例中,我们将使用构造选择集(IMxDrawSelectionSet类)进行过滤,该类封装了选择集及其处理函数,支持如下过滤条件。点击此处下载演示实例


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


颜色


实体的颜色可以通过0~256的数字值来指定和读取,也可以通过 McCmColor 类的实例来指定和读取,McCmColor类可以用来扩展颜色模型。McCmColor类可以用来表示真彩色中的任何一种色彩。


颜色值1~7代表的标准颜色如下:


颜色值 1 2 3 4 5 6 7
颜色 绿 紫红 白或黑


颜色值7对应的颜色与控件背景颜色有关。如果背景是黑,则7对应的颜色是白,反之则对应的颜色是黑。


还有一些颜色值代表了一些特殊的含义:


    0:指定实体的颜色为 BYBLOCK 。即实体继承当前块表记录中块参照的颜色值,如果实体直接处于模型空间或图纸空间块表记录中,则实体的颜色就是黑或白。

    256:指定实体的颜色为 BYLAYER 。实体使用其所在层的颜色。

    257:实体 无颜色 。这种情况仅在实体刚刚实例化,在被赋予0~256之间颜色值或被添加到数据库并使用数据库的当前颜色值之前才会出现。

得到所有实体方法1

主要用到函数说明:


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);
    }
}
得到所有实体方法2

主要用到函数说明:


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);
    }
}
得到范围内实体

主要用到函数说明:


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);
    }
}
得到跨范围实体

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());
            }
        }
    }
}
得到指定条件实体

c#中使用如下:


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);
    }
}
在一个点构造选择集

主要用到函数说明:


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++)
    {
        MxDrawEntityent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
多个点构造选择集

主要用到函数说明:


IMxDrawSelectionSet::SelectByPolygon


在多个点组合的闭合区域里,构造选择集。详细说明如下:


参数说明

[in] IMxDrawPoints* points

组成闭合区域的点集合

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件

Mode

构造选择集方式


c#中使用如下:


private void SelectByPolygon()
{
    MxDrawPoint pt1 = (MxDrawPoint)axMxDrawX1.NewPoint();
    pt1.x = -200;
    pt1.y = -200;
    MxDrawPoint pt2 = (MxDrawPoint)axMxDrawX1.NewPoint();
    pt2.x = 200;
    pt2.y = 200;
    MxDrawPoint pt3 = (MxDrawPoint)axMxDrawX1.NewPoint();
    pt3.x = 200;
    pt3.y = -200;
    MxDrawPoint pt4 = (MxDrawPoint)axMxDrawX1.NewPoint();
    pt4.x = -200;
    pt4.y = 200;
    MxDrawPoints points = new MxDrawPoints();
    points.Add2(pt1);
    points.Add2(pt2);
    points.Add2(pt3);
    points.Add2(pt4);
    //创建选择集
    MxDrawSelectionSet ss = new MxDrawSelectionSet();
    //创建过滤对象
    MxDrawResbuf spFilte = new MxDrawResbuf();
    //在多个点组合的闭合区域里,构造选择集
    ss.SelectByPolygon(MCAD_McSelect.mcSelectionSetCrossingPolygon, points, spFilte);
    for (int i = 0; i < ss.Count; i++)
    {
        MxDrawEntity ent = ss.Item(i);
        MessageBox.Show(ent.ObjectName);
    }
}
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
技术服务
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
产品购买
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