AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[討論]請問各位先進都怎麼進行偵錯呢? Io15010 [討論]請問各位先進都怎麼進行偵錯呢? Easase10 [討論]請問各位先進都怎麼進行偵錯呢? Oiu15010 [討論]請問各位先進都怎麼進行偵錯呢? 2020-211 [討論]請問各位先進都怎麼進行偵錯呢? Oo-2-110 [討論]請問各位先進都怎麼進行偵錯呢? BPl3tjj

[討論]請問各位先進都怎麼進行偵錯呢?

向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-10-23, 18:08

各位先進大大好~

   小弟為LISP的新手,書本買了2.3本,也自己動手寫了一些簡單的LISP,不過對於偵錯的用法以及"眉角"實在是非常的生疏,曾經爬文看過一些偵錯的教學,但是不知道是不是因為沒有學過相關的程式語言,所以似乎邏輯無法暢通,
因此希望版上的先進是否能給予小弟一些指導與提點,萬分感謝!!!

由於工作需求,日前有在網路上搜尋到一篇製作坡度分析的LISP,於是我手動按照文章所寫的程式內容逐一打字建檔,但似乎真的是錯誤太多,反覆修正仍然無法解決,是否也可以請各位先進,以這個檔案的例子來指導一下小弟,該如何修正?

(一)主程式內容

