CAD对块的文字操作

一、在插入块前修改图块文字

1、实现思路:首先我们利用InsertBlock方法将我们需要插入的块文件引入到控件数据库中,然后利用GetBlockTable得到块表对象,再查找当前块表中是否有块表记录,再创建一个用于遍历块表的遍历器,得到遍历器当前的实体,如果当前实体是一个文字就利用TextString修改文字内容,最后再利用DrawBlockReference绘制图块到视区中。

2、主要用到函数说明:_DMxDrawX::DrawBlockReference

绘制块引用对象。详细说明如下:

参数

说明

DOUBLE dPosX

插入点的X坐标

DOUBLE dPosY

插入点的Y坐标

BSTR pszBlkName

图块名

DOUBLE dScale

图块缩放比例

DOUBLE dAng

图块的旋转角度

c#中使用如下:


             // 插入块的块名。
            String sBlkName = "MyBlkName";
 
            // 把要插入的块文件引入到控件数据库中。
            String sBlkFile = axMxDrawX1.GetOcxAppPath() + "\\Blk\\attribblock.dwg";
            axMxDrawX1.InsertBlock(sBlkFile, sBlkName);
            // 得到当前应用对象
            MxDrawApplication app = new MxDrawApplication();
 
            // 取到控件数据库
            MxDrawDatabase database = app.WorkingDatabase();
 
            // 得到块表对象
            MxDrawBlockTable blkTable = database.GetBlockTable();
 
            // 当前块表中是否已经有名为sBlkName的块表记录
            MxDrawBlockTableRecord blkRec = blkTable.GetAt(sBlkName, true);
            if (blkRec == null)
            {
                // 证明InsertBlock函数失败,没有成功把文件插入数据库中。
                return;
            }
 
            // 创建一个用于遍历块表遍历器
            MxDrawBlockTableRecordIterator iter = blkRec.NewIterator();
            if (iter == null)
                return;
 
            for (; !iter.Done(); iter.Step(true, false))
            {
                // 得到遍历器当前的实体
                MxDrawEntity ent = iter.GetEntity();
                if (ent == null)
                    continue;
                if (ent.ObjectName == "McDbText")
                {
                    // 当前实体是一个文字
                    MxDrawText text = (MxDrawText)ent;
                    // 修改文字内容为 "MyContent"
                    text.TextString = "MyContent";
                }
            }
 
            // 创建块引用,把图块插入到当前空间,并显示。
            axMxDrawX1.DrawBlockReference(0, 0, sBlkName, 1.0, 0.0);

 js中使用如下:


  // 插入块的块名。
var sBlkName = "MyBlkName";
 
// 把要插入的块文件引入到控件数据库中。
var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\attribblock.dwg";
mxOcx.InsertBlock(sBlkFile, sBlkName);
 
// 取到控件数据库
var database = mxOcx.GetDatabase();
 
// 得到块表对象
var blkTable = database.GetBlockTable();
 
// 当前块表中是否已经有名为sBlkName的块表记录
var blkRec = blkTable.GetAt(sBlkName, true);
if (blkRec == null)
{
    // 证明InsertBlock函数失败,没有成功把文件插入数据库中。
    return;
}
 
// 创建一个用于遍历块表遍历器
var iter = blkRec.NewIterator();
if (iter == null)
    return;
 
for (; !iter.Done(); iter.Step(true, false))
{
    // 得到遍历器当前的实体
    var ent = iter.GetEntity();
    if (ent == null)
        continue;
    if (ent.ObjectName == "McDbText") {
        // 当前实体是一个文字
        var text =ent;
        // 修改文字内容为 "MyContent"
        text.TextString = "MyContent";
    }
 
}
 
// 创建块引用,把图块插入到当前空间,并显示。
mxOcx.DrawBlockReference(0, 0, sBlkName, 1.0, 0.0);

二、获取图块文字信息

实现思路:获取控件数据库中的块表对象,创建遍历块表记录的遍历器。遍历出图纸上的图块;利用两次遍历得到组成图块的实体,如果当前实体是一个文字就利用TextString得到文字内容。

js中使用如下:


var database = mxOcx.GetDatabase();
var blkTab = database.GetBlockTable();
var iter = blkTab.NewIterator();
for (; !iter.Done(); iter.Step(true, false)) {
    var blkRec = iter.GetRecord();
    var iter1 = blkRec.NewIterator();
    for (; !iter1.Done(); iter1.Step()) {
        var tmpEnt = iter1.GetEntity();
        if (tmpEnt == null)
            continue;
        if (tmpEnt.ObjectName == "McDbText") {
            // 当前实体是一个文字
            var text =tmpEnt;
            var txt=text.TextString;
 
            alert(txt.toString());
 
        }
    }
}

三、修改图块指定文字

实现思路:获取控件数据库中的块表对象,创建遍历块表记录的遍历器。遍历出图纸上的图块;利用两次遍历得到组成图块的实体,如果当前实体是一个文字就利用TextString修改文字内容。

js中使用如下:

var database = mxOcx.GetDatabase();
var blkTab = database.GetBlockTable();
var iter = blkTab.NewIterator();
for (; !iter.Done(); iter.Step(true, false)) {
    var blkRec = iter.GetRecord();
    var iter1 = blkRec.NewIterator();
    for (; !iter1.Done(); iter1.Step()) {
        var tmpEnt = iter1.GetEntity();
        if (tmpEnt == null)
            continue;
        if (tmpEnt.ObjectName == "McDbText") {
            // 当前实体是一个文字
            var text =tmpEnt;
 
            if(text.TextString =="123"){
                // 修改文字内容为 "MyContent"
                text.TextString = "MyContent";
            }
        }
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值