院长的都是精品,学习的典范。
有时候模仿院长的演示也能锻炼锻炼思维方式。
动态填充比例调整,仅比例。
我的演示:
代码部分(未加出错程序,如果想放弃调整输入s加空格,输入精准比例s加比例(如s100) s后不要空格哦,切记)
 - ;;动态填充比例(only patternscale)
- ;;2014年5月18日
- ;;code by edata @mjtd
- (defun c:tt(/ C_SCALE DS ENT GR MPT OBJ P1 P3 SCREEN_H SCREEN_PT SS TEXT_DS X Y loop scale_p)
- (vl-load-com)
- (vla-StartUndoMark (vla-get-activedocument(vlax-get-acad-object)))
- ;;Get viewpt Sub function from bbs.mjtd.com
- (defun viewpt(/ a b c d x)
- (setq b (getvar "viewsize") c (car (getvar "screensize")) d (cadr (getvar "screensize"))
- a (* b (/ c d)) x (setq x (getvar "viewctr")) x (trans x 1 2) c (list (- (car x) (/ a 2.0)) (- (cadr x) (/ b 2.0)) 0.0)
- d (list (+ (car x) (/ a 2.0)) (+ (cadr x) (/ b 2.0)) 0.0) c (trans c 2 1) d (trans d 2 1)
- )
- (list c d)
- )
- ;;End Sub function
- ;;Start main function
- (if(and (setq ss(ssget ":S" '((0 . "hatch"))))
- (setq ent(ssname ss 0))
- (car(list t (redraw ent 3))))
- (progn
- (setq obj (vlax-ename->vla-object ent)
- screen_pt(viewpt)
- screen_h(abs(- (cadr(cadr screen_pt))(cadr(car screen_pt))))
- loop t)
- (vla-GetBoundingBox obj 'p1 'p3)
- (setq p1 (vlax-safearray->list p1)
- p3 (vlax-safearray->list p3)
- mpt(mapcar '(lambda(x y)(*(+ x y ) 0.5)) p1 p3)
- c_scale(vla-get-patternscale obj)
- text_ds(vlax-ename->vla-object(entmakex (list '(0 . "TEXT")(cons 62 4) (cons 1 (strcat "当前比例为: "(rtos c_scale 2)) ) (cons 10 mpt) (cons 40 (* screen_h 0.04))))))
- (prompt "\n移动鼠标或输入S比例数字(如s100):")
- (while (and loop (setq gr(grread t 15 0))(not (or(= (car gr) 3)(= (car gr) 25)(= (car gr) 11)(equal gr '(2 13))(equal gr '(2 32)))))
- (cond
- ((= (car gr) 5)(setq p1(cadr gr))
- (if(>(setq ds(distance mpt p1))0)(vla-put-patternscale obj (* ds 0.1)))
- ;(vla-put-patternangle obj (angle mpt p1));改角度
- (setq screen_pt(viewpt)
- screen_h(abs(- (cadr(cadr screen_pt))(cadr(car screen_pt)))))
- (vla-put-insertionpoint text_ds (vlax-3d-point p1))
- (vla-put-height text_ds (* screen_h 0.04))
- (vla-put-textstring text_ds (strcat "当前比例为: "(rtos (* ds 0.1) 2)))
- (vla-update obj)
- (vla-update text_ds)
- (redraw)
- (grdraw mpt p1 1 3)
- )
- ((equal gr '(2 115)) (setq loop nil)(if(setq scale_p(getreal "\n输入比例:s"))(vla-put-patternscale obj scale_p)(vla-put-patternscale obj c_scale)))
- )
- (entmod (entget ent))
- (entmod (entget (vlax-vla-object->ename text_ds)))
- )
- (and text_ds(vla-delete text_ds))
- (and text_ds(vlax-release-object text_ds))
- (and obj(vlax-release-object obj))
- )
- )
- (vla-EndUndoMark (vla-get-activedocument(vlax-get-acad-object)))
- (redraw)
- (princ)
- )
- (prompt "loading dynamic patternscale code by edata,Command is tt")
- (princ)
|