Autolisp CopyRotate.LSP 複製物件後旋轉角度 示範使用 NEntSS 副程式
CopyRotate.LSP 作用是複製物件後旋轉角度,在此是示範使用 NEntSS副程式,展示 NEntSS 如何讓你在撰寫 Autolisp 時思路變得非常簡單,並且能很輕易就保留指令本身的視覺回饋效果。
;;************************************************************ ;;* CopyRotate.LSP * ;;************************************************************ ;;* 複製物件後旋轉角度 * ;;* (c) Copyright 2009 Max T. * ;;* 有點像複製+對齊指令 =^.^= * ;;************************************************************ (defun C:CR (/ *error* olderr OSM Ooth obj Nobj ssoldx BasePt AliPT LP DP ang dist input default ) ;;儲存系統變數********************************************** (command "undo" "group") (setq olderr *error*) (setq *error* DetectError) (setq OSM (getvar "OSMODE")) (setq Ooth (getvar "OrthoMode")) (setvar "OrthoMode" 0) (setvar "CMDECHO" 0) ;;主程式**************************************************** (while (= obj nil) (princ "\n *.* 選擇要旋轉複製物件 :") (setq obj (ssget)) );;while (setq BasePt (getpoint "\n *.* 請點選複製旋轉的基準點 :")) (setq AliPT (getpoint BasePt "\n *.* 請選擇對齊點")) (print "選擇複製目標點 : ") (setq ang (angle BasePt AliPT )) (setq dist (distance BasePt AliPT)) (setq ssoldx (ssget "x")) ;;取得現有的物件的總集合 (command "_.copy" obj "" BasePt pause) (setq LP (getvar "Lastpoint")) ;;取得上一個指令的最後選取點 !! (setq DP (polar LP ang dist)) ;;取得上一個指令的最後選取點的相對位置!! (setq Nobj (NentSS ssoldx));;排除舊物件的集合 (command "_.rotate" Nobj "" LP "R" LP DP ) ;;回復系統變數********************************************** (setq *error* olderr) (setvar "OrthoMode" Ooth) (command "undo" "end") (setvar "CMDECHO" 1) (print " =^.^= =^O^=") (princ) ) ;;endDefun ;;;;;********************* function DectectError ********************* (defun DetectError (s) (if (/= s "程式錯誤") (princ (strcat "\nError: " s)) ) (setq *error* olderr) (setvar "OSMODE" OSM) (setvar "OrthoMode" Ooth) (command "undo" "end") (setvar "CMDECHO" 1) (print "使用者強制關閉") (princ) ) ;;**** 角度徑度轉換 ***** ;; (defun Radian->Degrees (nbrOfRadians) (* 180.0 (/ nbrOfRadians pi)) ) ;;**************************************************************************;; ;;**** 取得 command 新產生物件選集 ****;; ;;**** 必須在產生物件的動作前取得舊選集(setq ssoldx (ssget "x")) ****;; ;;**************************************************************************;; (defun NentSS (oldSSx / NewSSx i enNameI ssExclude result) (setq NewSSx (ssget "x")) (setq i 0) (if (/= oldSSx nil) (progn (repeat (sslength oldSSx) (setq enNameI (ssname oldSSx i)) (setq ssExclude (ssdel enNameI NewSSx)) (setq i (+ 1 i)) ) ;;repeat );;progn (exit) ) ;;if (setq result ssExclude) )
使用方式
1.選取您要複製並旋轉的物件
2.選取複製基準點(也是旋轉的中心點)
3.選取對齊點,這點是物件要選轉對齊的點
4.選取複製目標點(也是新的物件旋轉的中心點)
5.輸入角度 或是 依導引線決定角度
若您會撰寫 Autolisp 您就會發現主程式極其簡單,也不必為了保有視覺回饋效果絞盡腦汁,做一堆的假動作來達到視覺回饋效。這個副程式讓撰寫 Autolisp 工作輕鬆太多了 ...
標籤: AutoLisp
0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