如何写出堆叠文字
如何写出堆叠文字,比如三分之一用分数表示。 感谢分享,收藏 在MTEXT编辑器里写1/3,然后按那个b分之a的按钮
如何通过编程实现
编程还要用堆叠吗?文字大小、位置、除号等东西随便实现,直接根据要求出字就可以了 明总能不能让版主们把贴子整理一下,比如弄个热点问题的专栏,象这样类似的问题太多了,不回答吧,大家又有意见,回答吧,也是重复。
字体不同要受影响
meflying发表于2003-9-4 11:37:00static/image/common/back.gif编程还要用堆叠吗?文字大小、位置、除号等东西随便实现,直接根据要求出字就可以了
在一个字符串的中间,需要有一个分数(你别对我说没有必要),由于可能存在的字体变化,分数的位置也要变化,您的意思是不是说我先计算一下位置,然后沿字符串书写方向垂直写一串数,然后再接着写后半段字符串?我认为还是直接写堆叠文字简单(还有角标),如果可以的话,就像mtext中的a/b 编程的魅力就在于写程序的时候不怕麻烦,使用时却非常方便。
如果你连计算一下位置都觉得麻烦,还编什么程?
我想autocad的这个堆叠功能在实现上应该比我们想象的要复杂
可以简单,就有必要不用复杂
可以简单,就有必要不用复杂。计算好的位置不同的字符堆在一起,一旦改变字体设置或文件拷贝给别人使用,而对方的字型文件不同,就会变成乱七八糟。你辛辛苦苦算好的位置不过如此。
autocad提供了关于文字的控制字符,比如%%d(度),%%u(上划线)等;等我琢磨清楚了,告诉大家。一个完整的文字对象总比一大堆字符堆在一起要好,也不怕你改变字体后位置变动。我想能实现(若一旦失败,我也不找别的理由,比如说没有必要)。不过若真的不能实现,我也就只有退而求其次,玩会儿数字游戏。估计还得编编组啥的,或采取别的一些办法,控制一下位置。办法虽然苯,也只能如此了,谁让autocad不懂事呢!
计算位置,真不是难事,画图就必须从位置开始。 说得不错,我没考虑修改的问题。
给你点提示,先做一个堆叠的东西,然后用entget查看其组码1,按照它的格式输入你的内容,用entmake创建文字。我稍微试了一下,好象可以的。
我测试如下:
(1 . "\\A1;{\\H0.7x;\\Sa/b;}")
其中\\S后面的内容就是在文本编辑框中堆叠需要选中的文字,修改它即可。
我已经基本琢磨清楚了
用vba进行了一些简单的字符串设置,可以实现上划线、下划线、文字堆叠(分数或公差)。我把它放在此,感兴趣可以试一下。好处是各种格式字符组成一个mtext对象,决不用考虑字型变化和后期编辑的问题。可以简单,就有必要不用复杂。
源码如下:
Sub main()
Dim pt As Variant
Dim txtw As Double
Dim txtStr As String
Dim MtxtObj As AcadMText
Dim AMid As String
pt = Point3d(0, 10)
txtw = 100
AMid = "\A1;"
txtStr = AMid & "aaaa" & UStr(LStr("bbbb")) & UStr("uuuuu") & SStr("2", "3", 0.7, True) & LStr("llllll") & "200" & SStr("+0.010", "-0.020", 0.7) & "cccc" '
Set MtxtObj = ThisDrawing.ModelSpace.AddMText(pt, txtw, txtStr)
End Sub
'三维点
Function Point3d(ByVal x As Double, ByVal y As Double, Optional z = 0) As Variant
Dim pt3d(0 To 2) As Double
pt3d(0) = x
pt3d(1) = y
pt3d(2) = z
Point3d = pt3d
End Function
'顶线
Function UStr(ByVal s As String) As String
UStr = "\O" & s & "\o"
End Function
'底线
Function LStr(ByVal s As String) As String
LStr = "\L" & s & "\l"
End Function
'堆叠,h为高度系数;当l为true时,以分数显示
Function SStr(ByVal s1 As String, ByVal s2 As String, ByVal h As Double, Optional l As Boolean) As String
If l = True Then
SStr = "\S" & s1 & "/" & s2 & ";"
Else
SStr = "\S" & s1 & "^" & s2 & ";"
End If
If h > 0 And h <> 1 Then
SStr = "{\H" & h & "x;" & SStr & "}"
End If
End Function
页:
[1]
2