乐筑天下

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

[编程交流] Offset命令

[复制链接]

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 07:22:31 | 显示全部楼层 |阅读模式
我想知道lisp中是否有一种方法可以将offset/erase命令转换为yes。这将删除其偏移的原始线。然后在退出lisp例程时,将“偏移/擦除”命令恢复为“否”。因此,下次使用“偏移”命令时,它不会删除原始行。
 
 
 
 
 
 
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 07:31:15 | 显示全部楼层
 
试试这个:
 
  1. (defun c:OFF (/ offset_dist obj_2_offset offset_side)
  2. (setq old_osm (getvar 'OSMODE))
  3. (setvar 'osmode 0)
  4. (setvar 'cmdecho 0)
  5. (while (= offset_dist nil)
  6. (setq offset_dist (getdist "\nOffset distance: "))
  7. );while
  8. (while (= obj_2_offset nil)
  9. (setq obj_2_offset (entsel (strcat "\nPick object to offset <" (rtos offset_dist) ">: ")))
  10. );while
  11. (while (= offset_side nil)
  12. (setq offset_side (getpoint "\nSide to offset on: "))
  13. );while
  14. (command "offset" offset_dist obj_2_offset offset_side "")
  15. (command "erase" obj_2_offset "")
  16. (setq obj_2_offset nil)
  17. (setq offset_side nil)
  18. (setvar "osmode" 14527)
  19. (princ))
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 07:35:04 | 显示全部楼层
嗨,点头,
 
请让我知道在lisp编码中,它返回offset命令以不删除行。我是lisp的新手,如果不太麻烦的话,我希望在编码中能有一些评论。
 
 
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:39:08 | 显示全部楼层
@点头
 
您已经将osmode分配给了一个变量,并且没有将其重置为之前的状态,此外,您将其保持为全局状态,并将osmode设置为另一个值。
 
在函数getdist之前关闭osmode,这将阻止用户获取两个特定点之间的距离(如果用户需要)。
 
最后,如果用户在获得距离或结束例程之前按下esc按钮,会发生什么?
 
谢谢
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 07:44:27 | 显示全部楼层
@塔瓦特
 
我也是这么想的。。。NOD没有将设置的变量重置回旧的osm。
 
任何人对此有任何进一步的想法。
 
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:51:48 | 显示全部楼层
这就是你想要的吗。。。。。。
 
  1. (defun c:Off (/ del p s)
  2. ;;; Tharwat 20. Oct. 2012 ;;;
  3. (if (and (setq
  4.             *dis* (cond ((getdist (strcat "\n Specify Offset Distance <"
  5.                                           (if *dis*
  6.                                             (rtos *dis* 2 2)
  7.                                             (setq *dis* (rtos 1.0 2 2))
  8.                                           )
  9.                                           " > :"
  10.                                   )
  11.                          )
  12.                         )
  13.                         (t *dis*)
  14.                   )
  15.           )
  16.           (progn (initget "Yes No")
  17.                  (setq del
  18.                         (cond
  19.                           ((getkword "\n Delete original object [Yes/No] <Yes> :")
  20.                           )
  21.                           ("Yes")
  22.                         )
  23.                  )
  24.           )
  25.      )
  26.    (while
  27.      (and (setq s (ssget "_+.:S:L" '((0 . "*LINE,CIRCLE,ELLIPSE"))))
  28.           (setq p (getpoint "\n Specify point on side to offset :"))
  29.      )
  30.       (vl-cmdf "_.offset" "_E" del *dis* (ssname s 0) "_non" p "")
  31.    )
  32.    (princ)
  33. )
  34. (princ)
  35. )
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 07:53:22 | 显示全部楼层
哎呀,对不起!因为我们的系统一直重置为osmode 0,这就是为什么我没有重置osmode。发布前忘记编辑。
 
谢谢tharwat!
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 08:02:04 | 显示全部楼层
塔尔瓦特,
 
我试过你的例行程序,它的功能不如诺德的。在例程中,系统会询问您是否删除要从中偏移的原始行。这一点很好。但是,当您退出例程并使用offset命令(而不是off.lsp例程)时,offset命令仍会删除其偏移的原始行。在Nods例程中,如果使用该例程,它将删除原始行,但是,当使用offset命令时,它不会删除其偏移的原始行。我正在寻找这个功能,但作为lisp的新手,我发现很难编写代码。因此,我在这个论坛上提出了这个问题。
 
 
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 08:05:39 | 显示全部楼层
试试这个,我还采用了tharwat的部分代码来检查层是否被锁定(谢谢tharwat!)
 
  1. (defun c:off+ (/  *error* ent dist kwrd offset_side )
  2. ;; 24 october 2012 nod684
  3. (defun  *error* (msg)
  4. (command "._undo" "_end")
  5. (setvar 'cmdecho cmd1)
  6. )
  7. (command "._undo" "_begin")
  8. (setq cmd1 (getvar 'cmdecho))
  9. (setvar 'cmdecho 0)
  10. (prompt "\nSelect Objects to Offset:   ")
  11. (while (not ent)
  12. (setq ent (ssget "_+.:S:L" '((0 . "*LINE,CIRCLE,ELLIPSE"))))
  13. )
  14. (initget (+ 1 2 4 64))
  15.   (setq dist (getdist "\nEnter offset distance:  "))
  16. (while (= offset_side nil)
  17. (setq offset_side (getpoint "\nSide to offset on: "))
  18. )
  19. (initget (+ 2 4) "Yes No")
  20. (setq kwrd (getkword "\nDelete source object [Yes/No] <Yes>:  "))
  21. (if (/= kwrd "No")
  22.    (setq kwrd "Yes")
  23. )
  24.   (command "offset" "erase" "no" dist ent offset_side "")
  25. (if (eq kwrd "Yes")
  26.    (command "erase" ent "")
  27. )
  28. (*error* "")
  29.    (princ "\nDone!")
  30. (princ))
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 08:10:09 | 显示全部楼层
做得好点。。。这正是我想要的。
 
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:30 , Processed in 1.083222 second(s), 95 queries .

© 2020-2025 乐筑天下

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