土木在线论坛 \ 建筑设计 \ 其他建筑软件 \ 梦想CAD控件图层COM接口知识点

梦想CAD控件图层COM接口知识点

发布于:2019-03-01 18:40:01 来自:建筑设计/其他建筑软件 [复制转发]

梦想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(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("设置图层为当前层成功"); 

全部回复(0 )

只看楼主 我来说两句抢沙发

其他建筑软件

返回版块

33.92 万条内容 · 116 人订阅

猜你喜欢

阅读下一篇

识别PNG图片转文字的具体操作方法

    怎样识别PNG图片转文字呢?可能一些人首先想到的便是通过手动打字的方法进行转换,这种方法虽然可以解决问题但是效率太低了,而且还容易出错,那还有什么简单的方法吗?当然是有的,接下来小编将为大家分享一种简单实现转换的方法,就不用辛苦的打字啦!     参考工具:迅捷OCR文字识别软件     操作步骤:

回帖成功

经验值 +10