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

[已解決]關於lisp(長度標示)

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

[已解決]關於lisp(長度標示)

發表 由 amdhome 于 2013-07-09, 07:14

請問各位先知
   標註長度的lisp,如何修改為可乘上高度後標註為面積(m2)

例:平面圖內牆長度為1.2m,高度(2.4)(可變動),該線段面積為2.88(m2)


(defun c:EB1()

(setvar "cmdecho" 0)

(setq en (entsel "\n選取圓、線、弧、聚合線計算長度: "))

(while en

(setq en (car en))

(command "lengthen" en "")

(setq dd (getvar "perimeter"))

(princ (strcat "\n長度=" (rtos dd 2)"cm"))

(setq pt (getpoint "\n文字插入點: "))

(setq old_hh (getvar "textsize"))

(setq str_hh (strcat "\n文字高度 <" (rtos old_hh 2) ">: "))

(setq hh (getdist pt str_hh))

(if (null hh) (setq hh old_hh))

(command "text" pt hh 0 (strcat "" (rtos (/ dd 100) 2) "m"))
(setq en (entsel "\n選取圓、線、弧、聚合線計算長度: "))
)
(prin1)
)
.


amdhome 在 2013-07-12, 16:27 作了第 1 次修改
avatar
amdhome
中級會員
中級會員

文章總數 : 97
年齡 : 36
來自 : 苗栗縣
職業 :
愛好 : 上論壇
個性 : 外向
使用年資 : 1年
使用版本 : 2006
積分 : 5
最佳解答 : 2
經驗值 : 3331
威望值 : 102
注冊日期 : 2009-12-21
藍鵲626號
串連貼紙成功 男 摩羯座 猴

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 adslwang 于 2013-07-09, 09:04

各自替換以下3行看一下不同之處,差別只在於提示單位表示及紅色區計算區

以M為輸入單位
(princ (strcat "\n長度=" (rtos dd 2)"M"))
(setq str_hh (strcat "\n文字高度 <" (rtos old_hh 2) "M >: "))
(command "text" pt hh 0 (strcat "" (rtos (* dd HH) 2) "M2"))


以CM為輸入單位
(princ (strcat "\n長度=" (rtos dd 2)"CM"))
(setq str_hh (strcat "\n文字高度 <" (rtos old_hh 2) "CM >: "))
(command "text" pt hh 0 (strcat "" (rtos (/ (* dd HH) 10000) 2) "M2"))
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 38
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4539
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 amdhome 于 2013-07-09, 09:59

感謝adslwang先知的回覆
(問題已經解決一半了)
但是如果高度是0.15m而文字高度也是0.15
高度是3m而文字高度也是3
所以整個圖面的文字就會忽大忽小的,是否能夠僅輸入高度作計算而文字高度能統一之寫法

avatar
amdhome
中級會員
中級會員

文章總數 : 97
年齡 : 36
來自 : 苗栗縣
職業 :
愛好 : 上論壇
個性 : 外向
使用年資 : 1年
使用版本 : 2006
積分 : 5
最佳解答 : 2
經驗值 : 3331
威望值 : 102
注冊日期 : 2009-12-21
藍鵲626號
串連貼紙成功 男 摩羯座 猴

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 adslwang 于 2013-07-09, 14:53

(defun c:EB1()
(setvar "cmdecho" 0)
(setq old_hh (setvar "textsize" 3))
(setq str_hh (strcat "\n文字高度 <" (rtos old_hh 2 0) "M >: "))
(setq hh (getdist pt str_hh))
(if (null hh) (setq hh old_hh))
(while (setq en (entsel "\n選取圓、線、弧、聚合線計算長度: "))
(setq en (car en))
(command "lengthen" en "")
(setq dd (getvar "perimeter"))
(princ (strcat "\n長度=" (rtos dd 2)"M"))
(setq pt (getpoint "\n文字插入點: "))
(command "text" pt hh 0 (strcat "" (rtos (* dd HH) 2) "M2")))
(prin1))

