AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[分享]調整線性比例.LSP...用副程式協助修改DXF群碼

上一篇主題 下一篇主題 向下

[分享]調整線性比例.LSP...用副程式協助修改DXF群碼

發表 由 RyanGuo 于 2013-10-08, 09:10

指令:L+
指令: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
個人感覺這主程式沒副程式好用@@a....
avatar
RyanGuo
初級會員
初級會員

文章總數 : 206
年齡 : 34
來自 : 屏東
職業 : 機械繪圖
愛好 : 玩遊戲
個性 : 嗚嗚男
使用年資 : 1年多
使用版本 : 2011
積分 : 3
經驗值 : 3014
威望值 : 303
注冊日期 : 2013-04-18
男 射手座 狗

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章