找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 651|回复: 8

[分享]:获得TEXT中每个字符的位置

[复制链接]
发表于 2004-8-27 12:25:30 | 显示全部楼层 |阅读模式

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

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

×
[php]
;;;200409261213___________________________
;;;字符串转换为表_________________________
(defun text_to_lst (text / n char strlst)
  (setq n 1)
  (while (<= n (strlen text))
    (setq char (substr text n 1))
    (if    (> (ascii char) 159)
      (and (substr text (1+ n) 1)
       (setq strlst (cons (substr text n 2) strlst))
       (setq n (1+ n))
      )
      (setq strlst (cons char strlst))
    )
    (setq n (1+ n))
  )
  (reverse strlst)
)
;;;测量TEXT中的每个字的宽度___________________
(defun c:tt (/ el str ang p lst pts pp  n p0)
  (princ "\nWRITEN BY WKAI @ XDCAD.NET")
  (setq el (entget (car (entsel))))
  (mapcar '(lambda (x y) (set x (cdr (assoc y el))))
      '(str ang p)
      '(1 50 10)
  )
  (setq lst (text_to_lst str))
  (while lst
    (setq
      pts (append
        pts
        (list
          (cadr
        (textbox
          (subst (cons 1 (apply 'strcat lst)) (assoc 1 el) el)
        )
          )
        )
      )
    )
    (setq lst (reverse (cdr (reverse lst))))
  )
  (setq pts (mapcar 'car pts))
  (setq pts (reverse pts))
  (setq p0 (polar p ang (caar (textbox el))))
  (setq pp (mapcar '(lambda (x) (polar p0 ang x)) pts))
  (foreach n (cons p pp) (command "._point" "non" n))
)
[/php]

                               
登录/注册后可看大图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2004-8-28 14:35:01 | 显示全部楼层
上段代码求出的是字符的结束点
这个是字符的开始点
[PHP]
;;;200409281432___________________________
;;;字符串转换为表_________________________
(defun text_to_lst (text / n char strlst)
  (setq n 1)
  (while (<= n (strlen text))
    (setq char (substr text n 1))
    (if        (> (ascii char) 159)
      (and (substr text (1+ n) 1)
           (setq strlst (cons (substr text n 2) strlst))
           (setq n (1+ n))
      )
      (setq strlst (cons char strlst))
    )
    (setq n (1+ n))
  )
  strlst
)
;;;测量TEXT中的每个字的宽度___________________
(defun c:tt (/ el str ang p lst pts pp n p0 string len)
  (princ "\nWRITEN BY WKAI @ XDCAD.NET")
  (setq        el     (entget (car (entsel)))
        string ""
  )
  (mapcar '(lambda (x y) (set x (cdr (assoc y el))))
          '(str ang p)
          '(1 50 10)
  )
  (setq len (caadr (textbox el)))
  (setq p0 (polar p ang (caar (textbox el))))
  (setq lst (text_to_lst str))
  (foreach n lst
    (setq string (strcat n string))
    (setq pts (append pts(list(caadr(textbox(subst (cons 1 string)(assoc 1 el) el))))))
    )
  (setq pts (reverse (mapcar '(lambda (x) (- len x)) pts)))
  (setq pp (mapcar '(lambda (x) (polar p0 ang x)) pts))
  (foreach n (cons p pp) (command "._point" "non" n))
)

[/PHP]

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

使用道具 举报

发表于 2004-8-31 09:10:27 | 显示全部楼层
虽然我没有看懂,这一直是我的疑惑之一,谢谢了,我收藏了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-31 10:38:30 | 显示全部楼层
1. 字符串转换为表: (mapcar 'chr (vl-string->list str)) 更简单.
2. 有些字符如 "f" 可能误差.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-31 13:18:54 | 显示全部楼层
(mapcar 'chr (vl-string->list str)) 只能处理英文。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-1 04:46:51 | 显示全部楼层
最初由 wkai 发布
[B](mapcar 'chr (vl-string->list str)) 只能处理英文。 [/B]

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

使用道具 举报

 楼主| 发表于 2004-9-1 07:49:25 | 显示全部楼层
怎么能确定上图中 f 的插入点位置有误差呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-1 17:05:05 | 显示全部楼层
最初由 wkai 发布
[B]怎么能确定上图中 f 的插入点位置有误差呢? [/B]

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

使用道具 举报

 楼主| 发表于 2004-9-3 16:59:52 | 显示全部楼层
确切的说返回的是该字符textbox的左下角点,和它插入点有微差。
下面代码修正了TTF字体中空格没有返回点的问题。

  1. ;;;200409031700___________________________
  2. ;;;字符串转换为表_________________________
  3. (defun text_to_lst (text / n char strlst)
  4.   (setq n 1)
  5.   (while (<= n (strlen text))
  6.     (setq char (substr text n 1))
  7.     (if        (> (ascii char) 159)
  8.       (and (substr text (1+ n) 1)
  9.            (setq strlst (cons (substr text n 2) strlst))
  10.            (setq n (1+ n))
  11.       )
  12.       (setq strlst (cons char strlst))
  13.     )
  14.     (setq n (1+ n))
  15.   )
  16.   (reverse strlst)
  17. )
  18. ;;;测量TEXT中的每个字的宽度___________________
  19. (defun c:tt (/ el str ang p lst pts pp n p0 string len)
  20.   (princ "\nWRITEN BY WKAI @ XDCAD.NET")
  21.   (setq    el     (entget (car (entsel)))
  22.     string ""
  23.   )
  24.   (mapcar '(lambda (x y) (set x (cdr (assoc y el))))
  25.       '(str ang p)
  26.       '(1 50 10)
  27.   )
  28.   (setq len (caadr (textbox el)))
  29.   (setq p0 (polar p ang (caar (textbox el))))
  30.   (setq lst (reverse(text_to_lst str)) )
  31.   (foreach n lst
  32.     (if (= " " n)(setq n "t"))
  33.     (setq string (strcat n string))
  34.     (setq pts (append pts(list(caadr(textbox(subst (cons 1 string)(assoc 1 el) el))))))
  35.     )
  36.   (setq pts (reverse (mapcar '(lambda (x) (- len x)) pts)))
  37.   (setq pp (mapcar '(lambda (x) (polar p0 ang x)) pts))
  38.   (foreach n (cons p pp) (command "._point" "non" n))
  39. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 04:19 , Processed in 0.318613 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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