public static ObjectId AddTextStyle(string styleName, string fontName, bool bold, bool italic, int charset, int pitchAndFamily){Database db = HostApplicationServices.WorkingDatabase;//获取当前库TextStyleTable st;using (Transaction trans = db.TransactionManager.StartTransaction())//开启事务{//打开文字样式表st = (TextStyleTable)db.TextStyleTableId.GetObject(OpenMode.ForRead);if (!st.Has(styleName))//如果不存在名为styleName的文字样式,则新建一个文字样式{//定义一个新的的文字样式表记录TextStyleTableRecord str = new TextStyleTableRecord();str.Name = styleName;//设置的文字样式名//设置文字样式的字体try{str.Font = new FontDescriptor(fontName, bold, italic, charset, pitchAndFamily);}catch (System.Exception){                        str.Font = new FontDescriptor("微软雅黑", bold, italic, charset, pitchAndFamily);                        }str.XScale = 0.48;st.UpgradeOpen();//切换的文字样式表的状态为写以添加新的的文字样式st.Add(str);//将新建的文字样式表记录的信息添加到文字样式表中//把的文字样式表记录添加到事务处理中db.TransactionManager.AddNewlyCreatedDBObject(str, true);st.DowngradeOpen();//为了安全,将文字样式表的状态切换为读}trans.Commit();//提交事务}return st[styleName];//返回新添加的的文字样式表记录的ObjectId}public static ObjectId AddTextStyle(string styleName, string fontFilename, string bigFontFilename){Database db = HostApplicationServices.WorkingDatabase;//获取当前库TextStyleTable st;using (Transaction trans = db.TransactionManager.StartTransaction())//开启事务{//打开文字样式表st = (TextStyleTable)db.TextStyleTableId.GetObject(OpenMode.ForRead);if (!st.Has(styleName))//如果不存在名为styleName的文字样式,则新建一个文字样式{//定义一个新的文字样式表记录TextStyleTableRecord str = new TextStyleTableRecord();str.Name = styleName;//设置文字样式名str.FileName = fontFilename;//设置字体文件名str.BigFontFileName = bigFontFilename;//设置大字体文件名                    str.XScale = 0.5;st.UpgradeOpen();//切换文字样式表的状态为写以添加新的文字样式st.Add(str);//将文字样式表记录的信息添加到文字样式表中//把文字样式表记录添加到事务处理中db.TransactionManager.AddNewlyCreatedDBObject(str, true);st.DowngradeOpen();//为了安全,将文字样式表的状态切换为读}trans.Commit();//提交事务}return st[styleName];//返回新添加的文字样式表记录的ObjectId}//遍历所有的DBtext实体对象//条件是指定的文字样式//替换成新的文字样式/// <summary>/// 文字样式替换/// </summary>/// <param name="BeforeName">原来的样式名</param>/// <param name="AfterName">改后的样式名</param>/// <returns>成功与否</returns>public static bool TextStyleTransForm(string BeforeName, string AfterName){ObjectId afterId =  GetTextStyleId(AfterName);//获取指定名称的文字样式idDatabase db = HostApplicationServices.WorkingDatabase;//获取当前库using (Transaction trans = db.TransactionManager.StartTransaction())//开启事务{BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;//获取块表BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;//获取模型空间的块表记录foreach (ObjectId item in btr)//遍历记录{Entity ent = trans.GetObject(item, OpenMode.ForRead) as Entity;//根据id获取实体对象if (ent.GetType() == typeof(DBText))//是否是单行文本{DBText dbtext = (DBText)ent;//转化if (dbtext != null && dbtext.TextStyleName == BeforeName)//不为空,且是指定的文字样式名{dbtext.UpgradeOpen();//是需要改的升级权限dbtext.TextStyleId = afterId;//改成新的样式TextStyleTableRecord str = afterId.GetObject(OpenMode.ForRead) as TextStyleTableRecord;dbtext.WidthFactor = str.XScale;//宽度因子dbtext.DowngradeOpen();  //修改之后限权}}}trans.Commit();//提交事务}return true;}/// <summary>/// 获取文本样式的id/// </summary>/// <param name="styleName"></param>/// <returns>id</returns>public static ObjectId GetTextStyleId(string styleName){ObjectId id = new ObjectId();Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){TextStyleTable st = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead);id = st[styleName];trans.Commit();}return id;}/// <summary>/// 获取数据库中所有的文字样式的名称/// </summary>/// <returns>ArrayList的数组</returns>public static ArrayList GetTextStyleName(){ArrayList textstylename = new ArrayList();using (Database db = HostApplicationServices.WorkingDatabase){using (Transaction trans = db.TransactionManager.StartTransaction()){using (TextStyleTable tt = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead)){foreach (ObjectId id in tt){TextStyleTableRecord ttr = (TextStyleTableRecord)trans.GetObject(id, OpenMode.ForRead);textstylename.Add(ttr.Name);}}trans.Commit();}}return textstylename;}
using System;
using System.Collections;
using System.Windows.Forms;
using DotNetARX;
namespace CadBasic
{public partial class TextStyleTransForm : Form{public TextStyleTransForm(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){if (lstBefore.Text == ""){MessageBox.Show("请选择更新前的文字样式名称");return;}if (lstAfter.Text == ""){MessageBox.Show("请选择更新后的文字样式名称");return;}//下面为可以替换的内容           if (TextStyleTools.TextStyleTransForm(lstBefore.Text, lstAfter.Text))MessageBox.Show("操作已经完成~!");this.Hide();}private void TextStyleTransForm_Activated(object sender, EventArgs e){TextStyleTools.AddTextStyle("自定义", "Romans.shx", "HZFS.SHX");TextStyleTools.AddTextStyle("华文新魏", "华文新魏", true, false, 0, 0);lstBefore.Items.Clear();lstAfter.Items.Clear();ArrayList alist = TextStyleTools.GetTextStyleName();lstBefore.Items.AddRange(alist.ToArray());//加入列表框内lstAfter.Items.AddRange(alist.ToArray());//加入列表框内}private void lstBefore_SelectedIndexChanged(object sender, EventArgs e){lstAfter.Items.Clear();for (int i = 0; i < lstBefore.Items.Count; i++)if (lstBefore.Items[i].ToString() != lstBefore.Text)lstAfter.Items.Add(lstBefore.Items[i].ToString());}}
}

C# CAD二次开发之字体替换 文字样式 处理DBText相关推荐

  1. C#实战之CAD二次开发003:插入文字和插入图块

    前言 上期我们介绍了如何利用C#在CAD中绘制直线和圆,这期我们介绍一下CAD中两个比较重要的功能,插入文字和插入图块,在CAD中插入文字主要是单行文字和多行文字,插入块主要有内部图块和外部图块.本文 ...

  2. CAD 二次开发之创建包含文字的线型

    1. 简介: 在CAD制图时,为了区分线条往往需要用到包含文字或特殊符号的线型,在这里就分享一个创建包含文字线型的插件. 线型的定义这里就不赘述了,大家可以看两个帖子: ObjectARX创建带文字的 ...

  3. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  4. C#之CAD二次开发 (11) 文本对象

    # 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...

  5. cad二次开发——自动运行dll,加载菜单(收集)

    1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...

  6. c#CAD二次开发全套视频目录

    本人非专业编程人员,设计院画图民工一名.自学CAD编程,也写了一些小程序!初期学习lisp编程语言,基本了解CAD各中开发模块,写过一些程序!前段时间自学C#CAD二次开发,遍布网上无教学视频.经过自 ...

  7. 【CAD二次开发】实现双击实体的响应

    一.基本双击响应实现 通过向导在VS中创建MFC支持的新项目: 项工程中添加普通CDoubleClick类, 基类选择AcDbDoubleClickEdit: 类的头文件为: class CDoubl ...

  8. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  9. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  10. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

最新文章

  1. 关于Neighbour table overflow消息
  2. oracle 48小时内_近了近了,内马尔正大步向巴萨走来,西媒称有望48小时内敲定转会...
  3. [linux]wait详解
  4. 自已脚本开发常用的底层方法
  5. redis集群搭建【简版】
  6. OS-written test2
  7. internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...
  8. 20条.net编码习惯
  9. 3n+1b 备忘录方法
  10. Hive学习之Metastore及其配置管理
  11. memcache php 到期时间,Memcache PHP会话调优:memcache如何过期密钥?
  12. 梅科尔工作室-李庆浩-网页前端7
  13. 微信登录(官方指导)
  14. 11210怎么等于24_所有能算24点的四个数,(4个数只能是1——10之间的数)我举个例:1,1,1,8.1,1,2,6.………………所有能算...
  15. 使用python+selenium谷歌浏览器驱动查排名
  16. Frontiers in Pharmacology2020 | MOSES+:分子生成模型的benchmark平台
  17. 从绘制 圆形(circle)说开
  18. Flutter 项目的闪屏页方案
  19. 【markdown】表格合并单元格
  20. 一人批量管理多个微信群,有什么好用的社群管理工具?

热门文章

  1. 将矩阵化为上三角矩阵
  2. EEPROM AT24C08的操作
  3. PS如何制作一寸照片
  4. 华为U2000北向接口开发中遇到的坑——获取HW_MSTPInventory管理对象失败
  5. 《产品经理面试攻略》PART 1:产品经理入门
  6. Java基础之类加载器
  7. 关于开发工程师的绩效考核
  8. 主键中的mappdeBy的使用方法
  9. ResNet网络结构
  10. Centos系统安装踩坑