梦想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人已收藏
0人已打赏
免费0人已点赞
分享
其他建筑软件
返回版块33.92 万条内容 · 119 人订阅
阅读下一篇
识别PNG图片转文字的具体操作方法怎样识别PNG图片转文字呢?可能一些人首先想到的便是通过手动打字的方法进行转换,这种方法虽然可以解决问题但是效率太低了,而且还容易出错,那还有什么简单的方法吗?当然是有的,接下来小编将为大家分享一种简单实现转换的方法,就不用辛苦的打字啦! 参考工具:迅捷OCR文字识别软件 操作步骤:
回帖成功
经验值 +10
全部回复(0 )
只看楼主 我来说两句抢沙发