- UID
- 215173
- 积分
- 411
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-1-29
- 最后登录
- 1970-1-1
|
发表于 2005-4-8 08:59:53
|
显示全部楼层
哦!知道是什么情况了,,我没有经过测试,这台机器是主机..不
是我的电脑...所以不好测试..但你所说的情况我看了一下..是有点问题
你首先把(setq ptlist (CONS (LIST PT1 PT2) ptlist))改为
(setq ptlist (append ptlist (list (list pt1 pt2))))这样就改变了删除的次序了
因为前面用了CONS所以每次加点都会加在列表的最前面..其余改良等我看完你的主程序再说吧....
已经大概看了一下因为你那个子程序中有(EXIT)所以
执行了一遍就会被强行退出..给你改了一下
[php]
(defun c:prn( / ok cmde osmo cmdd s i na3 na4 na5 s1 p1 scl p2 notes fi s3 s4 sb)
(princ "歡迎進入列印系統")
(setvar "cmdecho" 0)
(command "ucsicon" "n")
(command "ucsicon" "on")
(command "ucs" "world")
(initget " 1 2 3 4 ")
(setq ok(getkword "\n[對角列印A4按'1'/對角列印A3按'2'/列印A3按'3'/列印A4按'4']<空格或回車印所有A4>:"))
(cond ((= "1" ok)(progn(setq s nil)(pr1)))
((= "2" ok)(progn(setq s nil)(pr2)))
((= "3" ok)(progn(setq s nil)(pr3)))
((= "4" ok)
(setq s(ssget '(
(0 . "INSERT")
(-4 . "<or")
(2 . "A3")(2 . "A4")(2 . "BOM1")(2 . "bomx")
(-4 . "or>"))))
)
(t
(SETQ s(SSGET "X"'(
(0 . "INSERT")
(-4 . "<or")
(2 . "A3")(2 . "A4")(2 . "BOM1")(2 . "bomx")
(-4 . "or>"))))
)
);;;;此處你用IF條件判斷是有問題的..也就是你所說的重復列印兩次的問題所在
;;;;因為你前面用IF判斷了OK如果是"1"或"2" "3"那么當遇到你所寫的如果OK不
;;;;為"4"的話程序將會把S建立不為"4"情況的選集等于說﹐你前面調用(pr1)執行
;;;;了一次打印命令。然后S選集又存在的情況下進入你下面的程序又執行了一次
;;;打印命令改為COND判斷則不會存在這個問題。因為COND只會取得其中的一種情況
;;;改過候你可以把后面子程序中的(exit)去掉了...
(command "zoom" "e" "ucs" "world")
(setq s3 (ssadd) s33 (ssadd) s333 (ssadd) s4 (ssadd) sb (ssadd) i 0)
(if s
(progn
(while (< i (sslength s))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(= 0 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s3))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(< 4.7 (cdr(assoc 50 (entget (ssname s i)))))
(> 4.8 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s33))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(< 1.57 (cdr(assoc 50 (entget (ssname s i)))))
(> 1.6 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s333))
(if(= "A4" (cdr(assoc 2 (entget (ssname s i)))))
(ssadd (ssname s i) s4))
(if(OR(= "BOM1" (cdr(assoc 2 (entget (ssname s i)))))(= "bomx" (cdr(assoc 2 (entget (ssname s i))))))
(ssadd (ssname s i) sb))
(setq i (+ i 1)))
(setq i 0 na3 0)
(while (< i (sslength s3))
(setq s1(ssname s3 i))
(setq na3(+ 1 na3))
(setq p1(cdr(assoc 10 (entget s1))))
(setq scl(cdr(assoc 41 (entget s1))))
(setq p2(list (+(* scl 289)(car p1))(+(* scl 200)(cadr p1))))
(command "-plot" "y" "model" "HP5100" "A4" "m" "l" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb"
"y" "n" "n" "n" "y")
(setq i(+ i 1)))
(setq i 0 na33 0)
(while (< i (sslength s33))
(setq s11(ssname s33 i))
(setq na33(+ 1 na33))
(setq p1(cdr(assoc 10 (entget s11))))
(setq scl(-(cdr(assoc 41 (entget s11)))))
(setq p2(list (-(-(* scl 200))(-(car p1)))(+(* scl 289)(cadr p1))))
(command "-plot" "y" "model" "HP5100" "A4" "m" "p" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb"
"y" "n" "n" "n" "y")
(setq i(+ i 1)))
(setq i 0 na333 0)
(while (< i (sslength s333))
(setq s111(ssname s333 i))
(setq na333(+ 1 na333))
(setq p1(cdr(assoc 10 (entget s111))))
(setq scl(-(cdr(assoc 41 (entget s111)))))
(setq p2(list (+(* scl 200)(car p1))(-(-(* scl 289)(cadr p1)))))
(command "-plot" "y" "model" "HP5100" "A4" "m" "p" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb"
"y" "n" "n" "n" "y")
(setq i(+ i 1)))
(setq notes(strcat "列印完畢! 列印 'A4-0' = "(itoa na3)" 張, 'A4-90'= "(itoa na33)" 張,'A4-180'= "(itoa na333)" 張!!!!!"))
(print notes)
)
)
(setvar "osmode" 39)
(setvar "cmddia" 1)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun pr3(/ s a n m j kk lname li p0 p1 p2 x y xx yy notess)
(princ "\n選擇需列印的A3的圖紙!")
(setq s(ssget '(
(0 . "INSERT")
(-4 . "<or")
(2 . "A3")
(-4 . "or>"))))
(setq s3 (ssadd) s33 (ssadd) s333 (ssadd) i 0)
(if s
(while (< i (sslength s))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(= 0 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s3))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(< 4.7 (cdr(assoc 50 (entget (ssname s i)))))
(> 4.8 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s33))
(if (and(= "A3" (cdr(assoc 2 (entget (ssname s i)))))
(< 1.57 (cdr(assoc 50 (entget (ssname s i)))))
(> 1.6 (cdr(assoc 50 (entget (ssname s i))))))
(ssadd (ssname s i) s333))
(setq i (+ i 1)))
)
(setq qty1 0 i 0)
(while (< i (sslength s3))
(setq li (entget (ssname s3 i)))
(setq qty1 (+ qty1 1))
(setq p1 (assoc '10 li))
(setq p0 ( list (nth 1 p1) (nth 2 p1)))
(setq xx (cdr (assoc '41 li)))
(setq yy (cdr (assoc '42 li)))
(setq x (* xx 289))
(setq y (* yy 200))
(setq p1 (polar p0 (/ pi 2) y))
(setq p2 (polar p0 0 x))
(command "-plot" "y" "model" "HP5100" "A3" "m" "L" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(setq i (+ i 1 )))
(setq qty2 0 i 0)
(while (< i (sslength s33))
(setq li (entget (ssname s33 i)))
(setq qty2 (+ qty2 1))
(setq p1 (assoc '10 li))
(setq p0 ( list (nth 1 p1) (nth 2 p1)))
(setq xx (cdr (assoc '41 li)))
(setq yy (cdr (assoc '42 li)))
(setq x (* xx 289))
(setq y (* yy 200))
(setq p1 (polar p0 (/ pi 2) y))
(setq p2 (polar p0 0 x))
(command "-plot" "y" "model" "HP5100" "A3" "m" "p" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(setq i (+ i 1 )))
(setq qty3 0 i 0)
(while (< i (sslength s333))
(setq li (entget (ssname s333 i)))
(setq qty3 (+ qty3 1))
(setq p1 (assoc '10 li))
(setq p0 ( list (nth 1 p1) (nth 2 p1)))
(setq xx (cdr (assoc '41 li)))
(setq yy (cdr (assoc '42 li)))
(setq x (* xx 289))
(setq y (* yy 200))
(setq p1 (polar p0 (/ pi 2) y))
(setq p2 (polar p0 0 x))
(command "-plot" "y" "model" "HP5100" "A3" "m" "p" "y" "w" p1 p2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(setq i (+ i 1 )))
(setq notes(strcat "列印完畢! 列印 'A3-0' = "(rtos qty1 2 0)" 張, 'A3-90'= "(rtos qty2 2 0)" 張,'A3-180'= "(rtos qty3 2 0)" 張!!!!!"))
(print notes)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun pr2 (/ pt1 pt2 pt1x pt1y pt2x pt2y)
(princ "\n執行對角列印A3圖紙---無圖框時使用---")
(setvar "cmdecho" 0)
(setvar "osmode" 39)
(setq pt1 (getpoint "輸入角點:"))
(setq pt2 (getcorner pt1 "\n輸入另一角點"))
(setq pt1x (nth 0 pt1)
pt1y (nth 1 pt1)
pt2x (nth 0 pt2)
pt2y (nth 1 pt2)
)
(if (< (abs (- pt1x pt2x)) (abs (- pt1y pt2y)))
(progn
(command "-plot" "y" "model" "HP5100" "A3" "m" "p" "y" "w" pt1 pt2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(princ "90度列印OK"))
(progn
(command "-plot" "y" "model" "HP5100" "A3" "m" "L" "y" "w" pt1 pt2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(princ "0度列印OK")
))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun pr1(/ pt1 pt2 ptlist delt key)
(setvar "cmdecho" 0)
(setvar "osmode" 39)
(setq ptlist NIL)
(setq pt1 (getpoint "\n輸入角點:"))
(setq pt2 (getcorner pt1 "\n輸入另一角點:"))
(setq ptlist (cons (list pt1 pt2) ptlist))
(setq delt t)
(while delt
(initget "A C Y")
(setq key (getkword "\n[繼續選擇'A'/取消上次選擇'C'/開始列印'Y'] <回車或空格開始列印'Y'>:"))
(if (= key nil) (setq key "Y"))
(cond ((= key "A") (progn (setq pt1 (getpoint "輸入角點:"))
(setq pt2 (getcorner pt1 "\n輸入另一角點:"))
(setq delt t)
(setq ptlist (append ptlist (list (list pt1 pt2))))
))
((= key "C") (if (= nil ptlist) (progn (alert"\n沒有選擇!") (setq delt NIL))
(PROGN(setq ptlist (vl-remove (last ptlist) ptlist))
(setq delt t)
)))
((= key "Y") (setq delt nil))
)
)
(SETVAR "OSMODE" 0)
(if (= nil ptlist) (exit))
(foreach item ptlist (pr11 (car item) (cadr item)))
(prin1)
)
(defun pr11 (pt1 pt2 / pt1x pt1y pt2x pt2y)
(setq pt1x (nth 0 pt1)
pt1y (nth 1 pt1)
pt2x (nth 0 pt2)
pt2y (nth 1 pt2)
)
(if (< (abs (- pt1x pt2x)) (abs (- pt1y pt2y)))
(progn
(command "-plot" "y" "model" "HP5100" "A4" "m" "p" "y" "w" pt1 pt2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(princ "90度列印OK"))
(progn
(command "-plot" "y" "model" "HP5100" "A4" "m" "L" "y" "w" pt1 pt2 "fit" "c" "y" "acad.ctb" "y" "n" "n" "n" "y")
(princ "0度列印OK")
))
(princ)
)
[/php]
去掉(EXIT)后一身轻松了吧?呵呵...由于比较忙
我只是找出了问题所在改了一下,未测试..不过
也就那个意思了 |
|