(defun c:ff ()(c:ling)(c:ffra)(c:ffr)(c:lins)(c:ffrb)
 (defun c:ffra ()
   (setq DDDD (load_dialog (findfile "ffr.dcl")))
   (if (< DDDD 0)
     (exit)
   )
   (if (not (new_dialog "ffr" DDDD))
     (exit)
   )
   (action_tile "cancel" "(exit)")
   (action_tile "accept" "(ffrb)(done_dialog4)")
   (start_dialog)
   (done_dialog)
   (unload_dialog dddd)
 )
 (defun c:ffrb ()
   (setq a (get_tile "icon1"))
   (setq d (atof (get_tile "icon3")))
   (setq h (atof (get_tile "icon4")))
   (setq dhtext (strcat "備註:等高線首曲線間距h="
(rtos h 2 0)
"公尺,方格(丘塊)邊長="
(rtos d 2 0)
"公尺"
)
   )
   (setq e (get_tile "icon5"))
   (if (= a "1")
     (setq sss 100.0)
     (setq sss 1.0)
   )
   (if (= e "1")
     (setq ha 1)
     (setq ha 2)
   )
   (if (= a "1")
     (setq d (* d sss)
   h (* h sss)
     )
   )
 )

 (defun c:ffr ()(wp)
   (setq p1 (getpoint (if1 "\nEnter 1st corner:" "\n輸入第一角點:")))
   (setq p2 (getcorner p1 (if1 "\nEnter 2nd corner:" "\n輸入第二角點:")))
   (setq sh (cdr (assoc 8 (entget (car (entsel (IF1 "\nSelect pline:" "\n選取等高線:")))))))
   (setq pq1 (getpoint (IF1 "\nEnter location of text:" "\n輸入檢討表位置:")))
   (setq no 0 areatext 0 suareax 0 agareax 0 areaqx 0)
   (setq bbp (getvar "blipmode"))
   (setvar "blipmode" 0)
   (setq x (abs (- (car p2) (car p1)))
 y (abs (- (cadr p2) (cadr p1)))
   )
   (setq p3a (list (car p2) (cadr p1)))
   (setq p3b (list (car p1) (cadr p2)))
   (setq ax (angle p1 p3a)
 bx (angle p1 p3b)
   )
   (setq xn (+ 1 (fix (/ x d))))
   (setq yn (+ 1 (fix (/ x d))))
   (setq pp  p1
 pp1 p1
 p3a (polar p1 ax (* xn d))
 p3b (polar p1 bx (* yn d))
   )
   (repeat yn
     (repeat xn
(setq p2 (polar p1 ax d)
     p3 (polar p2 bx d)
     p4 (polar p1 bx d)
)
(command "layer" "m" "00" "")
(command "_pline" p1 p2 p3 p4 "c")
(setq el (ssget "1"))
(setq s (ssget "cp" 1  (list(cons 0 "LWPOLYLINE,polyline,arc,line,spline")(cons 8 "00"))))
(if (/ = s nil)
 (progn
   (setq snj 0)
   (command "zoom" "w" p1 p3)
   (setq p1p2s (ssget "c" p1 p2 (list (cons 8 sh))))
   (if (/ = p1p2s nil) (setq snj (+ (sslength p1p2s) snj)))
   (setq p1p2s (ssget "c" p2 p3 (list (cons 8 sh))))
   (if (/ = p1p2s nil)(setq snj (+ (sslength p1p2s) snj)))
   (setq p1p2s (ssget "c" p3 p4 (list (cons 8 sh))))
   (if (/ = p1p2s nil)(setq snj (+ (sslength p1p2s) snj)))
   (setq p1p2s (ssget "c" p4 p1 (list (cons 8 sh))))
   (if (/ = p1p2s nil) (setq snj (+ (sslength p1p2s) snj)))
   (command "zoom" "p")
   (command "copy" sa "" "@" "@")
   (command "region" "1" "")
   (setq sal (ssget "1"))
   (command "region" el "")
   (setq ela (ssget "1"))
   (command "intersect" sal ela "")
   (setq sall (ssget "1"))
   (command "area" "e" sall)
   (if (= sss 100.0)
     (setq areaq (/ (getvar "area") 10000.0))
     (setq areaq (getvar "area"))
   )
   (hatchset)
   (setq suarea (* su 100.0 areaq))
   (setq agarea (* (atof ag) areaq))
   (setq areaqx (+ areaqx areaq))
   (setq suareax (+ suareax suarea))
   (setq agareax (+ agareax agarea))
   (textw)(textset)
   (command "erase" sal ""))
 (command "erase" el ""))
(setq p1 (polar p1 ax d))
     )
     (setq pp (polar pp bx d)p1 pp)
     )
     (boxline)
     (linex)
(seq suxx (/ suareax areaqx) agxx (/ agareax areaqx))
(command "_style" "china" "ch,chineset" "" "" "" "" "" "N")
(setq pq0 (polar pq1 (* 0.5 pi) (* 0.3 s6)))
(setq pq2 (polar pq1 0 s6))
(setq pq3 (polar pq2 0 s6))
(setq pq4 (polar pq3 0 s6))
(setq pq5 (polar pq4 0 s6))
(setq pq6 (polar pq5 0 s6))
(setq pq7 (polar pq6 0 s6))
(setq qq1 (polar qq1 (* 1.5 pi) (* 0.7 s6)))
(setq qq2 (polar qq1 (* 1.5 pi) s4))
(setq qq3 (polar qq2 (* 1.5 pi) s4))
(command "text" qq1 (* sss 2.0) 0 (strcat "總平均坡度= " (rtos suareax 2 2) "/" (rtos areaqx 2 2) "=" (rtos suxx 2 2) "%"))
(command "text" qq2 (* sss 2.0) 0 (strcat "總平均角度= " (rtos agareax 2 2) "/" (rtos areaqx 2 2) "=" (rtos agxx 2 2) "%%D"))
(command "text" qq3 (* sss 2.0) 0 dhtext)
(command "text" pq0 (* sss 3.0) 0 "建築技術規則第十三章平均坡度計算表:")(c:cr 7)
(command "text" pq1 (* sss 2.0) 0 "編號(no)")(c:cr 7)
(command "text" pq2 (* sss 2.0) 0 "坡度(%)")(c:cr 7)
(command "text" pq3 (* sss 2.0) 0 "坡角(%%d)")(c:cr 7)
(command "text" pq4 (* sss 2.0) 0 "交點數(N)")(c:cr 7)
(command "text" pq5 (* sss 2.0) 0 "面積(m^2)")(c:cr 7)
(command "text" pq6 (* sss 2.0) 0 "坡度比")(c:cr 7)
(command "text" pq7 (* sss 2.0) 0 "角度比")(c:cr 7)
(setq qq5 (polar qq5 (* 1.5 pi) s5))
(setq qq6 (polar qq6 (* 1.5 pi) s5))
(setq qq7 (polar qq7 (* 1.5 pi) s5))
(command "text" qq5 (* sss 2.0) 0 (rtos areaqx 2 2))(c:cr 7)
(command "text" qq6 (* sss 2.0) 0 (rtos areaqx 2 2))(c:cr 7)
(command "text" qq7 (* sss 2.0) 0 (rtos areaqx 2 2))(c:cr 7)
(setvar "textstyle" texty)
(setvar "blipmode" bbp)
(princ)
     )
     (defun c:wp ()
(prompt (if1 "\nSelect pline:" "\n選取地界線:"))
(c:listid)
 (setq sa s 1 listxy)
)
(defun c:cr (n) (command "change" "l" "" "p" "c" n ""))

(defun c:listid (/ se sn ename ee c10 x y z xy xy1 j ett et e0)
 (setq s (entsel) et (car s))
 (setq se (entget (car s)) j 0 listp '() listxy '())
 (setq sn (length se))
 (setq ename (strcase (cdr (assoc 0 se))))
 (if (= ename "LWPOLYLINE")
   (repeat sn
     (progn
(setq ee (nth j se))
(setq c10 (car ee))
(if (= 10 c10)
 (progn
   (setq x (cadr ee) y (caddr ee))
   (setq xy (list (strcat (rtos x 2 2) "," (rtos y 2 2))))
   (setq xy1 (list (list x y)))
   (setq listp (append listp xy))
   (setq listxy (append listxy xy1))
 )
)
     )
     (setq j (+ j 1))
   )
 )
 (if (= ename "POLYLINE")
   (progn
     (setq ett (entnext et))
     (while (/ = ett nil)
(setq et (entget ett))
(setq e0 (cdr (assoc 0 et)))
(if (= e0 "VERTEX")
 (progn
   (setq ee (cdr (assoc 10 et)))
   (setq x (car ee) y (cadr ee) z (caddr ee))
   (setq xy (list (strcat (rtos x 2 2) "," (rtos y 2 2) "," (rtos z 2 2))))
   (setq xy1 (list (list x y z)))
   (setq listp (append listp xy))
   (setq listxy (append listxy xy1))
 )
)
(setq ett (entnext ett))
     )
     )
 )
 (setq listn (length listp))

 (print listp)
 (print listxy)
)
(defun c:ling ()
 (setq c1 (getvar "clayer") stext (getvar "textstyle")))

(defun c:lins ()
 (setvar "clayer" c1)
 (setvar "textstyle" stext)
)
     )
   )
 )
)

