將選定的文本對象左對齊、右對齊或對中


;;
;;程序名稱:對象水平對齊程序
;;執行命令: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))
  )
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM