乐筑天下

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

MText使用相关

[复制链接]

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-5-15 13:41:00 | 显示全部楼层 |阅读模式
MText使用起来是有点复杂,特别是格式的解析
下面是个生成堆叠的示例,也许有必要写个专门的格式解析类
效果图:

4bkkwceqsg5.JPG

4bkkwceqsg5.JPG

  1.         public enum ScriptType
  2.         {
  3.             Fraction,
  4.             Italic,
  5.             Tolerance
  6.         }
  7.         public static string MakeScript(string baseTextString, string superScript, string subScript, ScriptType scriptType, double scale)
  8.         {
  9.             string[] scriptTypStrings = new string[]{"/", "#", "^"};
  10.             return
  11.                 string.Format
  12.                 (
  13.                     "\\A1;{0}{1}\\H{2:0.#}x;\\S{3}{4}{5};{6}",
  14.                     baseTextString,
  15.                     "{",
  16.                     scale,
  17.                     superScript,
  18.                     scriptTypStrings[(int)scriptType],
  19.                     subScript,
  20.                     "}"
  21.                 );
  22.         }
  23.         [CommandMethod("tt")]
  24.         public static void Test()
  25.         {
  26.             var db = HostApplicationServices.WorkingDatabase;
  27.             var doc = Application.DocumentManager.GetDocument(db);
  28.             var ed = doc.Editor;
  29.             using(Transaction tr = db.TransactionManager.StartTransaction())
  30.             {
  31.                 MText mt =
  32.                     new MText
  33.                     {
  34.                         Contents = MakeScript("123", "+0.01", "-0.01", ScriptType.Tolerance, 0.5)
  35.                     };
  36.                 mt.SetDatabaseDefaults();
  37.                 var btr = db.CurrentSpaceId.GetObject[B](OpenMode.ForWrite);
  38.                 btr.AppendEntity(mt);
  39.                 tr.AddNewlyCreatedDBObject(mt, true);
  40.                 tr.Commit();
  41.             }
  42.         }
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2016-10-5 02:43:00 | 显示全部楼层
飞狐老师,能不能请教下,如何用C#实现最简单的文字替换~弄了半天弄不出来
回复

使用道具 举报

0

主题

26

帖子

10

银币

初来乍到

Rank: 1

铜币
22
发表于 2018-2-3 10:42:00 | 显示全部楼层
2008去除格式,直接:
string content=MText.Text
MText.Text=content
回复

使用道具 举报

0

主题

8

帖子

2

银币

初来乍到

Rank: 1

