乐筑天下

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

[编程交流] 插入块并缩放

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:39:25 | 显示全部楼层
 
我以前说过。“预防措施”
 
说到错误,我通常使用函数(cond((and…))
 
  1. (defun c:Test  (/ a b c)
  2.      (cond
  3.            ((and
  4.                   (setq a (car (entsel "\Select Line:")))
  5.                   (setq b (eq (cdr (Assoc 0 (entget a))) "LINE"))
  6.                   (setq c (getint "\nEnter Number of Cars: "))
  7.                   (setq d (getpoint "\nPick Point on screen: "))
  8.                   (princ "\nDone All Three:")
  9.                   )))
  10.      (princ)
  11.      )

 
但我的大多数人都会问
 
我做错了什么?在我做了这个或没有做那个之后它就停止了!
我错过了什么?
错误消息在哪里?"
 
 
所以我想出了一个_error\u mesage例程
 
  1. (defun c:Test  (/ a b c)
  2.     [color=blue](defun _errorMsg  (lst / NilVal)[/color]
  3. [color=blue]       (while (eval (setq NilVal (car (car lst))))[/color]
  4. [color=blue]             (setq lst (cdr lst)))[/color]
  5. [color=blue]       (if lst[/color]
  6. [color=blue]             (alert (cadr (assoc NilVal lst))))[/color]
  7. [color=blue]       )[/color]
  8.      (cond
  9.            ((and
  10.                   (setq a (car (entsel "\Select Line:")))
  11.                   (setq b (eq (cdr (Assoc 0 (entget a))) "LINE"))
  12.                   (setq c (getint "\nEnter Number of Cars: "))
  13.                   (setq d (getpoint "\nPick Point on screen: "))
  14.                   (princ "\nDone All Three:")
  15.                   )))
  16.     [color=blue](_errorMsg[/color]
  17. [color=blue]       (list '(a "Failed to select Object")[/color]
  18. [color=blue]             '(b "Not a Line Entity")[/color]
  19. [color=blue]             '(c "Failed to Enter Number")[/color]
  20. [color=blue]             '(d "Failed ot pick a point")[/color]
  21. [color=blue]             ))[/color]
  22.      (princ)
  23.      )

 
我知道这听起来可能很奇怪,但您如何将vl catch all apply与getpoint结合使用来捕捉错误?
 
通常我使用initget/if,甚至有一次我使用了ggread
 
我对错误处理函数不是很有效,有时我会使用好的ol
(setq*Error*oldError)thingy。为了爱我,我似乎无法理解vl-catch-apply/vl-catch-all-error-p背后的想法
 
以下是我认为我会使用vl错误捕捉的内容
 
  1. (vl-catch-all-error-p
  2. (vl-catch-all-apply 'cadr
  3.               (setq fp (getpoint "\nPick point:"))))

但是,在两种情况下都出现了拾取点和不拾取点的结果是T,给出了什么?
 
 
-一盎司预防胜于一磅治疗
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:41:01 | 显示全部楼层
 
好主意pBe
 
使用vl,您可以将其缩短为:
 
  1. (defun c:Test ( / _errormsg a b c d )
  2. (defun _errormsg ( lst / x )
  3.    (if (setq x (vl-some '(lambda ( x ) (if (null (eval (car x))) (cadr x))) lst))
  4.      (alert x)
  5.    )
  6. )
  7. (cond
  8.    (
  9.      (and
  10.        (setq a (car (entsel "\nSelect Line:")))
  11.        (setq b (eq (cdr (assoc 0 (entget a))) "LINE"))
  12.        (setq c (getint "\nEnter Number of Cars: "))
  13.        (setq d (getpoint "\nPick Point on screen: "))
  14.        (princ "\nDone All Three:")
  15.      )
  16.    )
  17.    ( t
  18.      (_errormsg
  19.       '(
  20.          (a "Failed to select Object")
  21.          (b "Not a Line Entity")
  22.          (c "Failed to Enter Number")
  23.          (d "Failed to pick a point")
  24.        )
  25.      )
  26.    )
  27. )
  28. (princ)
  29. )

 
可以使用以下表达式:
 
其中是一个函数,当提供null点参数时会出错。
 
然而,在我看来,我觉得这是一种糟糕的编程实践,因为你在等待某些东西失败,而不是从一开始就防止错误。
 
 
由于vl catch all apply函数采用与apply函数相同的参数,因此每次都会出错。使用上述代码,您将所选点(或nil)作为参数列表传递,这相当于:
 
  1. (apply 'cadr '(1 2 3)) == (cadr 1 2 3)
这将出错。
 
但是,请注意,cadr函数不需要vl catch all apply构造,因为
  1. 11
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:44:11 | 显示全部楼层
 
这真是一个非常聪明的想法。
 
我可能在不久的将来使用它,希望你不要介意。我可以吗?
回复

使用道具 举报

23

主题

102

帖子

79

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 09:48:13 | 显示全部楼层
  1. 12

 
 
谢谢你们。RenderMan我只需要添加1作为y比例。现在,通过拾取两点,Autocad为我绘制了一个剖面线管道。谢谢大家。请解释问题。我很乐意学习autolisp课程,但显然我不太喜欢。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:52:29 | 显示全部楼层
 
很高兴你喜欢这个想法,我把编码优雅的一面留给你。。。。工具箱的另一个例程
 
 
谢谢你的信息,李,我会试试的。。。。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:53:31 | 显示全部楼层
 
当然你可以。。。我一点也不介意。。
 
干杯
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:57:49 | 显示全部楼层
 
谢谢你,伙计。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:02:14 | 显示全部楼层
 
和功能:
 
http://www.cadtutor.net/forum/showthread.php?61672-块属性&p=419102&viewfull=1#post419102
 
initget:请参阅initget上的VLIDE帮助文档,查找位代码32。
 
_non=\u none=忽略下一点的所有OSNAP。
回复

使用道具 举报

23

主题

102

帖子

79

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 10:03:33 | 显示全部楼层
谢谢你抽出时间
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:14 , Processed in 0.732764 second(s), 68 queries .

© 2020-2025 乐筑天下

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