cnstal 发表于 2011-9-28 15:11:33

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

图纸中已经存在很多文字样式,用的字体也都乱七八糟,现在想写一个.net程序,让所有文字都刷成同一种文字样式,使用相同的字体,该怎么做?
我刚开始学着做.net cad,没多少思路,麻烦给提示下。


cnstal 发表于 2011-9-30 11:32:30

有人帮助一下吗?

qiuljun 发表于 2011-12-7 19:25:47

顶一下,我也在找!如何改变dwg中字体!

liuxu042 发表于 2011-12-8 09:20:50

本帖最后由 liuxu042 于 2011-12-8 09:29 编辑

试试如下代码,需要将字体样式名字改为你想的,为了简单处理,没有加判断处理,所以必须保证图幅中存在此名称的文本样式,使用时请注意 using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;

      
      public void my()
      {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            TypedValue[] tv = new TypedValue;
            tv = new TypedValue((int)DxfCode.Start, "TEXT");
            SelectionFilter sf = new SelectionFilter(tv);
            PromptSelectionResult psres = ed.GetSelection(sf);
            if (psres.Status != PromptStatus.OK) return;
            SelectionSet sset = psres.Value;
            Database db = HostApplicationServices.WorkingDatabase;
            int num = 0;
            foreach (SelectedObject sobj in sset)
            {
                using (Transaction ta = db.TransactionManager.StartTransaction())
                {
                  Entity ent = (Entity)ta.GetObject(sobj.ObjectId, OpenMode.ForRead);
                  if (ent is DBText)
                  {
                        ent.UpgradeOpen();
                        DBText myText = ent as DBText;

                        TextStyleTable tst = ta.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
                        myText.TextStyleId = tst["st"];
                        num++;
                  
                  }
                  ta.Commit();
                }
               
                ed.WriteMessage("\n修改文本数量:"+num.ToString());
            }
      }

ps122hb 发表于 2011-12-8 13:19:01

是这效果么?

mkhsj928 发表于 2011-12-8 22:58:18

本帖最后由 mkhsj928 于 2011-12-8 23:24 编辑

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

zhengjian211 发表于 2013-4-15 12:57:43

请问楼上那个字体预览功能是怎么做的,谢谢!

guohq 发表于 2013-4-18 19:35:31

本帖最后由 guohq 于 2013-4-18 19:36 编辑

如果要改成一个效果,可能通过更改样式表,这样可以将有到此样式的所有文字、块中的文字等全部改掉。    '''
    ''' 样式改为一种
    '''
    ''' 改后的样式
    '''
    Public Sub TextStyleToSame(ByVal ToStyle As String)
      Using Trans As Transaction = MyBase.DB.TransactionManager.StartTransaction
            Dim StyTab As TextStyleTable = Trans.GetObject(DB.TextStyleTableId, OpenMode.ForWrite)
            ToStyle = ToStyle.Trim.ToUpper
            If StyTab.Has(ToStyle) Then
                Dim MainStyleRec As TextStyleTableRecord = Trans.GetObject(StyTab(ToStyle), OpenMode.ForWrite)
                Dim TempRec As TextStyleTableRecord = Nothing, TempName As String = ""
                For Each ID As ObjectId In StyTab
                  Try
                        TempRec = Trans.GetObject(ID, OpenMode.ForWrite)
                        TempName = TempRec.Name
                        If TempName.Trim = "" Then
                            Continue For
                        End If
                        If TempName.ToUpper <> ToStyle Then
                            TempRec.CopyFrom(MainStyleRec)
                            TempRec.Name = TempName
                        End If
                  Catch ex As Autodesk.AutoCAD.Runtime.Exception

                  End Try
                Next
            End If
            Trans.Commit()
      End Using
    End Sub

页: [1]
查看完整版本: 如何用.net修改图纸中的文字样式