本帖最后由 wowan1314 于 2013-6-20 13:46 编辑
再来发个带捕捉的“山寨自由复制”。 大家可看到模拟的捕捉会捕捉到自身而导致无法正确运行。 - (DEFUN C:T2 nil
- (SETQ SS (SSGET ":L") PT (getpoint))
- (setq size (* (getvar "viewsize") 2))
- (command "_.copy" SS "" "0,0" "@")
- (setq oldos (getvar "osmode"))
- (setvar "osmode" 0)(setvar "cmdecho" 0)
- (PRINC "\n 指定插入点或A旋转s上下镜像D左右镜像+放大一倍-缩小一倍T改基点")
- (while PT
- (setq BB (grread T 5 1))
- (cond
- ((= (car BB) 5) (SETQ PT1 (CADR BB)) (redRaw)
- (if
- (setq
- nearpt (osnap PT1 "_END,_MID,INT")
- ) ; 取得最近的捕捉点
- (PROGN
- (setq g2 nearpt)
- (setq h (/ (getvar "viewsize")
- (cadr (getvar "screensize"))
- )
- d (getvar "pickbox")
- lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h))
- ptx (car g2)
- pty (cadr g2)
- )
- (foreach x lst
- (setq ptt1 (list (- ptx x) (- pty x))
- ptt2 (list (+ ptx x) (- pty x))
- ptt3 (list (+ ptx x) (+ pty x))
- ptt4 (list (- ptx x) (+ pty x))
- )
- (grvecs (list 2 ptt1 ptt2 ptt2 ptt3 ptt3 ptt4 ptt4 ptt1))
- )
- )
- )
- (GRVECS
- (LIST -1 PT (mapcar '+ (LIST size 0 0) PT)
- -1 PT (mapcar '- PT(LIST size 0 0))
- -1 PT (mapcar '- PT(LIST 0 size 0))
- -1 PT (mapcar '+ (LIST 0 size 0) PT)
- )
- )
- (COMMAND "MOVE" SS "" PT PT1)(SETQ PT PT1)
- )
- ((= (car BB) 3) (SETQ PT NIL))
- ((member BB '((2 97)(2 65)))
- (COMMAND "ROTATE" SS "" PT1 90)
- )
- ((member BB '((2 115)(2 83)))
- (COMMAND "mirror" SS "" PT1 (mapcar '- pt1 '(1 0)) "Y")
- )
- ((member BB '((2 100)(2 68)))
- (COMMAND "mirror" SS "" PT1 (mapcar '- pt1 '(0 1)) "Y")
- )
- ((member BB '((2 43)(2 61)))
- (COMMAND "scale" SS "" PT1 "2")
- )
- ((member BB '((2 116)(2 84)))
- (setvar "osmode" oldos)(redRaw)
- (setq pt (getpoint))
- (setvar "osmode" 0)
- )
- ((equal BB '(2 45))
- (COMMAND "scale" SS "" PT1 "0.5")
- )
- )
- )
- (setvar "osmode" oldos)(redRaw)(princ)
- )
|