找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2259|回复: 6

[编程申请] 能否写一个多字随线平齐的插件?

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-4-12 14:32:29 | 显示全部楼层 |阅读模式

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

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

×
工作中有很多时候需要将多行的文字对齐后沿着某条曲线平齐,如图:

搜狗截图20160412142546.png


要求:

    1、选择多个文字
    2、多行文字按照屏幕的位置排序好
    3、点一条曲线,如果是弧线就切线平齐

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

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-4-13 00:44:37 | 显示全部楼层
供参考,因为机器上 Acad 2014 故障,没有调试

  1. (defun c:tt (/ ss e elst p2 pt p p1 ux uy uz cv        pt fvx fvy fvz h e pam mat ang)
  2.   (if (and (progn
  3.              (princ "\nSelect Text ....")
  4.              (setq ss (ssget '((0 . "text"))))
  5.            )
  6.            (progn
  7.              (princ "\nPick Curve...")
  8.              (setq e (ssget "+.:S" '((0 . "*line,arc,circle,ellipse"))))
  9.            )
  10.       )
  11.     (progn
  12.       (setq el         (ssnamex e 0)
  13.             elst (mapcar '(lambda (x)
  14.                             (if        (not ang)
  15.                               (setq ang (xdrx_getpropertyvalue x "rotation"))
  16.                             )
  17.                             (list (xdrx_entity_getstretchpoint x)
  18.                                   (xdrx_getpropertyvalue x "height")
  19.                                   x
  20.                             )
  21.                           )
  22.                          (xdrx_pickset->ents ss)
  23.                  )
  24.             p2         (polar '(0 0 0) ang 1.0)
  25.             elst (mapcar 'cdr
  26.                          (vl-sort (mapcar '(lambda (x)
  27.                                              (cons (car (trans (caar x) 0 p2))
  28.                                                    x
  29.                                              )
  30.                                            )
  31.                                           elst
  32.                                   )
  33.                                   '(lambda (x1 x2) (< (car x1) (car x2)))
  34.                          )
  35.                  )
  36.             cv         (cadar el)
  37.             pt         (xdrx_curve_getclosestpoint cv (last (last (car el))))
  38.             pam         (xdrx_curve_getparamatpoint cv pt)
  39.             fvx         (xdrx_curve_getfirstderiv cv pam)
  40.             fvy         (xdrx_vector_perpvector fvx)
  41.             fvz         (xdrx_vector_crossproduct fvx fvy)
  42.       )
  43.       (foreach x elst
  44.         (setq p          (caar x)
  45.               p1  (polar p ang 1.0)
  46.               ux  (mapcar '- p1 p)
  47.               uy  (xdrx_vector_perpvector ux)
  48.               uz  (xdrx_vector_crossproduct ux uy)
  49.               h          (cadr x)
  50.               e          (last x)
  51.               mat (xdrx_matrix_aligncoordsystem p ux uy uz pt fvx fvy fvz)
  52.         )
  53.         (xdrx_entity_transform e mat)
  54.         (setq pt (polar pt (+ ang (/ pi 2)) (* 1.5 h)))
  55.       )
  56.     )
  57.   )
  58.   (princ)
  59. )
_$ (xdrx_matrix_aligncoordsystem '(0. 0. 0.) '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.) '(10. 10. 0.) '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.))
nil
这个函数在我这没法用,是 ACAD 问题不是 API 原因

点评

xdrx_matrix_aligncoordsystem 的格式应该是: (xdrx_matrix_aligncoordsystem '(from点 X轴 Y轴 Z轴) '(to点 x轴 y轴 z轴)) 帮你把里面这行代码修改了,有结果了,但是如图这样的,看来还需要再改改代码  详情 回复 发表于 2016-4-13 15:17
谢谢大师,我加载了,选完文字和曲线后,就结束了,没变化,帮忙再看看,谢谢了!  详情 回复 发表于 2016-4-13 15:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-4-13 15:10:02 | 显示全部楼层
iLisp 发表于 2016-4-13 00:44
供参考,因为机器上 Acad 2014 故障,没有调试_$ (xdrx_matrix_aligncoordsystem '(0. 0. 0.) '(1. 0. 0.)  ...

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-13 15:17:40 | 显示全部楼层
iLisp 发表于 2016-4-13 00:44
供参考,因为机器上 Acad 2014 故障,没有调试_$ (xdrx_matrix_aligncoordsystem '(0. 0. 0.) '(1. 0. 0.)  ...

xdrx_matrix_aligncoordsystem 的格式应该是:


(xdrx_matrix_aligncoordsystem '(from点 X轴 Y轴 Z轴) '(to点 x轴 y轴 z轴))


帮你把里面这行代码修改了,有结果了,但是如图这样的,看来还需要再改改代码。


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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-4-13 15:21:13 来自手机 | 显示全部楼层
我这2010加载不上,2014有问题无法测试,把代码做个详细说明和算法示意吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-4-15 01:36:29 | 显示全部楼层
newer 发表于 2016-4-13 15:17
xdrx_matrix_aligncoordsystem 的格式应该是:

  1. (defun c:tt (/ ss e elst p2 pt p p1 ux uy uz cv        pt fvx fvy fvz h e pam mat ang j)
  2.   (if (and (progn
  3.              (princ "\nSelect Text ....")
  4.              (setq ss (ssget '((0 . "text"))))
  5.            )
  6.            (progn
  7.              (princ "\nPick Curve...")
  8.              (setq e (ssget "+.:S" '((0 . "*line,arc,circle,ellipse"))))
  9.            )
  10.       )
  11.     (progn
  12.       (setq el         (ssnamex e 0)
  13.             elst (mapcar '(lambda (x)
  14.                             (cons (car (xdrx_entity_getstretchpoint x))
  15.                                   (cons x (xdrx_getpropertyvalue x "height" "rotation"))
  16.                             )
  17.                           )
  18.                          (xdrx_pickset->ents ss)
  19.                  )
  20.             p2         (polar '(0 0 0) (last (car elst)) 1.0)
  21.             elst (mapcar 'cdr
  22.                          (vl-sort (mapcar '(lambda (x)
  23.                                              (cons (car (trans (car x) 0 p2))
  24.                                                    x
  25.                                              )
  26.                                            )
  27.                                           elst
  28.                                   )
  29.                                   '(lambda (x1 x2) (< (car x1) (car x2)))
  30.                          )
  31.                  )
  32.             cv         (cadar el)
  33.             pt         (xdrx_curve_getclosestpoint cv (last (last (car el))))
  34.             pam         (xdrx_curve_getparamatpoint cv pt)
  35.             fvx         (xdrx_curve_getfirstderiv cv pam)
  36.             fvy         (xdrx_vector_perpvector fvx)
  37.             fvz         (xdrx_vector_crossproduct fvx fvy)
  38.             ang         (angle '(0 0 0) fvy)
  39.       )
  40.       (foreach x elst
  41.         (setq p          (car x)
  42.               p1  (polar p (last x) 1.0)
  43.               ux  (mapcar '- p1 p)
  44.               uy  (xdrx_vector_perpvector ux)
  45.               uz  (xdrx_vector_crossproduct ux uy)
  46.               h          (caddr x)
  47.               e          (cadr x)
  48.               mat (xdrx_matrix_aligncoordsystem
  49.                     (list p ux uy uz)
  50.                     (list pt fvx fvy fvz)
  51.                   )
  52.         )
  53.         (xdrx_entity_transform e mat)
  54.         (setq pt (polar pt ang (* 1.5 h)))
  55.       )
  56.     )
  57.   )
  58.   (princ)
  59. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-4-15 13:05:11 来自手机 | 显示全部楼层
好像LEE有过一个动态沿线写字,抽空完善了发布为插件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-20 06:00 , Processed in 0.407596 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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