马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Lispboy 于 2016-11-3 09:11 编辑
[sell](defun c:XDTB_DimBlk (/ base base1 base2 box direc down dynpt keyword lst
mat mat1 mat2 offset p1 p2 pt pts scl ss ss1 up x
xdir ydir
)
(defun _prompt ()
(xdrx_prompt "\n当前设置:基点偏移[" #blk_dim_baseoffset "]/尺寸长度["
#blk_dim_jxlength "]"
)
)
(defun _keyword (keyword)
(cond
((= keyword "TC")
(if (setq offset (getreal (xdrx_prompt "\n输入基点偏移距离<"
#blk_dim_baseoffset ">:" t
)
)
)
(setq #blk_dim_baseoffset offset)
)
)
((= keyword "JX")
(if (setq offset (getreal (xdrx_prompt "\n输入尺寸线长度<"
#blk_dim_jxlength ">:" t
)
)
)
(setq #blk_dim_jxlength offset)
)
)
)
(_prompt)
)
(defun _data ()
(setq xdir (getvar "ucsxdir")
box (xdrx_entity_box ss)
p1 (car box)
p2 (mapcar
'+
p1
xdir
)
base1 (list p1 p2)
base2 (list (last box) (mapcar
'+
(last box)
xdir
)
)
base (list (xd::geom:get9pt ss 4) (xd::geom:get9pt ss 6))
pts (mapcar
'(lambda (x)
(xdrx_getpropertyvalue x "position")
)
(xdrx_pickset->ents ss)
)
ydir (xdrx_vector_perpvector xdir)
mat (xdrx_matrix_identity 3)
mat1 (xdrx_matrix_settranslation mat (xdrx_vector_product ydir
(- #blk_dim_baseoffset)
)
)
mat2 (xdrx_matrix_settranslation mat (xdrx_vector_product ydir
(- #blk_dim_jxlength)
)
)
pts (xdrx_points_sortOnCurve (list p1 p2) pts t)
pts (mapcar
'car
pts
)
pts (xdrx_points_transform pts mat1)
pt (xdrx_point_transform (car pts) mat2)
)
(xdrx_setmark)
(xd::dim:init)
(xd::dim:makerotwithPnts pts pt t nil)
(setq ss1 (xdrx_getss))
(xdrx_dimension_setoverride ss1 40 scl)
(_drag ss1)
)
(defun _drag (ss)
(defun _callback (dynpt)
(setq pt (xd::geom:get9pt ss 5))
(setq up (XD::Pnt:IsLeftTopByLine dynpt (car base2) (cadr base2))
direc (XD::Pnt:IsLeftTopByLine pt (car base2) (cadr base2))
)
(if up
(progn
(if (not direc)
(progn
(xdrx_entity_mirror ss base t)
)
)
)
)
(setq down (not (XD::Pnt:IsLeftTopByLine dynpt (car base1)
(cadr base1)
)
)
direc (not (XD::Pnt:IsLeftTopByLine pt (car base1)
(cadr base1)
)
)
)
(if down
(progn
(if (not direc)
(progn
(xdrx_entity_mirror ss base t)
)
)
)
)
)
(xdrx_pointmonitor "_callback")
(getpoint "\n移动鼠标确定方向<结束>:")
(xdrx_pointmonitor)
)
(xdrx_begin)
(if (not #blk_dim_jxlength)
(setq #blk_dim_jxlength 30.)
)
(if (not #blk_dim_baseoffset)
(setq #blk_dim_baseoffset 10.)
)
(setq scl (xd::var:getscaleratio))
(if (and
(_prompt)
(xdrx_initssget "\n选取要标注的图块[偏移距离(TC)/尺寸长度(JX)]<退出>:"
"TC JX" "移除不标注的图块[添加(A)]<退出>:"
"_keyword" ""
)
(setq ss (xdrx_ssget '((0 . "INSERT"))))
)
(progn
(setq lst (_data))
)
)
(xdrx_end)
(princ)
)
[/sell] |