找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 793|回复: 11

[LISP程序]:返回文本字符串各字符的坐标

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

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

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

×
返回文本字符串各字符的坐标
[php]
(defun c:test (/ ent str pp)
  (setq  el (entget (car (entsel))))
  (setq str (cdr (assoc 1 el)))
  (setq lst (mapcar 'chr (vl-string->list str)))
  (setq   p (cdr (assoc 10 el)))
  (setq  pp (list p))
  (repeat (strlen str)
    (if (> (strlen str) 1)
      (setq p (list (+ (car p)
                       (- (lenstr (substr str 1 2))
                          (lenstr (substr str 2 1))))
                    (cadr p))
           pp (append pp (list p)))
    )
    (setq str (substr str 2))
  )
  pp
)
(defun lenstr (ss)
  (setq tst (textbox (list (cons 1 ss))))
  (setq l (car (cadr tst)))
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-27 07:26:39 | 显示全部楼层
好像没有对中文进行判断和处理
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-27 09:27:51 | 显示全部楼层
最初由 梦断江南 发布
[B]好像没有对中文进行判断和处理 [/B]

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

使用道具 举报

发表于 2004-8-27 12:18:07 | 显示全部楼层
lsjjm 长老的程序不支持中文和有转角的TEXT
下面的可以,测测看[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豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

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

使用道具 举报

发表于 2004-8-27 15:25:06 | 显示全部楼层
上面是程序求出的点
下面是用陌生人的TEXT文本水平分解得到的
怎么点错位了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-8-28 14:32:29 | 显示全部楼层
上段代码求出的是字符的结束点
这个是字符的开始点
[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豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-8-28 15:04:56 | 显示全部楼层
中间空格的处理中文和西文不一样,仅西文的有返回点,中文TTF时中间空格没有点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-28 17:22:49 | 显示全部楼层
两问题
1、支持R14吗?
2、对齐方式有影响吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-9-3 15:29:40 | 显示全部楼层
eachy兄所说的问题,找到解决办法了。
计算宽度时使用宽度和空格相同的字母替换空格。宽度和空格相同的字母t r f \等等都可以

  1.   [FONT=courier new]

  2. ;;;200409281432___________________________
  3. ;;;字符串转换为表_________________________
  4. (defun text_to_lst (text / n char strlst)
  5.   (setq n 1)
  6.   (while (<= n (strlen text))
  7.     (setq char (substr text n 1))
  8.     (if        (> (ascii char) 159)
  9.       (and (substr text (1+ n) 1)
  10.            (setq strlst (cons (substr text n 2) strlst))
  11.            (setq n (1+ n))
  12.       )
  13.       (setq strlst (cons char strlst))
  14.     )
  15.     (setq n (1+ n))
  16.   )
  17.   (reverse strlst)
  18. )
  19. ;;;测量TEXT中的每个字的宽度___________________
  20. (defun c:tt (/ el str ang p lst pts pp n p0 string len)
  21.   (princ "\nWRITEN BY WKAI @ XDCAD.NET")
  22.   (setq    el     (entget (car (entsel)))
  23.     string ""
  24.   )
  25.   (mapcar '(lambda (x y) (set x (cdr (assoc y el))))
  26.       '(str ang p)
  27.       '(1 50 10)
  28.   )
  29.   (setq len (caadr (textbox el)))
  30.   (setq p0 (polar p ang (caar (textbox el))))
  31.   (setq lst (reverse(text_to_lst str)) )
  32.   (foreach n lst
  33. [color=blue]    (if (= " " n)(setq n "t"))[/color]
  34.     (setq string (strcat n string))
  35.     (setq pts (append pts(list(caadr(textbox(subst (cons 1 string)(assoc 1 el) el))))))
  36.     )
  37.   (setq pts (reverse (mapcar '(lambda (x) (- len x)) pts)))
  38.   (setq pp (mapcar '(lambda (x) (polar p0 ang x)) pts))
  39.   (foreach n (cons p pp) (command "._point" "non" n))
  40. )

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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