对象水平对齐,并且按照竖直方向排列
生活随笔
收集整理的這篇文章主要介紹了
对象水平对齐,并且按照竖直方向排列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
;;
;;程序名稱:對象水平對齊程序,并且按照豎直方向排列
;;執行命令:tb2
;;程序功能:將選定的對象左對齊,并且按照豎直方向排列。
;;
(defun c:tb2(/ selobjs oldcmdecho) ;定義命令txtal,局部變量selobjs,oldcmdecho;(setq oldcmdecho (getvar "cmdecho")) ;oldcmdecho 存儲命令回顯模式(setvar "cmdecho" 0) ;屏蔽提示(setq selobjs (ssget ' ((0 . "TEXT,MTEXT")))) ;獲取文字對象?todo
(process2 selobjs) ;處理選中的對象;(setvar "cmdecho" oldcmdecho) ;設置命令回顯模式(princ) ;todo?
)
(defun process2 (selobjs / amode apnt apnt_xapnt_y count objname vlaxobj MinPointMaxPoint minext maxext ext_l ext_rext_m tpnt ext_y old_y countp lstp n is_del) ;; amode 對齊模式;apnt 對齊點;apnt_x 對齊點x坐標;; apnt_y 對起點y坐標;count 計數器;;; objname 獲取圖元名稱 vlaxobj vla對象名;; ext_y 原來的y坐標; old_y 上一個y坐標;; countp 遷移位置的個數; lstp 所有的x坐標集合;; n lstp 中的一個變量;is_del 是否刪除了改對象(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)(setq countp 0) (setq old_y 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))(setq ext_y (cadr minext)) ;獲取y坐標(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))))(print old_y)(print ext_l)(print "=======")(setq lstp (cons old_y lstp))(print lstp)(setq is_del 1)(foreach n lstp (progn ;看看是否需要刪除對象(if (> 4 (abs (- n ext_y)));如果4大于間距則進行刪除;(if (= is_del 1) ;只需要刪除一次(progn (setq is_del 2)(command "_erase" objname "") ;刪除對象(print "delete object"))))))(print "++++++++++")(print objname)(print is_del)(if (= is_del 1) ;;如果沒有刪除對象(progn ;移動對象(setq tpnt (list ext_l ext_y));設置原來點坐標(print tpnt)(setq apnt (list apnt_x (- apnt_y (* 600 countp))));設置目標點(print apnt)(if tpnt (command "_move" objname "" "non" tpnt "non" apnt))(setq countp (1+ countp)))) ;end if (setq old_y ext_y) ;再一次設置old_y(setq count (1+ count)))
)
?
總結
以上是生活随笔為你收集整理的对象水平对齐,并且按照竖直方向排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3409: [Usaco2009 Oct
- 下一篇: postfix本机测试本机时,telne