AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[討論]選擇尺寸來改變屬性圖塊的值 Io15010 [討論]選擇尺寸來改變屬性圖塊的值 2020-310 [討論]選擇尺寸來改變屬性圖塊的值 Oiu15010 [討論]選擇尺寸來改變屬性圖塊的值 2020-211 [討論]選擇尺寸來改變屬性圖塊的值 Oo-2-110 [討論]選擇尺寸來改變屬性圖塊的值 BPl3tjj

[討論]選擇尺寸來改變屬性圖塊的值

向下

[討論]選擇尺寸來改變屬性圖塊的值 Empty [討論]選擇尺寸來改變屬性圖塊的值

發表 由 pc015 于 2012-07-24, 11:52

我們在製圖時多多少少會遇到一些需要輸入的清單名細表
大家都是如何優化,來節省時間的呢?

我的想法是將所選取的標註尺寸值(含長寬),直接就可以刷在屬性圖塊的方法
如下圖

規格欄 白色的是"文字" 粉紅色的是 "屬性圖塊"
我的LISP 命令為NM

目前只能選取一個標註尺寸來取代一個屬性圖塊
1. 不知該如何選取2個以上的標註尺寸來取代
2. 取代文字中該如何加上"X" 或是 "T"等字元符號

可否有前輩們提供方向參考
代碼:

(defun can (/ sn p13 p14) ;;提取參照文字或屬性內容:
(setq sn (car (entsel (strcat "點取需用參照的文字、屬性或尺寸<" text0 ">:"))))
(if (= sn nil)
(setq st text0)
(if (or (= "TEXT" (to 0))(= "INSERT" (to 0))(= "DIMENSION" (to 0)))
(if (= "INSERT" (to 0))
(setq st (entget (entnext (cdr (car (entget sn)))))
st (cdr (assoc 1 st))
)
(progn
(if (= "DIMENSION" (to 0))
(progn
(setq p13 (to 13) p14 (to 14))
(if (eq (to 1) "")
(setq st (* (/ (distance p13 p14) 10) 10)
st (rtos st 2 2)
)
(setq st (to 1))
)
)
(setq st (to 1))
)
)
);if
(setq st "")
);if
)
(setq text0 st)
)


(defun c:nm(/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss );
(command "undo" "g")
(setq os (getvar "osmode") blp (getvar "blipmode"))
(setvar "blipmode" 0)
(setvar "osmode" 0)
(graphscr)
(if (null text0)(setq text0 ""))
(can)
(while (setq p (entsel "請選取需要更改屬性的圖塊~!"))
(setq sn (car p) en (entget sn) p1 (to 10) nam (to 2) ty (to 0))
(if (or (= "規格" ty)(= "INSERT" ty)(= "DIMENSION" ty))
(if (or (= "規格" ty)(= "DIMENSION" ty))
(progn ;; 將文字改為參照的文字內容

(setq e1 (subst (cons '1 st) (assoc '1 en) en))
(entmod e1)
);progn
(progn ;; 將屬性改為參照的文字內容
(setq e1 (entget (entnext (cdr (car en)))))
(setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
(entmod e1)(entmod en)
(if (or (eq nam "規格")(eq nam "規格1"))(progn

(setq e2 (entget (entnext (cdr (car e1)))))
(setq e2 (subst (cons '1 st) (assoc '1 e2) e2))
(entmod e2)(entmod en)
))
);progn
)
(progn
(princ "n**所選物體是")
(princ (cdr (assoc 0 en)))
(princ ", 不是文字或圖塊,請重新選擇.**n")
)
)
)
(setvar "osmode" os)
(setvar "blipmode" blp)
(terpri)
(command "undo" "end"))
(defun to (n)
(cdr (assoc n (entget sn)))
)
pc015
pc015
初級會員
初級會員

文章總數 : 33
年齡 : 38
來自 : 台中豐原
職業 : 製圖
愛好 : 工作
個性 : 溫和
使用年資 : 5年
使用版本 : 2010
積分 : 1
經驗值 : 3383
威望值 : 60
注冊日期 : 2012-03-20
藍鵲534號
男 金牛座 狗

回頂端 向下

[討論]選擇尺寸來改變屬性圖塊的值 Empty 回復: [討論]選擇尺寸來改變屬性圖塊的值

發表 由 pizg 于 2012-07-26, 08:10

如果有第3欄的時候會怎樣?
如果圖塊的長寬改變時, 材料表內的尺寸會不會自動變更?
如果項次改變時, 要如何做?
把檔案貼上來讓大家測一下吧.
pizg
pizg
高級會員
高級會員

文章總數 : 254
年齡 : 55
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電子;機器人
個性 : 隨和
使用年資 : 30↑
使用版本 : 2015
積分 : 10
經驗值 : 5231
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

https://pizgchen.blogspot.com/

回頂端 向下

[討論]選擇尺寸來改變屬性圖塊的值 Empty 回復: [討論]選擇尺寸來改變屬性圖塊的值

發表 由 pc015 于 2012-07-27, 13:18

pizg 寫到:如果有第3欄的時候會怎樣?
..我預設是一個欄位的屬性圖塊都是獨立的

如果圖塊的長寬改變時, 材料表內的尺寸會不會自動變更?
.. 選取時是選擇標註尺寸,把2個尺寸值合併,並在其中問加上* 的代號,
不規則矩型是封閉的,但不是做成圖塊。

如果項次改變時, 要如何做?
.. 跟第一個回答相同

把檔案貼上來讓大家測一下吧.
.. 我的檔案就在上面的代碼內,可以copy 測試一下。
但目前只能一個尺寸刷一個屬性圖塊的值。
pc015
pc015
初級會員
初級會員

文章總數 : 33
年齡 : 38
來自 : 台中豐原
職業 : 製圖
愛好 : 工作
個性 : 溫和
使用年資 : 5年
使用版本 : 2010
積分 : 1
經驗值 : 3383
威望值 : 60
注冊日期 : 2012-03-20
藍鵲534號
男 金牛座 狗

回頂端 向下

[討論]選擇尺寸來改變屬性圖塊的值 Empty 回復: [討論]選擇尺寸來改變屬性圖塊的值

發表 由 pizg 于 2012-07-30, 11:04

修改後程式如下:
代碼:


(defun can (msg text0 / sn p13 p14)
  ;;提取參照文字或屬性內容:
  (setq sn (car (entsel (strcat "\n" msg "<" text0 ">:"))))
  (if (= sn nil)
    (setq st text0)
    (if   (or (= "TEXT" (to 0))
       (= "INSERT" (to 0))
       (= "DIMENSION" (to 0))
   )
      (if (= "INSERT" (to 0))
   (setq st (entget (entnext (cdr (car (entget sn)))))
         st (cdr (assoc 1 st))
   )
   (progn
     (if (= "DIMENSION" (to 0))
       (progn
         (setq p13   (to 13)
          p14   (to 14)
         )
         (if (eq (to 1) "")
      (setq st (* (/ (distance p13 p14) 10) 10)
            st (rtos st 2 2)
      )
      (setq st (to 1))
         )
       )
       (setq st (to 1))
     )
   )
      )               ;if
      (setq st "")
    )               ;if
  )
  st
)


(defun c:nm (/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss) ;
  (command "undo" "g")
  (setq   os  (getvar "osmode")
   blp (getvar "blipmode")
  )
  (setvar "blipmode" 0)
  (setvar "osmode" 0)
  (graphscr)
  (if (null st1) (setq st1 ""))
  (if (null st2) (setq st2 ""))
  (setq st1 (can "點取第一個參照的文字、屬性或尺寸" st1))
  (setq st2 (can "點取另一個參照的文字、屬性或尺寸" st2))
  (setq st (strcat "2Tx" st1 "x" st2))
  (while (setq p (entsel "\n請選取需要更改屬性的圖塊~!"))
    (setq sn  (car p)
     en  (entget sn)
     p1  (to 10)
     nam (to 2)
     ty  (to 0)
    )
    (if   (or (= "規格" ty) (= "INSERT" ty) (= "DIMENSION" ty))
      (if (or (= "規格" ty) (= "DIMENSION" ty))
   (progn ;; 將文字改為參照的文字內容

         (setq e1 (subst (cons 1 st) (assoc 1 en) en))
         (entmod e1)
   )            ;progn
   (progn ;; 將屬性改為參照的文字內容
         (setq e1 (entget (entnext (cdr (car en)))))
         (setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
         (entmod e1)
         (entmod en)
         (if (or (eq nam "規格") (eq nam "規格1"))
       (progn

        (setq e2 (entget (entnext (cdr (car e1)))))
        (setq e2 (subst (cons 1 st) (assoc 1 e2) e2))
        (entmod e2)
        (entmod en)
       )
         )
   )            ;progn
      )
      (progn
   (princ "n**所選物體是")
   (princ (cdr (assoc 0 en)))
   (princ ", 不是文字或圖塊,請重新選擇.**n")
      )
    )
  )
  (setvar "osmode" os)
  (setvar "blipmode" blp)
  (terpri)
  (command "undo" "end")
  (princ)
)
(defun to (n)
  (cdr (assoc n (entget sn)))
)

pizg
pizg
高級會員
高級會員

文章總數 : 254
年齡 : 55
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電子;機器人
個性 : 隨和
使用年資 : 30↑
使用版本 : 2015
積分 : 10
經驗值 : 5231
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

https://pizgchen.blogspot.com/

回頂端 向下

[討論]選擇尺寸來改變屬性圖塊的值 Empty 回復: [討論]選擇尺寸來改變屬性圖塊的值

發表 由 pc015 于 2012-08-02, 21:43

完全符合我所設定的需求,但先前我寫的抓取標註尺寸有點BUG,會抓取標註2點的線長
後來我修正了一下讀取數據的程式,直接抓取標註的值,另外依照我常用的習慣
將修改屬性圖塊的第二項ITEM。
如下代碼:
代碼:

(defun c: nm(/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss) ;
  (command ".undo" "g")
  (setq  os  (getvar "osmode")
  blp (getvar "blipmode")
  )
  (setvar "blipmode" 0)
  (setvar "osmode" 0)
  (graphscr)
 
  (if (null st1) (setq st1 ""))
  (if (null st2) (setq st2 ""))
  (if (null st3) (setq st3 ""))
  (setq st3(getstring "\n輸入板厚尺寸:"))

(setq ea (entsel "\n選擇長尺寸:"))
          (setq eb (entget (car ea)))
          (setq eb1 (cdr (assoc 42 eb)))
          (setq st1 (rtos eb1 2 1))
  ;(setq st1 (can "選擇長尺寸" st1))

(setq ea2 (entsel "\n選擇寬尺寸:"))
          (setq eb2 (entget (car ea2)))
          (setq eb3(cdr (assoc 42 eb2)))
          (setq  st2 (rtos eb3 2 1))

  ;(setq st2 (can "選擇寬尺寸" st2))
 
  (setq st (strcat st3 "mmx" st1 "x" st2))
  (princ)
  (while (setq p (entsel "\選擇需變更的屬性圖塊!"))
    (setq sn  (car p)
    en  (entget sn)
    p1  (to 10)
    nam (to 2)
    ty  (to 0)
    )
    (if  (or (= "W" ty) (= "INSERT" ty) (= "DIMENSION" ty))
      (if (or (= "W" ty) (= "DIMENSION" ty))
  (progn ;; Nrre

        (setq e1 (subst (cons 1 st) (assoc 1 en) en))
        (entmod e1)
  )            ;progn
  (progn ;; Nre
        (setq e1 (entget (entnext (cdr (car en)))))
        (setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
        (entmod e1)
        (entmod en)
        (if (or (eq nam "W") (eq nam "W1"))
      (progn

        (setq e2 (entget (entnext (cdr (car e1)))))
        (setq e2 (subst (cons 1 st) (assoc 1 e2) e2))
        (entmod e2)
        (entmod en)
      )
        )
  )            ;progn
      )
      (progn
  (princ "n**O")
  (princ (cdr (assoc 0 en)))
  (princ ", Or,s.**n")
      )
    )
  )
  (setvar "osmode" os)
  (setvar "blipmode" blp)
  (terpri)
  (command "undo" "end")
  (princ)
)
(defun to (n)
  (cdr (assoc n (entget sn)))
)
pc015
pc015
初級會員
初級會員

文章總數 : 33
年齡 : 38
來自 : 台中豐原
職業 : 製圖
愛好 : 工作
個性 : 溫和
使用年資 : 5年
使用版本 : 2010
積分 : 1
經驗值 : 3383
威望值 : 60
注冊日期 : 2012-03-20
藍鵲534號
男 金牛座 狗

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]選擇尺寸來改變屬性圖塊的值 Uos15010 [討論]選擇尺寸來改變屬性圖塊的值 BPl3tjj [討論]選擇尺寸來改變屬性圖塊的值 Ziao1510 [討論]選擇尺寸來改變屬性圖塊的值 Oo-2-110 [討論]選擇尺寸來改變屬性圖塊的值 Oooo-110 [討論]選擇尺寸來改變屬性圖塊的值 2020-211