简介新建图层隐藏图层显示图层得到所有图层名打开所有图层锁定所有图层增加文字样式得到文字样式名删除文字样式增加标注样式得到标注样式名删除标注样式显示顺序
简介

此实例将演示如何获取图纸上常用的一些信息,如符号表(块表、层表、文字样式表、线型表、点样式表)、字典。点击此处下载演示实例


下面将介绍如何获取个符号表的一些信息,如下图所示:


15123534486359648.png

新建图层

主要用到函数说明:


_DMxDrawX::AddLayer


增加新的图层。详细说明如下:


参数 说明

BSTR pszName

图层名


IMxDrawMcCmColor::SetRGB


设置颜色的RGB色。详细说明如下:


参数 说明

[in] LONG lRed

红色

[in] LONG lGreen

绿色

[in] LONG lBlue

蓝色


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;
}


效果展示:


creatlayer.png

隐藏图层

主要用到函数说明:


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;
}


效果展示:


隐藏图层前:


hidelayer1.png


隐藏图层后:


hidelayer2.png

显示图层

主要用到函数说明:


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;
    }
}


效果展示:


显示隐藏图层前:


showlayer1.png


显示隐藏图层后:


showlayer2.png

得到所有图层名

主要用到函数说明:


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, false))
    {
        //返回遍历器当前位置的记录
        MxDrawLayerTableRecord layerTableRec = iter.GetRecord();
        sRet = sRet + ',' + layerTableRec.Name;
    }
    MessageBox.Show(sRet);
}


效果展示:


getalllayer.png

打开所有图层

主要用到函数说明:


IMxDrawLayerTableIterator::Step


得到层表中的图层对象。详细说明如下:


参数说明

[in,defaultvalue(TRUE) ] VARIANT_BOOL forward

为ture向前移动一位,为false向后移动位

[in,defaultvalue(TRUE) ] VARIANT_BOOL skipDeleted

是否跳过删除的对象


c#中实现代码说明:


private void OpenAllLayer()
{
    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 = false;
    }
    MessageBox.Show("锁定所有图层成功!");
}


效果展示:


openalllayer.png

锁定所有图层

具体实现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("锁定所有图层成功!");
}


效果展示:


locklayer.png

增加文字样式

用户可以增加文字样式到数据库,并设置其字体等属性,具体实现c#代码如下:


  private void CreateText()
{
    MxDrawApplication app = new MxDrawApplication();
    //返回数据库中的文字样式表对象 
    MxDrawTextStyleTable mxtst = app.WorkingDatabase().GetTextStyleTable();
    //增加新的文字样式
    MxDrawTextStyleTableRecord mxtstr = mxtst.Add("duanceng");
    //设置样式
    //设置文字的TrueType字体,如果文字样式设置了TrueType字体,就不会使用前面设置shx字体
    //参数一为turetype字体名 参数二为是否粗写  参数三为是否斜写  参数四为windows字符集  参数五暂没使用
    mxtstr.SetFont("黑体", false, false, 0, 0);
    //返回文字的高度
    mxtstr.textSize = 5;
 
    //返回数据库中的文字样式表对象
    //设置为当前文字样式
 
    app.WorkingDatabase().CurrentlyTextStyle = "duanceng";
}


效果展示:


creattextstyle.png

得到文字样式名

用户可以得到所有文字样式名,具体实现c#代码如下:


  private void GetAllText()
{
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    //返回数据库中的文字样式表对象 
    MxDrawTextStyleTable mxtst = database.GetTextStyleTable();
    //创建一个遍历文字样式表中所有文字样式的遍历器
    MxDrawTextStyleTableIterator iter = mxtst.NewIterator();
    if (iter == null)
        return;
    string sRet = null;
    //移动当前遍历器位置
    for (; !iter.Done(); iter.Step(true, false))
    {
        //返回遍历器当前位置的记录
        MxDrawTextStyleTableRecord spTextStyleRec = iter.GetRecord();
        //符号表记录名属性  
        sRet = sRet + ',' + spTextStyleRec.Name;
    }
    MessageBox.Show(sRet);
}


