用autolisp编写选中一个矩形再选中一个圆把圆移动到矩形中心
2个回答
2014-03-18 · 知道合伙人软件行家
关注
展开全部
(defun C:YDY ( / ss ss1 pt %k1 %k2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(vl-load-com);;加载vlax扩展函数
(princ "请选择封闭的多段线")
(setq ss (ssget '((0 . "LWPOLYLINE") (70 . 1))));;选择封闭的多段线
(if (/= ss nil)
(progn
(setq ss (ssname ss 0));;取得第一个多段线
(command ".region" ss "");;变为面域
(setq ss1 (entlast))
(setq obj (vlax-ename->vla-object ss1) pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)));;取得面域质心点
pt (cons 10 pt));;点变为元素
(command ".undo" "")
(setq ss (entsel "\n请选择要移动的圆"))
(if (/= ss nil)
(progn
(setq ss (car ss)
ss1 (entget ss)
%k1 (cdr (assoc 0 ss1));;取得图元名
%k2 (assoc 10 ss1);;取得中点元素
)
(if (= %k1 "CIRCLE") (progn (setq ss1 (subst pt %k2 ss1)) (entmod ss1) ) );;如果是圆就移动
)
)
)
)
(prin1)
);;复制到记事本,以《YDY.lsp》命名
2014-03-18
展开全部
下面是我改过的代码,你试一下,应该还有些地方可以再完完善的,比如加上检测矩形大小的语句等.
(defun c:ban ()
;求第一个矩形的点
(setq p1 (getpoint "输入基准点:"))
(setq chang (getreal "\n长:"))
(setq gao (getreal "\n高:"))
(setq p2 (polar p1 0 chang))
(setq p3 (polar p1 (/ pi 2) gao))
(setq p4 (polar p3 0 chang))
;以下依据 p1、p2、p3、p4 点画矩形
(command "rectang" p1 p4)
;以下mp1、mp2、mp3、mp4确定另一矩形的4个点
(setq mp1 (list (+ (car p1) 20) (+ (cadr p1) 20)))
(setq mp2 (list (- (car p2) 20) (+ (cadr p2) 20)))
(setq mp3 (list (+ (car p3) 20) (- (cadr p3) 20)))
(setq mp4 (list (- (car p4) 20) (- (cadr p4) 20)))
(command "rectang" mp1 mp4)
)
(defun c:ban ()
;求第一个矩形的点
(setq p1 (getpoint "输入基准点:"))
(setq chang (getreal "\n长:"))
(setq gao (getreal "\n高:"))
(setq p2 (polar p1 0 chang))
(setq p3 (polar p1 (/ pi 2) gao))
(setq p4 (polar p3 0 chang))
;以下依据 p1、p2、p3、p4 点画矩形
(command "rectang" p1 p4)
;以下mp1、mp2、mp3、mp4确定另一矩形的4个点
(setq mp1 (list (+ (car p1) 20) (+ (cadr p1) 20)))
(setq mp2 (list (- (car p2) 20) (+ (cadr p2) 20)))
(setq mp3 (list (+ (car p3) 20) (- (cadr p3) 20)))
(setq mp4 (list (- (car p4) 20) (- (cadr p4) 20)))
(command "rectang" mp1 mp4)
)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询