(二)DCL對話框程式

ffr:dialog{
           label = "第十三章之平均坡度分析圖表";
           key = "label";
           initial_focus  = "cancel";
           :column {
             :boxed_row{
              label="圖面單位";
              :radio_button{key= "iconl";horizontal_margin=none;vertical_margin=none;label= "公分";value=1;}
              :radio_button{key= "icon2";horizontal_margin=none;vertical_margin=none;label= "公尺";}
                        }}
:boxed_column{
    :row{:edit_box{key="icon3";label= "方格尺寸=";value=25;}:text{label= "公尺";}}
    :row{:edit_box{key="icon4";label= "單位落差=";value=5;}:text{label= "公尺"; }}
                     }
:boxed_row{label= "繪圖時之色彩";
:radio_button{key= "icon5";horizontal_margin=none;vertical_margin=none;label= "無色彩";value=1;}
:radio_button{key= "icon6";horizontal_margin=none;vertical_margin=none;label= "有色彩";}
                     }
  }
  ok_cancel;
}


林小毛 在 2013-10-24, 10:44 作了第 1 次修改
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-10-24, 10:43

不好意思~小弟補充說明一下有關坡度分析的定義~

坡度分析主要是利用坵塊法依每10m或25m劃設坵塊方格,並依據方格4個邊長與等高線的交點數量來評估其代表坡度,因此LISP的目的是希望可以用程式來判斷每個方格邊長的交點數,進而計算全計畫範圍的平均坡度。

