多边形单边退缩(XD::Drag:Gmove应用)
(defun c:tt ( / e eback elast ints inx inx1 msg myerr oclr olderr p1 p-1 p2 p-2 pt pt1 pt2 v1 v2)
(defun myerr (msg)
(princ (strcat "\n" msg))
(redraw)
(xdrx_pointmonitor)
(xdrx_end)
(vl-cmdf ".undo" 1)
(setq *error* olderr)
)
(defun _callback22 (pt) ; 拖动中的回调处理函数
(xdrx_entity_delete elast)
(mapcar
'set
'(p-1 p-2)
(XD::Pnts:OrthoProject (list p1 p2) pt (mapcar
'+
pt
v1
)
)
)
(setq ints (xdrx_curve_getinters (list p-1 p-2) e 3)) ; **裁剪向量和多?
; ?
; 形的所有交点
(if ints
(progn
(setq ints (mapcar
'cadr
(xdrx_points_sortoncurve (list p1 p2) ints)
)
ints (xd::list:dotPair ints) ; 交点集排序后,两两组合
)
(setq eback (xdrx_entity_copy e)
eback (entlast)
)
(xdrx_setpropertyvalue eback "color" oclr)
(setq elast (xdrx_curve_trim eback (list (caar ints) (cadar ints))
p1 t
)
)
(entdel eback)
)
)
)
(xdrx_begin)
(setq olderr *error*)
(setq *error* myerr)
(if (setq e (xdrx_entsel "\n拾取封闭的多边形<退出>:" '((0 . "*POLYLINE")
(-4 . "&=")
(70 . 1)
)
)
)
(progn
(setq inx (XD::Polyline:OnSegAt (car e) (cadr e))
e (car e)
inx1 (XD::PolyLine:-Index+ e inx)
p1 (xdrx_getpropertyvalue e "PointAt" inx)
p1 (XD::Pnts:Setz p1 0.0)
p2 (xdrx_getpropertyvalue e "PointAt" (last inx1))
p2 (XD::Pnts:Setz p2 0.0)
pt1 (xdrx_midp p1 p2)
v1 (xdrx_vector_normalize (mapcar
'-
p2
p1
)
)
v2 (xdrx_vector_perpvector v1)
)
(setq oclr (xdrx_getpropertyvalue e "color"))
(xdrx_setpropertyvalue e "color" 251)
(if (setq pt2 (XD::DRAG:GMOVE pt1 "\n边线的位置<退出>:" -1 v2 nil
"_callback22"
)
) ; 动态拖动
(progn
(xdrx_pointmonitor)
(_callback22 pt2)
(xdrx_entity_delete e)
)
)
)
)
(xdrx_pointmonitor)
(xdrx_end)
(setq *error* olderr)
(princ)
)
不能运行,提示“参数太多” liuyj 发表于 2016-6-2 15:08
不能运行,提示“参数太多”
重新下载 XD::DRAG:GMOVE 这个函数。 更新了。
这个功能很强大了。 WhoCanSay 发表于 2016-6-3 15:21
这个功能很强大了。
欢迎加入,一起研究使用XDRX API开发程序。 在2014和2018版本下运行代码,都出不来动图中的效果,多边形均显示为灰色线,并且点击确定插入点后,多边形就被删除了 gdfyhao 发表于 2024-12-30 12:03
在2014和2018版本下运行代码,都出不来动图中的效果,多边形均显示为灰色线,并且点击确定插入点后,多边形 ...
花费了不少时间,已经找到原因了,回调函数中最后一句entdel eback删除掉就可以了
页:
[1]