乐筑天下

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

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

[复制链接]

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:36:21 | 显示全部楼层
 
这次行动真的有必要吗?就我个人而言,我认为他对问题的详细描述和他对所述问题的说明远远超过了平淡的一行文章,许多人似乎认为这是对他们问题的准确描述,但老实说,他们几乎没有概述这个问题。。。。这张海报不是这样的,因此我不理解这种敌意,即使它是短暂的和被动的侵略性的。。。
此外,谷歌有没有告诉你,你没有想象力,当你查询信息时,你应该去别处看看?很明显,你们不是谷歌,但如果他们这样做了,你们两个在这方面会很相似。对不起,我不时会注意到这一点,我不认为一个经验不足的lisper应该在为他们准备的论坛上被一个恰当提出的问题所蒙蔽。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:39:00 | 显示全部楼层
另一个版本:
  1. (defun c:myrec ( / nv oc p1 p2 p3 p4 p5 p6 )
  2.    (if
  3.        (and
  4.            (setq p1 (getpoint "\n1st point: "))
  5.            (setq p2 (getpoint "\n2nd point: " p1))
  6.            (setq p3 (getpoint "\n3rd point: " p1))
  7.        )
  8.        (progn
  9.            (setq nv (trans (mapcar '- p2 p1) 1 0 t)
  10.                  oc (trans '(0.0 0.0 1.0) 1 0 t)
  11.                  p4 (trans p1 1 nv)
  12.                  p5 (trans p2 1 nv)
  13.                  p6 (trans p3 1 nv)
  14.            )
  15.            (entmake
  16.                (list
  17.                   '(000 . "LWPOLYLINE")
  18.                   '(100 . "AcDbEntity")
  19.                   '(100 . "AcDbPolyline")
  20.                   '(090 . 4)
  21.                   '(070 . 1)
  22.                    (cons 010 (trans p1 1 oc))
  23.                    (cons 010 (trans p2 1 oc))
  24.                    (cons 010 (trans (list (car p6) (cadr p6) (caddr p5)) nv oc))
  25.                    (cons 010 (trans (list (car p6) (cadr p6) (caddr p4)) nv oc))
  26.                    (cons 210 oc)
  27.                )
  28.            )
  29.        )
  30.    )
  31.    (princ)
  32. )

具有动态效果:
  1. (defun c:myrec ( / nv oc p1 p2 p3 p4 p5 pl )
  2.    (if
  3.        (and
  4.            (setq p1 (getpoint "\n1st point: "))
  5.            (setq p2 (getpoint "\n2nd point: " p1))
  6.        )
  7.        (progn
  8.            (setq nv (trans (mapcar '- p2 p1) 1 0 t)
  9.                  oc (trans '(0.0 0.0 1.0) 1 0 t)
  10.                  p3 (trans p1 1 nv)
  11.                  p4 (trans p2 1 nv)
  12.            )
  13.            (princ "\n3rd point: ")
  14.            (while (= 5 (car (setq p5 (grread t 13 0))))
  15.                (redraw)
  16.                (setq p5 (trans (cadr p5) 1 nv))
  17.                (mapcar '(lambda ( a b ) (grdraw a b 1 1))
  18.                    (setq pl
  19.                        (list p1 p2
  20.                            (trans (list (car p5) (cadr p5) (caddr p4)) nv 1)
  21.                            (trans (list (car p5) (cadr p5) (caddr p3)) nv 1)
  22.                        )
  23.                    )
  24.                    (cons (last pl) pl)
  25.                )
  26.            )
  27.            (if
  28.                (and
  29.                    (listp (cadr p5))
  30.                    (setq p5 (trans (cadr p5) 1 nv))
  31.                )
  32.                (entmake
  33.                    (list
  34.                       '(000 . "LWPOLYLINE")
  35.                       '(100 . "AcDbEntity")
  36.                       '(100 . "AcDbPolyline")
  37.                       '(090 . 4)
  38.                       '(070 . 1)
  39.                        (cons 010 (trans p1 1 oc))
  40.                        (cons 010 (trans p2 1 oc))
  41.                        (cons 010 (trans (list (car p5) (cadr p5) (caddr p4)) nv oc))
  42.                        (cons 010 (trans (list (car p5) (cadr p5) (caddr p3)) nv oc))
  43.                        (cons 210 oc)
  44.                    )
  45.                )
  46.            )
  47.            (redraw)
  48.        )
  49.    )
  50.    (princ)
  51. )

上述内容也应适用于所有UCS和视图。
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-6 00:43:02 | 显示全部楼层
这是矩形程序的3D版本。我想我会有一些乐趣,并使用向量方法。叉积用于确定与平面垂直的向量,然后使用叉积确定与p3方向上的线p1p2垂直的向量。注意,包括点积和叉积函数。
 
  1. (defun c:rect3d        (/ p1 p2 p3 p4 p5  n u m d h)
  2. ; get three points
  3. (setq p1 (getpoint "\nPoint 1:   "))
  4. (setq p2 (getpoint p1 "\n2nd Point:   "))
  5. (setq p3 (getpoint p2 "\Opposing edge Point:   "))
  6. ; compute normal to plane defined by p1 p2 p3
  7. (setq n (cross (mapcar '- p3 p1) (mapcar '- p2 p1)))
  8. ; compute vector perpendicular to line p1 p2
  9. (setq u (cross (mapcar '- p2 p1) n))
  10. ; compute magnitude of u
  11. (setq m (distance '(0 0 0) u))
  12. ;convert u to unit vector
  13. (setq u (mapcar '/ u (list m m m)))
  14. ; get perpendicular length from line p1p2 to point p3
  15. (setq d (dot (mapcar '- p3 p1) u))
  16. ;convert length to a vector
  17. (setq h (mapcar '* (list d d d) u))
  18. ;define other two corners of the rectangle
  19. (setq p4 (mapcar '+ p1 h))
  20. (setq p5 (mapcar '+ p2 h))
  21. (command "3dpoly" p1 p2 p5 p4 p1 "")
  22. (princ)
  23. )
  24. ; Compute the dot product of 2 vectors a and b
  25. (defun dot (a b / dd)
  26. (setq dd (mapcar '* a b))
  27. (setq dd (+ (nth 0 dd) (nth 1 dd) (nth 2 dd)))
  28. )                                        ;end of dot
  29. ; Compute the cross product of 2 vectors a and b
  30. (defun cross (a b / crs)
  31. (setq        crs (list
  32.       (- (* (nth 1 a) (nth 2 b))
  33.          (* (nth 1 b) (nth 2 a))
  34.       )
  35.       (- (* (nth 0 b) (nth 2 a))
  36.          (* (nth 0 a) (nth 2 b))
  37.       )
  38.       (- (* (nth 0 a) (nth 1 b))
  39.          (* (nth 0 b) (nth 1 a))
  40.       )
  41.     )                                ;end list
  42. )                                        ;end setq c
  43. )                                        ;end cross
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:45:47 | 显示全部楼层
[/code]
具有动态效果:
[code](defun c:myrec ( / nv oc p1 p2 p3 p4 p5 pl )
   (if
       (and
           (setq p1 (getpoint "\n1st point: "))
           (setq p2 (getpoint "\n2nd point: " p1))
       )
       (progn
           (setq nv (trans (mapcar '- p2 p1) 1 0 t)
                 oc (trans '(0.0 0.0 1.0) 1 0 t)
                 p3 (trans p1 1 nv)
                 p4 (trans p2 1 nv)
           )
           (princ "\n3rd point: ")
           (while (= 5 (car (setq p5 (grread t 13 0))))
               (redraw)
               (setq p5 (trans (cadr p5) 1 nv))
               (mapcar '(lambda ( a b ) (grdraw a b 1 1))
                   (setq pl
                       (list p1 p2
                           (trans (list (car p5) (cadr p5) (caddr p4)) nv 1)
                           (trans (list (car p5) (cadr p5) (caddr p3)) nv 1)
                       )
                   )
                   (cons (last pl) pl)
               )
           )
           (if
               (and
                   (listp (cadr p5))
                   (setq p5 (trans (cadr p5) 1 nv))
               )
               (entmake
                   (list
                      '(000 . "LWPOLYLINE")
                      '(100 . "AcDbEntity")
                      '(100 . "AcDbPolyline")
                      '(090 . 4)
                      '(070 . 1)
                       (cons 010 (trans p1 1 oc))
                       (cons 010 (trans p2 1 oc))
                       (cons 010 (trans (list (car p5) (cadr p5) (caddr p4)) nv oc))
                       (cons 010 (trans (list (car p5) (cadr p5) (caddr p3)) nv oc))
                       (cons 210 oc)
                   )
               )
           )
           (redraw)
       )
   )
   (princ)
)[/code]
上述内容也应适用于所有UCS和视图。
 
干得好,李。我喜欢这个Lisp程序
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 00:47:06 | 显示全部楼层
lrm,
 
请阅读代码发布指南,并将代码放在代码标签中。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:50:20 | 显示全部楼层
 
李先生,这个Lisp程序有点问题
当我选择点1和点2时,osnap处于启用状态。当我试图选择点3时,osnap关闭了为什么?你能修好它吗!!谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 00:54:12 | 显示全部楼层
Prodromosm,该行为来自第三点(GRREAD)使用二元输入;不幸的是,这不适用于OSNAP模式。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-6 00:56:25 | 显示全部楼层
你能添加一个命令来修复它吗??
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 01:02:17 | 显示全部楼层
似乎有一些工作要做;您可能需要检查此线程。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 01:05:01 | 显示全部楼层
 
如MSasu所示,当使用AutoLISP grread功能监控用户输入时,不幸禁用了所有标准绘图辅助工具(对象捕捉/正交模式/跟踪等)。
 
DynDraw。Alexander Rivilis在MSasu建议的线程中提出的arx实用程序提供了grread函数的替代方法,允许使用所有绘图辅助工具,但需要重写程序才能与此函数一起使用。
 
否则,我建议您只使用我上面提供的非动态版本。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:07 , Processed in 0.684749 second(s), 71 queries .

© 2020-2025 乐筑天下

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