本帖最后由 cq4920 于 2020-10-23 14:51 编辑
稍微整理了一下 原理不难
如果 选择 可以不分先后
再加个预览就更beautiful啦
有兴趣就再加个判断,如果不输入插入点,直接按空格,就原地翻转 ,如果输入A或者其他就垂直翻转,
 - (defun c:tt(/ SS WK P1 P2 P3 P4 PT1 SS2)
- (MC:be1)
- (setq ss (ssget))
- (mc:Wk ss)
- (setq wk (entlast)) ;获取选择集外框图元名
- (progn
- (vl-load-com)
- (vla-getboundingbox (vlax-ename->vla-object wk) 'minpoint 'maxpoint)
- (setq p3 (vlax-safearray->list maxpoint)
- p1 (vlax-safearray->list minpoint))
- (setq p2 (list (car p3) (cadr p1)))
- (setq p4 (list (car p1) (cadr p3)))
- (COMMAND "_.erase" wk "")
- )
- (command "_.mirror" ss "" P2 P3 "n" "")
- (setq ss2 (last_ent WK));;论坛里的一个函数
- (setvar "OSMODE" os)
- ( setq pt1 (getpoint"\n指定放置位置"))
- (command "_.MOVE" ss2 "" p2 pt1)
- (MC:be11)
- )
- ;;39外框
- (defun mc:wk (ss / oldos oldla lst n obj minx miny maxx maxy pt1
- pt2 pt3 pt4)
- (setq oldos (getvar "osmode"))
- (setq oldla (getvar "clayer"))
- (setvar "cmdecho" 0)
- (setvar "osmode" 0)
- (repeat (setq n (sslength ss))
- (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
- (vla-getboundingbox obj 'x 'y)
- (setq lst (cons (vlax-safearray->list y)
- (cons (vlax-safearray->list x) lst)
- )
- )
- )
- (setq minx (car (vl-sort (mapcar 'car lst) '<))
- miny (car (vl-sort (mapcar 'cadr lst) '<))
- maxx (car (vl-sort (mapcar 'car lst) '>))
- maxy (car (vl-sort (mapcar 'cadr lst) '>))
- )
- (setq pt1 (list minx miny))
- (setq pt2 (list maxx miny))
- (setq pt3 (list maxx maxy))
- (setq pt4 (list minx maxy))
- (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1) (cons 10 pt1) (cons 10 pt2) (cons 10 pt3) (cons 10 pt4)))
- (setvar "osmode" oldos)
- (setvar "clayer" oldla)
- (setvar "cmdecho" 1)
- (princ)
- )
- ;;40最后生产出的图元
- (defun last_ent (en / ss)
- (if en
- (progn
- (setq ss (ssadd))
- (while (setq en (entnext en))
- (if (not (member (cdr (assoc 0 (entget en)))
- '("ATTRIB" "VERTEX" "SEQEND")
- )
- )
- (ssadd en ss)
- );if
- );while
- (if (zerop (sslength ss)) (setq ss nil))
- ss
- );progn
- (ssget "_x")
- );if
- )
- ;准备:控制回显和输入,捕捉,当前颜色
- (defun MC:be1()
- (setq cm (getvar "cmdecho")
- os (getvar "osmode"))
- (setvar "CMDECHO" 0)
- (setvar "OSMODE" 0)
- (command "color" "bylayer")
- (command "_undo" "be"))
- (defun Mc:be11 ()
- (setvar "orthomode" 0)
- (command "_undo" "e")
- (setvar "OSMODE" os)
- (setvar "cmdecho" cm))
|