铜币
8
发表于 2021-4-6 21:26:00 | 显示全部楼层
在写入多行文本时,怎么让文本自动
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-5-15 13:47:00 | 显示全部楼层
另外贴两个去除MText格式的函数
  1.         public static string GetMTextContents(string str)
  2.         {
  3.             string[] strs =
  4.                 str.Split(
  5.                     new string[] { "\\" },
  6.                     StringSplitOptions.None);
  7.             for (int i = 0; i  stack = new Stack();
  8.             while (str.Length > 0)
  9.             {
  10.                 int n = (str[0] == '\\') ? 2 : 1;
  11.                 if (n == 1 && str[0] == '}')
  12.                 {
  13.                     Stack substack = new Stack();
  14.                     while (stack.Peek() != "{")
  15.                     {
  16.                         substack.Push(stack.Pop());
  17.                     }
  18.                     stack.Pop();
  19.                     Queue queue = GetRtfTextUnFormatString(substack);
  20.                     while (queue.Count > 0)
  21.                     {
  22.                         stack.Push(queue.Dequeue());
  23.                     }
  24.                 }
  25.                 else
  26.                 {
  27.                     stack.Push(str.Substring(0, n));
  28.                 }
  29.                 str = str.Substring(n);
  30.             }
  31.             string res = "";
  32.             foreach (string s in stack)
  33.             {
  34.                 if (s.Length == 1)
  35.                 {
  36.                     res = s + res;
  37.                 }
  38.                 else
  39.                 {
  40.                     res = s.Substring(1) + res;
  41.                 }
  42.             }
  43.             return res;
  44.         }
  45.         private static Queue
  46.             GetRtfTextUnFormatString(Stack stack)
  47.         {
  48.             Queue queue = new Queue();
  49.             while (stack.Count > 0)
  50.             {
  51.                 string str = stack.Pop();
  52.                 if (str.Length == 1)
  53.                 {
  54.                     queue.Enqueue(str);
  55.                 }
  56.                 else
  57.                 {
  58.                     switch (str.Substring(1).ToUpper()[0])
  59.                     {
  60.                         case '\\':
  61.                         case '{':
  62.                         case '}':
  63.                         case 'U':
  64.                             queue.Enqueue(str);
  65.                             break;
  66.                         case 'A':
  67.                         case 'C':
  68.                         case 'F':
  69.                         case 'H':
  70.                         case 'Q':
  71.                         case 'T':
  72.                         case 'W':
  73.                             while (stack.Pop() != ";") ;
  74.                             break;
  75.                         case 'S':
  76.                             string s = "";
  77.                             queue.Enqueue("(");
  78.                             while ((s = stack.Peek()) != ";")
  79.                             {
  80.                                 if (s == "^" || s == "#")
  81.                                 {
  82.                                     stack.Pop();
  83.                                     queue.Enqueue("/");
  84.                                 }
  85.                                 else
  86.                                 {
  87.                                     queue.Enqueue(stack.Pop());
  88.                                 }
  89.                                 if (stack.Count == 0)
  90.                                 {
  91.                                     break;
  92.                                 }
  93.                             }
  94.                             queue.Enqueue(")");
  95.                             if (stack.Count > 0)
  96.                             {
  97.                                 stack.Pop();
  98.                             }
  99.                             break;
  100.                     }
  101.                 }
  102.             }
  103.             return queue;
  104.         }
回复

使用道具 举报

17

主题

69

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2010-5-15 13:53:00 | 显示全部楼层
飞狐出品,必是精品!顶一个!呵呵!
回复

使用道具 举报

6

主题

33

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2010-9-9 10:56:00 | 显示全部楼层
请问版主,怎么设置MText的基点为文本中心呢?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-9-9 21:40:00 | 显示全部楼层
mt.Attachment = AttachmentPoint.MiddleCenter;
回复

使用道具 举报

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2010-9-11 20:58:00 | 显示全部楼层
如何判断已经存在的MText是否为斜体?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-9-12 11:44:00 | 显示全部楼层
如果使用替换文字编辑器,则通过输入格式代码应用格式。可为文字加下划线、删除线和创建堆叠文字。用户可以修改颜色、字体和文字高度,还可以修改文字字符间距或增加字符本身宽度。要应用格式,请使用下表中列出的格式代码:



段落格式代码
[/td]
格式代码
[/td]
作用
[/td]
输入...
[/td]
要生成 ...
[/td]
\0...\o

打开和关闭
下划线

Autodesk \OAutoCAD\o


                               
登录/注册后可看大图


\L...\l

打开和关闭
下划线

Autodesk \LAutoCAD\l


                               
登录/注册后可看大图


\~

插入不间断
空格

Autodesk AutoCAD\~LT


                               
登录/注册后可看大图


\\

插入反斜杠

Autodesk \\AutoCAD


                               
登录/注册后可看大图


\{...\}

插入左大括号和右大括号

Autodesk \{AutoCAD\}


                               
登录/注册后可看大图


\Cvalue;

修改为
指定的颜色

Autodesk \C2;AutoCAD


                               
登录/注册后可看大图


\ File name;

修改为
指定的字体文件

Autodesk \Ftimes; AutoCAD


                               
登录/注册后可看大图


\Hvalue;

修改为
以图形单位表示的
指定文字高度

Autodesk \H2;AutoCAD


                               
登录/注册后可看大图


\Hvaluex;

将文字高度修改为
当前样式文字高度的
数倍

Autodesk \H3x;AutoCAD


                               
登录/注册后可看大图


\S...^...;

堆叠 \、# 或 ^ 符号后的文字

1.000\S+0.010^-0.000;


                               
登录/注册后可看大图


\Tvalue;

调整字符之间的间距。有效值范围为字符间原始间距的 0.75 倍到字符间原始间距的 4 倍。

\T2;Autodesk


                               
登录/注册后可看大图


\Qangle;

修改倾斜角度

\Q20;Autodesk


                               
登录/注册后可看大图


\Wvalue;

修改宽度因子生成宽字

\W2;Autodesk


                               
登录/注册后可看大图


\A

设置对齐方式值,有效值为:0、1、2
(底端对正、居中对正、顶端对正)

\A1;1\S1/2


                               
登录/注册后可看大图


\P

结束段落

Autodesk\PAutoCAD


                               
登录/注册后可看大图


大括号最多可以嵌套八层。
也可以使用控制代码添加特殊的字符,例如公差和标注符号。请参见 。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 00:15 , Processed in 0.360077 second(s), 75 queries .

© 2020-2024 乐筑天下

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