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

Join the forum, it's quick and easy

AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe1-113[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ioaoe110[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-310[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oiu15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-211[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ia15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Uos15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) BPl3tjj[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ziao1510
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oo-2-110[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Zuoiy_10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao11[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Iyb_1510[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe1-112[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Uos15011[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe2da10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe2da11[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe10

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

4 posters

向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 j2832383 2014-11-19, 00:26

如標題
個人學習LISP並不是從正規管道學,而是自己看網路的零散資料自學的
程式上的編排與用法看起來並沒有很正規,就好比沒學過AutoCAD的人繪圖時不會管理圖層一樣

以前就自己寫過標註自動換dim圖層的程式,只是使用上並不是很方便
若在指令中途按esc,圖層就停留在dim
需要用到(R)旋轉的話也變得無法使用

代碼:


;●一般標註
(defun c:dli()
(allbylayer) ;圖層切換至0,顏色、線型、線粗為ByLayer
(cm0) ;關閉文字顯示
(command "-layer" "s" "dim" "") ;圖層切換至dim
(cm1) ;開啟文字顯示
(command "DIMLINEAR" pause pause pause) ;標註
(allbylayer) ;圖層切換至0,顏色、線型、線粗為ByLayer
(prin1))










這是我目前的程式,標註時自動換dim圖層

代碼:


;DIMLINEAR
(defun c:ts1()
(cm1) ;開啟文字顯示
(setq dli_001(entlast)) ;取得前次圖元資料
(setq dli_002 dli_001) ;(暫存)前次圖元資料
(command "DIMLINEAR") ;執行指令DIMLINEAR
(while (= dli_001 dli_002) ;while迴圈:圖元未更新則繼續執行指令,圖元更新則停止執行指令
(command pause) ;執行指令 空值
(setq dli_001(entlast)) ;取得前次圖元資料
)

(cm0) ;關閉文字顯示
(if (= (tblsearch "layer" "dim") nil) ;判定圖面是否有標註圖層
(command "layer" "n" "dim" "c" "1" "dim" "") ;執行指令layer,建立LIM圖層,顏色為1(紅色)
)
(setq
dli_003 (entget(entlast)) ;取得新繪製圖元資料
dli_004 (assoc 8 dli_003) ;取得群碼8資料(圖層)
dli_005 (cons 8 "dim") ;新群碼8資料(圖層)
dli_003 (subst dli_005 dli_004 dli_003) ;取代圖元資料
)
(entmod dli_003) ;更新圖面中新繪製圖元
(prompt "\n測試用指令完成")
(prin1))


開始繪製前先讀取前次圖元的圖元碼,保存為(dli_001)與(dli_002)
再來開始繪製標註,輸入(command "DIMLINEAR"),後面則不打任何數值
再來進入while迴圈,若沒有繪製任何的圖元,就繼續執行(command pause)
若有標註出新的圖元,則結束迴圈
後面的程式則是一般的轉換圖層而已


目前此程式只能用在沒有任何圖元的新圖,若有繪製過任何的線與標註就無法使用此程式了
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 885a96521554aca6715b963c5b29d524
下面紅色標註是成功煥圖層,上面是失敗的







問題出在while後面的式子:(= dli_001 dli_002)

實際用!dli_001與!dli_002查是一樣的圖元碼,但程式判定(= dli_001 dli_002)卻是nil
本來以為程式判定圖元碼無法用於計算的語法,後來發現圖元碼只要有更新過,即使查是一樣的圖元碼程式判定就是nil
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 60fe5d6d31f342862381f87e658062b4









目前我只想到的解決方法就是將圖元碼換成純文字,這樣判定的話就不會有問題,程式就能繼續寫下去
但我所學的語法並沒有可以將圖元碼換成純文字的方法,沒辦法把程式寫完




以上,希望能幫忙解答
j2832383
j2832383
一般會員
一般會員

文章總數 : 11
年齡 : 34
來自 : 台南市
職業 : 模具設計
愛好 : 電腦休閒
個性 : 沉默/不擅於溝通
使用年資 : 學校使用8年,工作使用15個月
使用版本 : 2012
經驗值 : 4003
威望值 : 12
注冊日期 : 2014-02-09
男 金牛座 馬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 胡益彰 2014-11-22, 23:44

太難了...對不起 暈倒
益彰我看不懂 頭暈目眩


胡益彰 在 2014-11-23, 23:40 作了第 1 次修改

____________________________________________________________________________________
喜愛冬天好熱
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 078
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad1810 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad2010 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad1810
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad1211 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad1311 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Acad1511
胡益彰
胡益彰
一般會員
一般會員

文章總數 : 65
年齡 : 41
來自 : 新北市 蘆洲區
職業 : 室內裝潢-學徒
愛好 : 創作+計畫....難免白日夢
個性 : 傻傻的耿直(^Q^!)
使用年資 : 還再補習(多學+多學)
使用版本 : 2012~2014
經驗值 : 4406
威望值 : 72
注冊日期 : 2013-08-13
2D基礎函授 經典問與答讀者 男 水瓶座 豬

https://www.facebook.com/hu.y.zhang?viewas=100000686899395&p

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 shenhung 2014-11-23, 10:43

問題應該是出在樓主想用迴圈連續標註.~!! 一般不會這樣做..
AUTOCAD也是一次標一個.再ENTER 做連續標註的動作.

以下是跟據你的須求.寫的一個參考範例.~~
在標註前做一個換圖層的動作.
代碼:

;;錯誤處理副程式.
(defun dim_err(st)
  (setvar "clayer" clayer)
  (setq *error* old_err)
)
;;主LISP
(defun c:dli(/ clayer)
  (setq old_err *error*  *error* dim_err)
  (setq clayer (getvar "clayer"))
  (setvar "cmdecho" 0)
  (if (= (tblsearch "layer" "DIM") nil)
      (command "-layer" "m" "DIM" "c" "1" "" "")
      (setvar "clayer" "DIM")
  )
  (command "dimlinear")
  (setvar "clayer" clayer)
  (setvar "cmdecho" 1)
  (setq *error* old_err)
  (princ)
)  

LISP載點.
https://db.tt/l8k4p5KC

____________________________________________________________________________________
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ioaoe110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Zuoiy_10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-211 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao11 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Iyb_1510
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) BPl3tjj.png [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ziao1510 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oo-2-110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oooa_110
shenhung
shenhung
高級會員
高級會員

文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-24, 17:59

竟然這麼簡單,我又學到一招了,謝謝shenhung大哥指導

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 j2832383 2014-11-25, 09:56

shenhung 寫到:

很訝異有人提供完整的程式,謝謝shenhung的提供

我本身不期望有人能夠提供我完整的程式,因為我覺得寫程式非常累人,因此我只問單一個功能而已
另外我覺得程式自己寫出來的話學到的都會比較多,且自己寫的比較能夠照自己的意思





其實前些日子有自己找到解決方法
自己的程式改前面成這樣就能解決自己的問題了

代碼:
(defun c:dli()
(cm1)
(setq dim_001 (ssget "l"))
(setq dim_002 (entlast))
(command "DIMLINEAR")
(while
   (if
   (= dim_001 nil)
   (= dim_002 dim_001)
   (/= nil (ssmemb dim_002 dim_001))
   )
(command pause)
(setq dim_002 (entlast))
)
以下略

雖然程式的問題解決了,但是我還是想知道圖元能不能轉換其他型態,所以論串我還是放著等問題解答






而shenhung提供的程式,我先前也是寫過類似的(但是沒有*error*那一段)
不過自己沒有使用的原因有2個
1.esc離開的時候圖層會停留在"dim"標註圖層
2.回復(ctrl+Z)的時候需要回復2次才能回到沒有繪製的狀態
標註1個要回復2次,連續標註2個要回復3次,連續標註3個要回復4次......以此類推
如果連續標註繪製完,回復時圖層會停留在"dim",最後一次回復才能回到初始圖層狀態

因此我才想用另一個方式寫出來,雖然程式寫了複雜了一點......





shenhung提供的程式有一段讓我研究了大半天都不知道程式如何運作,就是程式除錯*error*那一段
我研究了半天,感覺*error*看起來跟一般的函數不一樣,也有在AutoCAD程式裡面的lisp程式中看到*error*字樣
如果程式沒有除錯這一段,繪製到一半esc離開時圖層就不會回到初始圖層狀態

程式中(defun c:dli(/ clayer),後面(/ clayer)這一段也不知道功能性,我也是研究老半天找不出功能性
(defun dim_err(st)中的"st"拿掉以後就會有奇怪的訊息出現
(defun c:dli(/ clayer)中的"/ clayer"拿掉以後程式能正常運作,感覺沒有異樣





看起來高手寫出來的程式就是不一樣,目前還在研究shenhung寫的程式
如果了解這程式完整運作方式"尤其是程式除錯*error*那一段",以後自寫出來的程式應該就能簡短許多

還是再次感謝shenhung提供的程式
j2832383
j2832383
一般會員
一般會員

文章總數 : 11
年齡 : 34
來自 : 台南市
職業 : 模具設計
愛好 : 電腦休閒
個性 : 沉默/不擅於溝通
使用年資 : 學校使用8年,工作使用15個月
使用版本 : 2012
經驗值 : 4003
威望值 : 12
注冊日期 : 2014-02-09
男 金牛座 馬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-25, 11:13

(defun c:dli(/ clayer)
此行的(/ clayer)作用如下:
首先要了解的是
1.(setq CLAYER (getvar "clayer")),將目前使用中圖層儲存到變數CLAYER中(假設目前使用中的圖層為TEXT)
2.程式執行標註時,(setvar "clayer" "DIM")會把使用中圖層轉換到DIM圖層,這樣標註出來的尺寸都會在DIM圖層。
3.程式結束時,(setvar "clayer" CLAYER),將圖層又換回剛才程式前面記憶的TEXT。
4.(/ clayer)的意思就是程式結束時,不把CLAYER帶走(清除CLAYER的記憶),否則若別的程式也用了這個變數CLAYER,則記憶值可能會亂掉。
意思就是清除記憶~~~
清除CLAYER變數的記憶

其實這個程式犯了一個小小小小的BUG,通常使用者設定的變數盡量不要和AUTOCAD及AUTOLISP的系統名稱一樣,否則可能會造成程式掛掉或CAD搞不清楚是系統的指令或是使用者自訂的變數

建議修改如下:
(defun c:dli(/ CLY)
此行的(/ CLY)作用如下:
首先要了解的是
1.(setq CLY (getvar "clayer")),將目前使用中圖層儲存到變數CLY中(假設目前使用中的圖層為TEXT)
2.程式執行標註時,(setvar "clayer" "DIM")會把使用中圖層轉換到DIM圖層,這樣標註出來的尺寸都會在DIM圖層。
3.程式結束時,(setvar "clayer" CLY),將圖層又換回剛才程式前面記憶的TEXT。
4.(/ CLY)的意思就是程式結束時,不把CLY帶走(清除CLY的記憶),否則若別的程式也用了這個變數CLY,則記憶值可能會亂掉。
意思就是清除記憶~~~
清除CLY變數的記憶

完整的修改如下
(defun dim_err(st)
 (setvar "clayer" CLY)
 (setq *error* old_err)
)  
(defun c:dli(/ CLY)
 (setq old_err *error*  *error* dim_err)
 (setq CLY (getvar "clayer"))
 (setvar "cmdecho" 0)
 (if (= (tblsearch "layer" "DIM") nil)
     (command "-layer" "m" "DIM" "c" "1" "" "")
     (setvar "clayer" "DIM")
 )  
 (command "dimlinear")
 (setvar "clayer" CLY)
 (setvar "cmdecho" 1)
 (setq *error* old_err)
 (princ)
)

Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心程式解說分享~< 積分 +1>
[公告]關於團隊成員的回文及貢獻

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-25, 15:45

再補充一下,若有錯請指正
代碼:
(defun dim_err(st)        ;;中斷程式時的回復被修改的參數
 (setvar "clayer" CLY)   ;;回復原來圖層
 (setq *error* old_err)  ;;不太清楚,反正是中斷程式的整套標準語法,請懂的人解釋一下
)  
(defun c:dli(/ CLY)
 (setq old_err *error*  *error* dim_err)  ;;程式被中斷時執行 dim_err副程式
 (setq CLY (getvar "clayer"))  ;;將使用中的圖層記憶到CLY變數裡
 (setvar "cmdecho" 0)  ;;程式執行時,停止一些不必要的回應訊息
 (if (= (tblsearch "layer" "DIM") nil)  ;;檢測是否有DIM圖層
     (command "-layer" "m" "DIM" "c" "1" "" "")  ;;若沒有則新建DIM圖層並切換到DIM圖層
     (setvar "clayer" "DIM")  ;;若有DIM圖層則切換系統圖層到DIM圖層
 )  
 (command "dimlinear")  ;;開始線性標註
 (setvar "clayer" CLY)  ;;標註完後,回復原來圖層,可能有人習慣畫圖圖層為1或2或其它,但習慣標註在DIM圖層
 (setvar "cmdecho" 1)  ;;啟動回應訊息
 (setq *error* old_err)  ;;不太清楚,反正是中斷程式的整套標準語法,請懂的人解釋一下
 (princ)
)

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-26, 16:41

這是連續標註的寫法,但還有問題,無法結束,請高手幫我修改,謝謝(要能連續標註哦,按右鍵可以結束,像autocad本身的功能一樣)
代碼:
;DDL.lsp
;線性標註

(defun dim_err(st)  ;;中斷回復副程式
  (setvar "clayer" clayer)
  (setvar "DIMASSOC" DAC)
  (setq *error* old_err)
)

(defun C:DDL(/ old_err CLY DAC PT1 PT2)
  (graphscr)
  (setvar "CMDECHO" 0)

  (setq old_err *error*  *error* dim_err)
  (setq
    CLY (getvar "clayer")
    DAC (getvar "DIMASSOC")  ;;標註關聯性
    PT1 nil
    PT2 nil
  )

  (setvar "DIMSD1" 0)
  (setvar "DIMSE1" 0)
  (setvar "DIMASSOC" 2)  ;;打開標註關聯
  (if (= (tblsearch "layer" "DIM") nil)  ;;檢查本圖面有沒有DIM圖層
    (command "-layer" "m" "DIM" "c" "1" "" "")  ;;若無則新建DIM圖層
    (setvar "clayer" "DIM")  ;;若有則切換到DIM圖層
  )

  (while (or (= PT1 nil)(/= PT2 nil))
    (setq PT1 (getpoint "\n指定第一條延伸線原點 <選取物件>:"))
    (if (/= PT1 nil)(setq PT2 (getpoint PT1 "\n指定第二條延伸線原點:")))
    (if (= PT1 nil)(progn
      (command "UNDO" "BE")
      (command "DIMLINEAR" "")
      (while (= (getvar "CMDACTIVE") 1)
        (command pause)
      )
      (setvar "DIMASSOC" DAC)  ;;回復標註關聯性
      (setvar "CLAYER" CLY)
      (command "UNDO" "E")
      (setq *error* old_err)
      (setq PT1 nil PT2 nil)
    ))

    (if (and (/= PT1 nil)(/= PT2 nil))(progn
      (command "UNDO" "BE")
      (setvar "CLAYER" "DIM")
      (command "DIMLINEAR" PT1 PT2 pause)
      (setvar "DIMASSOC" DAC)  ;;回復標註關聯性
      (setvar "CLAYER" CLY)
      (command "UNDO" "E")
      (setq *error* old_err)
      (setq PT1 nil PT2 nil)
    ))
  )
  (princ)
)

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 shenhung 2014-11-26, 17:36

修正代碼如下.~僅搬動while 迴圈啟動條件. pt1

代碼:

;線性標註

(defun dim_err(st) ;;中斷回復副程式
 (setvar "clayer" clayer)
 (setvar "DIMASSOC" DAC)
 (setq *error* old_err)
)

(defun C:DDL(/ old_err CLY DAC PT1 PT2)
 (graphscr)
 (setvar "CMDECHO" 0)

 (setq old_err *error* *error* dim_err)
 (setq
  CLY (getvar "clayer")
  DAC (getvar "DIMASSOC") ;;標註關聯性
  PT1 nil
  PT2 nil
 )

 (setvar "DIMSD1" 0)
 (setvar "DIMSE1" 0)
 (setvar "DIMASSOC" 2) ;;打開標註關聯
 (if (= (tblsearch "layer" "DIM") nil) ;;檢查本圖面有沒有DIM圖層
  (command "-layer" "m" "DIM" "c" "1" "" "") ;;若無則新建DIM圖層
  (setvar "clayer" "DIM") ;;若有則切換到DIM圖層
 )
(setq PT1 (getpoint "\n指定第一條延伸線原點 <選取物件>:"))
 (while (/= PT1 nil)
  
  (if (/= PT1 nil)(setq PT2 (getpoint PT1 "\n指定第二條延伸線原點:")))
  (if (= PT1 nil)(progn
   (command "UNDO" "BE")
   (command "DIMLINEAR" "")
   (while (= (getvar "CMDACTIVE") 1)
    (command pause)
   )
   (setvar "DIMASSOC" DAC) ;;回復標註關聯性
   (setvar "CLAYER" CLY)
   (command "UNDO" "E")
   (setq *error* old_err)
   (setq PT1 nil PT2 nil)
  ))

  (if (and (/= PT1 nil)(/= PT2 nil))(progn
   (command "UNDO" "BE")
   (setvar "CLAYER" "DIM")
   (command "DIMLINEAR" PT1 PT2 pause)
   (setvar "DIMASSOC" DAC) ;;回復標註關聯性
   (setvar "CLAYER" CLY)
   (command "UNDO" "E")
   (setq *error* old_err)
   (setq PT1 nil PT2 nil)
  ))
   (setq PT1 (getpoint "\n指定第一條延伸線原點 <選取物件>:"))
 )
 (princ)
)

____________________________________________________________________________________
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ioaoe110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Zuoiy_10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-211 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao11 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Iyb_1510
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) BPl3tjj.png [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ziao1510 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oo-2-110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oooa_110
shenhung
shenhung
高級會員
高級會員

文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-26, 20:20

感謝shenhung大哥的幫忙,快來去測試

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 djh1006 2014-11-27, 07:37

測試結果是這樣的,CAD的原始功能是當使用者執行dimlinear指令時
指定第一條延伸線原點或 <選取物件>:
若第一個動作是選取標註第一點,則會繼續詢問
指定第二條延伸線原點:
而當第一個動作不是選點而是按ENTER時,CAD會要你
選取要標註的物件:

所以shenhung大哥修改的程式是當第一個
(setq PT1 (getpoint "\n指定第一條延伸線原點 <選取物件>:"))
若按ENTER則PT1會是nil的值,就不能進入WHILE迴圈
並且永遠無法執行
(if (= PT1 nil)(progn
中的選取物件的功能,永遠只能以選取二點的方式線性標註
所以:
如何修改這個程式,請再費心想一下,非當感謝
若真沒辦法,只好以ESC結束程式
(setq PT1 (getpoint "\n指定第一條延伸線原點 <按ENTER選取物件或按ESC結束>:"))

____________________________________________________________________________________
微笑
djh1006
djh1006
中級會員
中級會員

文章總數 : 177
年齡 : 53
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 連續沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 23年以上
使用版本 : 2014
積分 : 7
經驗值 : 6137
威望值 : 359
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 j2832383 2014-11-27, 12:40

個人研究了好半天新程式的寫法,也研究很久*error*執行的訣竅,今天算是弄清楚了(應該吧......)
(defun error(st),這個(st)還是不懂意思,在我眼裡沒有ST應該也能執行才對,ST不知道有沒有特別的意思



附件的程式是我全部程式中標註的部分
我個人習慣繪圖都是用指令的方式,所以如果習慣用按鈕的人大概不會用
附件
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Attachment
dim.zip 您無權下載這里的附件。(4 Kb) 下載 14 次
j2832383
j2832383
一般會員
一般會員

文章總數 : 11
年齡 : 34
來自 : 台南市
職業 : 模具設計
愛好 : 電腦休閒
個性 : 沉默/不擅於溝通
使用年資 : 學校使用8年,工作使用15個月
使用版本 : 2012
經驗值 : 4003
威望值 : 12
注冊日期 : 2014-02-09
男 金牛座 馬

回頂端 向下

[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Empty 回復: [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層)

發表 由 shenhung 2014-11-27, 13:47

djh1006:
我忘了你還須要 選取物件這個選項.~!!拍謝 因為當你空輸入時. 無法判別回傳的nil
是要結束程式.還是要選取物件.~~ 基本上這2個目的是相互衝突的.~~
也是無法跳出while 迴圈的原因.~!!
所以自己的程式才沒有用迴圈.連續標註!!
但我寫單一標註的原因.是要加入公差和直徑符號的關係.~
https://www.autocad-tw.com/t9084-topic

j2832383:
st 的確可以省略. 當程式產生錯誤的時候. 會傳送一個錯誤訊息給st !!

____________________________________________________________________________________
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ioaoe110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Zuoiy_10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-211 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao11 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Iyb_1510
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao10 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) BPl3tjj.png [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ziao1510 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oo-2-110 [討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oooa_110
shenhung
shenhung
高級會員
高級會員

文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe1-113[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ioaoe110[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-310[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oiu15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) 2020-211[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ia15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Uos15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) BPl3tjj[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Ziao1510
[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe15010[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Oo-2-110[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Zuoiy_10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aizyao11[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Iyb_1510[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe1-112[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Uos15011[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe2da10[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe2da11[討論]如何將圖元碼轉換成字串? (用於標註自動換dim圖層) Aoe10