依您的說明,調整一下位置,並假設基本字高為3,因為有的圖檔原設字高都不一樣.....
還有其它可以調整,讓其它前輩幫你吧!只到這裏了.......
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 38
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4539
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 amdhome 于 2013-07-10, 08:00

感謝adslwang先知您的幫忙,我有在修改了一下3Q 認同


有需要的人煩請自行服用吧


(defun c:ll()

(setvar "cmdecho" 0)

(setq en (entsel "\n選取圓、線、弧、聚合線計算長度: "))

(while en

(setq en (car en))

(command "lengthen" en "")

(setq dd (getvar "perimeter"))

(princ (strcat "\n長度=" (rtos dd 2)"M"))

(setq pt (getpoint "\n文字插入點: "))

(setq old_hh (getvar "textsize"))

(setq str_hh (strcat "\n文字高度 <" (rtos old_hh 2) "M >: "))

(setq hh (getdist pt str_hh))

(if (null hh) (setq hh old_hh))

(command "text" pt hh 0 (strcat "" (rtos (* (/ dd 100) HH) 2) "M2"))

(setq en (entsel "\n選取圓、線、弧、聚合線計算長度: "))
)
(prin1)
)
..
avatar
amdhome
中級會員
中級會員

文章總數 : 97
年齡 : 36
來自 : 苗栗縣
職業 :
愛好 : 上論壇
個性 : 外向
使用年資 : 1年
使用版本 : 2006
積分 : 5
最佳解答 : 2
經驗值 : 3331
威望值 : 102
注冊日期 : 2009-12-21
藍鵲626號
串連貼紙成功 男 摩羯座 猴

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 yu0678 于 2013-08-11, 05:19

剛好手邊有一個程式,內容較複雜,但可自行刪減成自己需要的內容,
一次設定好圖層、字型、字高與小數點精確度,以後就方便多了。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;牆長度及面積計算
;; 2013/08/11

