乐筑天下

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

[编程交流] Offset LISP例程只需要

[复制链接]

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 22:37:24 | 显示全部楼层 |阅读模式
刚刚遇到了这个简洁的Lisp程序的程序。这对我和我的伙计们来说都非常合适,因为我们对管道进行了隔热处理,这样就不需要点击来不断地双向偏移管线。
 
  1. (defun C:OFF2  (/ pickEnt pickObj offDist)
  2. (vl-load-com)
  3. (setvar "ErrNo" 0)
  4. (while (and (not (setq pickEnt (entsel))) (/= 52 (getvar "ErrNo"))))
  5. (cond ((and pickEnt
  6.             (setq pickObj (vlax-EName->vla-Object (car pickEnt)))
  7.             (progn (initget 6)
  8.                    (setq offDist (getdist "\nSpecify offset distance: "))))
  9.        (vla-Offset pickObj offDist)
  10.        (vla-Offset pickObj (- offDist))
  11.        (I:PutCL pickObj)))
  12. (princ))
  13. (defun I:PutCL  (myObj / linetypes ltName)
  14. (setq linetypes (vla-Get-Linetypes (vla-Get-Document myObj))
  15.       ltName    "Center")
  16. (cond ((vl-catch-all-error-p
  17.         (vl-catch-all-apply 'vla-Item (list linetypes ltName)))
  18.        (vla-Load linetypes
  19.                  ltName
  20.                  (cond ((= (getvar "Measurement") 0) "Acad.lin")
  21.                        ("AcadISO.lin")))))
  22. (vla-Put-Linetype myObj ltName))

 
问题:有人可以看一下,而不是提示偏移距离(因为我们已经有一个标准的设置距离总是)为0.812,所以这是我需要的。也可以有人添加一个多件?
 
 
上帝保佑!
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:45:04 | 显示全部楼层
嗨,tmelancon,这是一次点击的快速修改,
你能解释一下M的其他选择吗?还是对同一实体重复?
  1. (defun C:OFF2 (/ pickEnt pickObj offDist)
  2. (vl-load-com)
  3. [color="red"] (setq offDist(ureal 6 "" "\nSpecify offset distance: " 0.812))[/color]
  4. (while (setq pickEnt (entsel))
  5.    (cond ((and pickEnt (setq pickObj (vlax-EName->vla-Object (car pickEnt))) offDist)
  6.    (vla-Offset pickObj offDist)
  7.    (vla-Offset pickObj (- offDist))
  8.    (I:PutCL pickObj)
  9.    )
  10.   ) ;_ end of cond
  11.    ) ;_ end of while
  12. (princ)
  13. ) ;_ end of defun
  14. (defun I:PutCL (myObj / linetypes ltName)
  15. (setq        linetypes (vla-Get-Linetypes (vla-Get-Document myObj))
  16. ltName          "Center"
  17. ) ;_ end of setq
  18. (cond        ((vl-catch-all-error-p (vl-catch-all-apply 'vla-Item (list linetypes ltName)))
  19. (vla-Load linetypes
  20.            ltName
  21.            (cond ((= (getvar "Measurement") 0) "Acad.lin")
  22.                  ("AcadISO.lin")
  23.                  ) ;_ end of cond
  24.            ) ;_ end of vla-Load
  25. )
  26. ) ;_ end of cond
  27. (vla-Put-Linetype myObj ltName)
  28. ) ;_ end of defun
  29. ;;;-------------------------------------------------------------------
  30. ;; This function is freeware courtesy of the author's of "Inside AutoLisp"
  31. ;; for rel. 10 published by New Riders Publications.  This credit must
  32. ;; accompany all copies of this function.
  33. ;;* UKWORD User key word. DEF, if any, must match one of the KWD strings
  34. ;;* BIT (1 for no null, 0 for none) and KWD key word ("" for none) are same as
  35. ;;* for INITGET. MSG is the prompt string, to which a default string is added
  36. ;;* as <DEF> (nil or "" for none), and a : is added.
  37. (defun UREAL (bit kwd msg def / inp)
  38. (if def
  39.    (setq msg (strcat "\n" msg " <" (rtos def 2) "> : ")
  40.          bit (* 2 (fix (/ bit 2)))
  41.          )
  42.    (setq msg (strcat "\n" msg " : "))
  43.    )                                   ;if
  44. (initget bit kwd)
  45. (setq inp (getdist msg))
  46. (if inp inp def)
  47. )   
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 22:50:16 | 显示全部楼层
嘿,对不起,我今天早上很忙,说得不太好。我正在寻找的偏移倍数将包括在那里的某个地方,给用户的选择只是抵消一行,然后结束例行程序,或键入多行选择。希望这有帮助!
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 22:59:47 | 显示全部楼层
如果你从一个按钮开始这个lisp,你可以简单地在命令前加一个星号。。。
 
*^C^C(如果(非C:OFF2)(加载“OFF2”))OFF2;
 
这假设lisp位于您的一个支持目录中,并命名为OFF2。
 
干杯
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 23:06:20 | 显示全部楼层
Hmm提示用户点击回车键/空格键,以启动实际距离的0.0812。我试着在dist后面加上“”,它说明了太多的论点。我只是想添加它,这样它会自动点击回车键,并提示行选择。。为什么和我争论
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 23:09:14 | 显示全部楼层
我认为:
 
(setq offDist(ureal 6”“”\n指定偏移距离:“0.812”)
 
可以简单地更改为。。。
 
(setq offDist 0.812)
 
http://www.afralisp.net/autolisp/tutorials/set-and-setq.php
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 23:18:49 | 显示全部楼层
给大家道具!成功!谢谢大家。你们太棒了值得注意:
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 23:23:12 | 显示全部楼层
如果我们可以对图层执行相同的操作,是否可能像指定线型一样。。比如把它放在一个指定的选择层上?两条偏移线?
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:28:09 | 显示全部楼层
 
是的,我们可以修改代码,但你要确保对原始代码的作者礼貌,赞扬他的想法或通知他。
 
这个例子:我使用(getvar“clayer”)当前层
  1. ;;;http://www.cadtutor.net/forum/showthread.php?88082-Offset-LISP-Routine-just-needs-small-update.-Thanks!
  2. (if (not [color="red"]*offDist*[/color])
  3. (setq *offDist* 0.812)
  4. ) ;_ end of if
  5. (defun C:OFF2 (/ pickEnt pickObj offDist ss)
  6. (vl-load-com)
  7. (setvar "ErrNo" 0)
  8. (setq offDist (ureal 6 "Multiple" "\nSpecify offset distance or [Multiple] : " *offDist*)) ; _ end of
  9. ; setq
  10. (if (= offDist "Multiple")
  11.    (progn (setq offDist   (ureal 6 "" "\nSpecify offset distance: " *offDist*)
  12.          *offDist* offDist
  13.          ) ;_ end of setq
  14.    (prompt "\nSelect object.. ")
  15.    (setq ss (ssget))
  16.    (foreach en (vl-remove-if ''((x) (listp x)) (mapcar 'cadr (ssnamex ss))) ;_ end of vl-remove-if
  17.      ([color="blue"]offset2: [/color]en offDist [color="red"](getvar "clayer")[/color])
  18.      ) ;_ end of foreach
  19.    ) ;_ end of progn
  20.    (while (setq pickEnt (entsel))
  21.      ([color="blue"]offset2:[/color] (car pickEnt) offDist [color="red"](getvar "clayer")[/color])
  22.      (setq *offDist* offDist)
  23.      ) ; _ end of
  24. ; while
  25.    ) ;_ end of if
  26. (princ)
  27. ) ;_ end of defun
  28. ; modified by hanhphuc* 09/08/2014
  29. (defun [color="blue"]offset2:[/color]        (e off lay / obj)
  30. (if (and e
  31.    off
  32.    (= (type lay) 'STR)
  33.    (tblsearch "Layer" lay)
  34.    (member (vla-get-objectname (setq obj (vlax-EName->vla-Object e)))
  35.            '("AcDbCircle" "AcDbArc" "AcDbPolyline" "AcDbLine" "AcDbEllipse" "AcDbSpline")
  36.            ) ;_ end of member
  37.    ) ;_ end of and
  38.    (progn (foreach o (list (vla-Offset obj off) (vla-Offset obj (- off)))
  39.      (vla-put-layer (car (vlax-safearray->list (vlax-variant-value o))) lay)
  40.      ) ;_ end of foreach
  41.    (I:PutCL obj)
  42.    ) ;_ end of progn
  43.    ) ;_ end of if
  44. ) ;_ end of defun
  45. (defun I:PutCL (myObj / linetypes ltName)
  46. (setq        linetypes (vla-Get-Linetypes (vla-Get-Document myObj))
  47. ltName          "Center"
  48. ) ;_ end of setq
  49. (cond        ((vl-catch-all-error-p (vl-catch-all-apply 'vla-Item (list linetypes ltName)))
  50. (vla-Load linetypes
  51.            ltName
  52.            (cond ((= (getvar "Measurement") 0) "Acad.lin")
  53.                  ("AcadISO.lin")
  54.                  ) ;_ end of cond
  55.            ) ;_ end of vla-Load
  56. )
  57. ) ;_ end of cond
  58. (vla-Put-Linetype myObj ltName)
  59. ) ;_ end of defun
  60. ;;;-------------------------------------------------------------------
  61. ;; This function is freeware courtesy of the author's of "Inside AutoLisp"
  62. ;; for rel. 10 published by New Riders Publications.  This credit must
  63. ;; accompany all copies of this function.
  64. ;;* UKWORD User key word. DEF, if any, must match one of the KWD strings
  65. ;;* BIT (1 for no null, 0 for none) and KWD key word ("" for none) are same as
  66. ;;* for INITGET. MSG is the prompt string, to which a default string is added
  67. ;;* as <DEF> (nil or "" for none), and a : is added.
  68. (defun UREAL (bit kwd msg def / inp)
  69. (if def
  70.    (setq msg (strcat "\n" msg " <" (rtos def 2) "> : ")
  71.          bit (* 2 (fix (/ bit 2)))
  72.          )
  73.    (setq msg (strcat "\n" msg " : "))
  74.    )                                   ;if
  75. (initget bit kwd)
  76. (setq inp (getdist msg))
  77. (if inp inp def)
  78. )   

对于[多个],输入M->然后输入偏移距离->选择多个对象
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:34:29 | 显示全部楼层
2个建议你可以在一段时间内结束例程,即在你不拾取任何对象的时候继续拾取对象,在屏幕上留出空间,退出1个拾取就可以了,或者可以选择比“M”更简单的任意数量。第二,可能更容易再次预设偏移量,并使用Enter键提示接受或键入新值。对于多个,它只会在开始时询问一次,如果需要多个不同的值,则是退出,请再次保存一些接受步骤。层相同。上述海报可能会考虑将这些想法纳入其代码中。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:17 , Processed in 0.499156 second(s), 72 queries .

© 2020-2025 乐筑天下

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