guitarguy1685 发表于 2022-7-5 20:25:47

文字随旋转插入

我有以下代码,将绘制一个带有X的框,并在左上角插入文本,上面写着“过时的日期用户名”。到目前为止,除了我更换UCS外,一切都很顺利。该框没有问题,但文字是相对于WCS插入的,而不是当前的。我搜索了这个网站,找到了一个用“trans”功能解决这个问题的方法。不幸的是,这并没有解决文本相对于WCS仍然旋转的问题。不知道该从这里走到哪里。任何帮助都会很棒!
 
(defun C:test2 (/)
(setq #BoxP1# (getpoint "\nSpecify first corner point: ")
#BoxP2# (getcorner "\nSpecify other corner point: " #BoxP1#)
#BoxP3# (list (Car #BoxP2#) (cadr #BoxP1#) 0)
#BoxP4# (list (Car #BoxP1#) (cadr #BoxP2#) 0)
#BoxTextHeight# (/ (* (abs (- (car #BoxP2#) (car #BoxP1#))) 0.125) 0.875)
#TextLayer# (getvar "CLAYER")
#BoxWidth# (abs (- (car #BoxP2#) (car #BoxP1#)))
#textheight# (/ #BoxWidth# 30)
#TextDate# (rtos (getvar "CDATE") 2 4)
#TextDateParsed# (strcat (substr #TextDate# 5 2)"/"(substr #TextDate# 7 2)"/"(substr #TextDate# 3 2))       
#TextPt# (list (min (car #BoxP1#) (car #BoxP3#) (car #BoxP3#) (car #BoxP4#))
             (+ (max (cadr #BoxP1#) (cadr #BoxP2#) (cadr #BoxP3#) (cadr #BoxP4#)) (/ #textheight# 3))
             );end #TextPt#
#UserName# (getvar "LOGINNAME")
#UserInitials# (strcase (strcat (substr #UserName# 1 1)(substr #UserName# (+ 2 (vl-string-position (ascii ".") #UserName#)) 1))) ;This might fail for you since our office comps use "first.last" format.
);end setq
(vl-cmdf "_.rectangle" #BoxP1# #BoxP2#)
(vl-cmdf "_.line" #BoxP1# #BoxP2# "")
(vl-cmdf "_.line" #BoxP3# #BoxP4# "")
(entmake (list '(0 . "TEXT")
            (cons 10 (trans #TextPt# 1 0))
            (cons 40 #textheight#)
            (cons 1 (strcat "OBSOLETE " #TextDateParsed# " -" #UserInitials#))
            '(50 . 0.0)
            '(7 . "Standard")
            '(71 . 0)
            '(72 . 0)
            '(73 . 0)
      ) ;_end list
   ) ;_end entmake
(princ)

);end defun

ymg3 发表于 2022-7-5 20:45:08

guitarguy1685,
 
由于您正在创建文本实体,您将拥有
计算旋转值并将其分配给(cons 50旋转)
 
ymg公司

guitarguy1685 发表于 2022-7-5 20:55:23

你知道如何检查ucs是当前的吗?

ymg3 发表于 2022-7-5 20:59:56

系统变量“UCSXDIR”
 
ymg公司

Lee Mac 发表于 2022-7-5 21:15:11

如果希望与不平行于WCS平面的UCS平面兼容,还需要转换相对于文字/多段线图元的OCS的坐标和文字旋转,例如:
(defun c:test3 ( / getuser p1 p2 p3 p4 q1 q3 th zv )

   (defun getuser ( s / p )
       (if (setq p (vl-string-position 46 s))
         (strcat (substr s 1 1) (substr s (+ p 2) 1))
         s
       )
   )
   
   (if (and (setq q1 (getpoint "\nSpecify 1st corner: "))
            (setq q3 ((if (zerop (getvar 'worlducs)) getpoint getcorner) q1 "\nSpecify 2nd corner: "))
       )
       (progn
         (setq p1 (mapcar 'min q1 q3)
               p3 (mapcar 'max q1 q3)
               p2 (list (car p3) (cadr p1) (caddr p1))
               p4 (list (car p1) (cadr p3) (caddr p1))
               th (/ (- (car p2) (carp1)) 7.0)
               zv (trans '(0 0 1) 1 0 t) ;; UCS extrusion vector
         )
         (entmake
               (append
                  '(   (000 . "LWPOLYLINE")
                     (100 . "AcDbEntity")
                     (100 . "AcDbPolyline")
                     (090 . 4)
                     (070 . 1)
                   )
                   (list (cons 038 (caddr (trans p1 1 zv))))
                   (mapcar '(lambda ( x ) (cons 10 (trans x 1 zv))) (list p1 p2 p3 p4))
                   (list (cons 210 zv))
               )
         )
         (entmake (list '(0 . "LINE") (cons 10 (trans p1 1 0)) (cons 11 (trans p3 1 0))))
         (entmake (list '(0 . "LINE") (cons 10 (trans p2 1 0)) (cons 11 (trans p4 1 0))))
         (entmake
               (list
                  '(0 . "TEXT")
                  '(7 . "Standard")
                   (cons 010 (trans (list (car p1) (+ (cadr p3) (/ th 3.0)) (caddr p1)) 1 zv))
                   (cons 040 th)
                   (cons 050 (angle '(0.0 0.0) (trans (getvar 'ucsxdir) 0 zv t)))
                   (cons 001 (strcase (strcat "OBSOLETE " (menucmd "m=$(edtime,0,ddmonyy)") " - " (getuser (getvar 'loginname)))))
                   (cons 210 zv)
               )
         )
       )
   )
   (princ)
)

guitarguy1685 发表于 2022-7-5 21:20:10

你谦逊地对我说:“我不配!我不配!”
 
现在我必须试着理解你所做的一切,非常感谢。这个网站接受捐款吗?因为这些年来它对我非常有用。
 
*编辑*刚找到你的网站
 
我还将对这个程序进行研究。这里有一些非常好的东西。

Lee Mac 发表于 2022-7-5 21:27:29

你真是太好了guitarguy-如果你对代码有任何问题,请随时提问!
页: [1]
查看完整版本: 文字随旋转插入