如果希望与不平行于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) (car p1)) 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)
- )
|