;; ;;程序名稱:對象水平對齊程序 ;;執行命令:TXTAL ;;程序功能:將選定的對象左對齊、右對齊或對中。 ;; (defun c:TXTAL(/ selobjs oldcmdecho) ;定義命令txtal,局部變量selobjs,oldcmdecho; (setq oldcmdecho (getvar "cmdecho")) ;oldcmdecho 存儲命令回顯模式 (setvar "cmdecho" 0) ;屏蔽提示 (setq selobjs (ssget ' ((0 . "TEXT,MTEXT")))) ;獲取文字對象?todo (process selobjs) ;處理選中的對象; (setvar "cmdecho" oldcmdecho) ;設置命令回顯模式 (princ) ;todo? ) (defun process (selobjs / amode apnt apnt_x apnt_y count objname vlaxobj MinPoint MaxPoint minext maxext ext_l ext_r ext_m tpnt ) ;; amode 對齊模式;apnt 對齊點;apnt_x 對齊點x坐標 ;; apnt_y 對起點y坐標;count 計數器; ;; objname 獲取圖元名稱 vlaxobj vla對象名 (initget "L M R") (setq amode (getkword "\n選擇對齊方式<左對齊(L)/居中(M)/右對齊(R)><左對齊>:" ) ) (if (not amode) (setq amode "L") ) (initget 1) (setq apnt (getpoint "\n選擇水平對齊方向的對齊點:")) (setq apnt_x (car apnt) apnt_y (cadr apnt) ) (vl-load-com) (setq count 0) (repeat (sslength selobjs) ;;repeat 此函數可判別每一個 expr 並重復執行 number 所敘述的次數, (setq objname (ssname selobjs count)) ;;ssname此函數將返回選擇集 ss 中 index 所代表的圖元名 (setq vlaxobj (vlax-ename->vla-object objname)) ;;將 AutoLISP 類型的對象名轉換為 VLA 對象 (setq MinPoint (vlax-make-variant)) (setq MaxPoint (vlax-make-variant)) (vla-GetBoundingBox vlaxobj 'MinPoint 'MaxPoint) (setq minext (vlax-safearray->list MinPoint)) (setq maxext (vlax-safearray->list MaxPoint)) (setq ext_l (car minext)) (setq ext_r (car maxext)) (setq ext_m (+ (/ (abs (- ext_l ext_r)) 2) ext_l)) (cond ((= amode "L") (setq tpnt (list ext_l apnt_y)) ) ((= amode "M") (setq tpnt (list ext_m apnt_y)) ) ((= amode "R") (setq tpnt (list ext_r apnt_y)) ) ) (if tpnt (command "_move" objname "" "non" tpnt "non" apnt) ) (setq count (1+ count)) ) )