乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 48|回复: 19

[编程交流] 矩形lisp。帮个小忙!

[复制链接]

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:02:18 | 显示全部楼层 |阅读模式
你好我在一篇旧帖子中发现了这个Lisp程序
  1. (defun c:BX (/ foo _dist p1 p2 p3 ang)
  2. ;; Draw rectangle based on 2 or 3 picked points
  3. ;; Alan J. Thompson, 07.26.10
  4. (defun foo (l)
  5.    (entmake
  6.      (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 4) (70 . 129))
  7.              (mapcar (function (lambda (p) (cons 10 (reverse (cdr (reverse (trans p 1 0))))))) l)
  8.      )
  9.    )
  10. )
  11. (defun _dist (a b) (distance (list (car a) (cadr a)) (list (car b) (cadr b))))
  12. (if (and (setq p1 (getpoint "\nSpecify first point: "))
  13.           (setq p2 (getpoint p1 "\nSpecify second point: "))
  14.           (not (grdraw p1 p2 3 1))
  15.      )
  16.    (if (setq p3 (initget 0 "Left Right")
  17.              p3 (getpoint p2 "\nSpecify third point or Square box or [Left/Right]: ")
  18.        )
  19.      (cond ((vl-consp p3) (foo (list p1 p2 p3 (polar p3 (angle p2 p1) (_dist p1 p2)))))
  20.            ((eq (type p3) 'STR)
  21.             (cond
  22.               ((eq p3 "Left") (setq ang (+ (/ pi 2.) (angle p1 p2))))
  23.               ((eq p3 "Right") (setq ang (+ (* pi 1.5) (angle p1 p2))))
  24.             )
  25.             (foo (list p1 p2 (polar p2 ang (_dist p1 p2)) (polar p1 ang (_dist p1 p2))))
  26.            )
  27.      )
  28.    )
  29. )
  30. (redraw)
  31. (princ)
  32. )

 
我需要再添加一个命令
我需要像照片一样用3个点做成矩形
010225wzufk1mtwzf2cf39.jpg
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 00:07:03 | 显示全部楼层
为什么?阿兰的三点矩形需要三角挑吗?
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:10:10 | 显示全部楼层
不像这张照片
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:14:01 | 显示全部楼层
这适用于2012年。。。
 
  1. (defun c:RX (/ p1 p2 p3 l1 l2 l3 l4 pea)
  2. (setq p1 (getpoint "\nPick first point: ") p1 (trans p1 1 0))
  3. (setq p2 (getpoint (trans p1 0 1) "\nPick second point: ") p2 (trans p2 1 0))
  4. (setq p3 (getpoint "\nPick third point: "))
  5. (setq l1 (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
  6. (command "_.offset" "t" l1 p3 "")
  7. (setq l2 (entlast))
  8. (setq l3 (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 (cdr (assoc 10 (entget l2)))))))
  9. (setq l4 (entmakex (list '(0 . "LINE") (cons 10 p2) (cons 11 (cdr (assoc 11 (entget l2)))))))
  10. (setq pea (getvar 'peditaccept))
  11. (setvar 'peditaccept 1)
  12. (command "_.pedit" l1 "j" l1 l2 l3 l4 "" "")
  13. (setvar 'peditaccept pea)
  14. (princ)
  15. )

 
M、 R。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:15:24 | 显示全部楼层
谢谢marko_ribar干得好
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 00:20:16 | 显示全部楼层
很好的解决方案Marko!简单但有效。
 
我将为第三个点位于前两个点定义的线上的情况添加保护。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:22:12 | 显示全部楼层
只是拼凑在一起
 
  1. (defun c:test (/ p1 p2 p3 p4 p5 p6)
  2. (initget 1)
  3. (setq p1 (getpoint "\nPoint 1:   ")))
  4. (initget 1)
  5. (setq p2 (getpoint p1 "\n2nd Point:   "))
  6. (initget 1)
  7. (setq p3 (getpoint p2 "\Opposing edge Point:   "))
  8. (if (setq p4 (inters p1 p2 p3 (polar p3 (+ (angle p1 p2) (* pi 0.5)) 1) nil))
  9.      (setq p5 (polar p1 (+ (angle p1 p2) (* pi 0.5)) (distance p1 p4))
  10.            p6 (polar p2 (+ (angle p1 p2) (* pi 0.5)) (distance p1 p4)))
  11.           
  12. (and p1 p2 p5 p6
  13. (entmake (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)))          
  14. (entmake (list (cons 0 "LINE")(cons 10 p1)(cons 11 p5)))          
  15. (entmake (list (cons 0 "LINE")(cons 10 p2)(cons 11 p6)))          
  16. (entmake (list (cons 0 "LINE")(cons 10 p5)(cons 11 p6)))          
  17. (prin1))         

 
 
需要进行一些3D点错误检查。
-大卫
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 00:27:06 | 显示全部楼层
David,我修改了p5和p6
 
  1. (defun c:test (/ p1 p2 p3 p4 p5 p6)
  2.   (initget 1)
  3.   (setq p1 (getpoint "\nPoint 1:   "))
  4.   (initget 1)
  5.   (setq p2 (getpoint p1 "\n2nd Point:   "))
  6.   (initget 1)
  7.   (setq p3 (getpoint p2 "\Opposing edge Point:   "))
  8.   (if (setq p4 (inters p1 p2 p3 (polar p3 (+ (angle p1 p2) (* pi 0.5)) 1) nil))
  9.       (setq p5 (polar p1 (angle p4 p3) (distance p4 p3))
  10.             p6 (polar p2 (angle p4 p3) (distance p4 p3))
  11.       )
  12.   )
  13.   (and p1 p2 p5 p6
  14.        (entmake
  15.            (list
  16.                (cons 0 "LWPOLYLINE")
  17.                (cons 100 "AcDbEntity")
  18.                (cons 100 "AcDbPolyline")
  19.                (cons 90 4)
  20.                (cons 70 1)
  21.                (cons 10 p1)
  22.                (cons 10 p2)
  23.                (cons 10 p6)
  24.                (cons 10 p5)
  25.            )
  26.        )
  27.    )
  28.    (princ)
  29. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 00:28:17 | 显示全部楼层
这应该是由于Marco使用了该版本不支持的Peitaccept系统变量;例程在该点上崩溃,因此无法实现多段线构建。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:31:32 | 显示全部楼层
 
他们需要这样!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 21:28 , Processed in 0.366008 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表