用autolisp编写选中一个矩形再选中一个圆把圆移动到矩形中心

 我来答
朱06CAD
2014-03-18 · 知道合伙人软件行家
朱06CAD
知道合伙人软件行家
采纳数:4172 获赞数:18070
高中,熟悉AutoCAD。会autolisp及VBA程序。

向TA提问 私信TA
展开全部
(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)
)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式