[分享]調整線性比例.LSP...用副程式協助修改DXF群碼
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[分享]調整線性比例.LSP...用副程式協助修改DXF群碼
指令:L+
指令:L-
增加或減少線性比例.
持續沿用的變數
RG:LINE-Type:Unit
設定每次增量或減量的數值
RG:LINE-Type:ssget
紀錄上次選取
如果減少後會小於等於0,線性比例會被調整為增/減量的數值.
執行程式中可以調整增/減量的數值,也可以做增/減互相的切換.
完整執行過一次指令後,持續按著空白鍵會不斷的增/減.
指令:L-
增加或減少線性比例.
持續沿用的變數
RG:LINE-Type:Unit
設定每次增量或減量的數值
RG:LINE-Type:ssget
紀錄上次選取
如果減少後會小於等於0,線性比例會被調整為增/減量的數值.
執行程式中可以調整增/減量的數值,也可以做增/減互相的切換.
完整執行過一次指令後,持續按著空白鍵會不斷的增/減.
- 代碼:
;|
持續沿用的變數
RG:LINE-Type:Unit
設定每次增量或減量的數值
RG:LINE-Type:ssget
紀錄上次選取
|;
(defun C:L+ () (func:LINE-Type "+" 1.0))
(defun C:L- () (func:LINE-Type "0-" 1.0))
(defun func:LINE-Type
(LINE-Type:MODEL set:LINE-Type:Unit
/ LINE-Type:ssget_new
DXF_en getxxx
repeat_n repeat_m
)
(setvar "cmdecho" 0)
(IF (null RG:LINE-Type:Unit)
(SETQ RG:LINE-Type:Unit set:LINE-Type:Unit)
)
(SETQ
RG:LINE-Type:ssget
(WHILE (null LINE-Type:ssget_new)
(prompt "\n選取物件或 <設定或使用上次LINE-Type選取>...")
(setq LINE-Type:ssget_new (ssget))
(IF (null LINE-Type:ssget_new)
(progn
(initget (IF RG:LINE-Type:ssget
6
7
)
"X"
)
(SETQ getxxx (getreal (strcat
"設定線性比例增減單位或 [變更為"
(IF (= LINE-Type:MODEL "+")
"減"
"增"
)
"量(X)]"
(IF RG:LINE-Type:ssget
"<使用上次選取>"
)
":"
)
)
)
(COND
((EQ (TYPE getxxx) 'REAL) (SETQ RG:LINE-Type:Unit getxxx)) ;_cond1
((null getxxx)
(SETQ LINE-Type:ssget_new RG:LINE-Type:ssget)
) ;_cond2
((= getxxx "X")
(SETQ LINE-Type:MODEL
(IF (= LINE-Type:MODEL "+")
(progn
(prompt "\n變更為減量...\n")
"0-"
)
(progn (prompt "\n變更為增量...\n") "+")
)
)
) ;_cond3
) ;_COND
) ;_progn
LINE-Type:ssget_new
) ;_IF
) ;_WHILE
repeat_n (sslength RG:LINE-Type:ssget)
repeat_m 0
)
(repeat repeat_n
(setq DXF_en (entget (ssname RG:LINE-Type:ssget repeat_m) '("*"))
DXF_en (func:DXF_ex
DXF_en 48 LINE-Type:MODEL RG:LINE-Type:Unit 1.0)
)
;;重繪圖元
(entmod DXF_en)
;;下一個repeat_m
(setq repeat_m (1+ repeat_m))
)
(prin1)
)
;DXF修改操作,回傳新圖元串列
;;用法(setq 物件的元素串列 (func_DXF_ex 圖元串列 DXF群碼 數值變動模式 數值變動參數 nil時使用的預設值))
(defun func:DXF_ex
(DXF_en DXF_code value_ex_MODE
value_ex_ARG DXF_nil /
DXF_ex_o DXF_ex_i
)
(setq
;;CODE的原有串列
DXF_ex_o (assoc DXF_code DXF_en)
;;CODE的目標串列
DXF_ex_i (cons DXF_code
;;使用副程式取得資料
(func:value_ex
(cdr DXF_ex_o)
value_ex_MODE
value_ex_ARG
DXF_nil
)
)
)
(IF (cdr DXF_ex_o)
;;替換串列
(subst DXF_ex_i DXF_ex_o DXF_en)
;;併入串列
(cons DXF_ex_i DXF_en)
)
)
;數值變動
;;(func:value_ex 原始數值 數值變動模式 數值變動參數 nil時使用的預設值)
(defun func:value_ex
(value_ex_o value_ex_MODE value_ex_ARG value_ex_nil)
(IF (null value_ex_o)
(SETQ value_ex_o value_ex_nil)
)
(COND
((= value_ex_MODE "+")
(+ value_ex_o value_ex_ARG)
)
((= value_ex_MODE "0-")
(IF (<= (- value_ex_o value_ex_ARG) 0)
value_ex_ARG
(- value_ex_o value_ex_ARG)
) ;_IF
)
(T
(progn
(IF
(AND value_ex_MODE (= (TYPE value_ex_MODE) 'STR))
(prompt (strcat
"\n副程式func:value_ex發生錯誤:value_ex_MODE= "
value_ex_MODE
" 未定義.\n"
)
)
(prompt
"\n副程式func:value_ex發生錯誤:value_ex_MODE不為字串."
)
) ;_IF
(EXIT)
) ;_progn
) ;_cond last
) ;_COND
) ;_last
RyanGuo- 初級會員
- 文章總數 : 206
年齡 : 41
來自 : 屏東
職業 : 機械繪圖
愛好 : 玩遊戲
個性 : 嗚嗚男
使用年資 : 1年多
使用版本 : 2011
積分 : 3
經驗值 : 5577
威望值 : 316
注冊日期 : 2013-04-18
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章