步驟說明
1.計算每個方格邊長上與等高線交點數目,總計每個方格4邊的交點數總和,代入坡度計算公式計算該坵塊的代表坡度。
2.將被坵塊方格分割的計畫範圍,分別依每個方格的代表坡度加權計算整個計畫區平均坡度。
3.輸出坡度分析計算的表格。

P.S這個LISP可能在實務使用上比較冷門,但因小弟正式從事這類型工作,LISP真的可大大提升效率,希望各位大大給予指導~感謝感謝!!!
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 shenhung 于 2013-10-24, 13:18

[討論]請問各位先進都怎麼進行偵錯呢? VG6ioMIr
主要是括號有沒對稱的問題.!! 通常我都會乖乖的對齊括號.然後將游標放在一個右括號後 .按  SHIFT+CTRL+ [   三個鍵同時按..
VLISP 就會自動找到相對應的左括號. 並反藍...!! 我都是這樣檢查..

令外 我看你很多副程式.放在主程式內. 一般還沒順利運行的時候..這樣做. 只會增加你除錯的困難.  
建議..你整個程式運行沒問題之後才這樣做.!!

我有將你LISP 程式分拆. 並在每個副程式之間.用註記分格開當段落..比較好閱讀  DCL也差不多..
請善用註記....

其他還有的方法..也期待其他朋友補充!!

這是我目前幫你看到的2個問題.
1. IF1 副程式.程式內找不到.
2.  1 為數字.  不得當變數名.
    (setq sa s 1 listxy)  就是將 listxy 設給  1  這樣不對.請再check
[討論]請問各位先進都怎麼進行偵錯呢? AZWdBiJ6

DCL  對齊後註記 大括弧.位置.
[討論]請問各位先進都怎麼進行偵錯呢? LjjJ0WYv

LISP下載
https://db.tt/wCakYzV3
DCL下載
https://db.tt/JMNh5zMQ

備用載點: https://app.box.com/s/f9yyhokxpym8my0a1f55


Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心圖文回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 Atsai 于 2013-10-28, 22:46

這是水保裏的坵塊法計算,樓主應該利用紙本直接建檔的。
例如:(setq sal (ssget "1"))
ssget應該是沒有"1"的選擇,可能是建檔時輸入錯誤,
建議可以將原始的程式碼掃描放上來,才有辦法偵錯!
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4172
威望值 : 424
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-11-02, 07:13

1.非常感謝S大大的指導,原來可以用這方式檢查括號,實在獲益良多,可否在請教一下S大大,是否有地方可以查詢或說明相關函數及指令的用法或範例呢??因為其中部分函數指令,小弟並不熟悉,著實增加偵錯的難度啊!!!另外,有關副程式,直接寫在一起或分開編輯載入後再呼叫,是否會有差異??

2.A大大您好,您說的沒錯,這是水保裡面的坡度分析,不過小弟我的功力並未到家,自己沒辦法寫這麼龐大的LISP,所以是爬了文章在網路上搜尋到一篇論文,以紙本建檔的,且因為論文的字形部分數字1與英文小寫l,實在難以辨識,再加上部分函數指令並不熟悉,可能真的建檔時輸入了很多錯誤,若真有需要,小弟可以提供在網路上搜尋到的PDF檔,再請A大大指導一下。
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 Atsai 于 2013-11-02, 12:00

其實坵塊法的計算Autocad civil 3d 2010昌漢科技的擴充模組裏面就有了,不過貴。
樓主如果只是要做水保計畫使用的話,用Lisp確實是OK的,如果有PDF掃描檔,那就比較
好辦,如果方便的話,麻煩上傳一下。
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4172
威望值 : 424
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 shenhung 于 2013-11-02, 20:24

論壇內就有LISP幫助文件,令外AUTOCAD  LISP 編輯器也有HELP.~~這些都要是很好的教材.!! 資料很多.
https://www.autocad-tw.com/t15335-topic

你所提的有關副程式,直接寫在一起或分開編輯載入後再呼叫,是否會有差異!?
以你目前貼文的LISP .因為 .有部分副程式寫在主程式內..
一般是若你有掛很多外掛的話.有可能會有相同的副程式名.會被其他外掛覆寫..
而寫在主程式內.可確保你的副程式不會被蓋掉.!!

但我自己是沒有這樣寫的.~~看人習慣.
shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-11-04, 15:54

各位先進大家好~

小弟提供所搜尋到的論文資料網址給同樣有需求的朋友自行參考與研究。http://ethesys.yuntech.edu.tw/ETD-db/ETD-search-c/view_etd?URN=etd-0821109-095452
其中說明,本電子全文僅授權使用者為學術研究之目的,進行個人非營利性質之檢索、閱讀、列印。請遵守中華民國著作權法之相關規定,切勿任意重製、散佈、改作、轉貼、播送,以免觸法。
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 Atsai 于 2013-12-03, 17:38

那本論文的程式可能有被作者隱藏部份代碼,所以就算程式碼都對也沒有辦法執行。
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4172
威望值 : 424
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-12-03, 17:51

A大您好~

的確,我後來也確實發現有函數是缺少的,所以呼叫的時候都失敗,這樣就真的頭大了,不知道該如何動手去修改....

另外,不知道有沒有其他先進對坡度分析的程式部分有研究的呢??

歡迎一起來討論一下唷!!!
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 Atsai 于 2013-12-04, 00:16



花了幾天的精力總算完成了坵塊法的坡度分析,給樓主哈一下!竊喜 
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4172
威望值 : 424
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-12-04, 14:43

哇哇~A大您真是太威了!!!這不只是哈一下而已,口水已經流下來了~

看來我得拜師學藝了!!!不知道A大有收徒弟嗎~哈哈





林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 Atsai 于 2013-12-04, 18:58

林小毛 寫到:哇哇~A大您真是太威了!!!這不只是哈一下而已,口水已經流下來了~
看來我得拜師學藝了!!!不知道A大有收徒弟嗎~哈哈
拜師不敢當,只是因為工作也有這方面的需求,而且坡度分析的工作量其實蠻大的。
若樓主想要自己寫的話,那我可以提供程式的思路給樓主自己寫寫看。
如果撰寫程式的過程有遇到問題的話,可以再討論,因為我也是一直自學摸索來的。

這個程式最麻煩的是怎麼求出基地範圍邊界那些不規則的面積,如果這個思路搞定,那
這個程式也就沒有什麼大不了的了。


下面這個程式碼不是我寫的,也不知道在那搜集來的,你可以在這個架構下擴充試試看。
====================這是分隔線============================

;
;  讀取25米平均坡度;作者:劉金城,請勿擅改!
;
(defun c:mm()
;  (command "qsave")
 (setvar "CMDECHO" 0)
;----------------------
; 輸入交點數之檔案名稱
;----------------------
(setq fw (open "lcc.txt" "w"))
;----------------------------------  
; 求出左下角與右下角之X/Y座標值
;----------------------------------  
 (setvar "osmode" 32)
 (setq p1 (getpoint "\nFirst corner: "))     ;輸入左下角座標
 (setvar "osmode" 0)
 (setq p2 (getpoint p1 "\nOther corner: "))  ;輸入右上角座標
 (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2))
;----------------------
; 設定只顯示等高線圖層
;----------------------
; (command "layer" "of" "*" "y" "")
; (command "layer" "on" "cont1" "")
 (command "layer" "on" "or1m" "")
 (ctime)
 (princ "\n")
 (princ t$)
;--------------------------  
; 將所有之等高線炸開為線段
;--------------------------
 (setq sg (ssget "c" p1 p2))
 (setq n 0)
 (setq num (sslength sg))
 (repeat num
    (setq sn1 (entget (ssname sg n)))
    (setq se1 (cdr (assoc -1 sn1)))
    (if (= (cdr (assoc 0 sn1)) "POLYLINE")
        (command "explode" se1)
    )
    (setq n (1+ n))
 )
;-----------------------------  
; 求X向及Y向之方格數
;-----------------------------  
 (setq xn (fix (/ (abs (- x1 x2)) 25)))
 (setq yn (fix (/ (abs (- y1 y2)) 25)))
;-----------------------------  
; 先執行X向,然後Y向
;-----------------------------  
 (ctime)
 (princ "\n")
 (princ t$)
 (princ "\nProgram Run(")
 (princ xn)
 (princ ",")
 (princ yn)
 (princ ")...")
 (command "undo" "m")
 (setq y y1)
 (setq yy 0)
 (repeat yn
   (princ ",")
   (princ (- yn yy))
   (setq x x1)
   (repeat xn
       (setq pt1 (list x y 0))
       (setq pt2 (polar pt1 0 25))
       (setq pt3 (polar pt2 (/ pi 2) 25))
       (setq pt4 (polar pt3 pi 25))
       (Int_Num pt1 pt2)
   (princ " " fw)
       (Int_Num pt2 pt3)
   (princ " " fw)
       (Int_Num pt3 pt4)
   (princ " " fw)
       (Int_Num pt4 pt1)
       (princ "\n" fw)
       (setq x (+ 25 x))
     );end repeat xn
;-----------------------------  
; 結束X向,執行下一Y向
;-----------------------------  
 (ctime)
 (princ "\n")
 (princ t$)
     (setq y (+ 25 y))
     (setq yy (1+ yy))
   );end repeat yn
   (princ)
;-----------------------------  
; 結束Y向,回復原來狀況!
;-----------------------------  
 (ctime)
 (princ "\n")
 (princ t$)
 (setvar "CMDECHO" 0)
 (command "undo" "b" "y")
;  (command "undo" "e")
;  (command "undo" "2")
 (princ "\nOK1!")
 (close fw)
;--------------------------------------
; 設定只顯示等高線圖層,並建立格線圖層
;--------------------------------------
;  (command "layer" "of" "*" "y" "")
;  (command "layer" "on" "cont1" "")
 (command "layer" "on" "or5m" "")
 (command "layer" "m" "25m_grid" "c" "4" "" "")
 (setq x3 (+ x1 (* xn 25)) y3 (+ y1 (* yn 25)))
;-----------------------------  
; 劃垂直線
;-----------------------------  
 (setvar "osmode" 0)
 (setq i 0)
 (repeat (1+ xn)
    (command "line" (list (+ x1 (* 25 i)) y1 0) (list (+ x1 (* 25 i)) y3 0) "")
    (setq i (1+ i))
 )
;-----------------------------  
; 劃水平線
;-----------------------------  
 (setq i 0)
 (repeat (1+ yn)
    (command "line" (list x1 (+ y1 (* 25 i) 0)) (list x3 (+ y1 (* 25 i)) 0) "")
    (setq i (1+ i))
 )
;----------------------------------  
; 依X向再Y向計算點數,坡度及等級
;----------------------------------  
 (ctime)
 (princ "\n")
 (princ t$)
 (setq fr (open "lcc.txt" "r"))
;----------------------------------------------------------
; 建立文字圖層及字型
 (command "layer" "m" "lcc" "")
;  (command "style" "italicc" "italicc" "0" "" "" "" "" "")
;----------------------------------------------------------
 (setq y y1)
 (setq iy 1)
 (repeat yn
   (setq x x1)
   (setq ix 1)
   (repeat xn
      (setq a (read-line fr))
      (setq n1 (read a) n1$ (itoa n1))
      (setq b (substr a (+ 2 (strlen n1$))))
      (setq n2 (read b) n2$ (itoa n2))
      (setq c (substr b (+ 2 (strlen n2$))))
      (setq n3 (read c) n3$ (itoa n3))
      (setq d (substr c (+ 2 (strlen n3$))))
      (setq n4 (read d))
      (setq Total (+ n1 n2 n3 n4) Total$ (itoa Total))
      (setq pt (list (+ x 12.5) (+ y 12.5) 0))
;-----------------------------  
;  寫入格子四邊之交點數
;-----------------------------  
         (setq pt1 (list (+ x 12.5) y 0))
         (setq pt2 (list (+ x 25) (+ y 12.5) 0))
         (setq pt3 (list (+ x 12.5) (+ y 25) 0))
         (setq pt4 (list x (+ y 12.5) 0))
         (if (= iy 1) (command "text" "j" "mc" pt1 "4" "" n1$))
         (command "text" "j" "mc" pt2 "4" "" n2$)
         (command "text" "j" "mc" pt3 "4" "" n3$)
         (if (= ix 1) (command "text" "j" "mc" pt4 "4" "" n4$))
;---------------------------  
;  寫入總交點數、坡度及等級
;---------------------------  
      (if (/= Total 0)
       (progn
         (setq s (* 0.5 pi Total) s$ (rtos s 2 2))
         (slope s)
       (command "text" "j" "tc" (polar pt (/ pi 2) -4) "3" "" (strcat "No=" Total$))

       (command "text" "j" "mc" pt "3" "" (strcat s$ "%"))
;        (command "text" "j" "mc" pt "5" "" sp)
;
   );end progn
       (command "text" "j" "mc" pt "5" "" "0")
      );end if
      (setq x  (+ x 25) ix (1+ ix))
   );end repeat xn
      (setq y (+ y 25) iy (1+ iy))

 )
;------------------------
; 結束程式並打開所有圖層
;------------------------
 (ctime)
 (princ "\n")
 (princ t$)
 (prin1)
 (command "layer" "on" "*" "")
 (princ "\nOK2!")
 (close fr)
)
;----------------------------------------------
; 計算交點之副程式
;----------------------------------------------
(defun Int_Num (pt1 pt2)
   (setq sg (ssget "f" (list pt1 pt2)))
 (if sg (progn
          (setq  num1 (sslength sg))  
        );end progn
     (progn
       (setq  num1 0)  
     )
 );end if
          (princ num1 fw)                 ;write to lcc.txt
)
;----------------------------------------------
; 計算坡度等級之副程式
;----------------------------------------------
(defun slope (s)
 (cond
    ((<= s 5) (setq sp "1"))
    ((<= s 15) (setq sp "2"))
    ((<= s 30) (setq sp "3"))
    ((<= s 40) (setq sp "4"))
    ((<= s 55) (setq sp "5"))
    ((<= s 70) (setq sp "6"))
    ((<= s 85) (setq sp "7"))
    ((<= s 100) (setq sp "8"))
    ((> s 100)  (setq sp "9"))
    (t nil)
 )
)
;----------------------------------------------
; 計算時間之副程式
;----------------------------------------------
(defun ctime ()
 (setq hh (substr (rtos (getvar "cdate") 2 6) 10 2))
 (setq mm (substr (rtos (getvar "cdate") 2 6) 12 2))
 (setq ss (substr (rtos (getvar "cdate") 2 6) 14 2))
 (setq t$ (strcat hh ":" mm ":" ss))
)
Atsai
Atsai
中級會員
中級會員

