本帖最后由 st788796 于 2013-10-26 23:21 编辑
用 API 可以这样写
- (defun c:tt (/ p1 p2 wh area box ss p txt mat0 p0 mat)
- (if (and (setq p1 (getpoint "\nFirst Corner: "))
- (setq p2 (getcorner p1 "\nSecond Corner: "))
- )
- (progn
- (xd::begin)
- (setq wh (mapcar 'abs (mapcar '- p1 p2))
- area (rtos (* (car wh) (cadr wh)) 2 0)
- box (xdrx_points_box p1 p2)
- p (xdrx_line_midp p1 p2)
- )
- (xdrx_setmark)
- (xdrx_layer_make "1" 8)
- (apply 'xdrx_polyline_make (cons t box))
- (xdrx_layer_make "2" 1)
- (setq txt (xdrx_text_make p area 50. 0.))
- (xdrx_text_sethozmode txt 1) ;_水平居中
- (xdrx_text_setvermode txt 2) ;_垂直居中
- (xdrx_text_setalignmentpoint txt p) ;_还要修改对齐点
- ;;(setpropertyvalue txt "Justify" 10);_这个2011+函数不需要修改对齐点
- (setq ss (xdrx_getss 9);_必须给房间号,否则后面会释放
- mat0 (xdrx_matrix_identity 3)
- )
- (while (setq p0 (getpoint p "\n下一点: "))
- (setq mat (xdrx_matrix_settranslation mat0 (mapcar '- p0 p)))
- (xdrx_entity_transformedcopy ss mat)
- )
- (xd::end)
- )
- )
- (princ)
- )
|