3点画矩形的lisp

您所在的位置:网站首页 cad对角线画矩形命令 3点画矩形的lisp

3点画矩形的lisp

2024-07-16 01:23| 来源: 网络整理| 查看: 265

展开全部

62616964757a686964616fe59b9ee7ad9431333361323635AutoCAD再绘制一个矩形的话,使用偏移命令【OFFSET】或快捷键命令【O】

如果有很多矩形要进行偏移的话,可以使用编程来实现,选择矩形,输入偏移距离就可以偏移完成。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

(defun C:tes ( / #r1 &k1 &kw1 &ob1 &ob2 dis1 dis2 ent1 pt1 pt2 ss x)

(if (null vlax-dump-object) (vl-load-com) );加载vlax函数

(if (and (setq &kw1 (ssget '((0 . "LWPOLYLINE") (70 . 1))));选择封闭多段线

(setq #r1 (getdist "\n请输入偏移距离"))

(> #r1 0);距离是正值

)

(progn;;1

(while (setq &k1 (ssname &kw1 0));对象分析

(setq &kw1 (ssdel &k1 &kw1))

(setq ss (mapcar 'cdr (vl-remove-if '(lambda (X) (/= 10 (car x))) (entget &k1))));取得多段线坐标

(if (and (= (length ss) 4);如果是4个点,符合矩形一个条件;进入下一步

(= (distance (car ss) (caddr ss)) (distance (cadr ss) (cadddr ss)));对角线相同

)

(progn;;2

(setq &ob1 (vlax-ename->vla-object &k1))

(vla-GetBoundingBox &ob1 'pt1 'pt2);提取包围框

(setq pt1 (vlax-safearray->list pt1) pt2 (vlax-safearray->list pt2))

(setq pt1 (mapcar '(lambda (x) (* x 0.5)) (mapcar '+ pt1 pt2)));取得矩形中心点

(if (and (setq pt2 (inters (car ss) (caddr ss) (cadr ss) (cadddr ss)));对角线有交点

( dis1 0)

)

(progn;;4

(setq &ob2 (vlax-ename->vla-object ent1))

(setq dis2 (vlax-curve-getDistAtParam &ob2 (vlax-curve-getEndParam &ob2)))

(vla-delete &ob2)

(if (> dis2 dis1) (vla-offset &ob1 #r1) (vla-offset &ob1 (* #r1 -1)) )

);progn;4

);if;4

);progn;3

);if;3

);progn;2

);if;2

);while

);progn;1

);if;1;矩形的特点,对角线相同,4个点,对角线有交点并与中心点重合

(prin1)

);;复制到记事本,以【.lsp】为后缀命名,打开AutoCAD,autolisp加载,命令【TES】

追问

请问具体如何偏移呢?

我先画了外面的大矩形,  然后把它偏移缩小成这样

那 再接着怎么用偏移画出那三个相同大小的矩形,化成如问题那样的

已赞过

已踩过



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3