C# CAD二次开发之字体替换 文字样式 处理DBText
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相关推荐
- C#实战之CAD二次开发003:插入文字和插入图块
前言 上期我们介绍了如何利用C#在CAD中绘制直线和圆,这期我们介绍一下CAD中两个比较重要的功能,插入文字和插入图块,在CAD中插入文字主要是单行文字和多行文字,插入块主要有内部图块和外部图块.本文 ...
- CAD 二次开发之创建包含文字的线型
1. 简介: 在CAD制图时,为了区分线条往往需要用到包含文字或特殊符号的线型,在这里就分享一个创建包含文字线型的插件. 线型的定义这里就不赘述了,大家可以看两个帖子: ObjectARX创建带文字的 ...
- cad二次开发程序的绿色安装
此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...
- C#之CAD二次开发 (11) 文本对象
# 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...
- cad二次开发——自动运行dll,加载菜单(收集)
1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...
- c#CAD二次开发全套视频目录
本人非专业编程人员,设计院画图民工一名.自学CAD编程,也写了一些小程序!初期学习lisp编程语言,基本了解CAD各中开发模块,写过一些程序!前段时间自学C#CAD二次开发,遍布网上无教学视频.经过自 ...
- 【CAD二次开发】实现双击实体的响应
一.基本双击响应实现 通过向导在VS中创建MFC支持的新项目: 项工程中添加普通CDoubleClick类, 基类选择AcDbDoubleClickEdit: 类的头文件为: class CDoubl ...
- lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...
<毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...
- intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题
CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...
- CAD 二次开发 图层操作(1)创建图层
CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...
最新文章
- 关于Neighbour table overflow消息
- oracle 48小时内_近了近了,内马尔正大步向巴萨走来,西媒称有望48小时内敲定转会...
- [linux]wait详解
- 自已脚本开发常用的底层方法
- redis集群搭建【简版】
- OS-written test2
- internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...
- 20条.net编码习惯
- 3n+1b 备忘录方法
- Hive学习之Metastore及其配置管理
- memcache php 到期时间,Memcache PHP会话调优:memcache如何过期密钥?
- 梅科尔工作室-李庆浩-网页前端7
- 微信登录(官方指导)
- 11210怎么等于24_所有能算24点的四个数,(4个数只能是1——10之间的数)我举个例:1,1,1,8.1,1,2,6.………………所有能算...
- 使用python+selenium谷歌浏览器驱动查排名
- Frontiers in Pharmacology2020 | MOSES+:分子生成模型的benchmark平台
- 从绘制 圆形(circle)说开
- Flutter 项目的闪屏页方案
- 【markdown】表格合并单元格
- 一人批量管理多个微信群,有什么好用的社群管理工具?