效果展示:


getalltextstyle.png

删除文字样式

用户可以删除某个文字样式,具体实现c#代码如下:


  private void DelText()
{
    string txt = textBox1.Text;
 
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    //返回数据库中的文字样式表表对象
    MxDrawTextStyleTable TextStyleTable = database.GetTextStyleTable();
    //得到层表中的文字样式表对象
    MxDrawTextStyleTableRecord TextStyleRec = TextStyleTable.GetAt(txt, false);
    if (TextStyleRec == null)
        return;
    //删除对象
    TextStyleRec.Erase();
    MessageBox.Show("成功删除文字样式");
}


效果展示:


deltextstyle1.png


deltextstyle2.png

增加标注样式

用户可以增加标注样式到数据库,具体实现c#代码如下:


private void CreateDim()
{
    //返回控件的数据库对象
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    //返回数据库中的标注样式表对象
    IMxDrawDimStyleTable mxdim = database.GetDimStyleTable();
    //增加新的标注样式
    IMxDrawDimStyleTableRecord dimstr = mxdim.Add("mydim");
    //设置样式
    dimstr.SetDimVarDouble(40, 20.0);
    //返回数据库中的标注样式表对象
    database.CurrentlyDimstyleName = "mydim";
}


效果展示:


creatdim.png

得到标注样式名

用户可以得到所有标注样式名,具体实现c#代码如下:


private void GetAllDim()
{
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    //返回数据库中的文字样式表对象
    MxDrawDimStyleTable spDimStyleTable = database.GetDimStyleTable();
    //创建一个遍历层表中所有图层的遍历器
    var spIter = spDimStyleTable.NewIterator();
    // 得到所有图层名
    string sRet = null;
    //移动当前遍历器位置
    for (; !spIter.Done(); spIter.Step(true, true))
    {
        //返回遍历器当前位置的记录
        var spDimStyleTableRec = spIter.GetRecord();
        //符号表记录名属性
        var sName = spDimStyleTableRec.Name;
        // 0零层不参加比较
        if (sName != "0")
        {
            if (sRet == null)
                sRet = sName;
            else
            {
                sRet = sRet + "," + sName;
            }
        }
    }
    MessageBox.Show(sRet);
}


效果展示:


getdim.png

删除标注样式

用户可以得到删除某个标注样式,具体实现c#代码如下:


private void DelDim()
{
    string txt = textBox2.Text;
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    //返回数据库中的样式表对象
    IMxDrawDimStyleTable DimStyleTable = database.GetDimStyleTable();
    //得到样式表表中的样式对象
    IMxDrawDimStyleTableRecord DimStyleRec = DimStyleTable.GetAt(txt, false);
    if (DimStyleRec == null)
        return;
    //删除对象
    DimStyleRec.Erase();
    MessageBox.Show("成功删除标注样式");
}


效果展示:


deldim.png


deldim1.png

显示顺序

在用户设计图纸时,在默认情况下,重叠对象(例如文字、宽多段线和实体填充多边形)通常按其创建次序显示:新创建的对象显示在现有对象前面。本实例演示了如何控制显示顺序,具体实现c#代码如下:


private void MxOrder()
{
    MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
    MxDrawResbuf ret = database.GetProp("getMinDrawOrder");
    int lMin = ret.AtLong(0);
 
    MxDrawResbuf ret2 = database.GetProp("getMaxDrawOrder");
    int lMax = ret2.AtLong(0);
 
    long sTemp = axMxDrawX1.DrawImage(0, 0, 0, 0, "D:\\mxcad.jpg");
    MxDrawMcDbObject ent = database.ObjectIdToObject(sTemp);
 
    MxDrawResbuf param = new MxDrawResbuf();
    param.AddLong(lMin + 2);
 
    ent.SetProp("drawOrder", param);
    axMxDrawX1.ZoomAll();
}


由上述设置的c#代码可以将我们插入的图片显示到最开始绘制的两个实体之上,之后绘制的实体之下。效果如下图所示:


upordown.png

梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
技术服务
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
产品购买
TEL:156-8136-8971
QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703