梦想CAD控件图层COM接口知识点
一、新建图层
主要用到函数说明:
_DMxDrawX::AddLayer
增加新的图层。详细说明如下:
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( " 设置图层为当前层成功" ); |