9
31
24
初来乍到
使用道具 举报
28
118
95
初露锋芒
76
312
254
后起之秀
106
1万
101
顶梁支柱
21
1505
1551
; rlx 3 dec 2017, 4 dec : added Lee's GrText for better user feedback(defun c:qbox ( / size-list scale-list orientation inp loop) (vl-load-com)(redraw) (setq size-list '("A4 (297x210mm)" "A3 (420x297mm)" "A2 (594x420mm)" "A1 (841x594mm)" "A0 (1189x841mm)") scale-list '("1:1" "1:10" "1:25" "1:50" "1:100" "1:250" "1:1000") orientation "Landscape" current-size (car size-list) current-scale (car scale-list) loop t) (prompt "\nKeys : S(ize), Tab/+/- (scale), LM (pass data), RM/space (orientation), any other key exit") (while loop (setq inp (vl-catch-all-apply 'grread (list t 15 1))) (if (vl-catch-all-error-p inp) (progn (redraw)(prompt "\nFunction cancelled")(setq loop nil)) (progn (cond ;;; Tab or + key : cycle scale list forwards ((or (equal inp '(2 9))(equal inp '(2 43))) (setq scale-list (append (cdr scale-list)(list (car scale-list))) current-scale (car scale-list))) ;;; - key : cycle scale list backwards ((equal inp '(2 45)) (setq scale-list (cons (last scale-list) (reverse (cdr (reverse scale-list)))) current-scale (car scale-list))) ;;; Size - cycle size list ((or (equal inp '(2 115))(equal inp '(2 83))) (setq size-list (append (cdr size-list)(list (car size-list))) current-size (car size-list))) ;;; L-mouse button (select a point) pass current data ((= (car inp) 3) (pass_data)) ;;; R-mouse or space - toggle portrait / landscape mode ((or (= (car inp) 25) (equal inp '(2 32))) (if (= orientation "Landscape")(setq orientation "Portrait")(setq orientation "Landscape"))) ;;; key was pressed but none of the above ((= (car inp) 2) (setq loop nil)(redraw)(prompt "\nFunction stopped")) (t (update_qbox)) ) (princ) ) ) ) (princ))(defun pass_data () ; could for example start plot commando here (redraw)(setq loop nil) (alert (strcat "You have selected :\nSize : " current-size "\nScale : " current-scale "\nOrientation : " orientation)))(defun update_qbox ( / pnt size scale dx dy p1 p2 p3 p4 msg) (redraw) (setq pnt (cadr inp) size (atoi (substr current-size 2 1)) scale (atoi (substr current-scale 3))) (cond ((= size 0) (setq size '(1189 841))) ((= size 1) (setq size '( 841 594))) ((= size 2) (setq size '( 594 420))) ((= size 3) (setq size '( 420 297))) (t (setq size '( 297 210)))) (if (/= orientation "Landscape")(setq size (reverse size))) (setq dx (* (car size) scale) dy (* (last size) scale)) (setq p1 (list (- (car pnt) (/ dx 2.0)) (- (cadr pnt) (/ dy 2.0))) p2 (polar p1 (/ pi 2.0) dy) p3 (polar p2 0 dx) p4 (polar p1 0 dx)) ;;; could also use grvecs with matrix for scale here (grdraw p1 p2 2 1)(grdraw p2 p3 2 1)(grdraw p3 p4 2 1)(grdraw p4 p1 2 1) (setq msg (strcat "You have selected :\nSize : " current-size "\nScale : " current-scale "\nOrientation : " orientation)) (LM:DisplayGrText p2 (LM:GrText msg) 3 15 -31));;-----------------------=={ GrText }==-----------------------;;;; ;;;; Returns a grvecs pixel vector list relative to the origin ;;;; encoding the supplied string. ;;;;------------------------------------------------------------;;;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;;;;------------------------------------------------------------;;;; With thanks to ElpanovEvgeniy for the method of vector ;;;; encoding to save me a lot of typing. ;;;;------------------------------------------------------------;;;; Arguments: ;;;; str - String to be expressed in vector list format. ;;;;------------------------------------------------------------;;;; Returns: GrVecs Pixel Vector List relative to the Origin ;;;;------------------------------------------------------------;;;; Version 1.1 - 26-03-2011 ;;;;------------------------------------------------------------;;(defun LM:GrText ( str / asc lst vec xco yco ) (setq vec '( (033 045 045 065 135) (034 104 134 107 137) (035 043 063 046 066 084 094 087 097 115 135 118 138 072 078 103 109) (036 025 035 052 052 043 047 058 078 083 087 092 112 123 127 118 118 135 135) (037 052 052 063 063 074 074 085 085 096 096 107 107 118 118 129 129 047 048 067 068 056 056 059 059 113 114 133 134 122 122 125 125) (038 043 046 049 049 052 072 057 058 067 068 076 076 079 079 083 083 085 085 094 094 103 123 134 136 127 127) (039 105 135) (040 017 017 026 036 045 105 116 126 137 137) (041 014 014 025 035 046 106 115 125 134 134) (042 073 074 076 077 084 086 092 098 104 106 113 114 116 117) (043 055 115 082 084 086 088) (044 034 035 045 046 055 057) (045 083 088) (046 045 046 055 056) (047 052 052 063 063 074 074 085 085 096 096 107 107 118 118 129 129) (048 044 047 134 137 053 123 058 128) (049 044 048 124 125 056 136) (050 043 048 053 053 064 064 075 075 086 086 097 097 108 128 134 137 123 123) (051 053 053 044 047 058 088 095 097 108 128 134 137 123 123) (052 046 048 057 137 078 078 073 076 083 083 094 094 105 115 126 126) (053 053 053 044 047 058 088 094 097 093 133 134 138) (054 044 047 058 088 095 097 084 084 053 113 124 124 135 137) (055 044 054 065 075 086 096 107 117 128 138 133 137 123 123) (056 044 047 094 097 134 137 053 083 058 088 103 123 108 128) (057 044 046 057 057 068 128 097 097 084 086 134 137 093 123) (058 045 046 055 056 095 096 105 106) (059 034 035 045 046 055 057 095 096 105 106)