乐筑天下

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

[编程交流] 文字随旋转插入

[复制链接]

78

主题

207

帖子

129

银币

后起之秀

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

铜币
395
发表于 2022-7-5 20:25:47 | 显示全部楼层 |阅读模式
我有以下代码,将绘制一个带有X的框,并在左上角插入文本,上面写着“过时的日期用户名”。到目前为止,除了我更换UCS外,一切都很顺利。该框没有问题,但文字是相对于WCS插入的,而不是当前的。我搜索了这个网站,找到了一个用“trans”功能解决这个问题的方法。不幸的是,这并没有解决文本相对于WCS仍然旋转的问题。不知道该从这里走到哪里。任何帮助都会很棒!
 
  1. (defun C:test2 (/)
  2. (setq #BoxP1# (getpoint "\nSpecify first corner point: ")
  3. #BoxP2# (getcorner "\nSpecify other corner point: " #BoxP1#)
  4. #BoxP3# (list (Car #BoxP2#) (cadr #BoxP1#) 0)
  5. #BoxP4# (list (Car #BoxP1#) (cadr #BoxP2#) 0)
  6. #BoxTextHeight# (/ (* (abs (- (car #BoxP2#) (car #BoxP1#))) 0.125) 0.875)
  7. #TextLayer# (getvar "CLAYER")
  8. #BoxWidth# (abs (- (car #BoxP2#) (car #BoxP1#)))
  9. #textheight# (/ #BoxWidth# 30)
  10. #TextDate# (rtos (getvar "CDATE") 2 4)
  11. #TextDateParsed# (strcat (substr #TextDate# 5 2)"/"(substr #TextDate# 7 2)"/"(substr #TextDate# 3 2))       
  12. #TextPt# (list (min (car #BoxP1#) (car #BoxP3#) (car #BoxP3#) (car #BoxP4#))
  13.                (+ (max (cadr #BoxP1#) (cadr #BoxP2#) (cadr #BoxP3#) (cadr #BoxP4#)) (/ #textheight# 3))
  14.                );end #TextPt#
  15. #UserName# (getvar "LOGINNAME")
  16. #UserInitials# (strcase (strcat (substr #UserName# 1 1)(substr #UserName# (+ 2 (vl-string-position (ascii ".") #UserName#)) 1)))[color="red"] ;This might fail for you since our office comps use "first.last" format.[/color]
  17. );end setq
  18. (vl-cmdf "_.rectangle" #BoxP1# #BoxP2#)
  19. (vl-cmdf "_.line" #BoxP1# #BoxP2# "")
  20. (vl-cmdf "_.line" #BoxP3# #BoxP4# "")
  21. (entmake (list '(0 . "TEXT")
  22.               (cons 10 (trans #TextPt# 1 0))
  23.               (cons 40 #textheight#)
  24.               (cons 1 (strcat "OBSOLETE " #TextDateParsed# " -" #UserInitials#))
  25.               '(50 . 0.0)
  26.               '(7 . "Standard")
  27.               '(71 . 0)
  28.               '(72 . 0)
  29.               '(73 . 0)
  30.         ) ;_  end list
  31.    ) ;_  end entmake  
  32. (princ)
  33. );end defun
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:45:08 | 显示全部楼层
guitarguy1685,
 
由于您正在创建文本实体,您将拥有
计算旋转值并将其分配给(cons 50旋转)
 
ymg公司
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

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

铜币
395
发表于 2022-7-5 20:55:23 | 显示全部楼层
你知道如何检查ucs是当前的吗?
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:59:56 | 显示全部楼层
系统变量“UCSXDIR”
 
ymg公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:15:11 | 显示全部楼层
如果希望与不平行于WCS平面的UCS平面兼容,还需要转换相对于文字/多段线图元的OCS的坐标和文字旋转,例如:
  1. (defun c:test3 ( / getuser p1 p2 p3 p4 q1 q3 th zv )
  2.    (defun getuser ( s / p )
  3.        (if (setq p (vl-string-position 46 s))
  4.            (strcat (substr s 1 1) (substr s (+ p 2) 1))
  5.            s
  6.        )
  7.    )
  8.    
  9.    (if (and (setq q1 (getpoint "\nSpecify 1st corner: "))
  10.             (setq q3 ((if (zerop (getvar 'worlducs)) getpoint getcorner) q1 "\nSpecify 2nd corner: "))
  11.        )
  12.        (progn
  13.            (setq p1 (mapcar 'min q1 q3)
  14.                  p3 (mapcar 'max q1 q3)
  15.                  p2 (list (car p3) (cadr p1) (caddr p1))
  16.                  p4 (list (car p1) (cadr p3) (caddr p1))
  17.                  th (/ (- (car p2) (car  p1)) 7.0)
  18.                  zv (trans '(0 0 1) 1 0 t) ;; UCS extrusion vector
  19.            )
  20.            (entmake
  21.                (append
  22.                   '(   (000 . "LWPOLYLINE")
  23.                        (100 . "AcDbEntity")
  24.                        (100 . "AcDbPolyline")
  25.                        (090 . 4)
  26.                        (070 . 1)
  27.                    )
  28.                    (list (cons 038 (caddr (trans p1 1 zv))))
  29.                    (mapcar '(lambda ( x ) (cons 10 (trans x 1 zv))) (list p1 p2 p3 p4))
  30.                    (list (cons 210 zv))
  31.                )
  32.            )
  33.            (entmake (list '(0 . "LINE") (cons 10 (trans p1 1 0)) (cons 11 (trans p3 1 0))))
  34.            (entmake (list '(0 . "LINE") (cons 10 (trans p2 1 0)) (cons 11 (trans p4 1 0))))
  35.            (entmake
  36.                (list
  37.                   '(0 . "TEXT")
  38.                   '(7 . "Standard")
  39.                    (cons 010 (trans (list (car p1) (+ (cadr p3) (/ th 3.0)) (caddr p1)) 1 zv))
  40.                    (cons 040 th)
  41.                    (cons 050 (angle '(0.0 0.0) (trans (getvar 'ucsxdir) 0 zv t)))
  42.                    (cons 001 (strcase (strcat "OBSOLETE " (menucmd "m=$(edtime,0,ddmonyy)") " - " (getuser (getvar 'loginname)))))
  43.                    (cons 210 zv)
  44.                )
  45.            )
  46.        )
  47.    )
  48.    (princ)
  49. )
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

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

铜币
395
发表于 2022-7-5 21:20:10 | 显示全部楼层
你谦逊地对我说:“我不配!我不配!”
 
现在我必须试着理解你所做的一切,非常感谢。这个网站接受捐款吗?因为这些年来它对我非常有用。
 
*编辑*刚找到你的网站
 
我还将对这个程序进行研究。这里有一些非常好的东西。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:27:29 | 显示全部楼层
你真是太好了guitarguy-如果你对代码有任何问题,请随时提问!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:11 , Processed in 0.536768 second(s), 66 queries .

© 2020-2025 乐筑天下

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