LOGO
帮助文档
旧版文档
简介得到所有实体方法1得到所有实体方法2得到范围内实体得到跨范围实体得到用户选择实体得到当前选择的实体1得到当前选择的实体2得到指定条件实体在一个点构造选择集多个点构造选择集创建组删除组得到所有组名
简介

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

支持如下过滤条件:


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


颜色


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


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


颜色值1234567
颜色绿紫红白或黑


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


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


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

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

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

得到所有实体方法1

主要用到函数说明:


IMxDrawSelectionSet::AllSelect


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


参数 说明

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件


js中使用如下:


function AllSelect() {
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var  ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //得到当前空间的所有实体
    ss.AllSelect (spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(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 返回当前图上已经选择的实体


js中使用如下:


function SelectSetAll() {
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //用户选择对象  得到用户选取的实体
    ss.Select2(5,null, null,  null,spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(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 返回当前图上已经选择的实体


js中使用如下:


function SelectWindow()
{
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //定义两个点的位置
    //定义第一个点的位置
    var vPt1 = mxOcx.NewPoint();
    vPt1.x = -20;
    vPt1.y = -20;
    //定义第二个点的位置
    var vPt2 = mxOcx.NewPoint();
    vPt2.x = 20;
    vPt2.y = 20;
    //选取跨范围的实体
    ss.Select(0, vPt1, vPt2,spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
得到跨范围实体

js中使用如下:


function SelectCross()
{
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //定义两个点的位置
    //定义第一个点的位置
    var vPt1 = mxOcx.NewPoint();
    vPt1.x = -20;
    vPt1.y = -20;
    //定义第二个点的位置
    var vPt2 = mxOcx.NewPoint();
    vPt2.x = 20;
    vPt2.y = 20;
    //选取跨范围的实体
    ss.Select(1, vPt1, vPt2,spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
得到用户选择实体

js中使用如下:


function SelectUserSelect()
{
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //用户选择对象  得到用户选取的实体
    ss.Select2(8, null, null, null, spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
得到当前选择的实体1

js中使用如下:


function SelectImpliedSelectSelect()
{
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //用户选择对象  得到用户选取的实体
    ss.Select2(9, null, null,null,spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
得到当前选择的实体2

主要用到函数说明:


IMxDrawSelectionSet::CurrentSelect


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


参数 说明

filterData

过滤条件


js中使用如下:


function CurrentSelect() {
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    ss.CurrentSelect(spFilte);
    var i = 0;
    for (; i < ss.Count; i++) {
        var ent = ss.Item(i);
        if (ent.ObjectName == "McDbLine") {
            // 是个直线。
            var spt = ent.StartPoint;
            var ept = ent.EndPoint;
            alert(spt.x);
        }
        else if (ent.ObjectName == "McDbPolyline") {
            // 是个多义线.
            var j = 0;
            // 循环,得到端点坐标
            for (j = 0; j < ent.NumVerts; j++) {
                var pt = ent.GetPointAt(j);
                alert(pt.x);
            }
        }
    }
}
得到指定条件实体

js中使用如下:


function SelectAssign() {
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    // "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(5,null, null, null,spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
在一个点构造选择集

主要用到函数说明:


IMxDrawSelectionSet::SelectAtPoint


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


参数 说明

[in] IMxDrawPoint* point

点坐标

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件


js中使用如下:


function SelectAtPoint()
{
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //在一个点构造选择集
    var vPt = mxOcx.Call("Mx_NewPoint","");
    var vPt = mxOcx.NewPoint();
    vPt.x = -20;
    vPt.y = -20;
    ss.SelectAtPoint (vPt, spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
多个点构造选择集

主要用到函数说明:


IMxDrawSelectionSet::SelectByPolygon


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


参数说明

[in] IMxDrawPoints* points

组成闭合区域的点集合

[in,defaultvalue(NULL)] IMxDrawResbuf* filterData

过滤条件

Mode

构造选择集方式


js中使用如下:


function SelectByPolygon(){
    var pt1 = mxOcx.NewPoint();
    pt1.x = -200;
    pt1.y = -200;
    var pt2 = mxOcx.NewPoint();
    pt2.x = 200;
    pt2.y = 200;
    var pt3 = mxOcx.NewPoint();
    pt3.x = 200;
    pt3.y = -200;
    var pt4 = mxOcx.NewPoint();
    pt4.x = -200;
    pt4.y = 200;
    var points = mxOcx.NewComObject("IMxDrawPoints");
    points.Add2(pt1);
    points.Add2(pt2);
    points.Add2(pt3);
    points.Add2(pt4);
    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    //在多个点组合的闭合区域里,构造选择集
    ss.SelectByPolygon(7,points, spFilte);
    for (var i = 0; i < ss.Count; i++)
    {
        var ent = ss.Item(i);
        alert(ent.ObjectName);
    }
}
创建组

主要用到函数说明:


_DMxDrawX::CreateGroup


创建组.如果组名已经存在,就把实体加入组中。详细说明如下:


参数说明

BSTR pszName

组名.,如果为空,创建匿名组

IDispatch* pAryId

创建成组的实体id数组,是IMxDrawResbuf类


js代码实现如下:


function CreateGroup() {
                        mxOcx.Prompt("选择要做成组的实体:");
                        var ss = mxOcx.NewSelectionSet();
                        ss.Select2(8, null, null, null);
                        var param = mxOcx.NewResbuf();                        
                        for(var i = 0; i < ss.Count;i++)
                        {
                            var ent = ss.Item(i);                            
                            if(ent == null)                                
                            continue;

                            param.AddObjectId(ent.ObjectID);
                        }                       
                         if(param.Count == 0)                           
                          return;
                        mxOcx.CreateGroup("", param);

                    }
删除组

主要用到函数说明:


_DMxDrawX::DeleteGroup


根据组名,删除组。详细说明如下:


参数 说明

BSTR pszName

组名


js代码实现如下:


function DelGroup() {
    var winWidth = 440;
    var winHeight = 140;
    var winLeft = (screen.width - winWidth) / 2;
    var winTop = (screen.height - winHeight) / 2 - 20;
    var str = 'dialogHeight:' + winHeight + 'px;dialogWidth:' + winWidth + 'px;dialogTop:' + winTop + 'px;dialogLeft:' + winLeft + 'px;resizable:yes;center:yes;status:no;'
    var rt = window.showModalDialog("Gettext.htm?tmp=" + Math.random(), "输入图层名", str);
    var txt;
    if (typeof (rt) == "undefined") {
        return;
    } else {
        var arr = rt.split(",");
        txt = arr[0];
    }

    mxOcx.DeleteGroup(txt);
    alert("成功删除组");

}
得到所有组名

主要用到函数说明:


_DMxDrawX::GetAllGroupName


得到所有组名。


js代码实现如下:


function GetAllGroup() {

    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
    var ss = mxOcx.NewSelectionSet();
    //构造一个过滤链表
    var spFilte = mxOcx.NewResbuf();
    
    ss.Select2(5,null, null, null,spFilte);

    var val = mxOcx.GetAllGroupName();

    for(var i = 0;i < ss.Count; i++ ){

        var ent = ss.Item(i);
        if(ent == null)
            continue;

        alert(val.AtString(i));
    }
}