(defun C:Y479 (/ scm shig sos ssca i ss ssn sth &d ip1 p2
LL TLL AL1 AL2 ALL AAL AA1 AA2 AA3 AAA)
(setq scm (getvar "cmdecho"))
(setq shig (getvar "highlight"))
(setq sos (getvar "osmode"))
(setq ssca (getvar "dimscale"))
(setvar "cmdecho" 0)
(setvar "highlight" 1)
(setvar "osmode" 512) ;; NEA (最近點)

(:set_layer: "CHINA" 3) ;; 載入圖層 "CHINA",顏色 3
;;(:set_style_CH: "CHINA") ;; 載入 "CHINA" 字型
(:set_textsize: 40) ;; 依 1/100 比例尺預設字高 40
(:set_deci: 2) ;; 小數點精確度設定
(if (null y479) (setq y479 250)) (setq Wh y479) ;; 預設牆面高度為 250cm
(setq p (getreal (strcat "\n指定牆面高度 <" (rtos Wh 2 &d) ">: ")))
(if p (setq Wh p)) (setq y479 Wh)
(prompt "\n選取 線/聚合線/雲行線/弧/圓/橢圓/面域 的圖元計算總長度... ")
(setq i 0 TLL 0)
(setq ss (ssget
'((0 . "REGION,CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
;;面域 ,圓 ,橢圓 ,線 ,聚合線 ,雲行線,弧
(repeat (sslength ss)
(setq ssn (ssname ss i))
(command "lengthen" ssn "")
(setq LL (getvar "perimeter")) ;; 儲存由 AREA 或 LIST 指令計算的最後一個周長值
(setq TLL (+ TLL LL))
(setq i (1+ i)))
(setq AL1 (strcat "牆總長=" (rtos TLL 2 &d) "公分,")
AL2 (strcat " 即:" (rtos (* TLL 0.033) 2 &d) "台尺")
WHH (strcat " <指定高度=" (rtos Wh 2 &d) "公分>")
ALL (strcat AL1 AL2 WHH))
(setq AAL (* TLL Wh)
AA1 (strcat "牆面積=" (rtos (/ AAL 10000.0 ) 2 &d) "平方公尺,")
AA2 (strcat " 即:" (rtos (* AAL 0.00003025 ) 2 &d) "坪,")
AA3 (strcat " 即:" (rtos (* AAL 0.00003025 36) 2 &d) "才")
AAA (strcat AA1 AA2 AA3))

(setq ip1 (getpoint "\n面積資料圖面插入點或 [只顯示面積資料(Enter)]: "))
(if ip1
(progn
(setq p2 (polar ip1 (* 1.5 pi) (* 1.5 sth)))
(command "-TEXT" "j" "BL" ip1 sth 0 ALL)
(command "-TEXT" "j" "BL" p2 sth 0 AAA)))
(prompt (strcat "\n計算 " ALL))
(prompt (strcat "\n計算 " AAA))
(command "._REDRAW")
(princ "\n****** End! 結束! ******")

(setvar "cmdecho" scm)
(setvar "highlight" shig)
(setvar "osmode" sos)
(princ)
)
(prompt "\n****** Load << 牆長度及面積計算 >> Successful ******")
(prin1)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 依比例尺預設字高 sth >>>>>>

(defun :set_textsize: (h / ssca stex p)
(setq ssca (getvar "dimscale"))
(if (null stex) (setq stex (* 0.1 h ssca))) (setq sth stex)
;;(setq p (getdist (strcat "\n指定字高 <" (rtos sth 2 2) ">: ")))
;;(if p (setq sth p)) (setq stex sth)
;;(setvar "textsize" sth)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 小數點精確度設定 &d >>>>>>

(defun :set_deci: (n / sdec p)
(if (null sdec) (setq sdec n)) (setq &d sdec)
;;(setq p (getint (strcat "\n顯示小數點後 <" (rtos &d 2 0) "> 位數: ")))
;;(if p (setq &d p)) (setq sdec &d)
;;(setvar "luprec" &d)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 載入圖層 >>>>>>

(defun :set_layer: (lay_name lay_color / chklay)
(setq chklay (tblsearch "layer" lay_name))
(if (null chklay) (command "-LAYER" "_M" lay_name "_C" lay_color "" "_L" "" "" ""))
(setvar "clayer" lay_name) ;; 設定目前圖層
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 載入字型 >>>>>>

(defun :set_style_CH: (sty_name / chksty)
(setq chksty (tblsearch "style" sty_name))
(if (null chksty) (command "-STYLE" sty_name "txt,chineset" "" "" "" "" "" "")) ;; 中文橫式書寫
(setvar "textstyle" "CHINA") ;; 設定目前的字型為 CHINA
)
(princ)
avatar
yu0678
中級會員
中級會員

文章總數 : 122
年齡 : 58
來自 : Taipei
職業 : 設計
愛好 : 設計
個性 : 無不良嗜好
使用年資 : 17
使用版本 : 2016
積分 : 8
經驗值 : 3061
威望值 : 461
注冊日期 : 2012-05-30
男 射手座 狗

回頂端 向下

回復: [已解決]關於lisp(長度標示)

發表 由 yu0678 于 2013-08-11, 05:38

將文字高度與比例尺"綁"在一起,不管你是以1/10或1/200繪圖,出圖後的每一圖面文字高度都會一樣。
avatar
yu0678
中級會員
中級會員

文章總數 : 122
年齡 : 58
來自 : Taipei
職業 : 設計
愛好 : 設計
個性 : 無不良嗜好
使用年資 : 17
使用版本 : 2016
積分 : 8
經驗值 : 3061
威望值 : 461
注冊日期 : 2012-05-30
男 射手座 狗

回頂端 向下

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


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