文章總數 : 137
年齡 : 45
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 4172
威望值 : 424
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

[討論]請問各位先進都怎麼進行偵錯呢? Empty 回復: [討論]請問各位先進都怎麼進行偵錯呢?

發表 由 林小毛 于 2013-12-04, 19:07

非常感謝A大的友情贊助,有一個能跑的架構,後續再研究擴充,真的是會有動力許多,等小弟這批年底設計到一段落,再來與A大討論討論!!!

超級感謝!!!
林小毛
林小毛
一般會員
一般會員

文章總數 : 30
年齡 : 39
來自 : 高雄市
職業 : 工程師
愛好 : 旅遊、看電影、喝咖啡
個性 : 認真負責
使用年資 : 11年
使用版本 : 2006 2010 2012
經驗值 : 3984
威望值 : 6
注冊日期 : 2010-04-01
男 雙魚座 雞

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]請問各位先進都怎麼進行偵錯呢? Uos15010 [討論]請問各位先進都怎麼進行偵錯呢? BPl3tjj [討論]請問各位先進都怎麼進行偵錯呢? Ziao1510 [討論]請問各位先進都怎麼進行偵錯呢? Oo-2-110 [討論]請問各位先進都怎麼進行偵錯呢? Oooo-110 [討論]請問各位先進都怎麼進行偵錯呢? 2020-211