一、新建图层
主要用到函数说明:
_DMxDrawX::AddLayer
增加新的图层。详细说明如下:
| 参数 | 说明 | 
|---|---|
BSTR pszName  | 图层名  | 
c#中实现代码说明:
private void CreateLayer(){    // sNewLayerName新创建的图层名    string sNewLayerName = "TestNewLayer";    MxDrawApplication app = new MxDrawApplication();      // 得到当前数据为的层表对象    MxDrawLayerTable layerTable = app.WorkingDatabase().GetLayerTable();      // 向层表中新增一个层表记录    MxDrawLayerTableRecord layerTableRec = layerTable.Add(sNewLayerName);      // 设置新图层的颜色。SetRGB    MxDrawMcCmColor color = new MxDrawMcCmColor();    color.SetRGB(255, 0, 0);    layerTableRec.Color = color;      // 把新建的层设置成当前层    app.WorkingDatabase().CurrentlyLayerName = sNewLayerName;} | 
js中实现代码说明:
function CreateLayer() {    //增加新的图层    var layerId = mxOcx.AddLayer("自定义图层");    //返回控件的数据库对象    var database = mxOcx.GetDatabase();    //实体id返回实体对象    var layer = database.ObjectIdToObject(layerId);    //返回图层的颜色    var newColor = layer.Color;    //设置图层颜色    newColor.SetRGB(255,0,0);    //将设置的颜色赋值给图层    layer.Color = newColor;    //当前绘图函数的使用的图层名    mxOcx.LayerName = "自定义图层";    //当前控件绘图函数使用的CAD颜色索引值    mxOcx.DrawCADColorIndex = 256;} | 
二、隐藏图层
主要用到函数说明:
IMxDrawLayerTable::GetAt
得到层表中的图层对象。详细说明如下:
| 参数 | 说明 | 
|---|---|
[in] BSTR pName  | 图层名称  | 
[in,defaultvalue(TRUE) ] VARIANT_BOOL isGetErased  | 图层被删除掉,是否也能成功得到  | 
c#中实现代码说明:
private void HideLayer(){    // 隐藏选择实体的层。    MxDrawUtility mxUtility = new MxDrawUtility();      MxDrawPoint getPt;    MxDrawEntity ent = mxUtility.GetEntity(out getPt, "\n 选择要关闭图层的实体:");    if (ent == null)    {        return;    }    string sLayerName = ent.Layer;    MxDrawApplication app = new MxDrawApplication();    //返回数据库中的层表对象    MxDrawLayerTable layerTable = app.WorkingDatabase().GetLayerTable();    //关闭指定图层     MxDrawLayerTableRecord layerTableRec = layerTable.GetAt(sLayerName, false);    //返回图层是否处于关闭状态    layerTableRec.IsOff = true;} | 
js中实现代码说明:
function HideLayer() {    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];    }    var database = mxOcx.GetDatabase();    //返回数据库中的层表对象    var layerTable = database.GetLayerTable();    //得到层表中的图层对象    var layerRec = layerTable.GetAt(txt, false);    if (layerRec == null)        return;    //返回图层是否处于关闭状态    layerRec.IsOff = true;    alert("成功隐藏图层");} | 
三、显示图层
主要用到函数说明:
IMxDrawLayerTable::GetAt
得到层表中的图层对象。详细说明如下:
| 参数 | 说明 | 
|---|---|
[in] BSTR pName  | 图层名称  | 
[in,defaultvalue(TRUE) ] VARIANT_BOOL isGetErased  | 图层被删除掉,是否也能成功得到  | 
c#中实现代码说明:
private void ShowLayer(){    MxDrawApplication app = new MxDrawApplication();    //返回数据库中的层表对象    MxDrawLayerTable layerTable = app.WorkingDatabase().GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    MxDrawLayerTableIterator iter = layerTable.NewIterator();    if (iter == null)        return;    //移动当前遍历器位置    for (; !iter.Done(); iter.Step(true, false))    {        //返回遍历器当前位置的记录        MxDrawLayerTableRecord layerTableRec = iter.GetRecord();        //返回图层是否处于关闭状态        layerTableRec.IsOff = false;    }} | 
js中实现代码说明:
function ShowLayer() {    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];    }    var database = mxOcx.GetDatabase();    //返回数据库中的层表对象    var layerTable = database.GetLayerTable();    //得到层表中的图层对象    var layerRec = layerTable.GetAt(txt, false);    if (layerRec == null)        return;    //返回图层是否处于关闭状态    layerRec.IsOff = false;    alert("成功显示图层");} | 
四、得到所有图层名
主要用到函数说明:
IMxDrawLayerTableIterator::Step
得到层表中的图层对象。详细说明如下:
| 参数 | 说明 | 
|---|---|
[in,defaultvalue(TRUE) ] VARIANT_BOOL forward  | 为ture向前移动一位,为false向后移动位  | 
[in,defaultvalue(TRUE) ] VARIANT_BOOL skipDeleted  | 是否跳过删除的对象  | 
c#中实现代码说明:
private void GetAllLayer(){    MxDrawApplication app = new MxDrawApplication();    //返回数据库中的层表对象    MxDrawLayerTable layerTable = app.WorkingDatabase().GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    MxDrawLayerTableIterator iter = layerTable.NewIterator();    if (iter == null)        return;    //所有图层名    string sRet = null;    //移动当前遍历器位置    for (; !iter.Done(); iter.Step(true, true))    {        //返回遍历器当前位置的记录        MxDrawLayerTableRecord layerTableRec = iter.GetRecord();        sRet = sRet + ',' + layerTableRec.Name;    }    MessageBox.Show(sRet);} | 
js中实现代码说明:
function GetAllLayer() {    var database = mxOcx.GetDatabase();    // 得到所有图层名    var sRet = null;    //返回数据库中的层表对象    var spLayerTable = database.GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    var spIter = spLayerTable.NewIterator();    //移动当前遍历器位置    for(;!spIter.Done();spIter.Step(true,true))    {        //返回遍历器当前位置的记录        var spLayerRec = spIter.GetRecord();        //符号表记录名属性        var sName = spLayerRec.Name;        // 0零层不参加比较        if(sName != "0")        {            if(sRet == null)                sRet = sName;            else            {                sRet = sRet +","+sName;            }        }    }    alert(sRet);} | 
五、锁定所有图层
c#中实现代码说明:
private void LockeAllLayer(){    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();    //返回数据库中的层表对象    MxDrawLayerTable layerTable = database.GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    MxDrawLayerTableIterator iter = layerTable.NewIterator();    if (iter == null)        return;    //移动当前遍历器位置    for (; !iter.Done(); iter.Step(true, false))    {        //返回遍历器当前位置的记录        MxDrawLayerTableRecord layerTableRec = iter.GetRecord();        //返回图层是否处于锁定状态        layerTableRec.IsLocked = true;    }    MessageBox.Show("锁定所有图层成功!");} | 
js中实现代码说明:
  function LockeAllLayer() {    //返回控件的数据库对象    var database = mxOcx.GetDatabase();    //返回数据库中的层表对象     var layerTable = database.GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    var iter = layerTable.NewIterator();    for (; !iter.Done(); iter.Step())    {        //返回遍历器当前位置的记录        var layerRec = iter.GetRecord();        layerRec.IsLocked = true;        alert("成功锁定图层");    }} | 
六、冻结图层
js中冻结图层实现代码说明:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return;layerRec.IsFrozen = true;alert("成功冻结图层"); | 
js中冻结全部图层实现代码说明:
    //返回控件的数据库对象    var database = mxOcx.GetDatabase();    //返回数据库中的层表对象     var layerTable = database.GetLayerTable();    //创建一个遍历层表中所有图层的遍历器    var iter = layerTable.NewIterator();    for (; !iter.Done(); iter.Step())    {        //返回遍历器当前位置的记录        var layerRec = iter.GetRecord();        layerRec.IsFrozen = true;        alert("成功冻结所有图层");      } | 
七、隐藏选择实体的图层
js中实现代码说明:
  // 隐藏选择实体的层。var ent = mxOcx.GetEntity("选择要关闭图层的实体:");if(ent == null){    return;}if (ent == null){    return;}var sLayerName = ent.Layer;var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerTableRec = layerTable.GetAt(sLayerName, false);if(layerTable != null){    layerTableRec.IsOff = true;} | 
八、设置图层亮度
主要用到函数说明:
MxDrawXCustomFunction::Mx_SetLayerBright
设置显示亮度,默认值为100%。详细说明如下:
| 参数 | 说明 | 
|---|---|
LPCTSTR pszLayerName  | 图层名,为空,就设置所有图层  | 
DOUBLE bright  | 亮度百分数,取值为0 ~100  | 
LONG lisAutoUpDisplay  | 是否自动更新显示  | 
c#中实现代码说明:
    MxDrawResbuf param = new MxDrawResbuf();         // 图层名         param.AddString("222");         // 图层亮度.    param.AddDouble(50);         // 不自动调用更新函数。         param.AddLong(0);    axMxDrawX1.CallEx("Mx_SetLayerBright", param); | 
js中实现代码说明:
var param = mxOcx.NewResbuf();// 图层名param.AddStringEx("222");// 图层亮度.param.AddDoubleEx(100);// 不自动调用更新函数。param.AddLongEx(0);mxOcx.CallEx("Mx_SetLayerBright", param); | 
九、得到图层亮度
主要用到函数说明:
MxDrawXCustomFunction::Mx_GetLayerBright
返回图层亮度,默认值为100%。详细说明如下:
| 参数 | 说明 | 
|---|---|
LPCTSTR pszLayerName  | 图层名,为空,就设置所有图层  | 
c#中实现代码说明:
        MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.Call("Mx_GetLayerBright", "0");                if (ret.AtString(0) == "Ok")        {            MessageBox.Show(ret.AtDouble(1).ToString());        } | 
js中实现代码说明:
var ret = mxOcx.Call("Mx_GetLayerBright", "0");if (ret.AtString(0) == "Ok"){    alert(ret.AtDouble(1).toString());} | 
十、设置图层颜色
主要用到函数说明:
IMxDrawMcCmColor::SetRGB
设置颜色的RGB色。详细说明如下:
| 参数 | 说明 | 
|---|---|
[in] LONG lRed  | 红色  | 
[in] LONG lGreen  | 绿色  | 
[in] LONG lBlue  | 蓝色  | 
js中实现代码说明:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return;//返回图层的颜色var newColor = layerRec.Color;//设置图层颜色newColor.SetRGB(255,255,0);//将设置的颜色赋值给图层layerRec.Color = newColor;alert("设置颜色成功"); | 
十一、得到图层颜色
js中实现代码说明:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return;//返回图层的颜色var newColor = layerRec.Color;var layercolor=newColor.colorIndex;alert(layercolor); | 
十二、设置图层线型
主要用到函数说明:
IMxDrawLayerTableRecord::LinetypeObjectId
返回图层的线型样式id。
js中实现代码说明:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return;//定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长。var linetypeid = mxOcx.AddLinetype("MyLineType123", "6,-10");alert(linetypeid);layerRec.LinetypeObjectId = linetypeid;alert("设置图层线型成功"); | 
设置线型后如下图所示:

十三、得到图层线型
主要用到函数说明:
IMxDrawLayerTableRecord::LinetypeObjectId
返回图层的线型样式id。
js中实现代码说明:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return; var glinetype = layerRec.LinetypeObjectId; alert(glinetype); | 
十四、得到某图层的所有实体
主要用到函数说明:
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 SelectAssign() {    //实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。    var ss = mxOcx.NewSelectionSet();    //构造一个过滤链表    var spFilte = mxOcx.NewResbuf();    // "0",是图层名,8是DXF码,代表"0"是个图层字符串。    // 选择 0层上的实体。    spFilte.AddStringEx("0", 8);    ss.Select2(5,null, null, null,spFilte);    for (var i = 0; i < ss.Count; i++)    {        var ent = ss.Item(i);        alert(ent.ObjectName);    }} | 
得到指定层指定条件的实体:
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);    }} | 
十五、将图层设置为当前层
js中实现代码如下:
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];}var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerRec = layerTable.GetAt(txt, false);if (layerRec == null)    return;//符号表记录名属性var sName = layerRec.Name;database.CurrentlyLayerName = sName;alert("设置图层为当前层成功"); |