本帖最后由 作者 于 2010-10-9 19:50:19 编辑
如下圖,如果我要把物件,從a點鏡射到b點,那不是還要在他倆中間做出一條鏡射線等繁鎖的手續
因為我在工作上常會遇到這種情況,讓我覺得很麻煩,所以今天就寫了一段程式來簡化鏡的過程。
我自己寫的這段程式中,人工干涉的成份太多了。除了一開始點選兩個要鏡射的端點之外,還要在過程中點選一次鏡射線。最近當整個程式結束後,畫面中還會留下一條多餘的直線。還請各位請教一下,我該如何把這段程式寫得更好。
另一個問題
我在這段程式中,有用到副程式。一般來說,副程式不是要加入(自變量/內部變量)嗎,來讓程式更嚴僅。
原本程式可以跑得好好的,但是當我一把自變量和內部變量都寫進去的時候,程式就躺了,不知道是哪邊錯了,請指教一下 。原本我自變量跟內部變量的地方是這樣寫的(p1 p2 / p1x p1y p2x p2y px py mpt linelen)
以下是程式-
- (defun C:m1()
- (setq pic1 (cadr (entsel"\n選取圖塊")));;y物件才可供命令使用
- (setq p1(getpoint"\n基點<退出>"))
- (setq p2(getpoint"\n基點<退出>" p1))
- (mid)
- (command "line" p1 p2 "")
- (setq picline (car(entsel"\n取選鏡射線")));;建立x物件
- (command "ROTATE" picline "" mpt 90);;旋轉x物件(直線)
- (setq endp (cdr(assoc 10 (entget picline))));;取得起點座標
- (command "mirror" pic1 "" mpt endp "N");;執行鏡命令
- (prin1)
- )
- (defun mid()
- (setq p1x(car p1))
- (setq p1y(cadr p1))
- (setq p2x(car p2))
- (setq p2y(cadr p2))
- (setq px(/ (+ p1x p2x) 2))
- (setq py(/ (+ p1y p2y) 2))
- (setq mpt(list px py))
- (setq linelen (sqrt(+(expt (- p1x p2x) 2) (expt (- p1y p2y) 2))))
- (princ"\n兩點間的長度= ")
- (princ linelen)
- )
|