乐筑天下

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

[编程交流] 顶视图和侧视图矩形

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:28:06 | 显示全部楼层
FWIW,这是另一个版本,允许用户以任何顺序拾取矩形角点,并考虑任何UCS(假设UCS轴平行于矩形):
  1. ([color=BLUE]defun[/color] c:rprof ( [color=BLUE]/[/color] fn1 fn2 pt1 pt2 rgt thk tmp top )
  2.    ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]setq[/color] pt1 ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify first corner: "[/color]))
  3.             ([color=BLUE]setq[/color] pt2 (([color=BLUE]if[/color] ([color=BLUE]zerop[/color] ([color=BLUE]getvar[/color] 'worlducs)) [color=BLUE]getpoint[/color] [color=BLUE]getcorner[/color]) pt1 [color=MAROON]"\nSpecify opposite corner: "[/color]))
  4.        )
  5.        ([color=BLUE]progn[/color]
  6.            ([color=BLUE]setq[/color] thk ([color=BLUE]cond[/color] (([color=BLUE]getdist[/color] [color=MAROON]"\nSpecify thickness <25.4>: "[/color])) (25.4))
  7.                  fn1 ([color=BLUE]lambda[/color] ( x ) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] x ([color=BLUE]list[/color] 0 thk 0)))
  8.                  fn2 ([color=BLUE]lambda[/color] ( x ) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] x ([color=BLUE]list[/color] thk 0 0)))
  9.                  tmp ([color=BLUE]mapcar[/color] '[color=BLUE]max[/color] pt1 pt2)
  10.                  pt1 ([color=BLUE]mapcar[/color] '[color=BLUE]min[/color] pt1 pt2)
  11.                  pt2 tmp
  12.                  top ([color=BLUE]mapcar[/color] 'fn1 ([color=BLUE]list[/color] ([color=BLUE]cons[/color] ([color=BLUE]car[/color] pt1) ([color=BLUE]cdr[/color] pt2)) pt2))
  13.                  rgt ([color=BLUE]mapcar[/color] 'fn2 ([color=BLUE]list[/color] ([color=BLUE]cons[/color] ([color=BLUE]car[/color] pt2) ([color=BLUE]cdr[/color] pt1)) pt2))
  14.            )
  15.            (myrectangle ([color=BLUE]append[/color] top ([color=BLUE]reverse[/color] ([color=BLUE]mapcar[/color] 'fn1 top))))
  16.            (myrectangle ([color=BLUE]append[/color] rgt ([color=BLUE]reverse[/color] ([color=BLUE]mapcar[/color] 'fn2 rgt))))
  17.        )
  18.    )
  19.    ([color=BLUE]princ[/color])
  20. )
  21. ([color=BLUE]defun[/color] myrectangle ( lst )
  22.    (   ([color=BLUE]lambda[/color] ( ocs )
  23.            ([color=BLUE]entmake[/color]
  24.                ([color=BLUE]append[/color]
  25.                   '(   (000 . [color=MAROON]"LWPOLYLINE"[/color])
  26.                        (100 . [color=MAROON]"AcDbEntity"[/color])
  27.                        (100 . [color=MAROON]"AcDbPolyline"[/color])
  28.                        (090 . 4)
  29.                        (070 . 1)
  30.                    )
  31.                    ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 038 ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]car[/color] lst) 1 ocs))))
  32.                    ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] x 1 ocs))) lst)
  33.                    ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 210 ocs))
  34.                )
  35.            )
  36.        )
  37.        ([color=BLUE]trans[/color] '(0 0 1) 1 0 [color=BLUE]t[/color])
  38.    )
  39. )
  40. ([color=BLUE]princ[/color])

 
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:30:06 | 显示全部楼层
 
