修剪出错
本帖最后由 Jack_PC 于 2011-7-17 20:44 编辑请各位高手帮我看看下面的修剪测试程序,我在2004中测试通过,但在2010中测试有时会出错,自己发现出错原因是我以自己最快的速度连续指定点,就会出错, 但是在2004中点多快都没有问题,不知是否CAD2010的Bug
(defun c:test()
(setvar "osmode" 0)
(while
(setq pt1 (getpoint "\n请指定第一点:"))
(setq ln01 (polar pt1 (+ 0 pi) 10))
(command "line" pt1 ln01 "")
(setq rec1 (entlast))
(setq mid_pt (polar pt1 (+ 0 pi) 5))
(setq ln02 (polar mid_pt (+ 0 (* 0.5 pi)) 5))
(setq ln03 (polar mid_pt (+ 0 (* 1.5 pi)) 5))
(command "line" ln02 ln03 "")
(setq rec2 (entlast))
(command "trim" rec1 "" "e" "n" ln02 "")
(command "trim" rec2 "" "e" "n" ln01 "")
)
)
在ZOOM比例正常情况下,没有问题, 但要视图缩小后就有问题
因视图缩小后Trim修剪点不准了,要百分百准确的话,考虑有其它方式,或在修剪前加入放大要修剪图元的程式如下:
(defun c:test()
(setvar "osmode" 0)
(while
(setq pt1 (getpoint "\n请指定第一点:"))
(setq ln01 (polar pt1 (+ 0 pi) 10))
(command "line" pt1 ln01 "")
(setq rec1 (entlast))
(setq mid_pt (polar pt1 (+ 0 pi) 5))
(setq ln02 (polar mid_pt (+ 0 (* 0.5 pi)) 5))
(setq ln03 (polar mid_pt (+ 0 (* 1.5 pi)) 5))
(command "line" ln02 ln03 "")
(setq rec2 (entlast))
(command ".zoom" "ob" REC1 REC2 "")
(command "trim" rec1 "" "e" "n" ln02 "")
(command "trim" rec2 "" "e" "n" ln01 "")
(command ".zoom" "P")
)
)
(defun c:test ()
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setvar "edgemode" 0)
(while
(setq pt1 (getpoint "\n请指定第一点:"))
(setq ln01 (polar pt1 pi 10))
(command "line" pt1 ln01 "")
(setq rec1 (entlast))
(setq mid_pt (polar pt1 pi 5))
(setq ln02 (polar mid_pt (* 0.5 pi) 5))
(setq ln03 (polar mid_pt (* 1.5 pi) 5))
(command "line" ln02 ln03 "")
(setq rec2 (entlast))
(command "trim" rec1 ""(list rec2 ln02) "")
(command "trim" rec2 ""(list rec1 ln01) "")
)
(setvar "osmode" os )
(princ)
)
ljpnb 发表于 2011-7-17 21:05 static/image/common/back.gif
(command "trim" rec1 ""(list rec2 ln02) "")
(list rec2 ln02)---trim还可以这样用啊,神了
请教下,还有哪些命令可以这样子有呢的,这个表该怎么理解呢? 祥子 发表于 2011-7-17 20:58 static/image/common/back.gif
在ZOOM比例正常情况下,没有问题, 但要视图缩小后就有问题
因视图缩小后Trim修剪点不准了,要百分百准确的 ...
谢谢,我按放大了要修剪的图园,在2010中还是不能通过 我在2008没有问题,不知是不是2010中的修剪命令有变更,那楼主再用命令在命令行测试下了
用下3楼的,他的那更好用些, 本帖最后由 Jack_PC 于 2011-7-17 22:06 编辑
ljpnb 发表于 2011-7-17 21:05 http://bbs.mjtd.com/static/image/common/back.gif
不知是什么原因,我在2004中测试是可以通过,但是在2010中就是通不过,请帮我看看
;;框选矩形倒圆角
(defun c:test (/ ang c1 c2 c3 c4 c5 c6 c7 c8 ct_d mid_pt p_dis pt1 pt2
rad1 rad2 rad3 rad4 rec1 rec2 rec3 rec4 t1 t2 t3 t4 t5
t6 t7 t8 trimx01 trimx02 trimx03 trimx04 trp1 trp2 trp3
trp4 trp5 trp6 trp7 trp8 x01 x02 x03 x04 x1 x2 x3 x4
xdis xlen_p1 y01 y02 y1 y2 ydis ylen_p1
)
(setvar "cmdecho" 0)
(setvar "edgemode" 0)
(setq pt1 (getpoint "\n请指定第一角点:"))
(setq pt2 (getcorner pt1 "\n请指定对角点:"))
(setq p_dis (distance pt1 pt2))
(setq ang (angle pt1 pt2))
(setvar "osmode" 0)
(setq ct_d 3)
;;矩形中点
(setq mid_pt (polar pt1 ang (* p_dis 0.5)))
;;求xy单边长度
(setq xlen_p1 (list (car mid_pt) (cadr pt1)))
(setq ylen_p1 (list (car pt1) (cadr mid_pt)))
(setq xdis (distance pt1 xlen_p1))
(setq ydis (distance pt1 ylen_p1))
;;求矩形四个角点
(setq y1 (polar mid_pt (+ 0 (* 0.5 pi)) ydis))
(setq x1 (polar y1 0 xdis))
(setq x2 (polar y1 (+ 0 pi) xdis))
(setq y2 (polar mid_pt (+ 0 (* 1.5 pi)) ydis))
(setq x3 (polar y2 0 xdis))
(setq x4 (polar y2 (+ 0 pi) xdis))
(command "line" x1 x2 "")
(setq rec1 (entlast))
(command "line" x2 x4 "")
(setq rec2 (entlast))
(command "line" x4 x3 "")
(setq rec3 (entlast))
(command "line" x3 x1 "")
(setq rec4 (entlast))
;;求矩形四个角点避空圆中心点
(setq y01 (polar mid_pt (+ 0 (* 0.5 pi)) (- ydis (* ct_d 0.6))))
(setq x01 (polar y01 0 (- xdis (* ct_d 0.6))))
(setq x02 (polar y01 (+ 0 pi) (- xdis (* ct_d 0.6))))
(setq y02 (polar mid_pt (+ 0 (* 1.5 pi)) (- ydis (* ct_d 0.6))))
(setq x03 (polar y02 0 (- xdis (* ct_d 0.6))))
(setq x04 (polar y02 (+ 0 pi) (- xdis (* ct_d 0.6))))
;;求矩形四个角点修剪点
(setq trimx01 (polar x01 (+ 0 pi) ct_d))
(setq trimx02 (polar x02 0 ct_d))
(setq trimx03 (polar x03 (+ 0 pi) ct_d))
(setq trimx04 (polar x04 0 ct_d))
;;计算四角点
(setq t1 (polar x1 0 (* ct_d 1.8)))
(setq t2 (polar t1 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq c1 (polar x01 (+ 0 pi) (* ct_d 1.8)))
(setq c2 (polar c1 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq t3 (polar x2 (+ 0 pi) (* ct_d 1.8)))
(setq t4 (polar t3 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq c3 (polar x02 0 (* ct_d 1.8)))
(setq c4 (polar c3 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq t5 (polar x4 (+ 0 pi) (* ct_d 1.8)))
(setq t6 (polar t5 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq c5 (polar x04 0 (* ct_d 1.8)))
(setq c6 (polar c5 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq t7 (polar x3 0 (* ct_d 1.8)))
(setq t8 (polar t7 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq c7 (polar x03 (+ 0 pi) (* ct_d 1.8)))
(setq c8 (polar c7 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
;;开始四角的倒圆角
(command "zoom" "w" t2 t6)
(command "fillet" "t" "t" "r" ct_d)
(command "fillet" rec1 rec2)
(setq rad1 (entlast))
(command "fillet" rec2 rec3)
(setq rad2 (entlast))
(command "fillet" rec3 rec4)
(setq rad3 (entlast))
(command "fillet" rec4 rec1)
(setq rad4 (entlast))
(command "zoom" "p")
;;开始按四角的倒圆角来修剪
(command ".zoom" "w" c4 t4)
(setq trp1 (polar x2 0 (* ct_d 0.25)))
(command "trim" rad1 "" "e" "n" trp1 "")
(setq trp2 (polar x2 (+ 0 (* 1.5 pi)) (* ct_d 0.25)))
(command "trim" rad1 "" "e" "n" trp2 "")
(command ".zoom" "p")
(command ".zoom" "w" c6 t6)
(setq trp3 (polar x4 (+ 0 (* 0.5 pi)) (* ct_d 0.25)))
(command "trim" rad2 "" "e" "n" trp3 "")
(setq trp4 (polar x4 0 (* ct_d 0.25)))
(command "trim" rad2 "" "e" "n" trp4 "")
(command ".zoom" "p")
(command".zoom""w" c8 t8)
(setq trp5 (polar x3 (+ 0 pi) (* ct_d 0.25)))
(command "trim" rad3 "" "e" "n" trp5 "")
(setq trp6 (polar x3 (+ 0 (* 0.5 pi)) (* ct_d 0.25)))
(command "trim" rad3 "" "e" "n" trp6 "")
(command".zoom""p")
(command ".zoom" "w" c2 t2)
(setq trp7 (polar x1 (+ 0 pi) (* ct_d 0.25)))
(command "trim" rad4 "" "e" "n" trp7 "")
(setq trp8 (polar x1 (+ 0 (* 1.5 pi)) (* ct_d 0.25)))
(command "trim" rad4 "" "e" "n" trp8 "")
(command "zoom" "p")
;;恢复倒圆角为修剪模式
(command "fillet" "t" "t" "r" (+ ct_d 0.5))
;;删除倒圆角用的矩形
(command "ERASE" rec1 rec2 rec3 rec4 "")
(setvar "osmode" 1)
(setvar "cmdecho" 1)
);end defun 祥子 发表于 2011-7-17 22:04 static/image/common/back.gif
我在2008没有问题,不知是不是2010中的修剪命令有变更,那楼主再用命令在命令行测试下了
用下3楼的,他的那更 ...
你能帮我看楼下刚贴的全部程序吗? ;;框选矩形倒圆角
(defun c:test (/ ang c1 c2 c3 c4 c5 c6 c7 c8 ct_d mid_pt p_dis pt1 pt2
rad1 rad2 rad3 rad4 rec1 rec2 rec3 rec4 t1 t2 t3 t4 t5
t6 t7 t8 trimx01 trimx02 trimx03 trimx04 trp1 trp2 trp3
trp4 trp5 trp6 trp7 trp8 x01 x02 x03 x04 x1 x2 x3 x4
xdis xlen_p1 y01 y02 y1 y2 ydis ylen_p1
)
(setvar "cmdecho" 1)
(setvar "edgemode" 0)
(setq pt1 (getpoint "\n请指定第一角点:"))
(setq pt2 (getcorner pt1 "\n请指定对角点:"))
(setq p_dis (distance pt1 pt2))
(setq ang (angle pt1 pt2))
(setvar "osmode" 0)
(setq ct_d 3)
;;矩形中点
(setq mid_pt (polar pt1 ang (* p_dis 0.5)))
;;求xy单边长度
(setq xlen_p1 (list (car mid_pt) (cadr pt1)))
(setq ylen_p1 (list (car pt1) (cadr mid_pt)))
(setq xdis (distance pt1 xlen_p1))
(setq ydis (distance pt1 ylen_p1))
;;求矩形四个角点
(setq y1 (polar mid_pt (+ 0 (* 0.5 pi)) ydis))
(setq x1 (polar y1 0 xdis))
(setq x2 (polar y1 (+ 0 pi) xdis))
(setq y2 (polar mid_pt (+ 0 (* 1.5 pi)) ydis))
(setq x3 (polar y2 0 xdis))
(setq x4 (polar y2 (+ 0 pi) xdis))
(command "line" x1 x2 "")
(setq rec1 (entlast))
(command "line" x2 x4 "")
(setq rec2 (entlast))
(command "line" x4 x3 "")
(setq rec3 (entlast))
(command "line" x3 x1 "")
(setq rec4 (entlast))
;;求矩形四个角点避空圆中心点
(setq y01 (polar mid_pt (+ 0 (* 0.5 pi)) (- ydis (* ct_d 0.6))))
(setq x01 (polar y01 0 (- xdis (* ct_d 0.6))))
(setq x02 (polar y01 (+ 0 pi) (- xdis (* ct_d 0.6))))
(setq y02 (polar mid_pt (+ 0 (* 1.5 pi)) (- ydis (* ct_d 0.6))))
(setq x03 (polar y02 0 (- xdis (* ct_d 0.6))))
(setq x04 (polar y02 (+ 0 pi) (- xdis (* ct_d 0.6))))
;;求矩形四个角点修剪点
(setq trimx01 (polar x01 (+ 0 pi) ct_d))
(setq trimx02 (polar x02 0 ct_d))
(setq trimx03 (polar x03 (+ 0 pi) ct_d))
(setq trimx04 (polar x04 0 ct_d))
;;计算四角点
(setq t1 (polar x1 0 (* ct_d 1.8)))
(setq t2 (polar t1 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq c1 (polar x01 (+ 0 pi) (* ct_d 1.8)))
(setq c2 (polar c1 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq t3 (polar x2 (+ 0 pi) (* ct_d 1.8)))
(setq t4 (polar t3 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq c3 (polar x02 0 (* ct_d 1.8)))
(setq c4 (polar c3 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq t5 (polar x4 (+ 0 pi) (* ct_d 1.8)))
(setq t6 (polar t5 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq c5 (polar x04 0 (* ct_d 1.8)))
(setq c6 (polar c5 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
(setq t7 (polar x3 0 (* ct_d 1.8)))
(setq t8 (polar t7 (+ 0 (* 1.5 pi)) (* ct_d 1.8)))
(setq c7 (polar x03 (+ 0 pi) (* ct_d 1.8)))
(setq c8 (polar c7 (+ 0 (* 0.5 pi)) (* ct_d 1.8)))
;;开始四角的倒圆角
(command "zoom" "w" t2 t6)
(command "fillet" "t" "t" "r" ct_d)
(command "fillet" rec1 rec2)
(setq rad1 (entlast))
(command "fillet" rec2 rec3)
(setq rad2 (entlast))
(command "fillet" rec3 rec4)
(setq rad3 (entlast))
(command "fillet" rec4 rec1)
(setq rad4 (entlast))
(command "zoom" "p")
;;开始按四角的倒圆角来修剪
(command ".zoom" "w" c4 t4)
(setq trp1 (polar x2 0 (* ct_d 0.25)))
(command "trim" rad1 "" "e" "n" trp1 "") ;;;这行开始出错,因为没有可修剪的边了
(setq trp2 (polar x2 (+ 0 (* 1.5 pi)) (* ct_d 0.25)))
(command "trim" rad1 "" "e" "n" trp2 "")
(command ".zoom" "p")
(command ".zoom" "w" c6 t6)
(setq trp3 (polar x4 (+ 0 (* 0.5 pi)) (* ct_d 0.25)))
(command "trim" rad2 "" "e" "n" trp3 "")
(setq trp4 (polar x4 0 (* ct_d 0.25)))
(command "trim" rad2 "" "e" "n" trp4 "")
(command ".zoom" "p")
(command".zoom""w" c8 t8)
(setq trp5 (polar x3 (+ 0 pi) (* ct_d 0.25)))
(command "trim" rad3 "" "e" "n" trp5 "")
(setq trp6 (polar x3 (+ 0 (* 0.5 pi)) (* ct_d 0.25)))
(command "trim" rad3 "" "e" "n" trp6 "")
(command".zoom""p")
(command ".zoom" "w" c2 t2)
(setq trp7 (polar x1 (+ 0 pi) (* ct_d 0.25)))
(command "trim" rad4 "" "e" "n" trp7 "")
(setq trp8 (polar x1 (+ 0 (* 1.5 pi)) (* ct_d 0.25)))
(command "trim" rad4 "" "e" "n" trp8 "")
(command "zoom" "p")
;;恢复倒圆角为修剪模式
(command "fillet" "t" "t" "r" (+ ct_d 0.5))
;;删除倒圆角用的矩形
(command "ERASE" rec1 rec2 rec3 rec4 "")
(setvar "osmode" 1)
(setvar "cmdecho" 1)
);end defun 呵呵,我也在看,既然倒角了还要trim 做什么,另外取点部份写得有点繁琐,可以简化