明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2016|回复: 5

用lisp如何改变两个块之间的距离?

[复制链接]
发表于 2012-11-13 12:42:27 | 显示全部楼层 |阅读模式
本帖最后由 clh521 于 2012-11-13 12:46 编辑

不用move命令,比如左右各一个块,它们之间的距离为100,现在要左右两个块各向相反方向移动50,使其之间距离变成200,用lisp如何实现呢?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-11-13 13:17:25 | 显示全部楼层
1、选择两个块,调用MOVE,左边左移,右边右移。
2、取块插入点,修改块插入点。
3、删除两块,在需要的位置处重新生成两块。

还有个不是LISP的办法。喊徒弟去改图。
发表于 2012-11-13 13:26:55 | 显示全部楼层
先获得两个的插入点 pt1 pt2 InsertionPoint = (1675.12 264.396 0.0)

获得pt1 pt2距离,角度,

然后就是改插入点就行了。

多简单的程序。
 楼主| 发表于 2012-11-13 18:11:18 | 显示全部楼层

本帖最后由 clh521 于 2012-11-13 23:27 编辑

lisp学的不全面,加上时间久不玩了,现在工作有需要想编个自用的程序,发现竟然忘了好多了,简单的不会编,还是谢谢楼上两位啊

查了一下资料,写出程序如下:
(DEFUN C:tttt ( / cd enbk1 enbk2 enbk1lst enbk2lst bk1pt bk2pt ang1 ang2 new-bk1pt new-bk2pt)
(setq cd (getreal"\n请输入要移动的距离:"))
(setq enbk1 (car (entsel"\n请选择第一个块:")))
(setq enbk2 (car (entsel"\n请选择第二个块:")))
(setq enbk1lst (entget enbk1))
(setq enbk2lst (entget enbk2))
(setq bk1pt (cdr (assoc 10 enbk1lst))
      bk2pt (cdr (assoc 10 enbk2lst)))
(setq ang1 (angle bk1pt bk2pt))
(setq ang2 (angle bk2pt bk1pt))
(setq new-bk1pt (polar bk1pt ang2 cd))
(setq new-bk2pt (polar bk2pt ang1 cd))
(setq enbk1lst (subst (cons '10 new-bk1pt) (assoc '10 enbk1lst) enbk1lst))
(entmod enbk1lst)
(setq enbk2lst (subst (cons '10 new-bk2pt) (assoc '10 enbk2lst) enbk2lst))
(entmod enbk2lst)
(princ)
)
发表于 2012-11-13 20:50:36 | 显示全部楼层
这个东西出来了用在哪里呢?
 楼主| 发表于 2012-11-13 23:30:52 | 显示全部楼层
黑洞—杜明智 发表于 2012-11-13 20:50
这个东西出来了用在哪里呢?

用在我正在编的某个程序里要调用,当然直接用在画图上就没有用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-5 08:46 , Processed in 0.191233 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表