乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 121|回复: 7

如何用.net修改图纸中的文字样式

[复制链接]

1

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
7
发表于 2011-9-28 15:11:00 | 显示全部楼层 |阅读模式
图纸中已经存在很多文字样式,用的字体也都乱七八糟,现在想写一个.net程序,让所有文字都刷成同一种文字样式,使用相同的字体,该怎么做?
我刚开始学着做.net cad,没多少思路,麻烦给提示下。
回复

使用道具 举报

1

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
7
发表于 2011-9-30 11:32:00 | 显示全部楼层
有人帮助一下吗?
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2011-12-7 19:25:00 | 显示全部楼层
顶一下,我也在找!如何改变dwg中字体!
回复

使用道具 举报

4

主题

86

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2011-12-8 09:20:00 | 显示全部楼层

试试如下代码,需要将字体样式名字改为你想的,为了简单处理,没有加判断处理,所以必须保证图幅中存在此名称的文本样式,使用时请注意
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5.         [CommandMethod("my")]
  6.         public void my()
  7.         {
  8.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  9.             TypedValue[] tv = new TypedValue[1];
  10.             tv[0] = new TypedValue((int)DxfCode.Start, "TEXT");
  11.             SelectionFilter sf = new SelectionFilter(tv);
  12.             PromptSelectionResult psres = ed.GetSelection(sf);
  13.             if (psres.Status != PromptStatus.OK) return;
  14.             SelectionSet sset = psres.Value;
  15.             Database db = HostApplicationServices.WorkingDatabase;
  16.             int num = 0;
  17.             foreach (SelectedObject sobj in sset)
  18.             {
  19.                 using (Transaction ta = db.TransactionManager.StartTransaction())
  20.                 {
  21.                     Entity ent = (Entity)ta.GetObject(sobj.ObjectId, OpenMode.ForRead);
  22.                     if (ent is DBText)
  23.                     {
  24.                         ent.UpgradeOpen();
  25.                         DBText myText = ent as DBText;
  26.                         TextStyleTable tst = ta.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  27.                         myText.TextStyleId = tst["st"];
  28.                         num++;
  29.                     
  30.                     }
  31.                     ta.Commit();
  32.                 }
  33.                
  34.                 ed.WriteMessage("\n修改文本数量:"+num.ToString());
  35.             }
  36.         }
回复

使用道具 举报

2

主题

91

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2011-12-8 13:19:00 | 显示全部楼层
是这效果么?

5a0zz0zllo4.JPG

5a0zz0zllo4.JPG


回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-12-8 22:58:00 | 显示全部楼层

跟我很久以前的想法一样,呵呵,已经基本实现这个功能,只是少数图纸还替换不完全,没找到原因。
CAD文档中牵涉到文字的有如下几种实体:
1.纯文本:DBText,MText'
2.标注样式:DimStyleTableRecord
3.块定义实体(非块参照,只要把块定义中含有的文字样式替换掉,所有参照都替换了):BlockTableRecord
4.属性定义实体:这个好像要对每个块参照都要判断 AttributeReference
5.表格样式和表格单元格中的文字样式:本来以为修改字体样式可以自动修改,但经过试验,好像有些不行
我说实现的就这些,还有木有?知道的说下!

nkaalt1m15m.gif

nkaalt1m15m.gif


回复

使用道具 举报

4

主题

19

帖子

2

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-4-15 12:57:00 | 显示全部楼层
请问楼上那个字体预览功能是怎么做的,谢谢!
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2013-4-18 19:35:00 | 显示全部楼层

如果要改成一个效果,可能通过更改样式表,这样可以将有到此样式的所有文字、块中的文字等全部改掉。
  1.     '''
  2.     ''' 样式改为一种
  3.     '''
  4.     ''' 改后的样式
  5.     '''
  6.     Public Sub TextStyleToSame(ByVal ToStyle As String)
  7.         Using Trans As Transaction = MyBase.DB.TransactionManager.StartTransaction
  8.             Dim StyTab As TextStyleTable = Trans.GetObject(DB.TextStyleTableId, OpenMode.ForWrite)
  9.             ToStyle = ToStyle.Trim.ToUpper
  10.             If StyTab.Has(ToStyle) Then
  11.                 Dim MainStyleRec As TextStyleTableRecord = Trans.GetObject(StyTab(ToStyle), OpenMode.ForWrite)
  12.                 Dim TempRec As TextStyleTableRecord = Nothing, TempName As String = ""
  13.                 For Each ID As ObjectId In StyTab
  14.                     Try
  15.                         TempRec = Trans.GetObject(ID, OpenMode.ForWrite)
  16.                         TempName = TempRec.Name
  17.                         If TempName.Trim = "" Then
  18.                             Continue For
  19.                         End If
  20.                         If TempName.ToUpper  ToStyle Then
  21.                             TempRec.CopyFrom(MainStyleRec)
  22.                             TempRec.Name = TempName
  23.                         End If
  24.                     Catch ex As Autodesk.AutoCAD.Runtime.Exception
  25.                     End Try
  26.                 Next
  27.             End If
  28.             Trans.Commit()
  29.         End Using
  30.     End Sub
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 18:40 , Processed in 0.850354 second(s), 82 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表