LOGO
帮助文档
旧版文档
技术资讯

每一次案例的完美合作,是对我们团队高度认可,相信未来会更好!

梦想CAD图层COM接口知识点

一、新建图层


主要用到函数说明:


_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(truefalse))
    {
        //返回遍历器当前位置的记录
        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(truetrue))
    {
        //返回遍历器当前位置的记录
        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("设置图层线型成功");


设置线型后如下图所示:


layerlinetype.png


十三、得到图层线型


主要用到函数说明:


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("设置图层为当前层成功");
梦想CAD控件,DWG网页,CAD网页,CAD控件,CAD开发