本帖最后由 作者 于 2004-12-25 19:49:00 编辑
 - ;;;用于在某范围内对平面图进行修剪,分割平面图或删除平面图上的某一部分。
- (defun c:cut (/ p1 p2 p3 p4 dst ang p1a p2a p3a p4a lst)
- (graphscr)
- (cmdla0)
- (setq p1 (getpoint "\n选择矩形框的第一角:")
- p2 (getcorner p1 "\n选择矩形框的另一角:")
- )
- (setvar "osmode" 0)
- (command "undo" "be")
- (command "rectang" p1 p2)
- (setq lst (entlast))
- (setq txt5 (ukword 1 "1 2" "\n请选择清除范围:1-外部/2-内部" txt5)
- p3 (list (car p2) (cadr p1))
- p4 (list (car p1) (cadr p2))
- dst (/ (distance p1 p2) 100.0)
- ang (angle p1 p2)
- )
- (if (= txt5 "1")
- (setq p1a (polar p1 ang (- 0 dst))
- p2a (polar p2 ang dst)
- )
- (setq p1a (polar p1 ang dst)
- p2a (polar p2 ang (- 0 dst))
- )
- )
- (setq p3a (list (car p2a) (cadr p1a))
- p4a (list (car p1a) (cadr p2a))
- )
- (command "_.trim" lst "" "f" p1a p3a p2a p4a p1a "" "")
- (if (= txt5 "1")
- (command "_erase" "all" "_r" "_c" p1 p2 "")
- (command "_erase" "_w" p1 p2 "")
- )
- (command "undo" "e")
- (cmdla1)
- );;;以下为通用子程序
- (defun CMDLA0 ()
- (setq cmd (getvar "CMDECHO"))
- (setq oom (getvar "orthomode"))
- (setq osm (getvar "osmode"))
- (setq hlt (getvar "highlight"))
- (setq rmode (getvar "regenmode"))
- (setvar "regenmode" 0)
- (setvar "CMDECHO" 0)
- (princ)
- )
- (defun CMDLA1 ()
- (setvar "CMDECHO" cmd)
- (setvar "orthomode" oom)
- (setvar "osmode" osm)
- (setvar "highlight" hlt)
- (setvar "regenmode" rmode)
- (princ)
- )
- (defun ukword (bit kwd msg def / inp)
- (if (and def (/= def ""))
- (setq msg (strcat "\n" msg "<" def ">:")
- bit (* 2 (fix (/ bit 2)))
- )
- (setq msg (strcat "\n" msg ":"))
- )
- (initget bit kwd)
- (setq inp (getkword msg))
- (if inp
- inp
- def
- )
- )
- ;;;END
|