« on: December 13, 2023, 03:57:53 PM »
Draw a rectangle freely and customize the drag step size
(defun c:XDTB_RectFree
(/ baseline
-x baseline
-y basept
distx disty dynpt e1 e2 el
ents ents-bak h info info1
m_rec_ent n num p_1 p_2
p1 p2 pmid pt2 pt3 ra
ret1 ss tbox tf tmp txt1
txt2 txtp v val x xdir
ydir _callback roundto
)
(xdrx_prompt
"\nCurrent setting: Line Width("
#xd_var_global_lw_width
") Color("
#xd_var_global_ent_color
") Step("
")\n"
)
)
disty (- (xdrx-point-dist2line
dynpt
)
)
)
disty (xdrx-math-roundto disty roundto)
distx (xdrx-point-dist2line
dynpt
)
distx (xdrx-math-roundto distx roundto)
)
)
)
'+
(mapcar '
+ basept
(xdrx
-vector
-product xdir distx
)) (xdrx-vector-product ydir disty)
)
)
(XD::Drag:CallBackSetDynPnt dynpt)
(setq h
(xd::doc:getpickboxheight
)) (setq pt2
(mapcar '
+ basept
(xdrx
-vector
-product xdir distx
)) pt3 dynpt
)
(xdrx-setpropertyvalue
txt1
"textstring"
"position"
(setq txtp
(xdrx
-line
-midp basept pt2
)) "textheight"
h
)
(setq tbox
(xdrx
-getpropertyvalue txt1
"textbox") tbox
(xd::pnts:
close tbox
) tbox (xdrx-points-offset (/ h 3.0) tbox)
pmid (xd::geom:get9pt tbox 2)
)
(xdrx-entity-align
txt1
(if (xdrx
-vector
-iscodirectional v xdir
(/ pi
4)) pmid
(xd::geom:get9pt tbox 4)
)
v
(xdrx-line-midp basept pt2)
(xdrx-vector-product
(xdrx
-vector
-normalize
(mapcar '
- pt2 basept
)) (/ h 3.0)
)
)
(if (xdrx
-vector
-iscodirectional v xdir
(/ pi
4)) xdir
ydir
)
)
(xd::text:adjust txt1)
(setq tbox
(xdrx
-getpropertyvalue txt1
"textbox") tbox
(xd::pnts:
close tbox
) tbox (xdrx-points-offset (/ h 3.0) tbox)
tbox
(xd::pnts:
close tbox
) )
(xdrx-setpropertyvalue
txt2
"textstring"
"position"
(setq txtp
(xdrx
-line
-midp pt2 pt3
)) "textheight"
h
)
(setq tbox
(xdrx
-getpropertyvalue txt2
"textbox") tbox
(xd::pnts:
close tbox
) tbox (xdrx-points-offset (/ h 3.0) tbox)
pmid (xd::geom:get9pt tbox 4)
)
(xdrx-entity-align
txt2
(if (xdrx
-vector
-iscodirectional v xdir
(/ pi
4)) pmid
(xd::geom:get9pt tbox 4)
)
v
(xdrx-line-midp pt2 pt3)
(xdrx-vector-product
(xdrx
-vector
-normalize
(mapcar '
- pt3 pt2
)) (/ h 3.0)
)
)
(if (xdrx
-vector
-iscodirectional v xdir
(/ pi
4)) xdir
ydir
)
)
(xd::text:adjust txt2)
(setq tbox
(xdrx
-getpropertyvalue txt2
"textbox") tbox
(xd::pnts:
close tbox
) tbox (xdrx-points-offset (/ h 3.0) tbox)
tbox
(xd::pnts:
close tbox
) )
)
)
)
(setq ra
(xd::curve:relation e1 e2
)) (cond ((or (= ra
0) (= ra
4))) ((or (= ra
2) (= ra
3)) (setq tmp
(xdrx_get_union e1 e2
))) (setq tmp
(xdrx_get_subtract e2 e1
)) )
)
(setq ents
(append (xdrx_pickset
->ents tmp
) ents
)) )
(xdrx_draworder->top
(setq ents
(_clear
(xd::
list:removedup ents
))) )
)
x
)
)
el
)
)
)
(xdrx_polyline_compress el t)
el
)
(xdrx_begin)
(xdrx-sysvar-push '("dimzin" 0))
(if (not #xd_var_global_lw_width
) (setq #xd_var_global_lw_width
1.0) )
(if (not #xd_var_global_ent_color
) (setq #xd_var_global_ent_color
7) )
)
(xdrx_initssget
"\nSelect to add an existing rectangle to be processed <no selection>:"
)
(setq ss
(xdrx_ssget '
((0 .
"LWPOLYLINE") (-4 .
"&=") (70 .
1)))) (setq ents
(xdrx_pickset
->ents ss
) ents-bak ents
)
(xd::doc:setosnap 547)
(xdrx_initget "A W C U S")
)
(progn (setq info1
"") (xdrx_initget
"A W C S")) )
"\nFirst point of rectangle [set axis (A)/width (W)/color (C)/set step size (S)"
info1
"]<Exit>:"
)
)
(xdrx_prompt
"\nCurrent setting: line width("
#xd_var_global_lw_width
") color("
#xd_var_global_ent_color
") Step("
")"
)
"\nEnter Line width<"
#xd_var_global_lw_width
">:"
t
)
)
)
(xdrx_entity_setproperty
ents
"constantwidth"
#xd_var_global_lw_width
)
)
)
t
)
((= p1 "S")
"\nInput Step Size<"
">:"
t
)
)
)
)
t
)
((= p1 "C")
(setq #xd_var_global_ent_color
(acad_colordlg
#xd_var_global_ent_color
)
)
(xdrx_entity_setproperty
ents
"color"
#xd_var_global_ent_color
)
t
)
((= p1 "U")
(setq ents
(_clear ents
-bak
)) (princ "\rAll operations have been rolled back!") )
)
)
t
)
((= p1 "A")
p_1
(getpoint "\nFirst point of axis <exit>:") )
"\nSecond point of axis <exit>:"
)
)
)
)
)
(setq xdir
(xdrx_vector_negate xdir
)) xdir
)
)
)
)
t
)
)
(XD::Drag:CallBackSetMouseMove "_callback")
(setq txt1
(xdrx
-text
-make
) txt2 (xdrx-text-make)
)
(xd::doc:setkeyword "A S D F G")
(_prompt1)
p1
"\rThe second point of the rectangle [Step0(A)/Step1(S)/step5(D)/Step10(F)/Set(G)]<Exit>:"
7
xdir
)
)
)
(cond ((= p2
"A") (xdrx
-setvar "DistanceSnap" 0.0)) ((= p2
"S") (xdrx
-setvar "DistanceSnap" 1.0)) ((= p2
"D") (xdrx
-setvar "DistanceSnap" 5.0)) ((= p2
"F") (xdrx
-setvar "DistanceSnap" 10.0)) ((= p2 "G")
"\nEnter Step Size<"
">:"
t
)
)
)
)
)
(> (abs (xdrx_points_area
(cadr p2
))) 0.0) )
(xdrx_undostart)
(setq e1
(xdrx_polyline_make
(xd::pnts:ucs2wcs
(cadr p2
)) t
)
)
ents
-bak
(cons e1 ents
-bak
) ents (_clear ents)
)
(xdrx_entity_setproperty
ents
"constantwidth"
#xd_var_global_lw_width
"color"
#xd_var_global_ent_color
)
(xdrx_undoend)
)
)
(xdrx-free txt1 txt2)
)
)
)
t
)
)
)
(xdrx_sysvar_pop)
(xdrx_end)
)
« Last Edit: December 13, 2023, 04:09:24 PM by xdcad »
![](http://www.theswamp.org/Themes/default/images/ip.gif)
Logged