找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1164|回复: 15

将文本字符串分解成单个字符

[复制链接]
发表于 2004-7-3 12:13:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
将文本字符串分解成单个字符
[PHP]
(defun lenstr (ss)
  (setq tst (textbox (list (cons 1 ss))))
  (setq l (car (cadr tst)))
)
;
(defun c:test (/ a el str lst ll lst p)
  (setq a (car (entsel)))
  (setq el (entget a))
  (setq str (cdr (assoc 1 el)))
  (setq lst (mapcar 'chr (vl-string->list str)))
  (setq clay (getvar "clayer"))
  (setq csty (getvar "textstyle"))
  (setvar "textstyle" (cdr (assoc 7 el)))
  (repeat (strlen str)
    (if (> (strlen str) 1)
      (setq g2 (lenstr (substr str 2 1))
            ll (cons (list (- (lenstr (substr str 1 2)) g2)(substr str 1 1)) ll))
      (setq ll (cons (list 0 (substr str 1 1)) ll))
    )
    (setq str (substr str 2))
  )
  (vl-cmdf "layer" "s" (cdr (assoc 8 el)) "")
  (vl-cmdf "erase" a "")
  (setq p (cdr (assoc 10 el)))
  (foreach i (reverse ll)
    (vl-cmdf "text" p (cdr (assoc 40 el)) (* (/ 180 pi)(cdr (assoc 50 el)))(cadr i) "")
    (setq p (polar p (cdr (assoc 50 el))(car i)))
  )
  (setvar "textstyle" csty)
  (setvar "clayer" clay)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-3 12:21:11 | 显示全部楼层
你这个处理空格了吗?好像XD工具箱的可以
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-3 12:47:34 | 显示全部楼层
是不是不支持中文的?执行以后文字不见了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-4 06:31:11 | 显示全部楼层
最初由 自由的鱼 发布
[B]是不是不支持中文的?执行以后文字不见了? [/B]

哈哈! 前天跟你"字符旋转180度"的贴, 说执行程序后, "文字不见了" 今天你把它又还给我了?-----JUST KIDDING.
我的AUTOCAD是英文的, 所有的程序是否对中文有效,不得而知.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-7-4 08:17:09 | 显示全部楼层
一个汉字是两个字符,用 (substr str 1 1)中文是肯定没了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-4 09:53:33 | 显示全部楼层
加个汉字识别,ascii好像是>13?   (个位不记得了)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-4 11:51:48 | 显示全部楼层
还是请在CAD中经常使用汉字的朋友补充一下吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-4 12:09:15 | 显示全部楼层
最初由 lsjjm 发布
[B]还是请在CAD中经常使用汉字的朋友补充一下吧? [/B]


原来如此~~~:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-4 16:04:54 | 显示全部楼层
搞成中文的才实用呢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-4 18:47:35 | 显示全部楼层
支持中、英文字符,带空格
Sub TTT1()

Dim Fx As Variant
Dim pnt(0 To 2) As Double
Dim inspnt As Variant
Dim Ro As Double
Dim T As AcadText
Dim H As Double
Dim x As String
Dim Jl As Double
Dim Jj As Double
Dim y()
Dim s As Integer
Dim sset As AcadSelectionSet
Dim i As Integer
Dim Minpnt As Variant
Dim Maxpnt As Variant
For i = 0 To ThisDrawing.SelectionSets.Count - 1
    ThisDrawing.SelectionSets.Item(i).Clear
    ThisDrawing.SelectionSets.Item(i).Delete
Next

Set sset = ThisDrawing.SelectionSets.Add("tt")
sset.SelectOnScreen

sset.Item(0).GetBoundingBox Minpnt, Maxpnt


Jl = Sqr((Maxpnt(0) - Minpnt(0)) ^ 2 + (Maxpnt(1) - Minpnt(1)) ^ 2)


H = sset.Item(0).Height
Ro = sset.Item(0).Rotation
Fx = Ro
x = sset.Item(0).TextString
sset.Item(0).Delete
For i = 0 To Len(x) - 1
s = s + 1
ReDim Preserve y(s)

y(s) = Mid(x, s, 1)
Debug.Print y(s)
Next


v = Filter(y, " ", False)
Jj = Jl / UBound(v)

For i = 1 To UBound(v)
inspnt = ThisDrawing.Utility.PolarPoint(Minpnt, Fx, Jj * (i - 1))

Set T = ThisDrawing.ModelSpace.AddText(v(i), inspnt, H)
T.Rotate inspnt, Ro
T.Color = acRed
Debug.Print v(i)
Next


End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-11 05:45:41 | 显示全部楼层
明天我也用vba玩一个:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-11 13:19:13 | 显示全部楼层
写个另类一点的,:)
Sub TextExplode()
Dim pText As AcadEntity
Dim pMText As AcadMText
Dim pnt
ThisDrawing.Utility.GetEntity pText, pnt
Dim str As String
str = pText.textString
Dim pStr As String
Do While Len(str) <> 0
pStr = pStr & Left(str, 1) & "\C0;"
str = Right(str, Len(str) - 1)
Loop
Set pMText = ThisDrawing.ModelSpace.AddMText(pText.insertionPoint, 0, pStr)
pMText.height = pText.height
pMText.StyleName = pText.StyleName
pText.GetBoundingBox d1, d2
pMText.Rotate d1, pText.Rotation
pMText.GetBoundingBox d3, d4
pMText.Move d3, d1
ThisDrawing.SendCommand "Explode" & vbCr & "l" & vbCr & vbCr
pText.Delete
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-13 18:42:43 | 显示全部楼层
唉 我也写了个绝对决定准确,就是文字分开后位置还是不变(如果两个文本重叠分解一个一个后,屏幕上看不出有一点错位), 但现在还无法传上来,需要我们公司的环境函数支持
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-10-13 23:01:18 | 显示全部楼层
相通了其实很简单:
假定"ABCDE"
1,写ABCDE ,算出最右面点P(再删BCDE)
2,写BCDE,算出最右点p1 ,移动它从p1到p (再删CDE)
3,,写CDE,算出最右点p1 ,移动它从p1到p (再删DE)
....
写的时候以原来的属性,包括定义点.(特殊类型:先转到左对齐)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-13 23:46:05 | 显示全部楼层
最初由 aeo 发布
[B]相通了其实很简单:
假定"ABCDE"
1,写ABCDE ,算出最右面点P(再删BCDE)
2,写BCDE,算出最右点p1 ,移动它从p1到p (再删CDE)
3,,写CDE,算出最右点p1 ,移动它从p1到p (再删DE)
....
写的时候以原来的属性,包括定义?.. [/B]


对中文也适用吗!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 11:54 , Processed in 0.440297 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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