乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: motee-z

[编程交流] 旋转文字以对齐线条

[复制链接]

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-7-6 11:34:18 | 显示全部楼层
  1. ;;  Text Rotated to the selected object angle
  2. (defun c:TRA() (c:TextRotate2Angle))
  3. (defun c:TextRotate2Angle (/ ss lst pt ang obj
  4.                  get_pt_and_angle )
  5. (vl-load-com)
  6. ;;  User selection of curve object
  7. ;;  return pick point & average angle of curve at pick point
  8. (defun get_pt_and_angle (prmpt / ent p@pt parA parB pt ang)
  9.    (if (and (setq ent (entsel prmpt))
  10.             (not (vl-catch-all-error-p
  11.                    (setq pt (vl-catch-all-apply
  12.                               'vlax-curve-getClosestPointTo
  13.                               (list (car ent) (cadr ent))
  14.                             )
  15.                    )
  16.                  )
  17.             )
  18.        )
  19.      (progn
  20.        (setq ent  (car ent)
  21.              p@pt (vlax-curve-getParamAtPoint ent pt)
  22.              parA (max 0.0 (- p@pt 0.05))
  23.              parB (min (+ p@pt 0.05) (vlax-curve-getEndParam ent))
  24.              ang (angle (vlax-curve-getPointAtParam ent parA)
  25.                         (vlax-curve-getPointAtParam ent ParB)
  26.                  )
  27.        )
  28.        (list pt ang)
  29.      )
  30.    )
  31. )
  32. ;;  Get Text to align & object to alignment angle
  33. ;;  Text is not moved, just rotated to the alignment angle
  34. ;;  Object must have curve data
  35. (prompt "\nSelect text object to align.")
  36. (if (and (or (setq ss  (ssget "_+.:E:S" '((0 . "Text,Mtext"))))
  37.               (prompt "\n**  No Text object selected.  **"))
  38.           (or (setq lst (get_pt_and_angle "\nSelect point on object to label."))
  39.               (prompt "\n**  Missed or no curve data for object."))
  40.       )
  41.    (progn
  42.      (setq pt  (car lst)
  43.            ;; ang (FixTextAngle (cadr lst))
  44.            ang (cadr lst)
  45.            obj (vlax-ename->vla-object (ssname ss 0))
  46.      )
  47.      (vla-put-rotation Obj ang)
  48.    )
  49.    
  50. )
  51. (princ)
  52. )
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 11:37:39 | 显示全部楼层
谢谢你,出租车
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-7-6 11:42:35 | 显示全部楼层
驾驶室
thanx表示大Lisp程序
有一条评论
尝试将文本对齐到两行,一行从右向左绘制,第二行从左向右绘制
 
将该选项添加到lisp中怎么样
1-与对象的角度(如果需要,在另一个方向上使用文本,我将使用角度=180)。
2-文本和对象之间的Gab。
见附件
Thanx公司
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 11:45:45 | 显示全部楼层
您遇到的问题是,一条线看起来是270度或90度,但偏移量非常小。
该版本对这些角度有公差。现在对你有用吗?
  1. ;;  Text Rotated to the selected object angle
  2. (defun c:TRA() (c:TextRotate2Angle))
  3. (defun c:TextRotate2Angle (/ ss lst pt ang obj
  4.                  get_pt_and_angle )
  5. (vl-load-com)
  6. ;;  User selection of curve object
  7. ;;  return pick point & average angle of curve at pick point
  8. (defun get_pt_and_angle (prmpt / ent p@pt parA parB pt ang)
  9.    (if (and (setq ent (entsel prmpt))
  10.             (not (vl-catch-all-error-p
  11.                    (setq pt (vl-catch-all-apply
  12.                               'vlax-curve-getClosestPointTo
  13.                               (list (car ent) (cadr ent))
  14.                             )
  15.                    )
  16.                  )
  17.             )
  18.        )
  19.      (progn
  20.        (setq ent  (car ent)
  21.              p@pt (vlax-curve-getParamAtPoint ent pt)
  22.              parA (max 0.0 (- p@pt 0.05))
  23.              parB (min (+ p@pt 0.05) (vlax-curve-getEndParam ent))
  24.              ang (angle (vlax-curve-getPointAtParam ent parA)
  25.                         (vlax-curve-getPointAtParam ent ParB)
  26.                  )
  27.        )
  28.        (list pt ang)
  29.      )
  30.    )
  31. )
  32. ;;  Get Text to align & object to alignment angle
  33. ;;  Text is not moved, just rotated to the alignment angle
  34. ;;  Object must have curve data
  35. (prompt "\nSelect text object to align.")
  36. (if (and (or (setq ss  (ssget "_+.:E:S" '((0 . "Text,Mtext"))))
  37.               (prompt "\n**  No Text object selected.  **"))
  38.           (or (setq lst (get_pt_and_angle "\nSelect point on object to label."))
  39.               (prompt "\n**  Missed or no curve data for object."))
  40.       )
  41.    (progn
  42.      (setq pt  (car lst)
  43.            ;; ang (FixTextAngle (cadr lst))
  44.            ang (cadr lst)
  45.            obj (vlax-ename->vla-object (ssname ss 0))
  46.      )
  47.      (vla-put-rotation Obj ang)
  48.      (if (zerop (vla-get-Alignment obj))
  49.        (vla-put-InsertionPoint obj (vlax-3d-point pt))
  50.        (vla-put-textalignmentpoint obj (vlax-3d-point pt))
  51.      )
  52.    )
  53.    
  54. )
  55. (princ)
  56. )
120222adsdnkpmhdh5qddy.jpg
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 11:48:07 | 显示全部楼层
至于您的选项请求,当选择偏移角度选项时,是否会应用间隙?
如果偏移角为负,你会怎么办?
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 11:52:37 | 显示全部楼层
我无法选择文本
 
要求输入文本字符串,但我无法选择文本。
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 11:54:49 | 显示全部楼层
此版本仅允许用户输入文本字符串。
 
我想你也想要这个选择。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 11:57:48 | 显示全部楼层
我认为不需要gap,但最好应用它(以防有人需要)
当我把文字添加到一个计划中时,文字应该在一个方向上,以便一起阅读,所以有时我想做否定的方向
我在一个帖子里看到了,但不记得我会搜索。
 
Thanx公司
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 12:01:02 | 显示全部楼层
我认为这是令人愉快的
 
[code](defun c:talon(/cWid cHei cStr tVrx cCur grDat stFlg cAng sPt cPt aPt bPt pt1 pt2 pt3 pt4 nTxt mPt xPt oldStr)(vl load com)(if(not(getenv“talon:tsize”))(setenv“talon:tsize”(rtos(getvar“TEXTSIZE”))));结束if(if(not(getenv“talon:offset”))(setenv“talon:offset”(rtos(/(getvar“TEXTSIZE”)2)));结束if(if(not talon:str)(setq talon:str“”)(setq oldStr talon:str)(princ(strcat“\nSize=”(getenv“talon:tsize”)”,Offset=”(getenv“talon:Offset”)”,talstart to settings。“);结束strcat);end princ(setq-talon:str(getstring T(strcat“\n指定文本:”))(if(=“”talon:str)(setq-talon:str oldStr))(if(/=talon:str“”)(progn(setq-tVrx(textbox(list(cons 1-talon:str)(cons 40(atof(getenv“talon:tsize”)))))actDoc(vla get ActiveDocument(vlax get acad object)));结束setq(if(=1(getvar“TILEMODE”))(setq actSp(vla get ModelSpace actDoc))(setq actSp(vla get PaperSpace actDoc));结束if(setq cWid(caadr tVrx)cHei(cadadr tVrx));结束setq(if(setq cCur(entsel“\n选择曲线>”)(if(成员(cdr(assoc 0(entget(car cCur)))”(“LINE”“LWPOLYLINE”“POLYLINE”“CIRCLE”“ELLIPSE”“ARC”“SPLINE”))(progn(setq cCur(vlax ename->vla object(car cCur)))(while(and(=5(car(setq grDat(grread T 1)))(非stFlg));end and(redraw)(if(='LIST(type(setq sPt(cadr grDat)))(progn(setq cPt(vlax curve getclosestpoint to cCur sPt)cAng(angle cPt sPt)aPt(polar cPt cAng(atof(getenv“talon:offset”))bPt(polar cPt cAng(+atof(getenv“talon:offset”)))(atof(getenv“talon:tsize”))pt1(polar aPt(+cAng(/pi 2))(polar aPt(-cAng(/cWid 2))pt2(polar aPt pi 2))(/cWid 2))pt3(极性bPt(-cAng(/pi 2))(/cWid 2))pt4(极性bPt(+cAng(/pi 2))(/cWid 2));结束setq(GRVEC(列表3 pt1 pt2 3 pt2 pt3 3 pt3 pt4 3 pt4 pt1));结束程序);如果结束);结束时(if(=3(car grDat))(progn(setq stFlg T nTxt(vla AddText actSp talon:str(vlax-3D-point’(0.0 0 0.0))(atof(getenv“talon:tsize”))tVrx(textbox(entget(entlast)))mPt(vlax-3D-point(mapcar’/(mapcar’+(car tVrx)(cadr tVrx))'(2.0 2.0 1.0)))xPt(vlax-3D-point(mapcar’/(mapcar’+(aPt bPt)                          '(2.0 2.0 1.0)))              ); end setq(vla Move nTxt mPt xPt)(如果(和(>cAng 0)(</p>
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 12:05:08 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 11:16 , Processed in 0.720139 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表