(defun c:ad() ;;;;程序選擇可以求幾個圓的面積,并在圓框內寫出面積大小。(defun *error* (msg)(print msg)(setq ccxx (strcat "求面積失敗!!!第" i0 "個面積求取不成功。")); ccxx:出錯信息(alert ccxx)(princ))(setvar "osmode" 0)(setvar "cmdecho" 0)(while (/= 0 (getvar "cmdactive")) (command ""))(setq yorn "" i 1 i0 "1")(while (eq yorn "")(setq pt (getpoint "選取點: \n"));;;;以下在點圓中取一個點,并獲取面積(command "bpoly" pt "") (setq en (entlast))(command "area" "o" en)(setq mj (getvar "area"))(setq mj (rtos mj))(command "text" "j" "mc" pt "0" mj "");;;;獲取面積成功并寫出(setq i (1+ i) i0 (itoa i))(setq yorn (getstring (strcat "添加第" i0 "個點?回車確認或輸入n后回車中止選點:")))) )屏幕上有20個圓,我在圓內點1個點,就會在點的位置顯示圓的面積,然后繼續點下一個點。問題是,如果我有一個點點在圓外,程序的(command "bpoly" pt "") 語句就會出錯,然后就跳出來了,我想的是如果能夠不跳出來繼續執行下一個圓就好了,請問怎么辦
1 回答

烙印99
TA貢獻1829條經驗 獲得超13個贊
;圓具有面積屬性,沒有必要生成一個邊界再來求面積
;選取圓后自動標注面積(可單選、多選或框選)
(defun c:bzymj()
(vl-load-com)
(setq cm (getvar "cmdecho") os (getvar "osmode"))
(setvar "cmdecho" 0) (setvar "osmode" 0)
(command "_undo" "be")
(while (progn
(princ "\n請選取圓:")
(setq ssa (ssget '((0 . "circle"))))
)
(setq i 0)
(repeat (sslength ssa)
(setq ent (ssname ssa i)
obj (vlax-ename->vla-object ent)
pt (vlax-get obj "Center")
mj (rtos (vlax-get obj "area") 2 3)
Hig (* (vlax-get obj "diameter") 0.618)
i (1+ i)
)
(command "_text" "j" "mc" pt Hig 0 mj)
)
)
(command "_undo" "e")
(setvar "osmode" os) (setvar "cmdecho" cm)
(princ)
)
- 1 回答
- 0 關注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消