谢谢李!
我实际上测试了性能,通过将代码粘贴到控制台,没有收到这个错误,实际上没有错误,也没有VLIDE提示/中断,当我使用:
但是当我提供一个参数时:
控制台确实因错误而中断(我的“出错时中断”选项始终处于选中状态)。
关于mapcar。。我开始经常练习列表操作。(唯一的缺点是,我们大多数编写代码的人都不是Matematician,这可能会揭示几何任务的更多潜力(显然不适用于你!)。
 
这是更好的方式,这是一件好事,你保持形状的练习!
 
主题外:
我有一些(对我来说很有趣)的问题,希望你不介意回答(如果/当你有空的时候)。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:35:07 | 显示全部楼层
 
如果您完全按照帖子中所示计算表达式,那么实际上,您不会收到第一个表达式的错误,因为这只会返回一个指向*error*符号的函数定义的指针,以及nil。然而,第二个表达式将返回指针,然后尝试将符号“m”作为函数求值(如果未定义“m”,则显然会出错)。
 
然而,这两个测试都没有评估*错误*功能-请观察以下内容:
  1. Command: (defun foo ( / *error* ) (defun *error* nil (princ)) (/ 1 0))
  2. FOO
  3. Command: (foo)
  4. too many arguments
  1. Command: (defun foo ( / *error* ) (defun *error* ( m ) (princ m) (princ)) (/ 1 0))
  2. FOO
  3. Command: (foo)
  4. divide by zero

 
谢谢-我希望我能为论坛做出贡献,同样地,更经常地更新我的网站,但不幸的是,我没有那么多的空闲时间参加。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:36:54 | 显示全部楼层
Lee,实际上在第二个代码中,*error*确实进行了计算(它打印了m符号),请参阅添加自定义提示消息:
 
  1. Command: (defun foo ( / *error* ) (defun *error* nil (princ "\nError is evaluated.")(princ)) (/ 1 0))
  2. FOO
  3. Command: (foo)
  4. too many arguments

 
  1. Command: (defun foo ( / *error* ) (defun *error* ( m ) (princ "\nError is evaluated.")(princ m) (princ)) (/ 1 0))
  2. FOO
  3. Command: (foo)
  4. Error is evaluated.divide by zero

 
强制*error*进行评估(就像您在动态使用对话框时所做的那样):
  1. Command: (defun foo ( / *error* ) (defun *error* ( m ) (princ "\nError is evaluated.")(princ m) (princ)) (/ 1 1) (*error* nil))
  2. FOO
  3. Command: (foo)
  4. Error is evaluated.nil

 
无错误,无*错误*评估:
  1. Command: (defun foo ( / *error* ) (defun *error* ( m ) (princ "\nError is evaluated.")(princ m) (princ)) (/ 1 1))
  2. FOO
  3. Command: (foo)
  4. 1

 
当你不在的时候,这很明显,但有一些工作是一件好事,对吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:41:36 | 显示全部楼层
 
从您的帖子中,我了解到您正在键入表达式:
直接在VLIDE控制台-因此我之前的澄清。
 
但为了完整性:*error*函数定义始终需要单个字符串值参数(错误消息),当遇到错误时,解释器会自动提供该参数。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:44:29 | 显示全部楼层
不,不,事实上,当没有提供参数时,(m)不会评估*错误*,并且当出现错误时,VLIDE可能会保持沉默,抱歉误解。
 
即。:
  1. _$ (defun foo ( / *error* ) (defun *error* nil (princ "\nError is evaluated.")(princ)) (/ 1 0))
  2. FOO
  3. _$ (foo)
  4. _$ (foo)
  5. _$ (foo)
  6. _$ (defun foo ( / *error* ) (defun *error* (m) (princ "\nError is evaluated.")(princ)) (/ 1 0))
  7. FOO
  8. _$ (foo)
  9. Error is evaluated.
  10. _1$ (foo)
  11. _$ (foo)
  12. Error is evaluated.
  13. _1$
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:48:54 | 显示全部楼层
 
我认为有一些困惑-
 
通过将*error*函数定义为:
不是在求值过程中没有为函数提供参数,而是函数不能用参数求值。
 
您不会在Visual LISP IDE中收到错误,因为无法评估错误处理程序:您通过定义局部*error*函数重新定义了内置错误处理程序,但无法评估该局部*error*函数,因此错误无处可去。
 
实际上,令我惊讶的是,命令行历史记录甚至报告了“太多的参数”,但这不是来自内置错误处理程序,因为消息的前缀不是典型的“error:”。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:51:42 | 显示全部楼层
听起来很有趣,关于发现vl的“一网打尽”应用行为。
 
 
无论何时在VLIDE控制台中运行此函数,与在命令提示符下运行此函数,都可能会略有不同:
  1. 15
  1. 16

看起来命令提示符试图将错误消息传递给*error*函数,这就是为什么我得到了太多参数错误,类似于此:
  1. 17
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-12 20:14 , Processed in 0.334687 second(s), 67 queries .

© 2020-2025 乐筑天下

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