本帖最后由 阿然 于 2013-3-11 23:43 编辑
试一试
 - (defun c:tt (/ BASEPT BBOX ENT MAXPT MINPT PT1 PT2 PTLST SEG TMPENT X)(vl-load-com)
- (if (and (setq ent (entsel "\n选择四边形:"))
- (setq basept (osnap (cadr ent) "_nea"))
- (setq ent (car ent))
- )
- (progn (setq ptlst
- (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget ent))
- )
- (setq ptlst (mapcar '(lambda (x) (append (cdr x) (list 0.)))
- (append ptlst (list (car ptlst)))
- )
- )
- (setq seg (fix (vlax-curve-getparamatpoint ent basept)))
- (setq pt1 (nth seg ptlst))
- (setq pt2 (nth (1+ seg) ptlst))
- (setq
- tmpent (vlax-invoke-method (vlax-ename->vla-object ent) 'copy)
- )
- (vlax-invoke-method
- tmpent
- 'Rotate
- (vlax-3d-point pt1)
- (* -1 (angle pt1 pt2))
- )
- (vlax-invoke-method tmpent 'GetBoundingBox 'minpt 'maxpt)
- (setq minpt (vlax-safearray->list minpt)
- maxpt (vlax-safearray->list maxpt)
- )
- (command "_rectang" "_non" minpt "_non" maxpt)
- (setq bbox (entlast))
- (vlax-invoke-method
- (vlax-ename->vla-object bbox)
- 'Rotate
- (vlax-3d-point pt1)
- (angle pt1 pt2)
- )
- (vla-erase tmpent)
- (princ)
- )
- )
- )
可以不局限边数
|