明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3726|回复: 12

如何写出堆叠文字

  [复制链接]
发表于 2003-9-3 18:54:00 | 显示全部楼层 |阅读模式
如何写出堆叠文字,比如三分之一用分数表示。
发表于 2023-5-12 13:45:00 | 显示全部楼层
感谢分享,收藏
发表于 2003-9-3 18:58:00 | 显示全部楼层
在MTEXT编辑器里
写1/3,然后按那个b分之a的按钮
 楼主| 发表于 2003-9-4 11:31:00 | 显示全部楼层

如何通过编程实现

发表于 2003-9-4 11:37:00 | 显示全部楼层
编程还要用堆叠吗?
文字大小、位置、除号等东西随便实现,直接根据要求出字就可以了
发表于 2003-9-4 11:40:00 | 显示全部楼层
明总能不能让版主们把贴子整理一下,比如弄个热点问题的专栏,象这样类似的问题太多了,不回答吧,大家又有意见,回答吧,也是重复。
 楼主| 发表于 2003-9-4 14:17:00 | 显示全部楼层

字体不同要受影响

meflying发表于2003-9-4 11:37:00编程还要用堆叠吗?
文字大小、位置、除号等东西随便实现,直接根据要求出字就可以了


在一个字符串的中间,需要有一个分数(你别对我说没有必要),由于可能存在的字体变化,分数的位置也要变化,您的意思是不是说我先计算一下位置,然后沿字符串书写方向垂直写一串数,然后再接着写后半段字符串?我认为还是直接写堆叠文字简单(还有角标),如果可以的话,就像mtext中的a/b
发表于 2003-9-4 17:48:00 | 显示全部楼层
编程的魅力就在于写程序的时候不怕麻烦,使用时却非常方便。

如果你连计算一下位置都觉得麻烦,还编什么程?
我想autocad的这个堆叠功能在实现上应该比我们想象的要复杂
 楼主| 发表于 2003-9-4 18:41:00 | 显示全部楼层

可以简单,就有必要不用复杂

可以简单,就有必要不用复杂。

计算好的位置不同的字符堆在一起,一旦改变字体设置或文件拷贝给别人使用,而对方的字型文件不同,就会变成乱七八糟。你辛辛苦苦算好的位置不过如此。

autocad提供了关于文字的控制字符,比如%%d(度),%%u(上划线)等;等我琢磨清楚了,告诉大家。一个完整的文字对象总比一大堆字符堆在一起要好,也不怕你改变字体后位置变动。我想能实现(若一旦失败,我也不找别的理由,比如说没有必要)。不过若真的不能实现,我也就只有退而求其次,玩会儿数字游戏。估计还得编编组啥的,或采取别的一些办法,控制一下位置。办法虽然苯,也只能如此了,谁让autocad不懂事呢!

计算位置,真不是难事,画图就必须从位置开始。
发表于 2003-9-4 18:52:00 | 显示全部楼层
说得不错,我没考虑修改的问题。
给你点提示,先做一个堆叠的东西,然后用entget查看其组码1,按照它的格式输入你的内容,用entmake创建文字。我稍微试了一下,好象可以的。
我测试如下:
(1 . "\\A1;{\\H0.7x;\\Sa/b;}")
其中\\S后面的内容就是在文本编辑框中堆叠需要选中的文字,修改它即可。
 楼主| 发表于 2003-9-5 08:39:00 | 显示全部楼层

我已经基本琢磨清楚了

用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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 05:25 , Processed in 0.162700 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表