首页 > 其他分享 >将文本转换为块的属性

将文本转换为块的属性

时间:2024-01-14 19:46:19浏览次数:30  
标签:OpenMode 文本 attRef new 为块 BlockTableRecord 属性

同事提出了这样一个需求,

将文本(DBText)转换为块的属性值,

我尝试着使用如下的流程实现了该操作,

使用Civil 3d将文本移动到对应高程,

创建Civil 3d曲面,

提取点(AutoCAD的Point),

转换生成几何空间点(CogoPoint),

之后通过几何空间点生成属性块。

但生成的属性块属性标签无法设置也无法修改,

不能满足要求,

于是就试着写下了如下的代码,

经过测试能够满足要求:

 

public void C_AddATT()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = Application.DocumentManager.MdiActiveDocument.Database;
    var ppr = doc.Editor.GetString("\n输入块名");
    if (ppr.Status != PromptStatus.OK) return;
    using (Transaction tr = doc.TransactionManager.StartTransaction())
    {
        BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;

        BlockTableRecord blockDef = bt[ppr.StringResult].GetObject(OpenMode.ForRead) as BlockTableRecord;
        BlockTableRecord ms = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
        if (blockDef != null)
        {
            TypedValue[] acTypValAr = new TypedValue[1];
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "TEXT"), 0);
            SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);
            PromptSelectionOptions pso = new PromptSelectionOptions();
            pso.MessageForAdding = "\n选择文本";

            var psr = doc.Editor.GetSelection(pso,acSelFtr);
            if (psr.Status == PromptStatus.OK)
            {
                foreach (ObjectId id in psr.Value.GetObjectIds())
                {
                    DBText text = id.GetObject(OpenMode.ForRead) as DBText;
                    using (BlockReference blockRef = new BlockReference(text.Position, blockDef.ObjectId))
                    {
                        ms.AppendEntity(blockRef);
                        tr.AddNewlyCreatedDBObject(blockRef, true);
                        foreach (ObjectId attid in blockDef)
                        {
                            DBObject obj = attid.GetObject(OpenMode.ForRead);
                            AttributeDefinition attDef = obj as AttributeDefinition;
                            if ((attDef != null) && (!attDef.Constant))
                            {
                                using (AttributeReference attRef = new AttributeReference())
                                {
                                    attRef.SetAttributeFromBlock(attDef, blockRef.BlockTransform);
                                    attRef.TextString = text.TextString;
                                    //Add the AttributeReference to the BlockReference
                                    blockRef.AttributeCollection.AppendAttribute(attRef);
                                    tr.AddNewlyCreatedDBObject(attRef, true);
                                }
                            }
                        }
                    }
                }
            }
        }
        else
        {
            doc.Editor.WriteMessage("\n输入的块名不存在,请重新输入");
        }
        tr.Commit();
    }
}

 

前提:需要提前定义一个属性块,

包含一个属性即可,

属性标签按需设置,

程序将在文本插入点位置插入块,

并将文本值作文块的属性值….

标签:OpenMode,文本,attRef,new,为块,BlockTableRecord,属性
From: https://www.cnblogs.com/myzw/p/17964068

相关文章

  • Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和
    一、类型(Types)一、OpenPopupOptions1.属性windowId:number可选打开操作弹出式窗口的窗口ID。如果未指定,则默认为当前活动窗口。二、TabDetails1.属性tabId:number可选要查询其状态的标签页ID。如果未指定标签页,则返回非标签页专属状态。三、UserSettin......
  • 小程序开发:笔记详情显示图片以及可以富文本编辑
    上文说到:把笔记列表的下拉刷新、上拉加载更多功能完成了。本文主要完成的功能项:页面显示图片、编辑时富文本编辑。现在的详情页是这样的: 图片还是个url。刚抽空把首页列表的无数据时展示提示的功能做了,大概样式如下: 而现在的编辑页面是这样的: 只是简单的文字编辑功能......
  • 文本编辑
    文本编辑TextBox显示设计时输入的文本,用户可以在运行时编辑此文本,或者通过编程来更改此文本。如下所示:usingSystem.Data;namespaceWinformDebug{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();......
  • js Global 对象属性
    Global对象有很多属性,其中一些前面已经提到过了。像undefined、NaN和Infinity等特殊值都是Global对象的属性。此外,所有原生引用类型构造函数,比如Object和Function,也都是Global对象的属性。undefinedNaNInfinityObjectArrayFunctionBooleanString特殊值undefi......
  • Qt QTableView和QStandardItemModel模糊搜索出现的文本及隐藏顶层节点
    前言使用Qt进行开发时,树结构一般是使用QTreeWidget或使用QTreeView+QStandardItemModel结合。查找如果要进行查找树的所有项中,是否包含某文本,就需要遍历。QTreeWidget查找以下是使用QTreeWidget进行查找:首先初始化一些树结构QTreeWidget*pTW=newQTreeWidget(this);......
  • HTML DOM对象-方法和属性
    HTMLDOM对象-方法和属性一些常用的HTMLDOM方法:getElementById(id)-获取带有指定id的节点(元素)getElementsByTagName()  返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。 返回节点列表。节点列表是一个节点数组。getElementsByClassName()  返回......
  • SSD-1B速度革命:文本到图像加速60%
    模型描述SSD-1B面临的主要挑战是生成人工智能的大小和速度。处理基于文本的语言模型时,加载整个模型权重和推理时间成为一个挑战,对于使用稳定扩散的图像来说更是如此。SSD-1B是SDXL的精简版,体积缩小了50%,速度提升了60%,同时保持了高质量的文本到图像生成能力。它在包括Grit和Midjourn......
  • 一个 python 拆解文本文件的工具
    背景你是否有遇到过文本文档太大无法打开的情况?比如说压测了好几天,生成了一个十几G的日志文件。下面这个脚本可以帮助你将一个大文件分解成一个小文件。假设文件名位:splitfile.py使用方法位:pythonsplitfile.pylog20该文件将会将log文件拆分成log.0log.1log.2...l......
  • 【转载】SAP程序属性中的固定点算术
    【转载地址】:https://www.cnblogs.com/zohoo/p/17337504.htmlSAP程序创建时,程序属性面板中有一个选项叫做“固定点算术”,默认是勾上的,如下图所示:通过按F1在该选上调取帮助说明,可以看到官方是这样解释的:如果标记该复选框,该程序中的所有计算都将使用定点运算。如果未标......
  • RHCE第三周 文本处理工具
    一:文本查看工具cat,tac,more,less,head,tail,wc这些命令1:cat和tac命令cat这个命令就是从头到尾的显示完整的文件内容,tac就是从尾到头的显示文件内容选项:-n:就是可以显示行数和文件内容-A:这个就是显示文件的不同点,可以看得到空格,这个非常的重要,就是在后面写shell脚本或者剧本的......